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