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