aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2003-09-15 14:48:29 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2003-09-15 14:48:29 +0000
commit3afd2e20078216bf8c188d3d95326d92bfd0459f (patch)
tree2561c593f7768837b808e9a8736bf10674dbc17c /gcc
parent2352184a1f8bf7d868be39e39c6dea68d8aa33a4 (diff)
downloadgcc-3afd2e20078216bf8c188d3d95326d92bfd0459f.zip
gcc-3afd2e20078216bf8c188d3d95326d92bfd0459f.tar.gz
gcc-3afd2e20078216bf8c188d3d95326d92bfd0459f.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c14
-rw-r--r--gcc/cp/typeck.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/expr/call2.C14
5 files changed, 39 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 374e7e5..815a553 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2003-09-15 Nathan Sidwell <nathan@codesourcery.com>
+
+ 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 <mark@codesourcery.com>
PR c++/3907
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index f829095..28ed0bc 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 32ec44b..8f1171f 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 c9c3b28..82de8ce 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-09-15 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/12184
+ * g++.dg/expr/call2.C: New test.
+
2003-09-15 Andreas Jaeger <aj@suse.de>
* 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 0000000..3b7398a
--- /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 <nathan@codesourcery.com>
+// Origin: Wolfgang Bangerth <bangerth@dealii.org>
+// PR c++/12184. ICE
+
+class C;
+class D;
+bool mm(D);
+
+void g(C& f) {
+ mm(f); // { dg-error "parameter" "" }
+}