OSDN Git Service

PR c++/23089
authorreichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Aug 2005 08:37:17 +0000 (08:37 +0000)
committerreichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Aug 2005 08:37:17 +0000 (08:37 +0000)
* decl.c (require_complete_types_for_parms): Mark incomplete types
as invalid.

* g++.dg/other/incomplete1.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103336 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/incomplete1.C [new file with mode: 0644]

index bb64606..765ce9c 100644 (file)
@@ -1,3 +1,9 @@
+2005-08-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/23089
+       * decl.c (require_complete_types_for_parms): Mark incomplete types
+       as invalid.
+
 2005-08-19  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        * parser.c (cp_parser_nth_token_starts_template_argument_list_p):
index eb212c2..9929eb6 100644 (file)
@@ -8305,14 +8305,16 @@ require_complete_types_for_parms (tree parms)
     {
       if (dependent_type_p (TREE_TYPE (parms)))
        continue;
-      if (VOID_TYPE_P (TREE_TYPE (parms)))
-       /* grokparms will have already issued an error.  */
-       TREE_TYPE (parms) = error_mark_node;
-      else if (complete_type_or_else (TREE_TYPE (parms), parms))
+      if (!VOID_TYPE_P (TREE_TYPE (parms))
+         && complete_type_or_else (TREE_TYPE (parms), parms))
        {
          relayout_decl (parms);
          DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
        }
+      else
+       /* grokparms or complete_type_or_else will have already issued
+          an error.  */
+       TREE_TYPE (parms) = error_mark_node;
     }
 }
 
index 518c6a0..5d6a682 100644 (file)
@@ -1,3 +1,8 @@
+2005-08-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/23089
+       * g++.dg/other/incomplete1.C: New test.
+
 2005-08-22  Ira Rosen  <irar@il.ibm.com>   
 
        * gcc.dg/vect/vect-22.c: Add test for float. All four loops
diff --git a/gcc/testsuite/g++.dg/other/incomplete1.C b/gcc/testsuite/g++.dg/other/incomplete1.C
new file mode 100644 (file)
index 0000000..cb7970f
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/23089
+// Origin: Flash Sheridan  <flash@pobox.com>
+// ICE on incomplete type
+// { dg-do compile }
+// { dg-options "-O" }
+
+void foo(struct A) {} // { dg-error "incomplete type|forward declaration" }