forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 -std=c11 -triple i386-apple-darwin9 -fsyntax-only -verify %s
 | |
| // expected-no-diagnostics
 | |
| 
 | |
| #define STATIC_ASSERT(cond) _Static_assert(cond, #cond)
 | |
| 
 | |
| // PR3433
 | |
| #define CHECK_ALIGNMENT(type, name, abi, pref) \
 | |
|   type name; \
 | |
|   STATIC_ASSERT(__alignof__(name) == pref); \
 | |
|   STATIC_ASSERT(__alignof__(type) == pref); \
 | |
|   STATIC_ASSERT(_Alignof(type) == abi)
 | |
| 
 | |
| CHECK_ALIGNMENT(double, g_double, 4, 8);
 | |
| CHECK_ALIGNMENT(long long, g_longlong, 4, 8);
 | |
| CHECK_ALIGNMENT(unsigned long long, g_ulonglong, 4, 8);
 | |
| CHECK_ALIGNMENT(_Complex double, g_complexdouble, 4, 8);
 | |
| 
 | |
| // PR6362
 | |
| struct __attribute__((packed))
 | |
| packed_struct {
 | |
|   unsigned int a;
 | |
| };
 | |
| CHECK_ALIGNMENT(struct packed_struct, g_packedstruct, 1, 1);
 | |
| STATIC_ASSERT(__alignof__(g_packedstruct.a) == 1);
 | |
| 
 | |
| typedef double arr3double[3];
 | |
| CHECK_ALIGNMENT(arr3double, g_arr3double, 4, 8);
 | |
| 
 | |
| enum big_enum { x = 18446744073709551615ULL };
 | |
| CHECK_ALIGNMENT(enum big_enum, g_bigenum, 4, 8);
 | |
| 
 | |
| // PR5637
 | |
| 
 | |
| #define ALIGNED(x) __attribute__((aligned(x)))
 | |
| 
 | |
| typedef ALIGNED(2) struct {
 | |
|   char a[3];
 | |
| } aligned_before_struct;
 | |
| 
 | |
| STATIC_ASSERT(sizeof(aligned_before_struct)       == 3);
 | |
| STATIC_ASSERT(sizeof(aligned_before_struct[1])    == 4);
 | |
| STATIC_ASSERT(sizeof(aligned_before_struct[2])    == 6);
 | |
| STATIC_ASSERT(sizeof(aligned_before_struct[2][1]) == 8);
 | |
| STATIC_ASSERT(sizeof(aligned_before_struct[1][2]) == 6);
 | |
| 
 | |
| typedef struct ALIGNED(2) {
 | |
|   char a[3];
 | |
| } aligned_after_struct;
 | |
| 
 | |
| STATIC_ASSERT(sizeof(aligned_after_struct)       == 4);
 | |
| STATIC_ASSERT(sizeof(aligned_after_struct[1])    == 4);
 | |
| STATIC_ASSERT(sizeof(aligned_after_struct[2])    == 8);
 | |
| STATIC_ASSERT(sizeof(aligned_after_struct[2][1]) == 8);
 | |
| STATIC_ASSERT(sizeof(aligned_after_struct[1][2]) == 8);
 |