decl.c (maybe_deduce_size_from_array_init): Use DECL_SOURCE_LOCATION in error_at.
authorPaolo Carlini <paolo.carlini@oracle.com>
Wed, 8 Jun 2016 19:31:55 +0000 (19:31 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 8 Jun 2016 19:31:55 +0000 (19:31 +0000)
/cp
2016-06-08  Paolo Carlini  <paolo.carlini@oracle.com>

* decl.c (maybe_deduce_size_from_array_init): Use
DECL_SOURCE_LOCATION in error_at.
(layout_var_decl): Likewise.
(check_array_initializer): Likewise.
(check_initializer): Likewise.
(duplicate_decls, check_elaborated_type_specifier): Tidy.

/testsuite
2016-06-08  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/init/array42.C: New.
* g++.dg/init/array43.C: Likewise.
* g++.dg/init/array44.C: Likewise.
* g++.dg/init/array45.C: Likewise.
* g++.dg/cpp0x/constexpr-ice10.C: Test column number too.
* g++.dg/cpp0x/constexpr-incomplete1.C: Likewise.
* g++.dg/cpp1y/auto-fn27.C: Likewise.
* g++.dg/gomp/pr35751.C: Likewise.
* g++.dg/init/array23.C: Likewise.
* g++.dg/init/brace2.C: Likewise.
* g++.dg/init/brace6.C: Likewise.

From-SVN: r237240

14 files changed:
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/constexpr-ice10.C
gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C
gcc/testsuite/g++.dg/cpp1y/auto-fn27.C
gcc/testsuite/g++.dg/gomp/pr35751.C
gcc/testsuite/g++.dg/init/array23.C
gcc/testsuite/g++.dg/init/array42.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/array43.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/array44.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/array45.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/brace2.C
gcc/testsuite/g++.dg/init/brace6.C

index 4162e20ded7565b70575de474ee067aa0fe45921..54c838bfeaa340865d7cc0ca5aa2925fed86b487 100644 (file)
@@ -1,3 +1,12 @@
+2016-06-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * decl.c (maybe_deduce_size_from_array_init): Use
+       DECL_SOURCE_LOCATION in error_at.
+       (layout_var_decl): Likewise.
+       (check_array_initializer): Likewise.
+       (check_initializer): Likewise.
+       (duplicate_decls, check_elaborated_type_specifier): Tidy.
+
 2016-06-08  Martin Sebor  <msebor@redhat.com>
            Jakub Jelinek  <jakub@redhat.com>
 
index 3328e7158aa4bd95e718f891aaa08ab4d5b51c70..ca36171d4f5b39fd2931964fdd58f62eedc29766 100644 (file)
@@ -1393,7 +1393,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
     {
       if (DECL_INITIAL (olddecl))
        inform (DECL_SOURCE_LOCATION (olddecl),
-               "previous definition of %q+D was here", olddecl);
+               "previous definition of %qD was here", olddecl);
       else
        inform (DECL_SOURCE_LOCATION (olddecl),
                "previous declaration of %qD was here", olddecl);
@@ -5266,13 +5266,16 @@ maybe_deduce_size_from_array_init (tree decl, tree init)
                                            do_default);
          if (failure == 1)
            {
-             error ("initializer fails to determine size of %qD", decl);
+             error_at (EXPR_LOC_OR_LOC (initializer,
+                                        DECL_SOURCE_LOCATION (decl)),
+                       "initializer fails to determine size of %qD", decl);
            }
          else if (failure == 2)
            {
              if (do_default)
                {
-                 error ("array size missing in %qD", decl);
+                 error_at (DECL_SOURCE_LOCATION (decl),
+                           "array size missing in %qD", decl);
                }
              /* If a `static' var's size isn't known, make it extern as
                 well as static, so it does not get allocated.  If it's not
@@ -5283,7 +5286,8 @@ maybe_deduce_size_from_array_init (tree decl, tree init)
            }
          else if (failure == 3)
            {
-             error ("zero-size array %qD", decl);
+             error_at (DECL_SOURCE_LOCATION (decl),
+                       "zero-size array %qD", decl);
            }
        }
 
@@ -5322,7 +5326,8 @@ layout_var_decl (tree decl)
       /* An automatic variable with an incomplete type: that is an error.
         Don't talk about array types here, since we took care of that
         message in grokdeclarator.  */
-      error ("storage size of %qD isn%'t known", decl);
+      error_at (DECL_SOURCE_LOCATION (decl),
+               "storage size of %qD isn%'t known", decl);
       TREE_TYPE (decl) = error_mark_node;
     }
 #if 0
