xref: /aosp_15_r20/external/clang/test/CodeGenCXX/pr13396.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li foo::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 Li foo::~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 Li void 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