[C++] A few more grokdeclarator locations fixes

Message ID b8543d2d-afad-a4c8-f184-4435082b5d75@oracle.com
State New
Headers show
Series
  • [C++] A few more grokdeclarator locations fixes
Related show

Commit Message

Paolo Carlini May 23, 2019, 7:23 p.m.
Hi,

one more, rather straightforward, simply use the location stored in the 
declarator. Tested x86_64-linux.

Thanks, Paolo.

////////////////////
/cp
2019-05-23  Paolo Carlini  <paolo.carlini@oracle.com>

	* decl.c (grokdeclarator): Use declarator->id_loc in five error
	error_at calls.

/testsuite
2019-05-23  Paolo Carlini  <paolo.carlini@oracle.com>

	* g++.dg/cpp0x/alias-decl-18.C: Test location too.
	* g++.dg/cpp0x/udlit-nofunc-neg.C: Likewise.
	* g++.dg/parse/crash59.C: Likewise.
	* g++.dg/parse/error38.C: Likewise.
	* g++.dg/parse/error39.C: Likewise.
	* g++.dg/template/crash31.C: Likewise.
	* g++.dg/template/operator8.C: Likewise.
	* g++.dg/template/operator9.C: Likewise.

Comments

Jason Merrill May 29, 2019, 4:32 p.m. | #1
On 5/23/19 3:23 PM, Paolo Carlini wrote:
> Hi,

> 

> one more, rather straightforward, simply use the location stored in the 

> declarator. Tested x86_64-linux.


OK.

Jason

Patch

