forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			203 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=i686-apple-darwin9
 | |
| // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=arm-linux-gnueabihf
 | |
| // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=aarch64-linux-gnu
 | |
| // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-pc-linux-gnu
 | |
| // expected-no-diagnostics
 | |
| 
 | |
| #define CHECK_SIZE(name, size) \
 | |
|   extern int name##_1[sizeof(name) == size ? 1 : -1];
 | |
| 
 | |
| 
 | |
| struct  __attribute__((packed)) {
 | |
|   int a;
 | |
|   int b : 4;
 | |
|   int c : 32;
 | |
| } s0;
 | |
| CHECK_SIZE(s0,9)
 | |
| 
 | |
| #pragma pack (1)
 | |
| struct {
 | |
|   int a;
 | |
|   int b : 4;
 | |
|   int c : 32;
 | |
| } s1;
 | |
| CHECK_SIZE(s1,9)
 | |
| 
 | |
| #pragma pack (2)
 | |
| struct {
 | |
|   int a;
 | |
|   int b : 4;
 | |
|   int c : 32;
 | |
| } s2;
 | |
| CHECK_SIZE(s2,10)
 | |
| 
 | |
| #pragma pack (2)
 | |
| struct __attribute__((packed)) {
 | |
|   int a;
 | |
|   int b : 4;
 | |
|   int c : 32;
 | |
| } s3;
 | |
| CHECK_SIZE(s3,10)
 | |
| 
 | |
| #pragma pack (4)
 | |
| struct  __attribute__((packed)) {
 | |
|   int a;
 | |
|   int b : 4;
 | |
|   int c : 32;
 | |
| } s4;
 | |
| CHECK_SIZE(s4,12)
 | |
| 
 | |
| #pragma pack (16)
 | |
| struct {
 | |
|   int a;
 | |
|   int __attribute__((packed)) b : 4;
 | |
|   int __attribute__((packed)) c : 32;
 | |
| } s41;
 | |
| CHECK_SIZE(s41,12)
 | |
| 
 | |
| #pragma pack (16)
 | |
| struct {
 | |
|   int a;
 | |
|   int b : 4;
 | |
|   int c : 32;
 | |
| } s5;
 | |
| CHECK_SIZE(s5,12)
 | |
| 
 | |
| #pragma pack (1)
 | |
| struct  __attribute__((aligned(4))) {
 | |
|   int a;
 | |
|   int b : 4;
 | |
|   int c : 32;
 | |
| } s6;
 | |
| CHECK_SIZE(s6,12)
 | |
| 
 | |
| #pragma pack (2)
 | |
| struct {
 | |
|   char a;
 | |
|   int b : 4;
 | |
|   int c : 32;
 | |
|   char s;
 | |
| } s7;
 | |
| CHECK_SIZE(s7,8)
 | |
| 
 | |
| #pragma pack (1)
 | |
| struct {
 | |
|   char a;
 | |
|   int b : 4;
 | |
|   int c : 28;
 | |
|   char s;
 | |
| } s8;
 | |
| CHECK_SIZE(s8,6)
 | |
| 
 | |
| #pragma pack (8)
 | |
| struct {
 | |
|   char a;
 | |
|   int b : 4;
 | |
|   int c : 28;
 | |
|   char s;
 | |
| } s9;
 | |
| CHECK_SIZE(s9,8)
 | |
| 
 | |
| #pragma pack (8)
 | |
| struct {
 | |
|   char a;
 | |
|   char s;
 | |
| } s10;
 | |
| CHECK_SIZE(s10,2)
 | |
| 
 | |
| #pragma pack(4)
 | |
| struct {
 | |
|   char a;
 | |
|   int b : 4;
 | |
|   int c : 28;
 | |
|   char s1;
 | |
|   char s2;
 | |
|   char s3;
 | |
| } s11;
 | |
| CHECK_SIZE(s11,8)
 | |
| 
 | |
| #pragma pack(4)
 | |
| struct {
 | |
|   short s1;
 | |
|   int a1 : 17;
 | |
|   int a2 : 17;
 | |
|   int a3 : 30;
 | |
|   short s2;
 | |
| } s12;
 | |
| CHECK_SIZE(s12,12)
 | |
| 
 | |
| #pragma pack(4)
 | |
| struct {
 | |
|   char c1;
 | |
|   int i1 : 17;
 | |
|   int i2 : 17;
 | |
|   int i3 : 30;
 | |
|   char c2;
 | |
| } s13;
 | |
| CHECK_SIZE(s13,12)
 | |
| 
 | |
| #pragma pack(2)
 | |
| struct {
 | |
|   char a;
 | |
|   int s;
 | |
| } s14;
 | |
| CHECK_SIZE(s14,6)
 | |
| 
 | |
| #pragma pack(4)
 | |
| struct {
 | |
|   char a;
 | |
|   short s;
 | |
| } s15;
 | |
| CHECK_SIZE(s15,4)
 | |
| 
 | |
| #pragma pack(2)
 | |
| struct {
 | |
|   char a;
 | |
|   int b : 4;
 | |
|   int c : 28;
 | |
|   char s1;
 | |
|   char s2;
 | |
|   char s3;
 | |
| } s16;
 | |
| CHECK_SIZE(s16,8)
 | |
| 
 | |
| #pragma pack (16)
 | |
| struct {
 | |
|   int __attribute__((packed)) a;
 | |
|   int __attribute__((packed)) b : 4;
 | |
|   int __attribute__((packed)) c : 32;
 | |
| } s17;
 | |
| CHECK_SIZE(s17,12)
 | |
| 
 | |
| #pragma pack (16)
 | |
| struct {
 | |
|   int __attribute__((aligned(8))) a;
 | |
|   int __attribute__((aligned(8))) b : 4;
 | |
|   int __attribute__((aligned(8))) c : 32;
 | |
| } s18;
 | |
| CHECK_SIZE(s18,24)
 | |
| 
 | |
| #pragma pack (16)
 | |
| struct {
 | |
|   int __attribute__((aligned(1))) a;
 | |
|   int __attribute__((aligned(1))) b : 4;
 | |
|   int __attribute__((aligned(1))) c : 32;
 | |
| } s19;
 | |
| CHECK_SIZE(s19,12)
 | |
| 
 | |
| #pragma pack (1)
 | |
| struct  __attribute__((aligned(8))) {
 | |
|   int a;
 | |
|   int b : 4;
 | |
|   int c : 32;
 | |
| } s20;
 | |
| CHECK_SIZE(s20,16)
 | |
| 
 | |
| #pragma pack (2)
 | |
| struct {
 | |
|   int __attribute__((aligned(8))) a;
 | |
|   int __attribute__((aligned(8))) b : 4;
 | |
|   int __attribute__((aligned(8))) c : 32;
 | |
| } s21;
 | |
| CHECK_SIZE(s21,10)
 |