re PR c++/56768 ([4.7] ICE in make_decl_rtl, at varasm.c:1147)
authorRichard Biener <rguenther@suse.de>
Tue, 2 Apr 2013 12:23:13 +0000 (12:23 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 2 Apr 2013 12:23:13 +0000 (12:23 +0000)
2013-04-02  Richard Biener  <rguenther@suse.de>

PR middle-end/56768
* g++.dg/torture/pr56768.C: New testcase.

From-SVN: r197349

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/torture/pr56768.C [new file with mode: 0644]

index 7462483891d85e128598d996fd85bed0c95b0677..9b17672746468bd0e9c78733be54f40e114b5313 100644 (file)
@@ -1,3 +1,8 @@
+2013-04-02  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/56768
+       * g++.dg/torture/pr56768.C: New testcase.
+
 2013-04-02  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * obj-c++.dg/try-catch-13.mm: Update per PR56725.
diff --git a/gcc/testsuite/g++.dg/torture/pr56768.C b/gcc/testsuite/g++.dg/torture/pr56768.C
new file mode 100644 (file)
index 0000000..db504c5
--- /dev/null
@@ -0,0 +1,41 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+struct Iter
+{
+  int& operator* ();
+  void operator++ ();
+};
+
+bool operator!= (Iter &, Iter &) { }
+
+struct Container
+{
+  Iter begin () const;
+  Iter end () const;
+};
+
+struct J
+{
+  virtual J *mutable_child ();
+};
+
+struct M
+{
+  M (const Container &);
+  J ns_;
+};
+namespace
+{
+  J MakeNamespace (const Container &src)
+    {
+      J a;
+      J *b = 0;
+      for (const int &c: src)
+       b = b ? b->mutable_child () : &a;
+      return a;
+    }
+}
+M::M (const Container &ns):ns_ (MakeNamespace (ns))
+{
+}