@@ -5345,7 +5350,8 @@ layout_var_decl (tree decl)
        constant_expression_warning (DECL_SIZE (decl));
       else
        {
-         error ("storage size of %qD isn%'t constant", decl);
+         error_at (DECL_SOURCE_LOCATION (decl),
+                   "storage size of %qD isn%'t constant", decl);
          TREE_TYPE (decl) = error_mark_node;
        }
     }
@@ -5954,7 +5960,8 @@ check_array_initializer (tree decl, tree type, tree init)
   if (!COMPLETE_TYPE_P (complete_type (element_type)))
     {
       if (decl)
-       error ("elements of array %q#D have incomplete type", decl);
+       error_at (DECL_SOURCE_LOCATION (decl),
+                 "elements of array %q#D have incomplete type", decl);
       else
        error ("elements of array %q#T have incomplete type", type);
       return true;
@@ -6018,7 +6025,8 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
     }
   else if (!COMPLETE_TYPE_P (type))
     {
-      error ("%q#D has incomplete type", decl);
+      error_at (DECL_SOURCE_LOCATION (decl),
+               "%q#D has incomplete type", decl);
       TREE_TYPE (decl) = error_mark_node;
       return NULL_TREE;
     }
@@ -6038,8 +6046,9 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
            }
          else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
            {
-             error ("scalar object %qD requires one element in initializer",
-                    decl);
+             error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
+                       "scalar object %qD requires one element in "
+                       "initializer", decl);
              TREE_TYPE (decl) = error_mark_node;
              return NULL_TREE;
            }
@@ -6081,9 +6090,10 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
            {
              /* Don't reshape if the class has constructors.  */
              if (cxx_dialect == cxx98)
-               error ("in C++98 %qD must be initialized by constructor, "
-                      "not by %<{...}%>",
-                      decl);
+               error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
+                         "in C++98 %qD must be initialized by "
+                         "constructor, not by %<{...}%>",
+                         decl);
            }
          else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
            {
@@ -6175,8 +6185,11 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
              && DECL_INITIAL (decl)
              && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
              && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
-           warning (0, "array %qD initialized by parenthesized string literal %qE",
-                    decl, DECL_INITIAL (decl));
+           warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
+                                        DECL_SOURCE_LOCATION (decl)),
+                       0, "array %qD initialized by parenthesized "
+                       "string literal %qE",
+                       decl, DECL_INITIAL (decl));
          init = NULL;
        }
     }
