forked from OSchip/llvm-project
Remove two uses of the gcc specific 'aligned' attribute. This
is partly because this attribute caused trouble in the past (the SmallVector one had to be changed from aligned to aligned(8) due to causing crashes on i386 for example; in theory the same might be needed in the Allocator case...). But it's mostly because there seems to be no point in special casing gcc here. Using the same implementation for all compilers results in better testing. llvm-svn: 115462
This commit is contained in:
parent
2ec672fff5
commit
6d80481b68
|
@ -59,17 +59,11 @@ protected:
|
|||
// something else. An array of char would work great, but might not be
|
||||
// aligned sufficiently. Instead, we either use GCC extensions, or some
|
||||
// number of union instances for the space, which guarantee maximal alignment.
|
||||
struct U {
|
||||
#ifdef __GNUC__
|
||||
char X __attribute__((aligned(8)));
|
||||
#else
|
||||
union {
|
||||
union U {
|
||||
double D;
|
||||
long double LD;
|
||||
long long L;
|
||||
void *P;
|
||||
} X;
|
||||
#endif
|
||||
} FirstEl;
|
||||
// Space after 'FirstEl' is clobbered, do not add any instance vars after it.
|
||||
|
||||
|
|
|
@ -221,16 +221,12 @@ public:
|
|||
inline void *operator new(size_t Size, llvm::BumpPtrAllocator &Allocator) {
|
||||
struct S {
|
||||
char c;
|
||||
#ifdef __GNUC__
|
||||
char x __attribute__((aligned));
|
||||
#else
|
||||
union {
|
||||
double D;
|
||||
long double LD;
|
||||
long long L;
|
||||
void *P;
|
||||
} x;
|
||||
#endif
|
||||
};
|
||||
return Allocator.Allocate(Size, std::min((size_t)llvm::NextPowerOf2(Size),
|
||||
offsetof(S, x)));
|
||||
|
|
Loading…
Reference in New Issue