1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -emit-llvm -o - -triple x86_64-apple-darwin9 %s | FileCheck %s 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -emit-llvm -o - -triple thumbv7-apple-ios -target-abi apcs-gnu %s | FileCheck %s -check-prefix=CHECK-ARM 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian// rdar://8823265 562055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Note that we're declaring global variables with these types, 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// triggering both Sema and IRGen struct layout. 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian#define ATTR __attribute__((__ms_struct__)) 1062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 1162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanianstruct 1262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian{ 1362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char foo; 1462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 1562055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar; 1662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian} ATTR t1; 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s1 = sizeof(t1); 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s1 = global i32 2 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s1 = global i32 2 2062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 2162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanianstruct 2262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian{ 2362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char foo; 2462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 2562055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 2662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian int : 0; 2762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar; 2862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian} ATTR t2; 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s2 = sizeof(t2); 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s2 = global i32 2 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s2 = global i32 2 3262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 3362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanianstruct 3462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian{ 3562055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char foo; 3662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 3762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 3862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian int : 0; 3962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar; 4062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 4162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 4262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian} ATTR t3; 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s3 = sizeof(t3); 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s3 = global i32 2 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s3 = global i32 2 4662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 4762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanianstruct 4862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian{ 4962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 5062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar; 5162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian} ATTR t4; 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s4 = sizeof(t4); 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s4 = global i32 1 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s4 = global i32 1 5562055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 5662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanianstruct 5762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian{ 5862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 5962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 6062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 6162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar; 6262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian} ATTR t5; 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s5 = sizeof(t5); 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s5 = global i32 1 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s5 = global i32 1 6662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 6762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanianstruct 6862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian{ 6962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 7062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 7162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 7262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar; 7362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian} ATTR t6; 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s6 = sizeof(t6); 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s6 = global i32 1 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s6 = global i32 1 7762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 7862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanianstruct 7962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian{ 8062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char foo; 8162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 8262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian int : 0; 8362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar; 8462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar1; 8562055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 8662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar2; 8762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar3; 8862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 8962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar4; 9062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar5; 9162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 9262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar6; 9362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar7; 9462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian} ATTR t7; 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s7 = sizeof(t7); 96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s7 = global i32 9 97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s7 = global i32 9 9862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 9962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanianstruct 10062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian{ 10162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 10262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 10362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 10462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian} ATTR t8; 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s8 = sizeof(t8); 106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s8 = global i32 0 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s8 = global i32 0 10862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 10962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanianstruct 11062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian{ 11162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char foo; 11262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 11362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian int : 0; 11462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar; 11562055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar1; 11662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 11762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar2; 11862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar3; 11962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 12062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar4; 12162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar5; 12262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 12362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar6; 12462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar7; 12562055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian int i1; 12662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 12762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 12862055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char :4; 12962055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar8; 13062055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 13162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar9; 13262055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char bar10; 13362055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian int i2; 13462055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char : 0; 13562055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian long : 0; 13662055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian char :4; 13762055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian} ATTR t9; 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s9 = sizeof(t9); 139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s9 = global i32 28 140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s9 = global i32 28 14162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 142340fa242130c2d8d74c83edca0952e771aebe0e6Fariborz Jahanianstruct 143340fa242130c2d8d74c83edca0952e771aebe0e6Fariborz Jahanian{ 144340fa242130c2d8d74c83edca0952e771aebe0e6Fariborz Jahanian char foo: 8; 145340fa242130c2d8d74c83edca0952e771aebe0e6Fariborz Jahanian long : 0; 146340fa242130c2d8d74c83edca0952e771aebe0e6Fariborz Jahanian char bar; 147340fa242130c2d8d74c83edca0952e771aebe0e6Fariborz Jahanian} ATTR t10; 148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s10 = sizeof(t10); 149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s10 = global i32 16 150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s10 = global i32 8 151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 152651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// rdar://16041826 - ensure that ms_structs work correctly on a 153651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// !useBitFieldTypeAlignment() target 154651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct { 155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned int a : 31; 156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned int b : 2; 157651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned int c; 158651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} ATTR t11; 159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s11 = sizeof(t11); 160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s11 = global i32 12 161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s11 = global i32 12 162340fa242130c2d8d74c83edca0952e771aebe0e6Fariborz Jahanian 163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct { 164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned char a : 3; 165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned char b : 4; 166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned short c : 6; 167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} ATTR t12; 168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s12 = sizeof(t12); 169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s12 = global i32 4 170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s12 = global i32 4 17162055b0618fafb4747e783ba3fedd7bc7d57d27dFariborz Jahanian 172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct { 173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned char a : 3; 174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned char b : 4; 175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines __attribute__((packed)) unsigned short c : 6; 176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} ATTR t13; 177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint s13 = sizeof(t13); 178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: @s13 = global i32 4 179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-ARM: @s13 = global i32 4 180