]> granicus.if.org Git - clang/commitdiff
[Sema] PR26444 fix crash when alignment value is >= 2**16
authorDavid Majnemer <david.majnemer@gmail.com>
Wed, 2 Mar 2016 06:48:47 +0000 (06:48 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Wed, 2 Mar 2016 06:48:47 +0000 (06:48 +0000)
Sema allows max values up to 2**28, use unsigned instead of unsiged
short to hold values that large.

Differential Revision: http://reviews.llvm.org/D17248

Patch by Don Hinton!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@262466 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGValue.h
test/Sema/attr-aligned.c

index 3ccc4cda89f99c3fa674ea7d427583a497264389..53a376df6457b6488e6cf9cb39c7299b29d5f247 100644 (file)
@@ -445,7 +445,7 @@ class AggValueSlot {
   // Qualifiers
   Qualifiers Quals;
 
-  unsigned short Alignment;
+  unsigned Alignment;
 
   /// DestructedFlag - This is set to true if some external code is
   /// responsible for setting up a destructor for the slot.  Otherwise
index 0a2698ec91afdd145c3fd58a15d0995b349b1cf6..b8d2fc6863d275bafb543d032ea22fcecde38a0f 100644 (file)
@@ -3,6 +3,9 @@
 int x __attribute__((aligned(3))); // expected-error {{requested alignment is not a power of 2}}
 int y __attribute__((aligned(1 << 29))); // expected-error {{requested alignment must be 268435456 bytes or smaller}}
 
+// PR26444
+int y __attribute__((aligned(1 << 28)));
+
 // PR3254
 short g0[3] __attribute__((aligned));
 short g0_chk[__alignof__(g0) == 16 ? 1 : -1];