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// RUN: %clang_cc1 %s -emit-llvm -o %t-opt.ll -triple=x86_64-apple-darwin10 -O3 59b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall// RUN: FileCheck --check-prefix=CHECK-O3 %s < %t-opt.ll 69b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall 745147d0098a34c3705f74ca121b27d7736ac113aAnders Carlssonstruct A { int a; int b; }; 89b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanstruct B { int b; }; 99b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanstruct C : B, A { }; 109b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman 1163b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson// Zero init. 1263b071f28ea936772634c176a34de2bf0301f79cAnders Carlssonnamespace ZeroInit { 139b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit1aE = global i64 -1 1463b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson int A::* a; 1563b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 169b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit2aaE = global [2 x i64] [i64 -1, i64 -1] 1763b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson int A::* aa[2]; 1863b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 199b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit3aaaE = global [2 x [2 x i64]] {{\[}}[2 x i64] [i64 -1, i64 -1], [2 x i64] [i64 -1, i64 -1]] 2063b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson int A::* aaa[2][2]; 2163b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 229b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit1bE = global i64 -1, 2363b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson int A::* b = 0; 242c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson 25cd87d1e4d1b0097877b0f9c2065900717d2aacbaChris Lattner // CHECK-GLOBAL: @_ZN8ZeroInit2saE = internal global %struct.anon { i64 -1 } 262c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson struct { 272c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson int A::*a; 282c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson } sa; 291fb0caaa7bef765b85972274e3b434af2572c141John McCall void test_sa() { (void) sa; } // force emission 302c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson 319b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN8ZeroInit3ssaE = internal 329b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: [2 x i64] [i64 -1, i64 -1] 332c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson struct { 342c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson int A::*aa[2]; 352c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson } ssa[2]; 361fb0caaa7bef765b85972274e3b434af2572c141John McCall void test_ssa() { (void) ssa; } 372c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson 38cd87d1e4d1b0097877b0f9c2065900717d2aacbaChris Lattner // CHECK-GLOBAL: @_ZN8ZeroInit2ssE = internal global %struct.anon.1 { %struct.anon.2 { i64 -1 } } 392c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson struct { 402c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson struct { 412c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson int A::*pa; 422c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson } s; 432c12d0319a267b844cb7d569d84426cd344b90f7Anders Carlsson } ss; 441fb0caaa7bef765b85972274e3b434af2572c141John McCall void test_ss() { (void) ss; } 45a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson 46a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson struct A { 47a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson int A::*a; 48a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson int b; 49a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson }; 50a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson 51a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson struct B { 52a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson A a[10]; 53a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson char c; 54a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson int B::*b; 55a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson }; 56a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson 57a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson struct C : A, B { int j; }; 589cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner // 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 }, align 8 59a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson C c; 6045147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson} 6163b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 6245147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson// PR5674 6345147d0098a34c3705f74ca121b27d7736ac113aAnders Carlssonnamespace PR5674 { 649b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall // CHECK-GLOBAL: @_ZN6PR56742pbE = global i64 4 6545147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson int A::*pb = &A::b; 6663b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson} 6763b071f28ea936772634c176a34de2bf0301f79cAnders Carlsson 68fe40456f0c0060097564cecaf7faada39185463aAnders Carlsson// Casts. 69fe40456f0c0060097564cecaf7faada39185463aAnders Carlssonnamespace Casts { 70fe40456f0c0060097564cecaf7faada39185463aAnders Carlsson 719b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanint A::*pa; 729b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanint C::*pc; 739b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman 749b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedmanvoid f() { 750bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK: store i64 -1, i64* @_ZN5Casts2paE 769b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman pa = 0; 779b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman 780bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[TMP:%.*]] = load i64* @_ZN5Casts2paE, align 8 790bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[ADJ:%.*]] = add nsw i64 [[TMP]], 4 800bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[ISNULL:%.*]] = icmp eq i64 [[TMP]], -1 810bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[RES:%.*]] = select i1 [[ISNULL]], i64 [[TMP]], i64 [[ADJ]] 820bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: store i64 [[RES]], i64* @_ZN5Casts2pcE 839b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman pc = pa; 849b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman 850bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[TMP:%.*]] = load i64* @_ZN5Casts2pcE, align 8 860bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[ADJ:%.*]] = sub nsw i64 [[TMP]], 4 870bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[ISNULL:%.*]] = icmp eq i64 [[TMP]], -1 880bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: [[RES:%.*]] = select i1 [[ISNULL]], i64 [[TMP]], i64 [[ADJ]] 890bab0cdab751248ca389a5592bcb70eac5d39260John McCall // CHECK-NEXT: store i64 [[RES]], i64* @_ZN5Casts2paE 909b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman pa = static_cast<int A::*>(pc); 919b3727457d1f779da81569c2ca42ff6cd5f5b03dEli Friedman} 92fe40456f0c0060097564cecaf7faada39185463aAnders Carlsson 93fe40456f0c0060097564cecaf7faada39185463aAnders Carlsson} 9445147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 9545147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson// Comparisons 9645147d0098a34c3705f74ca121b27d7736ac113aAnders Carlssonnamespace Comparisons { 9745147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson void f() { 9845147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson int A::*a; 9945147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 10045147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp ne i64 {{.*}}, -1 10145147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (a) { } 10245147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 10345147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp ne i64 {{.*}}, -1 10445147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (a != 0) { } 10545147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 10645147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp ne i64 -1, {{.*}} 10745147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (0 != a) { } 10845147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 10945147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp eq i64 {{.*}}, -1 11045147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (a == 0) { } 11145147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson 11245147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson // CHECK: icmp eq i64 -1, {{.*}} 11345147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson if (0 == a) { } 11445147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson } 11545147d0098a34c3705f74ca121b27d7736ac113aAnders Carlsson} 1163cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1173cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlssonnamespace ValueInit { 1183cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1193cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlssonstruct A { 1203cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson int A::*a; 1213cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1223cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson char c; 1233cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1243cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson A(); 1253cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson}; 1263cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 12793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define void @_ZN9ValueInit1AC2Ev(%"struct.ValueInit::A"* %this) unnamed_addr 1283cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson// CHECK: store i64 -1, i64* 1293cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson// CHECK: ret void 1303cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders CarlssonA::A() : a() {} 1313cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson 1323cb18bcefe39756f3b079fa1a62b4c9cbf6a592fAnders Carlsson} 133a83fb4bf8119b980ccf7de0795dff250a799ea58Anders Carlsson 1341884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlssonnamespace PR7139 { 1351884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson 1361884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlssonstruct pair { 1371884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson int first; 1381884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson int second; 1391884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson}; 1401884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson 1411884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlssontypedef int pair::*ptr_to_member_type; 1421884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson 1431884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlssonstruct ptr_to_member_struct { 1441884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson ptr_to_member_type data; 1451884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson int i; 1461884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson}; 1471884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson 1481884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlssonstruct A { 1491884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson ptr_to_member_struct a; 1501884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson 1511884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson A() : a() {} 1521884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson}; 1531884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson 154be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling// CHECK-O3: define zeroext i1 @_ZN6PR71395checkEv() [[NUW:#[0-9]+]] 1551884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlssonbool check() { 1561884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson // CHECK-O3: ret i1 true 1571884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson return A().a.data == 0; 1581884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson} 1591884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson 160be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling// CHECK-O3: define zeroext i1 @_ZN6PR71396check2Ev() [[NUW]] 161a40a9f31218c743e366322e34b59f0d4d4414198Anders Carlssonbool check2() { 162a40a9f31218c743e366322e34b59f0d4d4414198Anders Carlsson // CHECK-O3: ret i1 true 163a40a9f31218c743e366322e34b59f0d4d4414198Anders Carlsson return ptr_to_member_type() == 0; 164a40a9f31218c743e366322e34b59f0d4d4414198Anders Carlsson} 165a40a9f31218c743e366322e34b59f0d4d4414198Anders Carlsson 1661884eb0b5c55edda4893ddec45e7dbad79758782Anders Carlsson} 1670a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 1680a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonnamespace VirtualBases { 1690a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 1700a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonstruct A { 1710a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson char c; 1720a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson int A::*i; 1730a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson}; 1740a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 175eb9d81dff99d4996f41c93ce71b08aaf753cbae8Anders Carlsson// CHECK-GLOBAL: @_ZN12VirtualBases1bE = global %"struct.VirtualBases::B" { i32 (...)** null, %"struct.VirtualBases::A" { i8 0, i64 -1 } }, align 8 1760a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonstruct B : virtual A { }; 1770a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders CarlssonB b; 1780a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 179eb9d81dff99d4996f41c93ce71b08aaf753cbae8Anders Carlsson// CHECK-GLOBAL: @_ZN12VirtualBases1cE = global %"struct.VirtualBases::C" { i32 (...)** null, i64 -1, %"struct.VirtualBases::A" { i8 0, i64 -1 } }, align 8 1800a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonstruct C : virtual A { int A::*i; }; 1810a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders CarlssonC c; 1820a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 183eb9d81dff99d4996f41c93ce71b08aaf753cbae8Anders 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 1840a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlssonstruct D : C { int A::*i; }; 1850a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders CarlssonD d; 1860a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson 1870a87b377d9a8af87ebc99585be96aac2d36ccfcbAnders Carlsson} 188e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson 189e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlssonnamespace Test1 { 190e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson 191e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson// Don't crash when A contains a bit-field. 192e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlssonstruct A { 193e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson int A::* a; 194e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson int b : 10; 195e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson}; 196e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders CarlssonA a; 197e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson 198e9a05b7fd6ece68310707d10bc747a702a9af4a8Anders Carlsson} 199b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor 200b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregornamespace BoolPtrToMember { 201b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor struct X { 202b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor bool member; 203b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor }; 204b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor 205ef8225444452a1486bd721f3285301fe84643b00Stephen Hines // CHECK-LABEL: define nonnull i8* @_ZN15BoolPtrToMember1fERNS_1XEMS0_b 206b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor bool &f(X &x, bool X::*member) { 207b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor // CHECK: {{bitcast.* to i8\*}} 208b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor // CHECK-NEXT: getelementptr inbounds i8* 209b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor // CHECK-NEXT: ret i8* 210b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor return x.*member; 211b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor } 212b61e2a328c5c2552b0bb3a8d3c4bc9389f34a321Douglas Gregor} 21396e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson 21496e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlssonnamespace PR8507 { 21596e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson 21696e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlssonstruct S; 21796e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlssonvoid f(S* p, double S::*pm) { 21896e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson if (0 < p->*pm) { 21996e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson } 22096e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson} 22196e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson 22296e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson} 22396e93660124c8028a4c3bcc038ab0cdd18cd7ab2Anders Carlsson 2249b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCallnamespace test4 { 2259b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall struct A { int A_i; }; 2269b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall struct B : virtual A { int A::*B_p; }; 2279b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall struct C : virtual B { int *C_p; }; 2289b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall struct D : C { int *D_p; }; 2299b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall 2309cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris 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 2319b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall D d; 2329b7da1c46d6d2849f9cb51328d7fcddf2c417672John McCall} 23326e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman 23426e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedmannamespace PR11487 { 23526e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman union U 23626e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman { 23726e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman int U::* mptr; 23826e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman char x[16]; 23926e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman } x; 24026e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman // CHECK-GLOBAL: @_ZN7PR114871xE = global %"union.PR11487::U" { i64 -1, [8 x i8] zeroinitializer }, align 8 24126e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman 24226e80cdfe8933a7f804e1d05b379d5ad50119db5Eli Friedman} 24332f498a675df990901e6659d610dc740f9423228Eli Friedman 24432f498a675df990901e6659d610dc740f9423228Eli Friedmannamespace PR13097 { 24532f498a675df990901e6659d610dc740f9423228Eli Friedman struct X { int x; X(const X&); }; 24632f498a675df990901e6659d610dc740f9423228Eli Friedman struct A { 24732f498a675df990901e6659d610dc740f9423228Eli Friedman int qq; 24832f498a675df990901e6659d610dc740f9423228Eli Friedman X x; 24932f498a675df990901e6659d610dc740f9423228Eli Friedman }; 25032f498a675df990901e6659d610dc740f9423228Eli Friedman A f(); 25132f498a675df990901e6659d610dc740f9423228Eli Friedman X g() { return f().*&A::x; } 25293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin // CHECK-LABEL: define void @_ZN7PR130971gEv 25332f498a675df990901e6659d610dc740f9423228Eli Friedman // CHECK: call void @_ZN7PR130971fEv 25432f498a675df990901e6659d610dc740f9423228Eli Friedman // CHECK-NOT: memcpy 25532f498a675df990901e6659d610dc740f9423228Eli Friedman // CHECK: call void @_ZN7PR130971XC1ERKS0_ 25632f498a675df990901e6659d610dc740f9423228Eli Friedman} 257f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling 258be9e8bfef6ee7f81ea30e9d358101b4f8d560c6bBill Wendling// CHECK-O3: attributes [[NUW]] = { nounwind readnone{{.*}} } 259