aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/decl.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/out-of-class-redeclaration.C13
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 32c7f40..f8d3d93 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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>
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index f456c07..7e4e93c 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -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);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 48a6a53..bc94087 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..9dba8eb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/out-of-class-redeclaration.C
@@ -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" }