[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