Index: cp/decl.c
===================================================================
--- cp/decl.c	(revision 271542)
+++ cp/decl.c	(working copy)
@@ -10592,7 +10592,8 @@  grokdeclarator (const cp_declarator *declarator,
      D1 ( parameter-declaration-clause) ...  */
   if (funcdef_flag && innermost_code != cdk_function)
     {
-      error ("function definition does not declare parameters");
+      error_at (declarator->id_loc,
+		"function definition does not declare parameters");
       return error_mark_node;
     }
 
@@ -10600,7 +10601,8 @@  grokdeclarator (const cp_declarator *declarator,
       && innermost_code != cdk_function
       && ! (ctype && !declspecs->any_specifiers_p))
     {
-      error ("declaration of %qD as non-function", dname);
+      error_at (declarator->id_loc,
+		"declaration of %qD as non-function", dname);
       return error_mark_node;
     }
 
@@ -10609,7 +10611,8 @@  grokdeclarator (const cp_declarator *declarator,
       if (UDLIT_OPER_P (dname)
 	  && innermost_code != cdk_function)
 	{
-	  error ("declaration of %qD as non-function", dname);
+	  error_at (declarator->id_loc,
+		    "declaration of %qD as non-function", dname);
 	  return error_mark_node;
 	}
 
@@ -10617,12 +10620,14 @@  grokdeclarator (const cp_declarator *declarator,
 	{
 	  if (typedef_p)
 	    {
-	      error ("declaration of %qD as %<typedef%>", dname);
+	      error_at (declarator->id_loc,
+			"declaration of %qD as %<typedef%>", dname);
 	      return error_mark_node;
 	    }
 	  else if (decl_context == PARM || decl_context == CATCHPARM)
 	    {
-	      error ("declaration of %qD as parameter", dname);
+	      error_at (declarator->id_loc,
+			"declaration of %qD as parameter", dname);
 	      return error_mark_node;
 	    }
 	}
Index: testsuite/g++.dg/cpp0x/alias-decl-18.C
===================================================================
--- testsuite/g++.dg/cpp0x/alias-decl-18.C	(revision 271542)
+++ testsuite/g++.dg/cpp0x/alias-decl-18.C	(working copy)
@@ -5,5 +5,6 @@  template<typename Z> using ::T = void(int n); // {
 template<typename Z> using operator int = void(int n); // { dg-error "" }
 template<typename Z> using typename U = void; // { dg-error "" }
 template<typename Z> using typename ::V = void(int n); // { dg-error "" }
-template<typename Z> using typename ::operator bool = void(int n); // { dg-error "" }
+template<typename Z> using typename ::operator bool = void(int n); // { dg-error "39:declaration" }
+// { dg-error "expected" "" { target *-*-* } .-1 }
 using foo __attribute__((aligned(4)) = int; // { dg-error "" }
Index: testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C
===================================================================
--- testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C	(revision 271542)
+++ testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C	(working copy)
@@ -3,7 +3,7 @@ 
 // Test user-defined literals.
 // Test error on non-function declaration.
 
-double operator"" _baddecl; // { dg-error "as non-function" }
+double operator"" _baddecl; // { dg-error "8:declaration of .operator\"\"_baddecl. as non-function" }
 
 template<char...>
-  int operator"" _badtmpldecl; // { dg-error "as non-function" }
+  int operator"" _badtmpldecl; // { dg-error "7:declaration of .operator\"\"_badtmpldecl. as non-function" }
Index: testsuite/g++.dg/parse/crash59.C
===================================================================
--- testsuite/g++.dg/parse/crash59.C	(revision 271542)
+++ testsuite/g++.dg/parse/crash59.C	(working copy)
@@ -1,3 +1,4 @@ 
 // PR c++/53003
 
-struct A{ void a{} return b  // { dg-error "function definition|expected" }
+struct A{ void a{} return b  // { dg-error "16:function definition" }
+// { dg-error "expected" "" { target *-*-* } .-1 }
Index: testsuite/g++.dg/parse/error38.C
===================================================================
--- testsuite/g++.dg/parse/error38.C	(revision 271542)
+++ testsuite/g++.dg/parse/error38.C	(working copy)
@@ -1,3 +1,3 @@ 
 // PR c++/29003
 
-typedef int operator !(); // { dg-error "declaration" }
+typedef int operator !(); // { dg-error "13:declaration" }
Index: testsuite/g++.dg/parse/error39.C
===================================================================
--- testsuite/g++.dg/parse/error39.C	(revision 271542)
+++ testsuite/g++.dg/parse/error39.C	(working copy)
@@ -1,6 +1,6 @@ 
 // PR c++/41769
 
-void f(void operator+()); // { dg-error "declaration" }
+void f(void operator+()); // { dg-error "13:declaration" }
 
 void g()
 {
@@ -8,7 +8,7 @@  void g()
     {
 
     }
-  catch(void operator+()) // { dg-error "declaration" }
+  catch(void operator+()) // { dg-error "14:declaration" }
     {
     }
 }
Index: testsuite/g++.dg/template/crash31.C
===================================================================
--- testsuite/g++.dg/template/crash31.C	(revision 271542)
+++ testsuite/g++.dg/template/crash31.C	(working copy)
@@ -1,3 +1,4 @@ 
 // PR c++/19063
 
-template<operator< struct A {}; // { dg-error "" }
+template<operator< struct A {}; // { dg-error "10:declaration" }
+// { dg-error "expected|extra" "" { target *-*-* } .-1 }
Index: testsuite/g++.dg/template/operator8.C
===================================================================
--- testsuite/g++.dg/template/operator8.C	(revision 271542)
+++ testsuite/g++.dg/template/operator8.C	(working copy)
@@ -2,5 +2,6 @@ 
 
 struct A
 {
-    template<operator+> void foo() {}   // { dg-error "identifier|parameter|template arguments" }
+    template<operator+> void foo() {}   // { dg-error "14:declaration" }
+  // { dg-error "expected|template" "" { target *-*-* } .-1 }
 };
Index: testsuite/g++.dg/template/operator9.C
===================================================================
--- testsuite/g++.dg/template/operator9.C	(revision 271542)
+++ testsuite/g++.dg/template/operator9.C	(working copy)
@@ -1,6 +1,7 @@ 
 //PR c++/27670
 
-template<operator+> void foo(); // { dg-error "before|parameter|template" }
+template<operator+> void foo(); // { dg-error "10:declaration" }
+// { dg-error "expected|template" "" { target *-*-* } .-1 }
 
 void bar()
 {