54 lines · c
1// RUN: %clang_cc1 -std=c11 -triple i386-apple-darwin9 -fsyntax-only -verify %s2 3#define STATIC_ASSERT(cond) _Static_assert(cond, #cond)4 5// PR34336#define CHECK_ALIGNMENT(type, name, abi, pref) \7 type name; \8 STATIC_ASSERT(__alignof__(name) == pref); \9 STATIC_ASSERT(__alignof__(type) == pref); \10 STATIC_ASSERT(_Alignof(type) == abi)11 12CHECK_ALIGNMENT(double, g_double, 4, 8);13CHECK_ALIGNMENT(long long, g_longlong, 4, 8);14CHECK_ALIGNMENT(unsigned long long, g_ulonglong, 4, 8);15CHECK_ALIGNMENT(_Complex double, g_complexdouble, 4, 8);16 17// PR636218struct __attribute__((packed))19packed_struct {20 unsigned int a;21};22CHECK_ALIGNMENT(struct packed_struct, g_packedstruct, 1, 1);23STATIC_ASSERT(__alignof__(g_packedstruct.a) == 1);24 25typedef double arr3double[3];26CHECK_ALIGNMENT(arr3double, g_arr3double, 4, 8);27 28enum big_enum { x = 18446744073709551615ULL };29CHECK_ALIGNMENT(enum big_enum, g_bigenum, 4, 8);30 31// PR563732 33#define ALIGNED(x) __attribute__((aligned(x)))34 35typedef ALIGNED(2) struct {36 char a[3];37} aligned_before_struct;38 39STATIC_ASSERT(sizeof(aligned_before_struct) == 3);40STATIC_ASSERT(sizeof(aligned_before_struct[1]) == 4); // expected-error {{size of array element}}41STATIC_ASSERT(sizeof(aligned_before_struct[2]) == 6); // expected-error {{size of array element}}42STATIC_ASSERT(sizeof(aligned_before_struct[2][1]) == 8); // expected-error {{size of array element}}43STATIC_ASSERT(sizeof(aligned_before_struct[1][2]) == 6); // expected-error {{size of array element}}44 45typedef struct ALIGNED(2) {46 char a[3];47} aligned_after_struct;48 49STATIC_ASSERT(sizeof(aligned_after_struct) == 4);50STATIC_ASSERT(sizeof(aligned_after_struct[1]) == 4);51STATIC_ASSERT(sizeof(aligned_after_struct[2]) == 8);52STATIC_ASSERT(sizeof(aligned_after_struct[2][1]) == 8);53STATIC_ASSERT(sizeof(aligned_after_struct[1][2]) == 8);54