From 9e4abb4aa90c9785dcbaf4e69a320e6a2983b526 Mon Sep 17 00:00:00 2001 From: John Criswell Date: Wed, 15 Aug 2012 18:40:30 +0000 Subject: [PATCH] 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 --- lib/CodeGen/CGValue.h | 2 +- test/CodeGen/align-global-large.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test/CodeGen/align-global-large.c 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]; +} + -- 2.50.1