aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2010-07-02 10:13:21 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2010-07-02 10:13:21 +0000
commitbaf7c318bbcad3acee65f8400c34665b9345f09a (patch)
tree1aac36b57a2abb64d87c7da60dabbe364f2c1999
parent49ea7a0ef9fec0eecb2eb9ed60bfdc5630f23ad8 (diff)
downloadgcc-baf7c318bbcad3acee65f8400c34665b9345f09a.zip
gcc-baf7c318bbcad3acee65f8400c34665b9345f09a.tar.gz
gcc-baf7c318bbcad3acee65f8400c34665b9345f09a.tar.bz2
re PR c++/44039 (ICE: Segmentation fault on error recovery)
/cp 2010-07-02 Paolo Carlini <paolo.carlini@oracle.com> PR c++/44039 * pt.c (tsubst_baselink): Return error_mark_node if lookup_fnfields returns NULL_TREE. /testsuite 2010-07-02 Paolo Carlini <paolo.carlini@oracle.com> PR c++/44039 * g++.dg/template/crash101.C: New. From-SVN: r161698
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/crash101.C12
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 27e7f7a..3b2764d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2010-07-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/44039
+ * pt.c (tsubst_baselink): Return error_mark_node if lookup_fnfields
+ returns NULL_TREE.
+
2010-07-01 Richard Guenther <rguenther@suse.de>
* cp-gimplify.c (cp_gimplify_expr): Open-code the rhs
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 09d077a..79142b9 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -10737,6 +10737,8 @@ tsubst_baselink (tree baselink, tree object_type,
if (IDENTIFIER_TYPENAME_P (name))
name = mangle_conv_op_name_for_type (optype);
baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
+ if (!baselink)
+ return error_mark_node;
/* If lookup found a single function, mark it as used at this
point. (If it lookup found multiple functions the one selected
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b4dc10b..c1a291d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-07-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/44039
+ * g++.dg/template/crash101.C: New.
+
2010-07-02 Iain Sandoe <iains@gcc.gnu.org>
* obj-c++.dg/cxx-ivars-3.mm: Make the test require OSX <= 10.4.
diff --git a/gcc/testsuite/g++.dg/template/crash101.C b/gcc/testsuite/g++.dg/template/crash101.C
new file mode 100644
index 0000000..38059fc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/crash101.C
@@ -0,0 +1,12 @@
+// PR c++/44039
+
+struct locale { };
+
+template<class charT>
+ void
+ foo()
+ { locale::locale(); } // // { dg-error "cannot call|function-style" }
+
+void
+bar()
+{ foo<char>(); }