From: Volker Reichelt Date: Sat, 6 May 2006 20:40:23 +0000 (+0000) Subject: re PR c++/27427 (ICE with invalid template parameter) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b166a559ed96aaf211a6f952d60703c8c6325161;p=gcc.git re PR c++/27427 (ICE with invalid template parameter) PR c++/27427 * pt.c (convert_nontype_argument): Return early on invalid arguments. * g++.dg/template/incomplete2.C: New test. From-SVN: r113582 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4f460a37e86..5035ded8afa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2006-05-06 Volker Reichelt + PR c++/27427 + * pt.c (convert_nontype_argument): Return early on invalid arguments. + * pt.c (process_template_parm): Remove superfluous temporary. PR c++/27430 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index c7d94f1a7ba..4d34da477dd 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -3457,6 +3457,8 @@ convert_nontype_argument (tree type, tree expr) instantiated -- but here we need the resolved form so that we can convert the argument. */ expr = fold_non_dependent_expr (expr); + if (error_operand_p (expr)) + return error_mark_node; expr_type = TREE_TYPE (expr); /* HACK: Due to double coercion, we can get a diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3e6e72511a1..63e386943b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-05-06 Volker Reichelt + + PR c++/27427 + * g++.dg/template/incomplete2.C: New test. + 2006-05-06 Richard Guenther PR tree-optimization/27151 diff --git a/gcc/testsuite/g++.dg/template/incomplete2.C b/gcc/testsuite/g++.dg/template/incomplete2.C new file mode 100644 index 00000000000..23d393e99df --- /dev/null +++ b/gcc/testsuite/g++.dg/template/incomplete2.C @@ -0,0 +1,13 @@ +// PR c++/27427 +// { dg-do compile } + +struct A; + +template void foo(); + +A a; // { dg-error "incomplete type" } + +void bar() +{ + foo(); // { dg-error "no matching function" } +}