170d085aaad33bd3864f621dbc1defab5368819e8Nick Lewycky// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 -emit-llvm -o - %s | FileCheck %s
292be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor
392be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregorstruct X {
492be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor  X();
592be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor  ~X();
692be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor};
792be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor
892be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregorstruct Y {
992be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor  X get();
1092be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor};
1192be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor
1292be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregorstruct X2 {
1392be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor  X x;
1492be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor};
1592be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor
1692be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregortemplate<typename T>
1792be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregorvoid call() {
1892be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor  Y().get();
1992be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor}
2092be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor
2192be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor// CHECK: define weak_odr void @_Z4callIiEvv
2292be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor// CHECK: call void @_ZN1Y3getEv
2392be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor// CHECK-NEXT: call void @_ZN1XD1Ev
2492be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor// CHECK-NEXT: ret void
2592be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregortemplate void call<int>();
2692be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor
2792be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregortemplate<typename T>
2892be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregorvoid compound_literal() {
2992be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor  (X2){};
3092be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor}
3192be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor
3292be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor// CHECK: define weak_odr void @_Z16compound_literalIiEvv
3392be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor// CHECK: call void @_ZN1XC1Ev
3492be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor// CHECK-NEXT: call void @_ZN2X2D1Ev
3592be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor// CHECK-NEXT: ret void
3692be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregortemplate void compound_literal<int>();
3792be2a5f4e938fc512683cd4e7dfd4e6789eb787Douglas Gregor
38