19b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall// RUN: %clang_cc1 %s -emit-llvm -o %t.ll -triple=x86_64-apple-darwin10 29b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall// RUN: FileCheck %s < %t.ll 39b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall// RUN: FileCheck -check-prefix=CHECK-GLOBAL %s < %t.ll 49b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall 545147d0098a34c3705f74ca121b27d7736ac113aAnders Carlssonstruct A { int a; int b; }; 69b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanstruct B { int b; }; 79b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanstruct C : B, A { }; 89b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman 963b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson// Zero init. 1063b071f28ea936772634c176a34de2bf0301f79cAnders Carlssonnamespace ZeroInit { 119b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit1aE = global i64 -1 1263b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson int A::* a; 1363b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 149b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit2aaE = global [2 x i64] [i64 -1, i64 -1] 1563b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson int A::* aa[2]; 1663b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 179b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit3aaaE = global [2 x [2 x i64]] {{\[}}[2 x i64] [i64 -1, i64 -1], [2 x i64] [i64 -1, i64 -1]] 1863b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson int A::* aaa[2][2]; 1963b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 209b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit1bE = global i64 -1, 2163b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson int A::* b = 0; 222c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson 23cd87d1e4d1b0097877b0f9c2065900717d2aacbaChris Lattner // CHECK-GLOBAL: @_ZN8ZeroInit2saE = internal global %struct.anon { i64 -1 } 242c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson struct { 252c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson int A::*a; 262c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson } sa; 271fb0caaa7bef765b85972274e3b434af2572c141John McCall void test_sa() { (void) sa; } // force emission 282c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson 299b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit3ssaE = internal 309b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: [2 x i64] [i64 -1, i64 -1] 312c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson struct { 322c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson int A::*aa[2]; 332c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson } ssa[2]; 341fb0caaa7bef765b85972274e3b434af2572c141John McCall void test_ssa() { (void) ssa; } 352c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson 36cd87d1e4d1b0097877b0f9c2065900717d2aacbaChris Lattner // CHECK-GLOBAL: @_ZN8ZeroInit2ssE = internal global %struct.anon.1 { %struct.anon.2 { i64 -1 } } 372c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson struct { 382c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson struct { 392c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson int A::*pa; 402c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson } s; 412c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson } ss; 421fb0caaa7bef765b85972274e3b434af2572c141John McCall void test_ss() { (void) ss; } 43a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson 44a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson struct A { 45a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson int A::*a; 46a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson int b; 47a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson }; 48a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson 49a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson struct B { 50a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson A a[10]; 51a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson char c; 52a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson int B::*b; 53a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson }; 54a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson 55a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson struct C : A, B { int j; }; 56176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // CHECK-GLOBAL: @_ZN8ZeroInit1cE = global {{%.*}} <{ %"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::B" { [10 x %"struct.ZeroInit::A"] [%"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::A" { i64 -1, i32 0 }, %"struct.ZeroInit::A" { i64 -1, i32 0 }], i8 0, i64 -1 }, i32 0, [4 x i8] zeroinitializer }>, align 8 57a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson C c; 5845147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson} 5963b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 6045147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson// PR5674 6145147d0098a34c3705f74ca121b27d7736ac113aAnders Carlssonnamespace PR5674 { 629b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN6PR56742pbE = global i64 4 6345147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson int A::*pb = &A::b; 6463b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson} 6563b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 66fe40456f0c0060097564cecaf7faada39185463aAnders Carlsson// Casts. 67fe40456f0c0060097564cecaf7faada39185463aAnders Carlssonnamespace Casts { 68fe40456f0c0060097564cecaf7faada39185463aAnders Carlsson 699b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanint A::*pa; 709b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanint C::*pc; 719b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman 729b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanvoid f() { 730bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK: store i64 -1, i64* @_ZN5Casts2paE 749b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman pa = 0; 759b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman 763ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar // CHECK-NEXT: [[TMP:%.*]] = load i64, i64* @_ZN5Casts2paE, align 8 770bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[ADJ:%.*]] = add nsw i64 [[TMP]], 4 780bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[ISNULL:%.*]] = icmp eq i64 [[TMP]], -1 790bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[RES:%.*]] = select i1 [[ISNULL]], i64 [[TMP]], i64 [[ADJ]] 800bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: store i64 [[RES]], i64* @_ZN5Casts2pcE 819b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman pc = pa; 829b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman 833ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar // CHECK-NEXT: [[TMP:%.*]] = load i64, i64* @_ZN5Casts2pcE, align 8 840bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[ADJ:%.*]] = sub nsw i64 [[TMP]], 4 850bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[ISNULL:%.*]] = icmp eq i64 [[TMP]], -1 860bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[RES:%.*]] = select i1 [[ISNULL]], i64 [[TMP]], i64 [[ADJ]] 870bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: store i64 [[RES]], i64* @_ZN5Casts2paE 889b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman pa = static_cast<int A::*>(pc); 899b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman} 90fe40456f0c0060097564cecaf7faada39185463aAnders Carlsson 91fe40456f0c0060097564cecaf7faada39185463aAnders Carlsson} 9245147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 9345147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson// Comparisons 9445147d0098a34c3705f74ca121b27d7736ac113aAnders Carlssonnamespace Comparisons { 9545147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson void f() { 9645147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson int A::*a; 9745147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 9845147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp ne i64 {{.*}}, -1 9945147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (a) { } 10045147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 10145147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp ne i64 {{.*}}, -1 10245147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (a != 0) { } 10345147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 10445147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp ne i64 -1, {{.*}} 10545147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (0 != a) { } 10645147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 10745147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp eq i64 {{.*}}, -1 10845147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (a == 0) { } 10945147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 11045147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp eq i64 -1, {{.*}} 11145147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (0 == a) { } 11245147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson } 11345147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson} 1143cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1153cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlssonnamespace ValueInit { 1163cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1173cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlssonstruct A { 1183cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson int A::*a; 1193cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1203cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson char c; 1213cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1223cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson A(); 1233cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson}; 1243cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 12593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_ZN9ValueInit1AC2Ev(%"struct.ValueInit::A"* %this) unnamed_addr 1263cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson// CHECK: store i64 -1, i64* 1273cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson// CHECK: ret void 1283cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders CarlssonA::A() : a() {} 1293cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1303cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson} 131a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson 1320a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonnamespace VirtualBases { 1330a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 1340a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonstruct A { 1350a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson char c; 1360a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson int A::*i; 1370a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson}; 1380a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 139eb9d81dff99d4996f41c93ce71b08aaf753cbae8Anders Carlsson// CHECK-GLOBAL: @_ZN12VirtualBases1bE = global %"struct.VirtualBases::B" { i32 (...)** null, %"struct.VirtualBases::A" { i8 0, i64 -1 } }, align 8 1400a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonstruct B : virtual A { }; 1410a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders CarlssonB b; 1420a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 143eb9d81dff99d4996f41c93ce71b08aaf753cbae8Anders Carlsson// CHECK-GLOBAL: @_ZN12VirtualBases1cE = global %"struct.VirtualBases::C" { i32 (...)** null, i64 -1, %"struct.VirtualBases::A" { i8 0, i64 -1 } }, align 8 1440a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonstruct C : virtual A { int A::*i; }; 1450a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders CarlssonC c; 1460a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 147eb9d81dff99d4996f41c93ce71b08aaf753cbae8Anders Carlsson// CHECK-GLOBAL: @_ZN12VirtualBases1dE = global %"struct.VirtualBases::D" { %"struct.VirtualBases::C.base" { i32 (...)** null, i64 -1 }, i64 -1, %"struct.VirtualBases::A" { i8 0, i64 -1 } }, align 8 1480a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonstruct D : C { int A::*i; }; 1490a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders CarlssonD d; 1500a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 1510a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson} 152e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson 153e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlssonnamespace Test1 { 154e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson 155e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson// Don't crash when A contains a bit-field. 156e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlssonstruct A { 157e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson int A::* a; 158e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson int b : 10; 159e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson}; 160e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders CarlssonA a; 161e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson 162e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson} 163b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor 164b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregornamespace BoolPtrToMember { 165b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor struct X { 166b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor bool member; 167b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor }; 168b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor 169176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_ZN15BoolPtrToMember1fERNS_1XEMS0_b 170b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor bool &f(X &x, bool X::*member) { 171b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor // CHECK: {{bitcast.* to i8\*}} 1723ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar // CHECK-NEXT: getelementptr inbounds i8, i8* 173b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor // CHECK-NEXT: ret i8* 174b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor return x.*member; 175b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor } 176b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor} 17796e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson 17896e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlssonnamespace PR8507 { 17996e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson 18096e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlssonstruct S; 18196e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlssonvoid f(S* p, double S::*pm) { 18296e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson if (0 < p->*pm) { 18396e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson } 18496e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson} 18596e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson 18696e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson} 18796e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson 1889b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCallnamespace test4 { 1899b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall struct A { int A_i; }; 1909b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall struct B : virtual A { int A::*B_p; }; 1919b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall struct C : virtual B { int *C_p; }; 1929b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall struct D : C { int *D_p; }; 1939b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall 1949cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner // CHECK-GLOBAL: @_ZN5test41dE = global %"struct.test4::D" { %"struct.test4::C.base" zeroinitializer, i32* null, %"struct.test4::B.base" { i32 (...)** null, i64 -1 }, %"struct.test4::A" zeroinitializer }, align 8 1959b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall D d; 1969b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall} 19726e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman 19826e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedmannamespace PR11487 { 19926e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman union U 20026e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman { 20126e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman int U::* mptr; 20226e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman char x[16]; 20326e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman } x; 20426e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman // CHECK-GLOBAL: @_ZN7PR114871xE = global %"union.PR11487::U" { i64 -1, [8 x i8] zeroinitializer }, align 8 20526e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman 20626e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman} 20732f498a675df990901e6659d610dc740f9423228Eli Friedman 20832f498a675df990901e6659d610dc740f9423228Eli Friedmannamespace PR13097 { 20932f498a675df990901e6659d610dc740f9423228Eli Friedman struct X { int x; X(const X&); }; 21032f498a675df990901e6659d610dc740f9423228Eli Friedman struct A { 21132f498a675df990901e6659d610dc740f9423228Eli Friedman int qq; 21232f498a675df990901e6659d610dc740f9423228Eli Friedman X x; 21332f498a675df990901e6659d610dc740f9423228Eli Friedman }; 21432f498a675df990901e6659d610dc740f9423228Eli Friedman A f(); 21532f498a675df990901e6659d610dc740f9423228Eli Friedman X g() { return f().*&A::x; } 21693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin // CHECK-LABEL: define void @_ZN7PR130971gEv 21732f498a675df990901e6659d610dc740f9423228Eli Friedman // CHECK: call void @_ZN7PR130971fEv 21832f498a675df990901e6659d610dc740f9423228Eli Friedman // CHECK-NOT: memcpy 21932f498a675df990901e6659d610dc740f9423228Eli Friedman // CHECK: call void @_ZN7PR130971XC1ERKS0_ 22032f498a675df990901e6659d610dc740f9423228Eli Friedman} 221f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling 222176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace PR21089 { 223176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct A { 224176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines bool : 1; 225176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines int A::*x; 226176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines bool y; 227176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines A(); 228176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 229176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct B : A { 230176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 231176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesB b; 232176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-GLOBAL: @_ZN7PR210891bE = global %"struct.PR21089::B" { %"struct.PR21089::A.base" <{ i8 0, [7 x i8] zeroinitializer, i64 -1, i8 0 }>, [7 x i8] zeroinitializer }, align 8 233176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 234176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 235176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace PR21282 { 236176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesunion U { 237176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines int U::*x; 238176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines long y[2]; 239176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 240176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesU u; 241176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK-GLOBAL: @_ZN7PR212821uE = global %"union.PR21282::U" { i64 -1, [8 x i8] zeroinitializer }, align 8 242176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 243176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 244b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarnamespace FlexibleArrayMember { 245b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarstruct S { 246b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar int S::*x[]; 247b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}; 248b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarS s; 249b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK-GLOBAL: @_ZN19FlexibleArrayMember1sE = global %"struct.FlexibleArrayMember::S" zeroinitializer, align 8 250b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} 251b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 252b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarnamespace IndirectPDM { 253b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarunion U { 254b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar union { 255b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar int U::*m; 256b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar }; 257b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}; 258b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarU u; 259b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// CHECK-GLOBAL: @_ZN11IndirectPDM1uE = global %"union.IndirectPDM::U" { %union.anon { i64 -1 } }, align 8 260b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} 261