diff options
author | John Criswell <criswell@uiuc.edu> | 2012-08-15 18:40:30 +0000 |
---|---|---|
committer | John Criswell <criswell@uiuc.edu> | 2012-08-15 18:40:30 +0000 |
commit | 9e4abb4aa90c9785dcbaf4e69a320e6a2983b526 (patch) | |
tree | e4389d6ce06eb4575fbb12fb4e78a817392f9e53 | |
parent | 5aad79f8d54bf4356b2c8b9e56ace9ac8c39adb0 (diff) |
Fix for PR#13606: http://llvm.org/bugs/show_bug.cgi?id=13606
Changed the alignment of an LValue to be 64 bits so that we can handle
alignment values up to half of a 64-bit address space.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161971 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGValue.h | 2 | ||||
-rw-r--r-- | test/CodeGen/align-global-large.c | 18 |
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/CodeGen/CGValue.h b/lib/CodeGen/CGValue.h index a46f313f1f..c2b8e4da82 100644 --- a/lib/CodeGen/CGValue.h +++ b/lib/CodeGen/CGValue.h @@ -128,7 +128,7 @@ class LValue { // The alignment to use when accessing this lvalue. (For vector elements, // this is the alignment of the whole vector.) - unsigned short Alignment; + int64_t Alignment; // objective-c's ivar bool Ivar:1; diff --git a/test/CodeGen/align-global-large.c b/test/CodeGen/align-global-large.c new file mode 100644 index 0000000000..fcbe758a82 --- /dev/null +++ b/test/CodeGen/align-global-large.c @@ -0,0 +1,18 @@ +// PR13606 - Clang crashes with large alignment attribute +// RUN: %clang -S -emit-llvm %s -o - | FileCheck %s + +// CHECK: x +// CHECK: align +// CHECK: 1048576 +volatile char x[4000] __attribute__((aligned(0x100000))); + +int +main (int argc, char ** argv) { + // CHECK: y + // CHECK: align + // CHECK: 1048576 + volatile char y[4000] __attribute__((aligned(0x100000))); + + return y[argc]; +} + |