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" } +}