decl.c (grokdeclarator): Use typespec_loc in error messages about 'auto' and trailing...
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 17 Jan 2019 18:01:43 +0000 (18:01 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 17 Jan 2019 18:01:43 +0000 (18:01 +0000)
/cp
2019-01-17  Paolo Carlini  <paolo.carlini@oracle.com>

* decl.c (grokdeclarator): Use typespec_loc in error messages
about 'auto' and trailing return type.

/testsuite
2019-01-17  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/cpp0x/auto52.C: Test locations too.
* g++.dg/cpp0x/trailing2.C: Likewise.
* g++.dg/cpp1y/auto-fn18.C: Likewise.
* g++.dg/cpp1y/auto-fn25.C: Likewise.
* g++.dg/cpp1y/auto-fn52.C: Likewise.
* g++.dg/cpp1y/auto-fn53.C: Likewise.
* g++.dg/cpp1y/auto-fn54.C: Likewise.

From-SVN: r268043

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/auto52.C
gcc/testsuite/g++.dg/cpp0x/trailing2.C
gcc/testsuite/g++.dg/cpp1y/auto-fn18.C
gcc/testsuite/g++.dg/cpp1y/auto-fn25.C
gcc/testsuite/g++.dg/cpp1y/auto-fn52.C
gcc/testsuite/g++.dg/cpp1y/auto-fn53.C
gcc/testsuite/g++.dg/cpp1y/auto-fn54.C

index 6893b2e..05e8566 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-17  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * decl.c (grokdeclarator): Use typespec_loc in error messages
+       about 'auto' and trailing return type.
+
 2019-01-17  David Malcolm  <dmalcolm@redhat.com>
 
        PR c++/88699
index 9f96ebc..79eeac1 100644 (file)
@@ -11287,35 +11287,37 @@ grokdeclarator (const cp_declarator *declarator,
                          /* OK for C++11 lambdas.  */;
                        else if (cxx_dialect < cxx14)
                          {
-                           error ("%qs function uses "
-                                  "%<auto%> type specifier without trailing "
-                                  "return type", name);
-                           inform (input_location, "deduced return type "
-                                   "only available with -std=c++14 or "
-                                   "-std=gnu++14");
+                           error_at (typespec_loc, "%qs function uses "
+                                     "%<auto%> type specifier without "
+                                     "trailing return type", name);
+                           inform (typespec_loc,
+                                   "deduced return type only available "
+                                   "with -std=c++14 or -std=gnu++14");
                          }
                        else if (virtualp)
                          {
-                           error ("virtual function cannot "
-                                  "have deduced return type");
+                           error_at (typespec_loc, "virtual function "
+                                     "cannot have deduced return type");
                            virtualp = false;
                          }
                      }
                    else if (!is_auto (type) && sfk != sfk_conversion)
                      {
-                       error ("%qs function with trailing return type has"
-                              " %qT as its type rather than plain %<auto%>",
-                              name, type);
+                       error_at (typespec_loc, "%qs function with trailing "
+                                 "return type has %qT as its type rather "
+                                 "than plain %<auto%>", name, type);
                        return error_mark_node;
                      }
                    else if (is_auto (type) && AUTO_IS_DECLTYPE (type))
                      {
                        if (funcdecl_p)
-                         error ("%qs function with trailing return type has "
-                                "%<decltype(auto)%> as its type rather than "
-                                "plain %<auto%>", name);
+                         error_at (typespec_loc,
+                                   "%qs function with trailing return type "
+                                   "has %<decltype(auto)%> as its type "
+                                   "rather than plain %<auto%>", name);
                        else
-                         error ("invalid use of %<decltype(auto)%>");
+                         error_at (typespec_loc,
+                                   "invalid use of %<decltype(auto)%>");
                        return error_mark_node;
                      }
                    tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
@@ -11359,11 +11361,13 @@ grokdeclarator (const cp_declarator *declarator,
                    if (cxx_dialect < cxx11)
                      /* Not using maybe_warn_cpp0x because this should
                         always be an error.  */
-                     error ("trailing return type only available with "
-                            "-std=c++11 or -std=gnu++11");
+                     error_at (typespec_loc,
+                               "trailing return type only available "
+                               "with -std=c++11 or -std=gnu++11");
                    else
-                     error ("%qs function with trailing return type not "
-                            "declared with %<auto%> type specifier", name);
+                     error_at (typespec_loc, "%qs function with trailing "
+                               "return type not declared with %<auto%> "
+                               "type specifier", name);
                    return error_mark_node;
                  }
              }
