xref: /llvm-project/clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp (revision 27d69dbbd073b5a4973d7089dcb37f764a76ebb9)
18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin10 -o - %s | FileCheck %s
23cc3cdeeSDouglas Gregor template<typename T>
33cc3cdeeSDouglas Gregor struct X {
43cc3cdeeSDouglas Gregor   static T member1;
53cc3cdeeSDouglas Gregor   static T member2;
63cc3cdeeSDouglas Gregor   static T member3;
73cc3cdeeSDouglas Gregor };
83cc3cdeeSDouglas Gregor 
93cc3cdeeSDouglas Gregor template<typename T>
103cc3cdeeSDouglas Gregor T X<T>::member1;
113cc3cdeeSDouglas Gregor 
123cc3cdeeSDouglas Gregor template<typename T>
133cc3cdeeSDouglas Gregor T X<T>::member2 = 17;
143cc3cdeeSDouglas Gregor 
15a97f3298SJohn McCall // CHECK: @_ZN1XIiE7member1E = weak_odr global i32 0
163cc3cdeeSDouglas Gregor template int X<int>::member1;
173cc3cdeeSDouglas Gregor 
18a97f3298SJohn McCall // CHECK: @_ZN1XIiE7member2E = weak_odr global i32 17
193cc3cdeeSDouglas Gregor template int X<int>::member2;
203cc3cdeeSDouglas Gregor 
213cc3cdeeSDouglas Gregor // For implicit instantiation of
get(bool Cond1,bool Cond2)22b81005dfSDouglas Gregor long& get(bool Cond1, bool Cond2) {
23*27d69dbbSDavid Majnemer   // CHECK: @_ZN1XIlE7member1E = linkonce_odr global i64 0
24*27d69dbbSDavid Majnemer   // CHECK: @_ZN1XIlE7member2E = linkonce_odr global i64 17
25b81005dfSDouglas Gregor   // CHECK: @_ZN1XIlE7member3E = external global i64
26b81005dfSDouglas Gregor   return Cond1? X<long>::member1
27b81005dfSDouglas Gregor        : Cond2? X<long>::member2
28b81005dfSDouglas Gregor               : X<long>::member3;
293cc3cdeeSDouglas Gregor }
30