init9.C: test cross initialization of non-POD types
authorAlexandre Oliva <oliva@dcc.unicamp.br>
Thu, 29 Oct 1998 13:44:56 +0000 (13:44 +0000)
committerAlexandre Oliva <oliva@gcc.gnu.org>
Thu, 29 Oct 1998 13:44:56 +0000 (13:44 +0000)
* g++.old-deja/g++.other/init9.C: test cross initialization of
non-POD types

From-SVN: r23428

gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.other/init9.C [new file with mode: 0644]

index 5a7c4c4f3ab29ea0491ee7024a52b0f913800110..d0e2a39ab9e29adc0ce52f0480c29b6feac76c60 100644 (file)
@@ -1,3 +1,8 @@
+1998-10-29  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+       * g++.old-deja/g++.other/init9.C: test cross initialization of
+       non-POD types
+
 1998-10-27  Alexandre Oliva  <oliva@dcc.unicamp.br>
 
        * lib/old-dejagnu.exp (old-dejagnu): document `Additional sources'
diff --git a/gcc/testsuite/g++.old-deja/g++.other/init9.C b/gcc/testsuite/g++.old-deja/g++.other/init9.C
new file mode 100644 (file)
index 0000000..c9ea3a5
--- /dev/null
@@ -0,0 +1,40 @@
+// Build don't link:
+
+// Based on a testcase submitted by Tudor Hulubei <tudor@cs.unh.edu>
+
+// X is not a POD because it has a user-defined destructor.
+// Therefore, we can't cross its initialization.
+
+// vector<int> is not even an aggregate; nevertheless, no error is
+// reported...
+
+struct A {
+  A() {}
+};
+
+void a() {
+  goto bar; // ERROR - jump from here
+  A x; // ERROR - jump crosses initialization
+ bar: // ERROR - jump to here
+  ;
+}
+
+struct X {
+  ~X() {}
+};
+
+void b() {
+  goto bar; // ERROR - jump from here - XFAIL *-*-*
+  X x; // ERROR - jump crosses initialization - XFAIL *-*-*
+ bar: // ERROR - jump to here - XFAIL *-*-*
+  ;
+}
+
+#include <vector>
+
+void c() {
+  goto bar; // ERROR - jump from here - XFAIL *-*-*
+  vector<int> x; // ERROR - jump crosses initialization - XFAIL *-*-*
+ bar: // ERROR - jump to here - XFAIL *-*-*
+  ;
+}