decl.c (create_array_type_for_decl): Add location_t parameter and use it.
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 29 Oct 2018 22:57:39 +0000 (22:57 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 29 Oct 2018 22:57:39 +0000 (22:57 +0000)
/cp
2018-10-29  Paolo Carlini  <paolo.carlini@oracle.com>

* decl.c (create_array_type_for_decl): Add location_t parameter
and use it.
(grokdeclarator): Adjust call.

/testsuite
2018-10-29  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/cpp0x/auto24.C: Test location too.
* g++.dg/cpp0x/auto3.C: Likewise.
* g++.dg/cpp0x/auto42.C: Likewise.
* g++.dg/cpp0x/initlist57.C: Likewise.
* g++.dg/cpp0x/initlist75.C: Likewise.
* g++.dg/cpp0x/initlist80.C: Likewise.
* g++.dg/cpp0x/lambda/lambda-ice13.C: Likewise.
* g++.old-deja/g++.brendan/array-refs.C: Likewise.
* g++.old-deja/g++.bugs/900322_01.C: Likewise.
* g++.old-deja/g++.bugs/900519_07.C: Likewise.
* g++.old-deja/g++.other/typeck1.C: Likewise.

From-SVN: r265608

14 files changed:
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/auto24.C
gcc/testsuite/g++.dg/cpp0x/auto3.C
gcc/testsuite/g++.dg/cpp0x/auto42.C
gcc/testsuite/g++.dg/cpp0x/initlist57.C
gcc/testsuite/g++.dg/cpp0x/initlist75.C
gcc/testsuite/g++.dg/cpp0x/initlist80.C
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice13.C
gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C
gcc/testsuite/g++.old-deja/g++.bugs/900322_01.C
gcc/testsuite/g++.old-deja/g++.bugs/900519_07.C
gcc/testsuite/g++.old-deja/g++.other/typeck1.C

index 6b9574a652730f500c6b496a3c524200eb21e4c5..b1e7f2320437511e62ba2f900c2d0021131723a2 100644 (file)
@@ -1,3 +1,9 @@
+2018-10-29  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * decl.c (create_array_type_for_decl): Add location_t parameter
+       and use it.
+       (grokdeclarator): Adjust call.
+
 2018-10-29  Marek Polacek  <polacek@redhat.com>
 
        PR c++/87594 - constexpr rejects-valid with range-based for.
index 5ebfaaf85e6e24bebf3d16645a72a55473dd8d2c..00e75f0bc7909ffa6f23d58d83ce8219e024f314 100644 (file)
@@ -88,7 +88,7 @@ static void finish_constructor_body (void);
 static void begin_destructor_body (void);
 static void finish_destructor_body (void);
 static void record_key_method_defined (tree);
-static tree create_array_type_for_decl (tree, tree, tree);
+static tree create_array_type_for_decl (tree, tree, tree, location_t);
 static tree get_atexit_node (void);
 static tree get_dso_handle_node (void);
 static tree start_cleanup_fn (void);
@@ -9835,7 +9835,7 @@ get_scope_of_declarator (const cp_declarator *declarator)
    with this type.  */
 
 static tree
-create_array_type_for_decl (tree name, tree type, tree size)
+create_array_type_for_decl (tree name, tree type, tree size, location_t loc)
 {
   tree itype = NULL_TREE;
 
@@ -9848,9 +9848,9 @@ create_array_type_for_decl (tree name, tree type, tree size)
   if (type_uses_auto (type))
     {
       if (name)
-   error ("%qD declared as array of %qT", name, type);
+       error_at (loc, "%qD declared as array of %qT", name, type);
       else
-   error ("creating array of %qT", type);
+       error ("creating array of %qT", type);
       return error_mark_node;
     }
 
@@ -9860,28 +9860,29 @@ create_array_type_for_decl (tree name, tree type, tree size)
     {
     case VOID_TYPE:
       if (name)
-        error ("declaration of %qD as array of void", name);
+       error_at (loc, "declaration of %qD as array of void", name);
       else
         error ("creating array of void");
       return error_mark_node;
 
     case FUNCTION_TYPE:
       if (name)
-        error ("declaration of %qD as array of functions", name);
+       error_at (loc, "declaration of %qD as array of functions", name);
       else
         error ("creating array of functions");
       return error_mark_node;
 
     case REFERENCE_TYPE:
       if (name)
-        error ("declaration of %qD as array of references", name);
+       error_at (loc, "declaration of %qD as array of references", name);
       else
         error ("creating array of references");
       return error_mark_node;
 
     case METHOD_TYPE:
       if (name)
-        error ("declaration of %qD as array of function members", name);
+       error_at (loc, "declaration of %qD as array of function members",
+                 name);
       else
         error ("creating array of function members");
       return error_mark_node;
@@ -9897,9 +9898,9 @@ create_array_type_for_decl (tree name, tree type, tree size)
   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
     {
       if (name)
-       error ("declaration of %qD as multidimensional array must "
-              "have bounds for all dimensions except the first",
-              name);
+       error_at (loc, "declaration of %qD as multidimensional array must "
+                 "have bounds for all dimensions except the first",
+                 name);
       else
        error ("multidimensional array must have bounds for all "
               "dimensions except the first");
@@ -11164,7 +11165,8 @@ grokdeclarator (const cp_declarator *declarator,
        {
        case cdk_array:
          type = create_array_type_for_decl (dname, type,
-                                            declarator->u.array.bounds);
+                                            declarator->u.array.bounds,
+                                            declarator->id_loc);
          if (!valid_array_size_p (input_location, type, dname))
            type = error_mark_node;
 
index c8e9c57e8a529cc052b20801e26dc1af5adde598..85e910f2097c1c9ea21a56c677b25df874aba6b2 100644 (file)
@@ -1,3 +1,17 @@
+2018-10-29  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/cpp0x/auto24.C: Test location too.
+       * g++.dg/cpp0x/auto3.C: Likewise.
+       * g++.dg/cpp0x/auto42.C: Likewise.
+       * g++.dg/cpp0x/initlist57.C: Likewise.
+       * g++.dg/cpp0x/initlist75.C: Likewise.
+       * g++.dg/cpp0x/initlist80.C: Likewise.
+       * g++.dg/cpp0x/lambda/lambda-ice13.C: Likewise.
+       * g++.old-deja/g++.brendan/array-refs.C: Likewise.
+       * g++.old-deja/g++.bugs/900322_01.C: Likewise.
+       * g++.old-deja/g++.bugs/900519_07.C: Likewise.
+       * g++.old-deja/g++.other/typeck1.C: Likewise.
+
 2018-10-29  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
        PR middle-end/87469
index d370cc6f3db5d8df8d9261a45297041b3932c49b..193f92e977a75f1dbad9beb58f682a5c7d4c52d0 100644 (file)
@@ -2,4 +2,4 @@
 // { dg-do compile { target c++11 } }
 
 int v[1];
-auto (*p)[1] = &v;             // { dg-error "array of .auto" }
+auto (*p)[1] = &v;             // { dg-error "8:.p. declared as array of .auto" }
index ed7084b771e39a34eea823fd2b308a9c6777b275..709898db39db962c23cf2f3a80454e619bcb2a32 100644 (file)
@@ -10,7 +10,7 @@ auto x;                               // { dg-error "auto" }
 auto i = 42, j = 42.0;         // { dg-error "auto" }
 
 // New CWG issue
-auto a[2] = { 1, 2 };          // { dg-error "auto|initializer_list" }
+auto a[2] = { 1, 2 };          // { dg-error "6:.a. declared as array of .auto" }
 
 template<class T>
 struct A { };
index fea4c28d84d909be66591a6998b06a5fb2bc26dd..8d15fc96f09595d257e1e3a9023ad7b6901a2670 100644 (file)
@@ -5,5 +5,5 @@
 
 void foo(int i)
 {
-  auto x[1] = { 0 };           // { dg-error "array of .auto" }
+  auto x[1] = { 0 };           // { dg-error "8:.x. declared as array of .auto" }
 }
index 5c59f403d74251b69cdeb0cd7f078cfaeec96f1a..6f662ef03b6679e46b0ec651d4b9b4497166f6af 100644 (file)
@@ -1,7 +1,7 @@
 // PR c++/50054
 // { dg-do compile { target c++11 } }
 
-void g( const int& (a)[1] ) {} // { dg-error "array of references" }
+void g( const int& (a)[1] ) {} // { dg-error "21:declaration of .a. as array of references" }
 
 int main () {
     g( { 1, 2 } );             // { dg-error "initializer list" }
index f185401c20a1dd254f7f4dd2d240d70945fe3745..9a45087c5e45aa19990108c232034ffc3eaf92c6 100644 (file)
@@ -3,4 +3,4 @@
 
 #include <initializer_list>
 
-auto foo[] = {};    // { dg-error "auto|unable to deduce" }
+auto foo[] = {};    // { dg-error "6:.foo. declared as array of .auto" }
index 7947f1f8197bb0b30d2b30f14f93d5e860edfc17..15723be16f8bd689fec6f5bdfe9cb6aad341c691 100644 (file)
@@ -3,4 +3,4 @@
 
 #include <initializer_list>
 
-auto x[2] = {};                        // { dg-error "" }
+auto x[2] = {};                        // { dg-error "6:.x. declared as array of .auto" }
index 4c611ad8ee1e47f5a8c70f633df63a193a5b5501..cbac7e85112d83c8c5145f1dca3134bde4d3adc9 100644 (file)
@@ -10,5 +10,6 @@ void f()
 void g()
 {
   typedef void (X) ();
-  X x[] = { [x](){} };  // { dg-error "array of functions|not declared" }
+  X x[] = { [x](){} };  // { dg-error "5:declaration of .x. as array of functions" }
+  // { dg-error "not declared" "" { target *-*-* } .-1 }
 }
index b834867de3a07c650a1ea6173cd0f081821fa506..e50e9eb7af6753b0ae810dcb47c4eaeb7c7997c4 100644 (file)
@@ -3,4 +3,4 @@
 int a, b;
 
 // declaring an array of references should be illegal
-int & v[ 2] = { a, b};// { dg-error "" } .*
+int & v[ 2] = { a, b};  // { dg-error "7:declaration of .v. as array of references" }
index bd3296ae2cd024321b3e8a9f0daae60037cd5189..e0c4a29c473709c996d09ce15a44d443862d5194 100644 (file)
 
 // keywords: incomplete types, arrays, element types
 
-extern int extern_two_d [] [];         // { dg-error "" } invalid declaration
-int tenative_two_d [] [];              // { dg-error "" } caught by g++
-static int static_two_d [] [];         // { dg-error "" } caught by g++
+extern int extern_two_d [] [];         // { dg-error "12:declaration of .extern_two_d. as multidimensional" } invalid declaration
+int tenative_two_d [] [];              // { dg-error "5:declaration of .tenative_two_d. as multidimensional" } caught by g++
+static int static_two_d [] [];         // { dg-error "12:declaration of .static_two_d. as multidimensional" } caught by g++
 
-int (*pointer_to_two_d)[][];           // { dg-error "" } invalid declaration
+int (*pointer_to_two_d)[][];           // { dg-error "7:declaration of .pointer_to_two_d. as multidimensional" } invalid declaration
 
-void function_0 (int arg [] []) {      // { dg-error "" } invalid declaration
+void function_0 (int arg [] []) {      // { dg-error "22:declaration of .arg. as multidimensional" } invalid declaration
 }
 
 typedef int int_one_d_type [];
-typedef int_one_d_type int_two_d_type[];// { dg-error "" } invalid declaration
+typedef int_one_d_type int_two_d_type[];// { dg-error "24:declaration of .int_two_d_type. as multidimensional" } invalid declaration
 
 struct s;
 
 extern struct s extern_s_array [10];   // OK
-struct s tenative_s_array [10];                // { dg-error "" } object with incomplete type
-static struct s static_s_array [10];   // { dg-error "" } object with incomplete type
-
+struct s tenative_s_array [10];                // { dg-error "10:elements of array .s tenative_s_array \\\[10\\\]. have incomplete type" } object with incomplete type
+// { dg-error "10:storage size" "" { target *-*-* } .-1 }
+static struct s static_s_array [10];   // { dg-error "17:elements of array .s static_s_array \\\[10\\\]. have incomplete type" } object with incomplete type
+// { dg-error "17:storage size" "" { target *-*-* } .-1 }
 struct s (*pointer_to_s_array) [];     // OK
 
 void function_1 (struct s arg []) {    // OK
index 650147ef22a35aa40847ef2e5965a63f372eef64..10e7abd38ec94f9979c5b64b82f2bf7a13bdc3c8 100644 (file)
@@ -11,7 +11,7 @@ int i;
 int j;
 
 typedef int& int_ref;
-typedef int_ref int_ref_array_type[2];         // { dg-error "" } missed
+typedef int_ref int_ref_array_type[2];         // { dg-error "17:declaration of .int_ref_array_type. as array of references" } missed
 
-int& int_ref_array_obj0[2] = { i, j };         // { dg-error "" } missed
-int_ref int_ref_array_obj1[2] = { i, j };      // { dg-error "" } missed
+int& int_ref_array_obj0[2] = { i, j };         // { dg-error "6:declaration of .int_ref_array_obj0. as array of references" } missed
+int_ref int_ref_array_obj1[2] = { i, j };      // { dg-error "9:declaration of .int_ref_array_obj1. as array of references" } missed
index 1dce27397ae9e60007bf83f8526a0776954e120d..d520667b63df2595126f82cc0e1d1d756ac601f7 100644 (file)
@@ -1,7 +1,7 @@
 // { dg-do assemble  }
 
-extern int a[][];   // { dg-error "" } invalid multidimensional array
-extern int b[7][];  // { dg-error "" } invalid multidimensional array
+extern int a[][];   // { dg-error "12:declaration of .a. as multidimensional array" } invalid multidimensional array
+extern int b[7][];  // { dg-error "12:declaration of .b. as multidimensional array" } invalid multidimensional array
 extern int c[][7];  // OK
 
 extern int (*i)[];  // { dg-message "" } previous declaration