re PR c++/57947 (internal compiler error: Segmentation fault using extended initializ...
authorPaolo Carlini <paolo.carlini@oracle.com>
Tue, 30 Jul 2013 16:48:52 +0000 (16:48 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 30 Jul 2013 16:48:52 +0000 (16:48 +0000)
/cp
2013-07-30  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/57947
* call.c (is_std_init_list): Return false if cxx_dialect == cxx98.

/testsuite
2013-07-30  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/57947
* g++.dg/parse/crash63.C: New.

From-SVN: r201344

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/crash63.C [new file with mode: 0644]

index 72acda1cba8602832456e4b37f6a7bfb43711918..b0c9dcd6448bf8beb1e00d2bdeecd8984cc079a5 100644 (file)
@@ -1,3 +1,8 @@
+2013-07-30  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/57947
+       * call.c (is_std_init_list): Return false if cxx_dialect == cxx98.
+
 2013-07-29  Jason Merrill  <jason@redhat.com>
 
        PR c++/57901
index 0574a9c15274cb6faa57166be0e3321fb39d11f3..56346063f3db7ce2dc2f4a991b191605a0beb35a 100644 (file)
@@ -9396,6 +9396,8 @@ is_std_init_list (tree type)
   /* Look through typedefs.  */
   if (!TYPE_P (type))
     return false;
+  if (cxx_dialect == cxx98)
+    return false;
   type = TYPE_MAIN_VARIANT (type);
   return (CLASS_TYPE_P (type)
          && CP_TYPE_CONTEXT (type) == std_node
index 734d78a4f30b86799166d16f9dda40398034415d..dd8f7ea65a8726129c870e289d94e0b1a527407b 100644 (file)
@@ -1,3 +1,8 @@
+2013-07-30  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/57947
+       * g++.dg/parse/crash63.C: New.
+
 2013-07-30  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/57530
diff --git a/gcc/testsuite/g++.dg/parse/crash63.C b/gcc/testsuite/g++.dg/parse/crash63.C
new file mode 100644 (file)
index 0000000..c7189c2
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/57947
+// { dg-options "-std=c++98" }
+
+namespace std
+{
+  template <class E> class initializer_list {};
+  template <int N> struct D { D(initializer_list<int>) {} };
+  D<0> d {1, 2, 3};  // { dg-error "constructor|no matching" }
+  // { dg-warning "initializer list" "" { target *-*-* } 8 }
+}