1 // RUN: %clang_cc1 -triple i686-pc-linux-gnu %s -emit-llvm -o - | FileCheck %s 2 struct foo { 3 template<typename T> 4 __attribute__ ((regparm (3))) foo(T x) {} 5 __attribute__ ((regparm (3))) foo(); 6 __attribute__ ((regparm (3))) ~foo(); 7 }; 8 9 foo::foo() { 10 // CHECK-LABEL: define void @_ZN3fooC2Ev(%struct.foo* inreg %this) 11 // CHECK-LABEL: define void @_ZN3fooC1Ev(%struct.foo* inreg %this) 12 } 13 14 foo::~foo() { 15 // CHECK-LABEL: define void @_ZN3fooD2Ev(%struct.foo* inreg %this) 16 // CHECK-LABEL: define void @_ZN3fooD1Ev(%struct.foo* inreg %this) 17 } 18 19 void dummy() { 20 // FIXME: how can we explicitly instantiate a template constructor? Gcc and 21 // older clangs accept: 22 // template foo::foo(int x); 23 foo x(10); 24 // CHECK-LABEL: define linkonce_odr void @_ZN3fooC1IiEET_(%struct.foo* inreg %this, i32 inreg %x) 25 // CHECK-LABEL: define linkonce_odr void @_ZN3fooC2IiEET_(%struct.foo* inreg %this, i32 inreg %x) 26 } 27