xref: /llvm-project/clang/test/CodeGenCXX/constructor-conversion.cpp (revision d22e26860d74df7980e7b708221973efe12a4661)
1*d22e2686SRafael Espindola // RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++11 -emit-llvm %s -o - | \
2*d22e2686SRafael Espindola // RUN: FileCheck %s
3*d22e2686SRafael Espindola // RUN: %clang_cc1 -triple i386-apple-darwin -std=c++11 -emit-llvm %s -o - | \
4*d22e2686SRafael Espindola // RUN: FileCheck %s
52fee79a9SFariborz Jahanian 
62fee79a9SFariborz Jahanian extern "C" int printf(...);
72fee79a9SFariborz Jahanian 
82fee79a9SFariborz Jahanian class X { // ...
92fee79a9SFariborz Jahanian public:
X(int)102fee79a9SFariborz Jahanian   X(int) : iX(2), fX(2.3) , name("HELLO\n") {  }
112fee79a9SFariborz Jahanian 
X(const char * arg,int ix=0)122fee79a9SFariborz Jahanian   X(const char* arg, int ix=0) { iX = ix; fX = 6.0; name = arg+ix; }
X()132fee79a9SFariborz Jahanian   X(): iX(100), fX(1.2) {}
142fee79a9SFariborz Jahanian   int iX;
152fee79a9SFariborz Jahanian   float fX;
162fee79a9SFariborz Jahanian   const char *name;
pr(void)172fee79a9SFariborz Jahanian   void pr(void) {
182fee79a9SFariborz Jahanian     printf("iX = %d  fX = %f name = %s\n", iX, fX, name);
192fee79a9SFariborz Jahanian   }
202fee79a9SFariborz Jahanian };
212fee79a9SFariborz Jahanian 
g(X arg)222fee79a9SFariborz Jahanian void g(X arg) {
232fee79a9SFariborz Jahanian   arg.pr();
242fee79a9SFariborz Jahanian }
252fee79a9SFariborz Jahanian 
f(X arg)262fee79a9SFariborz Jahanian void f(X arg) {
272fee79a9SFariborz Jahanian   X a = 1;        // a = X(1)
282fee79a9SFariborz Jahanian 
292fee79a9SFariborz Jahanian   a.pr();
302fee79a9SFariborz Jahanian 
312fee79a9SFariborz Jahanian   X b = "Jessie"; //  b=X("Jessie",0)
322fee79a9SFariborz Jahanian 
332fee79a9SFariborz Jahanian   b.pr();
342fee79a9SFariborz Jahanian 
352fee79a9SFariborz Jahanian 
362fee79a9SFariborz Jahanian   a = 2;          // a = X(2)
372fee79a9SFariborz Jahanian 
382fee79a9SFariborz Jahanian   a.pr();
392fee79a9SFariborz Jahanian }
402fee79a9SFariborz Jahanian 
412fee79a9SFariborz Jahanian 
main()4211289f42SMike Stump int main() {
432fee79a9SFariborz Jahanian   X x;
442fee79a9SFariborz Jahanian   f(x);
452fee79a9SFariborz Jahanian   g(3);           // g(X(3))
462fee79a9SFariborz Jahanian }
472fee79a9SFariborz Jahanian 
48*d22e2686SRafael Espindola // CHECK: call void @_ZN1XC1Ei
49*d22e2686SRafael Espindola // CHECK: call void @_ZN1XC1EPKci
50*d22e2686SRafael Espindola // CHECK: call void @_ZN1XC1Ev
51