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