177 lines · c
1// RUN: %clang_cc1 -emit-llvm -o - -triple x86_64-apple-darwin9 %s | FileCheck %s2// RUN: %clang_cc1 -emit-llvm -o - -triple thumbv7-apple-ios -target-abi apcs-gnu %s | FileCheck %s -check-prefix=CHECK-ARM3 4// Note that we're declaring global variables with these types,5// triggering both Sema and IRGen struct layout.6 7#define ATTR __attribute__((__ms_struct__))8 9struct10{11 char foo;12 long : 0;13 char bar;14} ATTR t1;15int s1 = sizeof(t1);16// CHECK: @s1 ={{.*}} global i32 217// CHECK-ARM: @s1 ={{.*}} global i32 218 19struct20{21 char foo;22 long : 0;23 char : 0;24 int : 0;25 char bar;26} ATTR t2;27int s2 = sizeof(t2);28// CHECK: @s2 ={{.*}} global i32 229// CHECK-ARM: @s2 ={{.*}} global i32 230 31struct32{33 char foo;34 long : 0;35 char : 0;36 int : 0;37 char bar;38 long : 0;39 char : 0;40} ATTR t3;41int s3 = sizeof(t3);42// CHECK: @s3 ={{.*}} global i32 243// CHECK-ARM: @s3 ={{.*}} global i32 244 45struct46{47 long : 0;48 char bar;49} ATTR t4;50int s4 = sizeof(t4);51// CHECK: @s4 ={{.*}} global i32 152// CHECK-ARM: @s4 ={{.*}} global i32 153 54struct55{56 long : 0;57 long : 0;58 char : 0;59 char bar;60} ATTR t5;61int s5 = sizeof(t5);62// CHECK: @s5 ={{.*}} global i32 163// CHECK-ARM: @s5 ={{.*}} global i32 164 65struct66{67 long : 0;68 long : 0;69 char : 0;70 char bar;71} ATTR t6;72int s6 = sizeof(t6);73// CHECK: @s6 ={{.*}} global i32 174// CHECK-ARM: @s6 ={{.*}} global i32 175 76struct77{78 char foo;79 long : 0;80 int : 0;81 char bar;82 char bar1;83 long : 0;84 char bar2;85 char bar3;86 char : 0;87 char bar4;88 char bar5;89 char : 0;90 char bar6;91 char bar7;92} ATTR t7;93int s7 = sizeof(t7);94// CHECK: @s7 ={{.*}} global i32 995// CHECK-ARM: @s7 ={{.*}} global i32 996 97struct98{99 long : 0;100 long : 0;101 char : 0;102} ATTR t8;103int s8 = sizeof(t8);104// CHECK: @s8 ={{.*}} global i32 0105// CHECK-ARM: @s8 ={{.*}} global i32 0106 107struct108{109 char foo;110 long : 0;111 int : 0;112 char bar;113 char bar1;114 long : 0;115 char bar2;116 char bar3;117 char : 0;118 char bar4;119 char bar5;120 char : 0;121 char bar6;122 char bar7;123 int i1;124 char : 0;125 long : 0;126 char :4;127 char bar8;128 char : 0;129 char bar9;130 char bar10;131 int i2;132 char : 0;133 long : 0;134 char :4;135} ATTR t9;136int s9 = sizeof(t9);137// CHECK: @s9 ={{.*}} global i32 28138// CHECK-ARM: @s9 ={{.*}} global i32 28139 140struct141{142 char foo: 8;143 long : 0;144 char bar;145} ATTR t10;146int s10 = sizeof(t10);147// CHECK: @s10 ={{.*}} global i32 16148// CHECK-ARM: @s10 ={{.*}} global i32 8149 150// ensure that ms_structs work correctly on a !useBitFieldTypeAlignment() target151struct {152 unsigned int a : 31;153 unsigned int b : 2;154 unsigned int c;155} ATTR t11;156int s11 = sizeof(t11);157// CHECK: @s11 ={{.*}} global i32 12158// CHECK-ARM: @s11 ={{.*}} global i32 12159 160struct {161 unsigned char a : 3;162 unsigned char b : 4;163 unsigned short c : 6;164} ATTR t12;165int s12 = sizeof(t12);166// CHECK: @s12 ={{.*}} global i32 4167// CHECK-ARM: @s12 ={{.*}} global i32 4168 169struct {170 unsigned char a : 3;171 unsigned char b : 4;172 __attribute__((packed)) unsigned short c : 6;173} ATTR t13;174int s13 = sizeof(t13);175// CHECK: @s13 ={{.*}} global i32 4176// CHECK-ARM: @s13 ={{.*}} global i32 4177