index 176d2f8..a2c7110 100644 (file)
@@ -1,3 +1,13 @@
+2019-01-17  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/cpp0x/auto52.C: Test locations too.
+       * g++.dg/cpp0x/trailing2.C: Likewise.
+       * g++.dg/cpp1y/auto-fn18.C: Likewise.
+       * g++.dg/cpp1y/auto-fn25.C: Likewise.
+       * g++.dg/cpp1y/auto-fn52.C: Likewise.
+       * g++.dg/cpp1y/auto-fn53.C: Likewise.
+       * g++.dg/cpp1y/auto-fn54.C: Likewise.
+
 2019-01-17  David Malcolm  <dmalcolm@redhat.com>
 
        PR c++/88699
index 9bfe7c7..d33f927 100644 (file)
@@ -2,5 +2,5 @@
 // { dg-do compile { target c++11 } }
 
 using T = auto() -> int;
-using U = void() -> int; // { dg-error "function with trailing return type not declared with .auto." }
-using W = auto(); // { dg-error "invalid use of .auto." }
+using U = void() -> int; // { dg-error "11:.type name. function with trailing return type not declared with .auto." }
+using W = auto(); // { dg-error "11:invalid use of .auto." }
index bfc2712..848626a 100644 (file)
@@ -3,14 +3,14 @@
 // { dg-do compile { target c++11 } }
 
 auto f1 () -> int;
-auto f2 ();            // { dg-error "without trailing return type" "" { target { ! c++14 } } }
-int f3 () -> int;      // { dg-error "trailing return type" }
-auto *f4 () -> int;    // { dg-error "trailing return type" }
+auto f2 ();            // { dg-error "1:.f2. function uses .auto. type specifier without trailing return type" "" { target { ! c++14 } } }
+int f3 () -> int;      // { dg-error "1:.f3. function with trailing return type" }
+auto *f4 () -> int;    // { dg-error "1:.f4. function with trailing return type" }
 
 struct A
 {
   auto f5 () const -> int;
-  auto f6 ();          // { dg-error "without trailing return type" "" { target { ! c++14 } } }
-  int f7 () -> int;    // { dg-error "trailing return type" }
-  auto *f8 () -> int;  // { dg-error "trailing return type" }
+  auto f6 ();          // { dg-error "3:.f6. function uses .auto. type specifier without trailing return type" "" { target { ! c++14 } } }
+  int f7 () -> int;    // { dg-error "3:.f7. function with trailing return type" }
+  auto *f8 () -> int;  // { dg-error "3:.f8. function with trailing return type" }
 };
index 1a92964..66cadc2 100644 (file)
@@ -3,7 +3,7 @@
 struct A
 {
   virtual int f() { return 1; }         // { dg-message "overridden" }
-  virtual auto g() { return 1; } // { dg-error "virtual" }
+  virtual auto g() { return 1; } // { dg-error "11:virtual" }
 };
 
 struct B: A
index fdad465..af986b3 100644 (file)
@@ -5,7 +5,7 @@
 
 struct A
 {
-  virtual auto foo() {}                // { dg-error "virtual.*deduced" }
+  virtual auto foo() {}                // { dg-error "11:virtual.*deduced" }
 };
 
 struct B : A
index e239bc2..09082dd 100644 (file)
@@ -1,4 +1,4 @@
 // PR c++/67012
 // { dg-do compile { target c++14 } }
 
-decltype(auto) f() -> int; // { dg-error "function with trailing return type has" }
+decltype(auto) f() -> int; // { dg-error "1:.f. function with trailing return type has" }
index 720aeeb..1c04bb5 100644 (file)
@@ -1,4 +1,4 @@
 // PR c++/86942
 // { dg-do compile { target c++14 } }
 
-using T = decltype(auto) () -> int; // { dg-error "invalid use of" }
+using T = decltype(auto) () -> int; // { dg-error "11:invalid use of" }
index f3391dd..8b5992b 100644 (file)
@@ -1,3 +1,3 @@
 // { dg-do compile { target c++14 } }
 
-using T = int () -> decltype(auto); // { dg-error "function with trailing return type not declared with .auto." }
+using T = int () -> decltype(auto); // { dg-error "11:.type name. function with trailing return type not declared with .auto." }