brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · fa6839d Raw
65 lines · cpp
1// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s2 3// CHECK: Outer5Inner{{.*}}localE6memberE = external global4 5template<typename T> struct A {6  virtual void f(T) { }7  inline void g() { } 8};9 10// Explicit instantiations have external linkage.11 12// CHECK-LABEL: define weak_odr void @_ZN1AIiE1gEv(13template void A<int>::g();14 15// CHECK-LABEL: define weak_odr void @_ZN1AIfE1fEf(16// CHECK-LABEL: define weak_odr void @_ZN1AIfE1gEv(17// FIXME: This should also emit the vtable.18template struct A<float>;19 20// CHECK-LABEL: define weak_odr void @_Z1fIiEvT_21template <typename T> void f(T) { }22template void f<int>(int);23 24// CHECK-LABEL: define weak_odr void @_Z1gIiEvT_25template <typename T> inline void g(T) { }26template void g<int>(int);27 28template<typename T>29struct X0 {30  virtual ~X0() { }31};32 33template<typename T>34struct X1 : X0<T> {35  virtual void blarg();36};37 38template<typename T> void X1<T>::blarg() { }39 40extern template struct X0<char>;41extern template struct X1<char>;42 43// CHECK-LABEL: define linkonce_odr void @_ZN2X1IcED1Ev(ptr {{[^,]*}} %this) unnamed_addr44void test_X1() {45  X1<char> i1c;46}47 48namespace PR14825 {49struct Outer {50  template <typename T> struct Inner {51    static int member;52  };53  template <typename T> void Get() {54    int m = Inner<T>::member;55  }56};57 58void test() {59  struct local {};60  Outer o;61  typedef void (Outer::*mptr)();62  mptr method = &Outer::Get<local>;63}64}65