From 15218346beeb55b415d3b5db378b4e70e454535d Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Mon, 8 May 2006 00:26:08 +0000 Subject: [PATCH] re PR c++/27447 (ICE on invalid ptr-to-member-function) PR c++/27447 * decl2.c (build_memfn_type): Skip invalid functions and class types. * g++.dg/other/ptrmem7.C: New test. From-SVN: r113615 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl2.c | 3 +++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/other/ptrmem7.C | 4 ++++ 4 files changed, 17 insertions(+) create mode 100644 gcc/testsuite/g++.dg/other/ptrmem7.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5035ded8afa..a357204e4a6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2006-05-08 Volker Reichelt + + PR c++/27447 + * decl2.c (build_memfn_type): Skip invalid functions and class types. + 2006-05-06 Volker Reichelt PR c++/27427 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index ac85b44eac1..f75c4ab602a 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -114,6 +114,9 @@ build_memfn_type (tree fntype, tree ctype, cp_cv_quals quals) tree raises; int type_quals; + if (fntype == error_mark_node || ctype == error_mark_node) + return error_mark_node; + type_quals = quals & ~TYPE_QUAL_RESTRICT; ctype = cp_build_qualified_type (ctype, type_quals); fntype = build_method_type_directly (ctype, TREE_TYPE (fntype), diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f15d7fcb5c1..0403b741fdf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-05-08 Volker Reichelt + + PR c++/27447 + * g++.dg/other/ptrmem7.C: New test. + 2006-05-07 Volker Reichelt PR target/27421 diff --git a/gcc/testsuite/g++.dg/other/ptrmem7.C b/gcc/testsuite/g++.dg/other/ptrmem7.C new file mode 100644 index 00000000000..e7722b8dece --- /dev/null +++ b/gcc/testsuite/g++.dg/other/ptrmem7.C @@ -0,0 +1,4 @@ +// PR c++/27447 +// { dg-do compile } + +void (A::* p)(); // { dg-error "declared|token" } -- 2.30.2