aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-03-18 18:40:47 +0000
committerDan Gohman <gohman@apple.com>2010-03-18 18:40:47 +0000
commit74cdc75313974456d1f040ca2dca33f16a18f9b3 (patch)
tree862f243839198004ebbdd0d901a25c12fdecfd64
parent8bba4dd9bcaf8ba63be24dbcbbed6ff35504e9e5 (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.h17
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: