aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2019-01-11 09:02:43 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2019-01-11 09:02:43 +0000
commita8766179a75fd18a1636b80425f81c0cd54d6151 (patch)
tree5955fc153ea7ffedd82733d5ca159d2fcaa96dbd /gcc
parent7dc3df082b9edc8d78e0cd3846027afc345aebc7 (diff)
downloadgcc-a8766179a75fd18a1636b80425f81c0cd54d6151.zip
gcc-a8766179a75fd18a1636b80425f81c0cd54d6151.tar.gz
gcc-a8766179a75fd18a1636b80425f81c0cd54d6151.tar.bz2
decl.c (start_decl): Improve error location.
/cp 2019-01-11 Paolo Carlini <paolo.carlini@oracle.com> * decl.c (start_decl): Improve error location. (grokdeclarator): Likewise, improve two locations. /testsuite 2019-01-11 Paolo Carlini <paolo.carlini@oracle.com> * g++.dg/diagnostic/extern-initialized.C: New. * g++.dg/ext/dllimport-initialized.C: Likewise. From-SVN: r267830
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/extern-initialized.C6
-rw-r--r--gcc/testsuite/g++.dg/ext/dllimport-initialized.C3
5 files changed, 25 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index b3ee2a5..4b9fa82 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2019-01-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * decl.c (start_decl): Improve error location.
+ (grokdeclarator): Likewise, improve two locations.
+
2019-01-09 Sandra Loosemore <sandra@codesourcery.com>
PR other/16615
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 267303e..fe5403d 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -5096,7 +5096,8 @@ start_decl (const cp_declarator *declarator,
a definition. */
if (initialized && DECL_DLLIMPORT_P (decl))
{
- error ("definition of %q#D is marked %<dllimport%>", decl);
+ error_at (DECL_SOURCE_LOCATION (decl),
+ "definition of %q#D is marked %<dllimport%>", decl);
DECL_DLLIMPORT_P (decl) = 0;
}
@@ -12791,11 +12792,13 @@ grokdeclarator (const cp_declarator *declarator,
/* It's common practice (and completely valid) to have a const
be initialized and declared extern. */
if (!(type_quals & TYPE_QUAL_CONST))
- warning (0, "%qs initialized and declared %<extern%>", name);
+ warning_at (DECL_SOURCE_LOCATION (decl), 0,
+ "%qs initialized and declared %<extern%>", name);
}
else
{
- error ("%qs has both %<extern%> and initializer", name);
+ error_at (DECL_SOURCE_LOCATION (decl),
+ "%qs has both %<extern%> and initializer", name);
return error_mark_node;
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 80e0b1a..11eddf7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-01-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * g++.dg/diagnostic/extern-initialized.C: New.
+ * g++.dg/ext/dllimport-initialized.C: Likewise.
+
2019-01-11 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/59345
diff --git a/gcc/testsuite/g++.dg/diagnostic/extern-initialized.C b/gcc/testsuite/g++.dg/diagnostic/extern-initialized.C
new file mode 100644
index 0000000..4138a37
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/extern-initialized.C
@@ -0,0 +1,6 @@
+extern int i __attribute__((unused)) = 0; // { dg-warning "12:.i. initialized and declared .extern." }
+
+void foo()
+{
+ extern int i __attribute__((unused)) = 0; // { dg-error "14:.i. has both .extern. and initializer" }
+}
diff --git a/gcc/testsuite/g++.dg/ext/dllimport-initialized.C b/gcc/testsuite/g++.dg/ext/dllimport-initialized.C
new file mode 100644
index 0000000..adc7e82
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/dllimport-initialized.C
@@ -0,0 +1,3 @@
+// { dg-do compile { target i?86-*-cygwin* i?86-*-mingw* x86_64-*-mingw* } }
+
+__attribute__((dllimport)) int i __attribute__((unused)) = 0; // { dg-error "32:definition of .int i. is marked .dllimport." }