decl.c (start_decl): Improve error location.
authorPaolo Carlini <paolo.carlini@oracle.com>
Fri, 11 Jan 2019 09:02:43 +0000 (09:02 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 11 Jan 2019 09:02:43 +0000 (09:02 +0000)
/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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/diagnostic/extern-initialized.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/dllimport-initialized.C [new file with mode: 0644]

index b3ee2a5db2fbdae25196641dbbb6ec81880cb29e..4b9fa821d74e22d90d63276555b68a172b07eaa5 100644 (file)
@@ -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
index 267303e0b7060440821a9cca4622703f81c00d28..fe5403d5ab5b390faa3318489b6dd4481d95652f 100644 (file)
@@ -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;
          }
       }
index 80e0b1ab74297352e081df229716e70a102b2515..11eddf7409cecb90e7327f72948b01717df2a7b4 100644 (file)
@@ -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 (file)
index 0000000..4138a37
--- /dev/null
@@ -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 (file)
index 0000000..adc7e82
--- /dev/null
@@ -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." }