
We didn't consider any alignment attributes on an EnumDecl when calculating alignment. While we are here, ignore alignment specifications on typedef types if one is used as the underlying type. Otherwise, weird things happen: enum Y : int; Y y; typedef int __attribute__((aligned(64))) u; enum Y : u {}; What is the alignment of 'Y'? It would be more consistent with the overall design of enums with fixed underlying types to consider the underlying type's UnqualifiedDesugaredType. This fixes PR22279. llvm-svn: 226653
56 lines
1.5 KiB
C
56 lines
1.5 KiB
C
// RUN: %clang_cc1 -triple i386-apple-darwin9 -fsyntax-only -verify %s
|
|
// expected-no-diagnostics
|
|
|
|
// PR3433
|
|
double g1;
|
|
short chk1[__alignof__(g1) == 8 ? 1 : -1];
|
|
short chk2[__alignof__(double) == 8 ? 1 : -1];
|
|
|
|
long long g2;
|
|
short chk1[__alignof__(g2) == 8 ? 1 : -1];
|
|
short chk2[__alignof__(long long) == 8 ? 1 : -1];
|
|
|
|
unsigned long long g5;
|
|
short chk1[__alignof__(g5) == 8 ? 1 : -1];
|
|
short chk2[__alignof__(unsigned long long) == 8 ? 1 : -1];
|
|
|
|
_Complex double g3;
|
|
short chk1[__alignof__(g3) == 8 ? 1 : -1];
|
|
short chk2[__alignof__(_Complex double) == 8 ? 1 : -1];
|
|
|
|
// PR6362
|
|
struct __attribute__((packed)) {unsigned int a;} g4;
|
|
short chk1[__alignof__(g4) == 1 ? 1 : -1];
|
|
short chk2[__alignof__(g4.a) == 1 ? 1 : -1];
|
|
|
|
double g6[3];
|
|
short chk1[__alignof__(g6) == 8 ? 1 : -1];
|
|
short chk2[__alignof__(double[3]) == 8 ? 1 : -1];
|
|
|
|
enum { x = 18446744073709551615ULL } g7;
|
|
short chk1[__alignof__(g7) == 8 ? 1 : -1];
|
|
|
|
// PR5637
|
|
|
|
#define ALIGNED(x) __attribute__((aligned(x)))
|
|
|
|
typedef ALIGNED(2) struct {
|
|
char a[3];
|
|
} T;
|
|
|
|
short chk1[sizeof(T) == 3 ? 1 : -1];
|
|
short chk2[sizeof(T[1]) == 4 ? 1 : -1];
|
|
short chk3[sizeof(T[2]) == 6 ? 1 : -1];
|
|
short chk4[sizeof(T[2][1]) == 8 ? 1 : -1];
|
|
short chk5[sizeof(T[1][2]) == 6 ? 1 : -1];
|
|
|
|
typedef struct ALIGNED(2) {
|
|
char a[3];
|
|
} T2;
|
|
|
|
short chk1[sizeof(T2) == 4 ? 1 : -1];
|
|
short chk2[sizeof(T2[1]) == 4 ? 1 : -1];
|
|
short chk3[sizeof(T2[2]) == 8 ? 1 : -1];
|
|
short chk4[sizeof(T2[2][1]) == 8 ? 1 : -1];
|
|
short chk5[sizeof(T2[1][2]) == 8 ? 1 : -1];
|