aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-06-03 10:11:10 -0400
committerJason Merrill <jason@gcc.gnu.org>2014-06-03 10:11:10 -0400
commit010bc40a6cfa58463775350be648271155683361 (patch)
tree04712dfa416f34a04bd25dcf684fab69478e012b
parent616abc647c1fa14fabdbe708c4adcf88135916ef (diff)
downloadgcc-010bc40a6cfa58463775350be648271155683361.zip
gcc-010bc40a6cfa58463775350be648271155683361.tar.gz
gcc-010bc40a6cfa58463775350be648271155683361.tar.bz2
re PR c++/60848 (Crash while experimenting with c++-0x initializer lists)
PR c++/60848 * call.c (is_std_init_list): Check CLASSTYPE_TEMPLATE_INFO. From-SVN: r211179
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/call.c1
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist85.C14
3 files changed, 20 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index fae8da1..2ed9f15 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2014-06-03 Jason Merrill <jason@redhat.com>
+
+ PR c++/60848
+ * call.c (is_std_init_list): Check CLASSTYPE_TEMPLATE_INFO.
+
2014-06-02 Jason Merrill <jason@redhat.com>
PR c++/61046
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 77aa8ca..b60bab7 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -9675,6 +9675,7 @@ is_std_init_list (tree type)
type = TYPE_MAIN_VARIANT (type);
return (CLASS_TYPE_P (type)
&& CP_TYPE_CONTEXT (type) == std_node
+ && CLASSTYPE_TEMPLATE_INFO (type)
&& strcmp (TYPE_NAME_STRING (type), "initializer_list") == 0);
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist85.C b/gcc/testsuite/g++.dg/cpp0x/initlist85.C
new file mode 100644
index 0000000..0eb8e26
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist85.C
@@ -0,0 +1,14 @@
+// PR c++/60848
+// { dg-do compile { target c++11 } }
+
+namespace std
+{
+ struct initializer_list {};
+}
+
+void foo(std::initializer_list &);
+
+void f()
+{
+ foo({1, 2}); // { dg-error "" }
+}