diff options
author | Dan Gohman <gohman@apple.com> | 2010-03-18 18:40:47 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-03-18 18:40:47 +0000 |
commit | 74cdc75313974456d1f040ca2dca33f16a18f9b3 (patch) | |
tree | 862f243839198004ebbdd0d901a25c12fdecfd64 | |
parent | 8bba4dd9bcaf8ba63be24dbcbbed6ff35504e9e5 (diff) |
Fix a bug found by inspection; in the __GNUC__ code, the alignment
doesn't apply to the type, only to the variable, so subsequent uses
of U which expect it to be aligned weren't actually aligned.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98843 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ADT/SmallVector.h | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/include/llvm/ADT/SmallVector.h b/include/llvm/ADT/SmallVector.h index 89acefd061..c4507a917f 100644 --- a/include/llvm/ADT/SmallVector.h +++ b/include/llvm/ADT/SmallVector.h @@ -57,17 +57,18 @@ 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__ - typedef char U; - U FirstEl __attribute__((aligned)); + char X __attribute__((aligned)); #else - union U { - double D; - long double LD; - long long L; - void *P; - } FirstEl; + 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. protected: |