temporaries.cpp revision 8682bdae7e3db4e5d7dd957754923bbdf75fc166
1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s 27a039eb88d03b35311cb2c99f84eb76634f37a71Anders Carlssonstruct A { 37a039eb88d03b35311cb2c99f84eb76634f37a71Anders Carlsson A(); 47a039eb88d03b35311cb2c99f84eb76634f37a71Anders Carlsson ~A(); 57a039eb88d03b35311cb2c99f84eb76634f37a71Anders Carlsson void f(); 67a039eb88d03b35311cb2c99f84eb76634f37a71Anders Carlsson}; 77a039eb88d03b35311cb2c99f84eb76634f37a71Anders Carlsson 8ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlssonvoid f1() { 9fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1AC1Ev 10fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1AD1Ev 11ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson (void)A(); 12fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson 13fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1AC1Ev 14fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1AD1Ev 157a039eb88d03b35311cb2c99f84eb76634f37a71Anders Carlsson A().f(); 167a039eb88d03b35311cb2c99f84eb76634f37a71Anders Carlsson} 17ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson 186f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson// Function calls 19ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlssonstruct B { 20ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson B(); 21ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson ~B(); 22ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson}; 23ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson 24ec74c5929c78bd1670619022f6cfd471becf65aaAnders CarlssonB g(); 25ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson 26ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlssonvoid f2() { 27fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK-NOT: call void @_ZN1BC1Ev 28fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1BD1Ev 29ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson (void)g(); 30ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson} 31ec74c5929c78bd1670619022f6cfd471becf65aaAnders Carlsson 326f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson// Member function calls 336f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlssonstruct C { 346f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson C(); 356f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson ~C(); 366f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson 376f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson C f(); 386f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson}; 396f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson 406f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlssonvoid f3() { 41fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1CC1Ev 42fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1CD1Ev 43fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1CD1Ev 446f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson C().f(); 456f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson} 466f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson 47a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlsson// Function call operator 48a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlssonstruct D { 49a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlsson D(); 50a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlsson ~D(); 51a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlsson 52a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlsson D operator()(); 53a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlsson}; 54a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlsson 55a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlssonvoid f4() { 563114af3f7911befa8f05a9a76f7d9e380538075bBenjamin Kramer // CHECK: call void @_ZN1DC1Ev 573114af3f7911befa8f05a9a76f7d9e380538075bBenjamin Kramer // CHECK: call void @_ZN1DD1Ev 583114af3f7911befa8f05a9a76f7d9e380538075bBenjamin Kramer // CHECK: call void @_ZN1DD1Ev 59a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlsson D()(); 60a303f9eab9ceb356a24d84e178d079f0d41ad8d4Anders Carlsson} 616f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson 622d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson// Overloaded operators 632d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlssonstruct E { 642d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson E(); 652d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson ~E(); 662d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson E operator+(const E&); 672d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson E operator!(); 682d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson}; 692d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson 702d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlssonvoid f5() { 71fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1EC1Ev 72fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1EC1Ev 73fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1ED1Ev 74fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1ED1Ev 75fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1ED1Ev 762d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson E() + E(); 77fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson 78fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1EC1Ev 79fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1ED1Ev 80fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1ED1Ev 812d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson !E(); 822d46eb21eb2c904831b0e9f75ab3523384c70e66Anders Carlsson} 836f68027af2b6ce294a2706f23a1d3cb7ca1b8d37Anders Carlsson 84283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlssonstruct F { 85283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlsson F(); 86283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlsson ~F(); 87283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlsson F& f(); 88283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlsson}; 89283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlsson 90283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlssonvoid f6() { 91fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1FC1Ev 92fa4f55067bb62a61eb48f77b0216ab1bb1168d27Anders Carlsson // CHECK: call void @_ZN1FD1Ev 93283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlsson F().f(); 94283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlsson} 95283e4d59b8fe63e93f20b6ffb3a623a4f60a85eaAnders Carlsson 964fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlssonstruct G { 974fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson G(); 984fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson G(A); 994fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson ~G(); 1004fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson operator A(); 1014fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson}; 1024fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson 1034fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlssonvoid a(const A&); 1044fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson 1054fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlssonvoid f7() { 1064fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson // CHECK: call void @_ZN1AC1Ev 1074fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson // CHECK: call void @_Z1aRK1A 1084fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson // CHECK: call void @_ZN1AD1Ev 1094fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson a(A()); 1104fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson 1114fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson // CHECK: call void @_ZN1GC1Ev 1124fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson // CHECK: call void @_ZN1Gcv1AEv 1134fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson // CHECK: call void @_Z1aRK1A 1144fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson // CHECK: call void @_ZN1AD1Ev 1154fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson // CHECK: call void @_ZN1GD1Ev 1164fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson a(G()); 1174fa26848acfbec29a748df4b58d6d654027b49c7Anders Carlsson} 1181faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson 1191faf67478c6d423880726a327c737db13b8d9f0bAnders Carlssonnamespace PR5077 { 1201faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson 1211faf67478c6d423880726a327c737db13b8d9f0bAnders Carlssonstruct A { 1221faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson A(); 1231faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson ~A(); 1241faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson int f(); 1251faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson}; 1261faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson 1271faf67478c6d423880726a327c737db13b8d9f0bAnders Carlssonvoid f(); 1281faf67478c6d423880726a327c737db13b8d9f0bAnders Carlssonint g(const A&); 1291faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson 1301faf67478c6d423880726a327c737db13b8d9f0bAnders Carlssonstruct B { 1311faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson int a1; 1321faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson int a2; 1331faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson B(); 1345e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson ~B(); 1351faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson}; 1361faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson 1371faf67478c6d423880726a327c737db13b8d9f0bAnders CarlssonB::B() 1381faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson // CHECK: call void @_ZN6PR50771AC1Ev 1391faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson // CHECK: call i32 @_ZN6PR50771A1fEv 1401faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson // CHECK: call void @_ZN6PR50771AD1Ev 1411faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson : a1(A().f()) 1421faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson // CHECK: call void @_ZN6PR50771AC1Ev 1431faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson // CHECK: call i32 @_ZN6PR50771gERKNS_1AE 1441faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson // CHECK: call void @_ZN6PR50771AD1Ev 1451faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson , a2(g(A())) 1461faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson{ 1471faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson // CHECK: call void @_ZN6PR50771fEv 1481faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson f(); 1491faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson} 1501faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson 1515e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlssonstruct C { 1525e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson C(); 1535e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson 1545e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson const B& b; 1555e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson}; 1565e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson 1575e1b91875c275f0ec50d3680afbac150d684fdbaAnders CarlssonC::C() 1585e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson // CHECK: call void @_ZN6PR50771BC1Ev 1595e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson : b(B()) { 1605e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson // CHECK: call void @_ZN6PR50771fEv 1615e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson f(); 1625e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson 1635e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson // CHECK: call void @_ZN6PR50771BD1Ev 1645e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson} 16503d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson} 16603d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson 16703d8ed439f55b692634f9c71721ecfabbe347c4dAnders CarlssonA f8() { 16803d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson // CHECK: call void @_ZN1AC1Ev 16903d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson // CHECK-NOT: call void @_ZN1AD1Ev 17003d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson return A(); 17103d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson // CHECK: ret void 17203d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson} 1735e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson 17403d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlssonstruct H { 17503d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson H(); 17603d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson ~H(); 17703d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson H(const H&); 17803d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson}; 1795e1b91875c275f0ec50d3680afbac150d684fdbaAnders Carlsson 18003d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlssonvoid f9(H h) { 18103d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson // CHECK: call void @_ZN1HC1Ev 18203d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson // CHECK: call void @_Z2f91H 18303d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson // CHECK: call void @_ZN1HD1Ev 18403d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson f9(H()); 18503d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson 18603d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson // CHECK: call void @_ZN1HC1ERKS_ 18703d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson // CHECK: call void @_Z2f91H 18803d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson // CHECK: call void @_ZN1HD1Ev 18903d8ed439f55b692634f9c71721ecfabbe347c4dAnders Carlsson f9(h); 1901faf67478c6d423880726a327c737db13b8d9f0bAnders Carlsson} 1914b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson 1924b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlssonvoid f10(const H&); 1934b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson 1944b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlssonvoid f11(H h) { 1954b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson // CHECK: call void @_ZN1HC1Ev 1964b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson // CHECK: call void @_Z3f10RK1H 1974b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson // CHECK: call void @_ZN1HD1Ev 1984b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson f10(H()); 1994b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson 2004b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson // CHECK: call void @_Z3f10RK1H 2014b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson // CHECK-NOT: call void @_ZN1HD1Ev 2024b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson // CHECK: ret void 2034b3cbeaea60a1a2d1adc73738123c24549b7ce2cAnders Carlsson f10(h); 204a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar} 20518ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor 20618ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor// PR5808 20718ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregorstruct I { 20818ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor I(const char *); 20918ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor ~I(); 21018ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor}; 21118ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor 21218ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor// CHECK: _Z3f12v 21318ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas GregorI f12() { 21418ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor // CHECK: call void @_ZN1IC1EPKc 21518ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor // CHECK-NOT: call void @_ZN1ID1Ev 21618ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor // CHECK: ret void 21718ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor return "Hello"; 21818ef5e28a9a2677f8b1dce1fb2638d66e0a1621fDouglas Gregor} 21965552c424750aaa58533ca385a90b77c033cc635Douglas Gregor 22065552c424750aaa58533ca385a90b77c033cc635Douglas Gregor// PR5867 22165552c424750aaa58533ca385a90b77c033cc635Douglas Gregornamespace PR5867 { 22265552c424750aaa58533ca385a90b77c033cc635Douglas Gregor struct S { 22365552c424750aaa58533ca385a90b77c033cc635Douglas Gregor S(); 22465552c424750aaa58533ca385a90b77c033cc635Douglas Gregor S(const S &); 22565552c424750aaa58533ca385a90b77c033cc635Douglas Gregor ~S(); 22665552c424750aaa58533ca385a90b77c033cc635Douglas Gregor }; 22765552c424750aaa58533ca385a90b77c033cc635Douglas Gregor 22865552c424750aaa58533ca385a90b77c033cc635Douglas Gregor void f(S, int); 22965552c424750aaa58533ca385a90b77c033cc635Douglas Gregor // CHECK: define void @_ZN6PR58671gEv 23065552c424750aaa58533ca385a90b77c033cc635Douglas Gregor void g() { 23165552c424750aaa58533ca385a90b77c033cc635Douglas Gregor // CHECK: call void @_ZN6PR58671SC1Ev 23265552c424750aaa58533ca385a90b77c033cc635Douglas Gregor // CHECK-NEXT: call void @_ZN6PR58671fENS_1SEi 23365552c424750aaa58533ca385a90b77c033cc635Douglas Gregor // CHECK-NEXT: call void @_ZN6PR58671SD1Ev 23465552c424750aaa58533ca385a90b77c033cc635Douglas Gregor // CHECK-NEXT: ret void 23565552c424750aaa58533ca385a90b77c033cc635Douglas Gregor (f)(S(), 0); 23665552c424750aaa58533ca385a90b77c033cc635Douglas Gregor } 2375132655e4296b780672e9a96b46a740135073534Douglas Gregor 2385132655e4296b780672e9a96b46a740135073534Douglas Gregor // CHECK: define linkonce_odr void @_ZN6PR58672g2IiEEvT_ 2395132655e4296b780672e9a96b46a740135073534Douglas Gregor template<typename T> 2405132655e4296b780672e9a96b46a740135073534Douglas Gregor void g2(T) { 2415132655e4296b780672e9a96b46a740135073534Douglas Gregor // CHECK: call void @_ZN6PR58671SC1Ev 2425132655e4296b780672e9a96b46a740135073534Douglas Gregor // CHECK-NEXT: call void @_ZN6PR58671fENS_1SEi 2435132655e4296b780672e9a96b46a740135073534Douglas Gregor // CHECK-NEXT: call void @_ZN6PR58671SD1Ev 2445132655e4296b780672e9a96b46a740135073534Douglas Gregor // CHECK-NEXT: ret void 2455132655e4296b780672e9a96b46a740135073534Douglas Gregor (f)(S(), 0); 2465132655e4296b780672e9a96b46a740135073534Douglas Gregor } 2475132655e4296b780672e9a96b46a740135073534Douglas Gregor 2485132655e4296b780672e9a96b46a740135073534Douglas Gregor void h() { 2495132655e4296b780672e9a96b46a740135073534Douglas Gregor g2(17); 2505132655e4296b780672e9a96b46a740135073534Douglas Gregor } 25165552c424750aaa58533ca385a90b77c033cc635Douglas Gregor} 2522e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson 2532e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson// PR6199 2542e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlssonnamespace PR6199 { 2552e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson struct A { ~A(); }; 2562e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson 2572e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson struct B { operator A(); }; 2582e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson 2598f51a4f2d00b0abda3cde7f3828fb2e2b9beafb5Douglas Gregor // CHECK: define weak_odr void @_ZN6PR61992f2IiEENS_1AET_ 2602e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson template<typename T> A f2(T) { 2612e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson B b; 2622e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson // CHECK: call void @_ZN6PR61991BcvNS_1AEEv 2632e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson // CHECK-NEXT: ret void 2642e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson return b; 2652e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson } 2662e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson 2672e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson template A f2<int>(int); 2682e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson 2692e13db8bc64bc99922b0aeb45443c681c1643c82Anders Carlsson} 2700dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson 2710dc736627614b476ec696fa216dd2a524d0bafadAnders Carlssonnamespace T12 { 2720dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson 2730dc736627614b476ec696fa216dd2a524d0bafadAnders Carlssonstruct A { 2740dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson A(); 2750dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson ~A(); 2760dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson int f(); 2770dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson}; 2780dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson 2790dc736627614b476ec696fa216dd2a524d0bafadAnders Carlssonint& f(int); 2800dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson 2810dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson// CHECK: define void @_ZN3T121gEv 2820dc736627614b476ec696fa216dd2a524d0bafadAnders Carlssonvoid g() { 2830dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson // CHECK: call void @_ZN3T121AC1Ev 2840dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson // CHECK-NEXT: call i32 @_ZN3T121A1fEv( 2850dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson // CHECK-NEXT: call i32* @_ZN3T121fEi( 2860dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson // CHECK-NEXT: call void @_ZN3T121AD1Ev( 2870dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson int& i = f(A().f()); 2880dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson} 2890dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson 2900dc736627614b476ec696fa216dd2a524d0bafadAnders Carlsson} 2918682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola 2928682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindolanamespace PR6648 { 2938682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola struct B { 2948682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola ~B(); 2958682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola }; 2968682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola B foo; 2978682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola struct D; 2988682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola D& zed(B); 2998682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola void foobar() { 3008682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola // CHECK: call %"struct.PR6648::D"* @_ZN6PR66483zedENS_1BE 3018682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola zed(foo); 3028682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola } 3038682bdae7e3db4e5d7dd957754923bbdf75fc166Rafael Espindola} 304