OSDN Git Service

PR c++/9749
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Feb 2003 22:56:06 +0000 (22:56 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Feb 2003 22:56:06 +0000 (22:56 +0000)
* decl.c (grokdeclarator): Do not allow parameters with variably
modified types.

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

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

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

index 960c36d..00be1dd 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 3f22b74..caf3891 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 ed4f626..b015a6e 100644 (file)
@@ -1,5 +1,10 @@
 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
        * g++.dg/template/op1.C: New test.
 
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;
+}