@@ -12528,14 +12541,14 @@ check_elaborated_type_specifier (enum tag_types tag_code,
           && tag_code != typename_type)
     {
       error ("%qT referred to as %qs", type, tag_name (tag_code));
-      inform (input_location, "%q+T has a previous declaration here", type);
+      inform (location_of (type), "%qT has a previous declaration here", type);
       return error_mark_node;
     }
   else if (TREE_CODE (type) != ENUMERAL_TYPE
           && tag_code == enum_type)
     {
       error ("%qT referred to as enum", type);
-      inform (input_location, "%q+T has a previous declaration here", type);
+      inform (location_of (type), "%qT has a previous declaration here", type);
       return error_mark_node;
     }
   else if (!allow_template_p
index cb704589debb9b01a63d3eeb669f6a6dfc291912..ab6395e905184ccac8e1c8be2f08ca235310f10f 100644 (file)
@@ -1,3 +1,17 @@
+2016-06-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/init/array42.C: New.
+       * g++.dg/init/array43.C: Likewise.
+       * g++.dg/init/array44.C: Likewise.
+       * g++.dg/init/array45.C: Likewise.
+       * g++.dg/cpp0x/constexpr-ice10.C: Test column number too.
+       * g++.dg/cpp0x/constexpr-incomplete1.C: Likewise.
+       * g++.dg/cpp1y/auto-fn27.C: Likewise.
+       * g++.dg/gomp/pr35751.C: Likewise.
+       * g++.dg/init/array23.C: Likewise.
+       * g++.dg/init/brace2.C: Likewise.
+       * g++.dg/init/brace6.C: Likewise.
+
 2016-06-08  Martin Sebor  <msebor@redhat.com>
            Jakub Jelinek  <jakub@redhat.com>
 
index f6fc80cdc7034b524519debe7f9200740b58ff4d..51612737847315d75797e5d2bcaaed1f067e4e56 100644 (file)
@@ -4,5 +4,5 @@
 struct A
 {
   constexpr A() {}
-  static constexpr A a[2] = {};  // { dg-error "incomplete" }
+  static constexpr A a[2] = {};  // { dg-error "22:elements of array 'constexpr const A A::a \\\[2\\\]' have incomplete type" }
 };
index 514cca59c33208a12fca62993686ddb560422039..7b0d83e608d8b9d5687390fe0e4b8dae66496893 100644 (file)
@@ -2,6 +2,6 @@
 
 struct A
 {
-  static constexpr A a = 1;    // { dg-error "incomplete" }
+  static constexpr A a = 1;  // { dg-error "22:'constexpr const A A::a' has incomplete type" }
   constexpr A(int i) { }
 };
index c9291c2b8e4af0cb8bb0347bfcffbab5708a86fe..b114df2fdd5f8966d7a004796bcd26bb85628da7 100644 (file)
@@ -31,7 +31,7 @@ F<T>::bar (const G &)
 {
   auto s = I;
   typedef decltype (s) L;
-  auto u =[&](L) { auto t = foo (J::K (), 0); }; // { dg-error "" }
+  auto u =[&](L) { auto t = foo (J::K (), 0); }; // { dg-error "25:'void t' has incomplete type" }
 }
 struct B {
   typedef int G;
index 0b6cded5929f4b08f880118808f58fd0a35facc3..a8acce05f519bc105d70140c0da369eef38e5b49 100644 (file)
@@ -5,8 +5,8 @@
 void
 foo (int i)
 {
-  extern int a[i];     // { dg-error "storage size of" }
-  static int b[i];     // { dg-error "storage size of" }
+  extern int a[i];     // { dg-error "14:storage size of" }
+  static int b[i];     // { dg-error "14:storage size of" }
 
 #pragma omp parallel
   {
index 80ffb0a98cc2dfe07c677c58e37e5b4a99a89411..fbcd39e2c3a79bd308c9562063539c450056b95f 100644 (file)
@@ -3,4 +3,4 @@
 //  array
 
 struct A {A();int A::* t;};
-A x[]; // { dg-error "size" }
+A x[]; // { dg-error "3:array size missing" }
diff --git a/gcc/testsuite/g++.dg/init/array42.C b/gcc/testsuite/g++.dg/init/array42.C
new file mode 100644 (file)
index 0000000..d16a9ea
--- /dev/null
@@ -0,0 +1 @@
+char a[] = ("abc");  // { dg-warning "6:array 'a' initialized by parenthesized string literal" }
diff --git a/gcc/testsuite/g++.dg/init/array43.C b/gcc/testsuite/g++.dg/init/array43.C
new file mode 100644 (file)
index 0000000..37ef241
--- /dev/null
@@ -0,0 +1,2 @@
+int a[] = 0;  // { dg-error "5:initializer fails to determine size" }
+// { dg-error "11:array must be initialized" "" { target *-*-* } 1 }
diff --git a/gcc/testsuite/g++.dg/init/array44.C b/gcc/testsuite/g++.dg/init/array44.C
new file mode 100644 (file)
index 0000000..5643c81
--- /dev/null
@@ -0,0 +1 @@
+int a[] = { };  // { dg-error "5:zero-size array" } 
diff --git a/gcc/testsuite/g++.dg/init/array45.C b/gcc/testsuite/g++.dg/init/array45.C
new file mode 100644 (file)
index 0000000..ee4451d
--- /dev/null
@@ -0,0 +1 @@
+int a[];  // { dg-error "5:storage size" }
index 50dc4813954d608be9ba367e5a5062f54cb78c43..e6307525fbf8a5689f11a0e261dfe725ea8d7fe4 100644 (file)
@@ -3,6 +3,6 @@
 int x = { 2 };
 const char * y = { "hello" };
 int a = 2;
-int b = { 2,3 }; // { dg-error "requires one element in initializer" }
+int b = { 2,3 }; // { dg-error "5:scalar object 'b' requires one element in initializer" }
 int c = { { 2 } } ; // { dg-error "braces around scalar initializer" }
 int d = {}; // { dg-error "initializer" "" { target { ! c++11 } } }
index 0fa818c80c0d6036362dab5fd5cb8b48f0d26e11..f8452351d12f5cbf9c4c749037fc6e7f36542fdc 100644 (file)
@@ -17,8 +17,8 @@ struct D { int c; };
 int main()
 {
    int i = { 1 };
-   int j = { 1, 2 }; /* { dg-error "requires one element" } */
-   A a = { 6 }; /* { dg-error "initialize" "" { target { ! c++11 } } } */
+   int j = { 1, 2 }; /* { dg-error "8:scalar object 'j' requires one element" } */
+   A a = { 6 }; /* { dg-error "6:in C\\+\\+98 'a' must be initialized" "" { target { ! c++11 } } } */
    B b = { 6 }; /* { dg-error "" } */
    C c = { 6 }; /* { dg-error "too many initializers" } */
    D d = { 6 };