[llvm-commits] [test-suite] r117325 - /test-suite/trunk/SingleSource/UnitTests/stmtexpr.cpp
Fariborz Jahanian
fjahanian at apple.com
Mon Oct 25 16:30:25 PDT 2010
Author: fjahanian
Date: Mon Oct 25 18:30:25 2010
New Revision: 117325
URL: http://llvm.org/viewvc/llvm-project?rev=117325&view=rev
Log:
Test for statement expressions with non-trivial
copy constructors. //rdar: //8540501.
Added:
test-suite/trunk/SingleSource/UnitTests/stmtexpr.cpp
Added: test-suite/trunk/SingleSource/UnitTests/stmtexpr.cpp
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/UnitTests/stmtexpr.cpp?rev=117325&view=auto
==============================================================================
--- test-suite/trunk/SingleSource/UnitTests/stmtexpr.cpp (added)
+++ test-suite/trunk/SingleSource/UnitTests/stmtexpr.cpp Mon Oct 25 18:30:25 2010
@@ -0,0 +1,64 @@
+// rdar: //8540501
+extern "C" int printf(...);
+extern "C" void abort();
+
+struct A
+{
+ int i;
+ A (int j) : i(j) {printf("this = %p A(%d)\n", this, j);}
+ A (const A &j) : i(j.i) {printf("this = %p const A&(%d)\n", this, i);}
+ A& operator= (const A &j) { i = j.i; abort(); return *this; }
+ ~A() { printf("this = %p ~A(%d)\n", this, i); }
+};
+
+struct B
+{
+ int i;
+ B (const A& a) { i = a.i; }
+ B() {printf("this = %p B()\n", this);}
+ B (const B &j) : i(j.i) {printf("this = %p const B&(%d)\n", this, i);}
+ ~B() { printf("this = %p ~B(%d)\n", this, i); }
+};
+
+A foo(int j)
+{
+ return ({ j ? A(1) : A(0); });
+}
+
+
+void foo2()
+{
+ A b = ({ A a(1); A a1(2); A a2(3); a1; a2; a; });
+ if (b.i != 1)
+ abort();
+ A c = ({ A a(1); A a1(2); A a2(3); a1; a2; a; A a3(4); a2; a3; });
+ if (c.i != 4)
+ abort();
+}
+
+void foo3()
+{
+ const A &b = ({ A a(1); a; });
+ if (b.i != 1)
+ abort();
+}
+
+void foo4()
+{
+// CHECK: call void @_ZN1AC1Ei
+// CHECK: call void @_ZN1AC1ERKS_
+// CHECK: call void @_ZN1AD1Ev
+// CHECK: call void @_ZN1BC1ERK1A
+// CHECK: call void @_ZN1AD1Ev
+ const B &b = ({ A a(1); a; });
+ if (b.i != 1)
+ abort();
+}
+
+int main()
+{
+ foo2();
+ foo3();
+ foo4();
+ return foo(1).i-1;
+}
More information about the llvm-commits
mailing list