1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // PR4610 4*67e74705SXin Li #pragma pack(4) 5*67e74705SXin Li struct ref { 6*67e74705SXin Li struct ref *next; 7*67e74705SXin Li } refs; 8*67e74705SXin Li 9*67e74705SXin Li // PR13580 10*67e74705SXin Li struct S 11*67e74705SXin Li { 12*67e74705SXin Li char a[3]; 13*67e74705SXin Li #pragma pack(1) 14*67e74705SXin Li struct T 15*67e74705SXin Li { 16*67e74705SXin Li char b; 17*67e74705SXin Li int c; 18*67e74705SXin Li } d; 19*67e74705SXin Li #pragma pack() 20*67e74705SXin Li struct T2 21*67e74705SXin Li { 22*67e74705SXin Li char b; 23*67e74705SXin Li int c; 24*67e74705SXin Li } d2; 25*67e74705SXin Li } ss; 26*67e74705SXin Li 27*67e74705SXin Li struct S3 28*67e74705SXin Li { 29*67e74705SXin Li char a[3]; 30*67e74705SXin Li #pragma pack(push, 2) 31*67e74705SXin Li struct T3 32*67e74705SXin Li { 33*67e74705SXin Li char b; 34*67e74705SXin Li int c; 35*67e74705SXin Li } d; 36*67e74705SXin Li #pragma pack(pop) 37*67e74705SXin Li struct T32 38*67e74705SXin Li { 39*67e74705SXin Li char b; 40*67e74705SXin Li int c; 41*67e74705SXin Li } e; 42*67e74705SXin Li } s3; 43*67e74705SXin Li 44*67e74705SXin Li struct S4 45*67e74705SXin Li { 46*67e74705SXin Li char a[3]; 47*67e74705SXin Li #pragma align=packed 48*67e74705SXin Li struct T4 49*67e74705SXin Li { 50*67e74705SXin Li char b; 51*67e74705SXin Li int c; 52*67e74705SXin Li } d; 53*67e74705SXin Li int e; 54*67e74705SXin Li } s4; 55*67e74705SXin Li 56*67e74705SXin Li // CHECK: [[struct_ref:%[a-zA-Z0-9_.]+]] = type { [[struct_ref]]* } 57*67e74705SXin Li // CHECK: [[struct_S:%[a-zA-Z0-9_.]+]] = type { [3 x i8], [[struct_T:%[a-zA-Z0-9_.]+]], [[struct_T2:%[a-zA-Z0-9_.]+]] } 58*67e74705SXin Li // CHECK: [[struct_T]] = type <{ i8, i32 }> 59*67e74705SXin Li // CHECK: [[struct_T2]] = type { i8, i32 } 60*67e74705SXin Li 61*67e74705SXin Li // CHECK: %struct.S3 = type { [3 x i8], i8, %struct.T3, %struct.T32 } 62*67e74705SXin Li // CHECK: %struct.T3 = type <{ i8, i8, i32 }> 63*67e74705SXin Li // CHECK: %struct.T32 = type { i8, i32 } 64*67e74705SXin Li // CHECK: %struct.S4 = type { [3 x i8], %struct.T4, i32 } 65*67e74705SXin Li // CHECK: %struct.T4 = type <{ i8, i32 }> 66*67e74705SXin Li 67*67e74705SXin Li // CHECK: @refs = common global [[struct_ref]] 68*67e74705SXin Li // CHECK: @ss = common global [[struct_S]] 69