re PR c++/48599 ([C++0x] no diagnostic for invalid use of auto with array declarator)
authorJason Merrill <jason@redhat.com>
Thu, 26 May 2011 02:22:54 +0000 (22:22 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 26 May 2011 02:22:54 +0000 (22:22 -0400)
PR c++/48599
* decl.c (create_array_type_for_decl): Complain about array of auto.

From-SVN: r174257

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

index 06d51594bb8f8c32cc2e9ace4569e5db76ba1292..dad97add6c4ae946f3dd774420bdc33fe6743ac9 100644 (file)
@@ -1,5 +1,8 @@
 2011-05-25  Jason Merrill  <jason@redhat.com>
 
+       PR c++/48599
+       * decl.c (create_array_type_for_decl): Complain about array of auto.
+
        PR c++/44944
        PR c++/49156
        * error.c (dump_template_bindings): Set processing_template_decl
index d53fa26c68a2e1e34a77977c7bee52529f61a4d7..58cab51ab81f5ec452dd7313f9f81d5ad7d23481 100644 (file)
@@ -7974,6 +7974,12 @@ create_array_type_for_decl (tree name, tree type, tree size)
   if (type == error_mark_node || size == error_mark_node)
     return error_mark_node;
 
+  /* 8.3.4/1: If the type of the identifier of D contains the auto
+     type-specifier, the program is ill-formed.  */
+  if (pedantic && type_uses_auto (type))
+    pedwarn (input_location, OPT_pedantic,
+            "declaration of %qD as array of %<auto%>", name);
+
   /* If there are some types which cannot be array elements,
      issue an error-message and return.  */
   switch (TREE_CODE (type))
index 07f4845ee01df5a8d3b11abb33143cca200046b0..bcef9a9df2217da3069f00ae064962c8cf4b6030 100644 (file)
@@ -1,5 +1,7 @@
 2011-05-25  Jason Merrill  <jason@redhat.com>
 
+       * g++.dg/cpp0x/auto24.C: New.
+
        * g++.dg/cpp0x/error4.C: New.
 
        * g++.dg/cpp0x/rv-restrict.C: New.
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto24.C b/gcc/testsuite/g++.dg/cpp0x/auto24.C
new file mode 100644 (file)
index 0000000..b024ad5
--- /dev/null
@@ -0,0 +1,5 @@
+// PR c++/48599
+// { dg-options "-std=c++0x -pedantic-errors" }
+
+int v[1];
+auto (*p)[1] = &v;             // { dg-error "array of .auto" }