From: Nathan Sidwell Date: Mon, 15 Sep 2003 14:48:29 +0000 (+0000) Subject: re PR c++/12184 (ICE with trying to convert an incomplete type) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3afd2e20078216bf8c188d3d95326d92bfd0459f;p=gcc.git re PR c++/12184 (ICE with trying to convert an incomplete type) cp: PR c++/12184 * typeck.c (convert_arguments): Return error_mark_node for an incomplete parameter. Make error message more informative. testsuite: PR c++/12184 * g++.dg/expr/call2.C: New test. From-SVN: r71402 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 374e7e57e66..815a5538bff 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-09-15 Nathan Sidwell + + PR c++/12184 + * typeck.c (convert_arguments): Return error_mark_node for an + incomplete parameter. Make error message more informative. + 2003-09-12 Mark Mitchell PR c++/3907 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f829095a1e1..28ed0bcd232 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5254,12 +5254,14 @@ instantiate_class_template (tree type) if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag)) /* Unfortunately, lookup_template_class sets CLASSTYPE_IMPLICIT_INSTANTIATION for a partial - instantiation (i.e., for the type of a member template - class nested within a template class.) This behavior is - required for maybe_process_partial_specialization to work - correctly, but is not accurate in this case; the TAG is not - an instantiation of anything. (The corresponding - TEMPLATE_DECL is an instantiation, but the TYPE is not.) */ + instantiation (i.e., for the type of a member + template class nested within a template class.) + This behavior is required for + maybe_process_partial_specialization to work + correctly, but is not accurate in this case; + the TAG is not an instantiation of anything. + (The corresponding TEMPLATE_DECL is an + instantiation, but the TYPE is not.) */ CLASSTYPE_USE_TEMPLATE (newtag) = 0; /* Now, we call pushtag to put this NEWTAG into the scope of diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 32ec44b4679..8f1171f8ee1 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -2532,8 +2532,12 @@ convert_arguments (tree typelist, tree values, tree fndecl, int flags) if (!COMPLETE_TYPE_P (complete_type (type))) { - error ("parameter type of called function is incomplete"); - parmval = val; + if (fndecl) + error ("parameter %P of `%D' has incomplete type `%T'", + i, fndecl, type); + else + error ("parameter %P has incomplete type `%T'", i, type); + parmval = error_mark_node; } else { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c9c3b28ff39..82de8cebc1e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-09-15 Nathan Sidwell + + PR c++/12184 + * g++.dg/expr/call2.C: New test. + 2003-09-15 Andreas Jaeger * gcc.dg/Wold-style-definition-1.c: New test. diff --git a/gcc/testsuite/g++.dg/expr/call2.C b/gcc/testsuite/g++.dg/expr/call2.C new file mode 100644 index 00000000000..3b7398a8bf7 --- /dev/null +++ b/gcc/testsuite/g++.dg/expr/call2.C @@ -0,0 +1,14 @@ +// { dg-do compile } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 11 Sep 2003 +// Origin: Wolfgang Bangerth +// PR c++/12184. ICE + +class C; +class D; +bool mm(D); + +void g(C& f) { + mm(f); // { dg-error "parameter" "" } +}