1*67e74705SXin Li // RUN: %clang_cc1 %s -triple i686-pc-win32 -std=c++11 -fms-compatibility -emit-llvm -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li template <typename> 4*67e74705SXin Li struct S { 5*67e74705SXin Li static const int x[]; 6*67e74705SXin Li }; 7*67e74705SXin Li 8*67e74705SXin Li template <> 9*67e74705SXin Li const int S<char>::x[] = {1}; 10*67e74705SXin Li 11*67e74705SXin Li // CHECK-LABEL: @"\01?x@?$S@D@@2QBHB" = weak_odr constant [1 x i32] [i32 1], comdat 12*67e74705SXin Li 13*67e74705SXin Li template<class T> destroy(T * p)14*67e74705SXin Livoid destroy(T *p) { 15*67e74705SXin Li p->~T(); 16*67e74705SXin Li } 17*67e74705SXin Li f()18*67e74705SXin Liextern "C" void f() { 19*67e74705SXin Li int a; 20*67e74705SXin Li destroy((void*)&a); 21*67e74705SXin Li } 22*67e74705SXin Li 23*67e74705SXin Li // CHECK-LABEL: define void @f() 24*67e74705SXin Li // CHECK: call void @"\01??$destroy@X@@YAXPAX@Z" 25*67e74705SXin Li // CHECK: ret void 26*67e74705SXin Li 27*67e74705SXin Li // CHECK-LABEL: define linkonce_odr void @"\01??$destroy@X@@YAXPAX@Z"(i8* %p) 28*67e74705SXin Li // The pseudo-dtor expr should not generate calls to anything. 29*67e74705SXin Li // CHECK-NOT: call 30*67e74705SXin Li // CHECK-NOT: invoke 31*67e74705SXin Li // CHECK: ret void 32