re PR c++/9749 (ICE in write_expression on invalid function prototype)
authorMark Mitchell <mark@codesourcery.com>
Fri, 21 Feb 2003 22:56:06 +0000 (22:56 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Fri, 21 Feb 2003 22:56:06 +0000 (22:56 +0000)
PR c++/9749
* decl.c (grokdeclarator): Do not allow parameters with variably
modified types.

PR c++/9749
* g++.dg/parse/varmod1.C: New test.

From-SVN: r63250

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

index 960c36dada614f4752f4f04ad1d499a5a67e28f8..00be1dd8f3083cb9321784f1a91675ee7e0971c1 100644 (file)
@@ -1,3 +1,9 @@
+2003-02-21  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/9749
+       * decl.c (grokdeclarator): Do not allow parameters with variably
+       modified types.
+
 2003-02-21  Nathan Sidwell  <nathan@codesourcery.com>
 
        * search.c (bfs_walk_grow): Remove. Fold into ...
index 3f22b748618b2be598dba8214669093cf4d3f5c1..caf389150d60a6789148d27653f52df98f2a03fb 100644 (file)
@@ -11085,11 +11085,14 @@ grokdeclarator (tree declarator,
       type = error_mark_node;
     }
 
-  if (decl_context == FIELD 
+  if ((decl_context == FIELD || decl_context == PARM)
       && !processing_template_decl 
       && variably_modified_type_p (type))
     {
-      error ("data member may not have variably modified type `%T'", type);
+      if (decl_context == FIELD)
+       error ("data member may not have variably modified type `%T'", type);
+      else
+       error ("parameter may not have variably modified type `%T'", type);
       type = error_mark_node;
     }
 
index ed4f626fb2d3d35f3d713d4b197c299958d18f83..b015a6e9befec10ec83495bd7e00bbb5d4b091d9 100644 (file)
@@ -1,3 +1,8 @@
+2003-02-21  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/9749
+       * g++.dg/parse/varmod1.C: New test.
+
 2003-02-21  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/9727
diff --git a/gcc/testsuite/g++.dg/parse/varmod1.C b/gcc/testsuite/g++.dg/parse/varmod1.C
new file mode 100644 (file)
index 0000000..bf64507
--- /dev/null
@@ -0,0 +1,7 @@
+int main(int argc, char** argv) {
+  int nx = 2;
+  void theerror(double a[][nx+1]); // { dg-error "" }
+  double** a;
+  theerror(a); // { dg-error "" }
+  return 0;
+}