Skip to content

Commit

Permalink
[ObjC] Wrap namespace-global structs in an anonymous namespace to avo…
Browse files Browse the repository at this point in the history
…id ODR violations

<rdar://problem/65537147>

Differential Revision:  https://reviews.llvm.org/D83796
  • Loading branch information
Davide Italiano committed Jul 14, 2020
1 parent 9b974df commit 3f2d880
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 81 deletions.
64 changes: 34 additions & 30 deletions lldb/source/Plugins/Language/ObjC/NSArray.cpp
Expand Up @@ -98,42 +98,46 @@ class GenericNSArrayMSyntheticFrontEnd : public NSArrayMSyntheticFrontEndBase {
};

namespace Foundation1010 {
struct DataDescriptor_32 {
uint32_t _used;
uint32_t _offset;
uint32_t _size : 28;
uint64_t _priv1 : 4;
uint32_t _priv2;
uint32_t _data;
};

struct DataDescriptor_64 {
uint64_t _used;
uint64_t _offset;
uint64_t _size : 60;
uint64_t _priv1 : 4;
uint32_t _priv2;
uint64_t _data;
};
namespace {
struct DataDescriptor_32 {
uint32_t _used;
uint32_t _offset;
uint32_t _size : 28;
uint64_t _priv1 : 4;
uint32_t _priv2;
uint32_t _data;
};

struct DataDescriptor_64 {
uint64_t _used;
uint64_t _offset;
uint64_t _size : 60;
uint64_t _priv1 : 4;
uint32_t _priv2;
uint64_t _data;
};
}

using NSArrayMSyntheticFrontEnd =
GenericNSArrayMSyntheticFrontEnd<DataDescriptor_32, DataDescriptor_64>;
}

namespace Foundation1428 {
struct DataDescriptor_32 {
uint32_t _used;
uint32_t _offset;
uint32_t _size;
uint32_t _data;
};

struct DataDescriptor_64 {
uint64_t _used;
uint64_t _offset;
uint64_t _size;
uint64_t _data;
};
namespace {
struct DataDescriptor_32 {
uint32_t _used;
uint32_t _offset;
uint32_t _size;
uint32_t _data;
};

struct DataDescriptor_64 {
uint64_t _used;
uint64_t _offset;
uint64_t _size;
uint64_t _data;
};
}

using NSArrayMSyntheticFrontEnd =
GenericNSArrayMSyntheticFrontEnd<DataDescriptor_32, DataDescriptor_64>;
Expand Down
105 changes: 54 additions & 51 deletions lldb/source/Plugins/Language/ObjC/NSDictionary.cpp
Expand Up @@ -278,64 +278,67 @@ namespace Foundation1100 {
}

namespace Foundation1428 {
struct DataDescriptor_32 {
uint32_t _used : 26;
uint32_t _kvo : 1;
uint32_t _size;
uint32_t _buffer;
uint64_t GetSize() { return _size; }
};

struct DataDescriptor_64 {
uint64_t _used : 58;
uint32_t _kvo : 1;
uint64_t _size;
uint64_t _buffer;
uint64_t GetSize() { return _size; }
};


namespace {
struct DataDescriptor_32 {
uint32_t _used : 26;
uint32_t _kvo : 1;
uint32_t _size;
uint32_t _buffer;
uint64_t GetSize() { return _size; }
};
struct DataDescriptor_64 {
uint64_t _used : 58;
uint32_t _kvo : 1;
uint64_t _size;
uint64_t _buffer;
uint64_t GetSize() { return _size; }
};
}

using NSDictionaryMSyntheticFrontEnd =
GenericNSDictionaryMSyntheticFrontEnd<DataDescriptor_32, DataDescriptor_64>;
}

namespace Foundation1437 {
static const uint64_t NSDictionaryCapacities[] = {
0, 3, 7, 13, 23, 41, 71, 127, 191, 251, 383, 631, 1087, 1723,
2803, 4523, 7351, 11959, 19447, 31231, 50683, 81919, 132607,
214519, 346607, 561109, 907759, 1468927, 2376191, 3845119,
6221311, 10066421, 16287743, 26354171, 42641881, 68996069,
111638519, 180634607, 292272623, 472907251
};

static const size_t NSDictionaryNumSizeBuckets = sizeof(NSDictionaryCapacities) / sizeof(uint64_t);

struct DataDescriptor_32 {
uint32_t _buffer;
uint32_t _muts;
uint32_t _used : 25;
uint32_t _kvo : 1;
uint32_t _szidx : 6;
namespace {
static const uint64_t NSDictionaryCapacities[] = {
0, 3, 7, 13, 23, 41, 71, 127, 191, 251, 383, 631, 1087, 1723,
2803, 4523, 7351, 11959, 19447, 31231, 50683, 81919, 132607,
214519, 346607, 561109, 907759, 1468927, 2376191, 3845119,
6221311, 10066421, 16287743, 26354171, 42641881, 68996069,
111638519, 180634607, 292272623, 472907251
};

static const size_t NSDictionaryNumSizeBuckets =
sizeof(NSDictionaryCapacities) / sizeof(uint64_t);

struct DataDescriptor_32 {
uint32_t _buffer;
uint32_t _muts;
uint32_t _used : 25;
uint32_t _kvo : 1;
uint32_t _szidx : 6;

uint64_t GetSize() {
return (_szidx) >= NSDictionaryNumSizeBuckets ?
0 : NSDictionaryCapacities[_szidx];
}
};

struct DataDescriptor_64 {
uint64_t _buffer;
uint32_t _muts;
uint32_t _used : 25;
uint32_t _kvo : 1;
uint32_t _szidx : 6;
uint64_t GetSize() {
return (_szidx) >= NSDictionaryNumSizeBuckets ?
0 : NSDictionaryCapacities[_szidx];
}
};
struct DataDescriptor_64 {
uint64_t _buffer;
uint32_t _muts;
uint32_t _used : 25;
uint32_t _kvo : 1;
uint32_t _szidx : 6;

uint64_t GetSize() {
return (_szidx) >= NSDictionaryNumSizeBuckets ?
0 : NSDictionaryCapacities[_szidx];
}
};
uint64_t GetSize() {
return (_szidx) >= NSDictionaryNumSizeBuckets ?
0 : NSDictionaryCapacities[_szidx];
}
};
}

using NSDictionaryMSyntheticFrontEnd =
GenericNSDictionaryMSyntheticFrontEnd<DataDescriptor_32, DataDescriptor_64>;
Expand Down

0 comments on commit 3f2d880

Please sign in to comment.