decl.c (start_decl): Improve permerror location.
authorPaolo Carlini <paolo.carlini@oracle.com>
Tue, 8 Jan 2019 09:41:36 +0000 (09:41 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 8 Jan 2019 09:41:36 +0000 (09:41 +0000)
/cp
2019-01-08  Paolo Carlini  <paolo.carlini@oracle.com>

* decl.c (start_decl): Improve permerror location.

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

* g++.dg/diagnostic/out-of-class-redeclaration.C: New.

From-SVN: r267675

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/diagnostic/out-of-class-redeclaration.C [new file with mode: 0644]

index 32c7f40b2129f994d7b3514a23a9410010244402..f8d3d93984858b32973da84eeff353c14ad1195b 100644 (file)
@@ -1,3 +1,7 @@
+2019-01-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * decl.c (start_decl): Improve permerror location.
+
 2019-01-08  Jonathan Wakely  <jwakely@redhat.com>
            Jakub Jelinek  <jakub@redhat.com>
 
index f456c070dcd2f361874933125a9fd5ee8b7a1acf..7e4e93c420132de05960c09219f4476899a7adeb 100644 (file)
@@ -5202,7 +5202,8 @@ start_decl (const cp_declarator *declarator,
       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
          /* Aliases are definitions. */
          && !alias)
-       permerror (input_location, "declaration of %q#D outside of class is not definition",
+       permerror (declarator->id_loc,
+                  "declaration of %q#D outside of class is not definition",
                   decl);
     }
 
index 48a6a53f24cccad86250444dee1a5f9529eb0ffe..bc940878b3f67963e0079de4dc52f3843fe98242 100644 (file)
@@ -1,3 +1,7 @@
+2019-01-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/diagnostic/out-of-class-redeclaration.C: New.
+
 2019-01-08  Iain Sandoe  <iain@sandoe.co.uk>
 
        * c-c++-common/builtin-has-attribute-3.c: Skip tests requiring symbol
diff --git a/gcc/testsuite/g++.dg/diagnostic/out-of-class-redeclaration.C b/gcc/testsuite/g++.dg/diagnostic/out-of-class-redeclaration.C
new file mode 100644 (file)
index 0000000..9dba8eb
--- /dev/null
@@ -0,0 +1,13 @@
+// Adapted from g++.old-deja/g++.law/arm8.C
+
+struct K {
+  void f(int);
+};
+
+void K::f(int);  // { dg-error "6:declaration of .void K::f\\(int\\). outside of class" }
+
+struct L {
+  void g(int) {}
+};
+
+void L::g(int);  // { dg-error "6:declaration of .void L::g\\(int\\). outside of class" }