This patch improves the location info for -Wnested-externs.

Bootstrapped/regtested on x86_64-linux, applying to trunk.

2016-04-26  Marek Polacek  <pola...@redhat.com>

        PR c/70791
        * c-decl.c (pushdecl): Pass LOCUS down to warning.

        * gcc.dg/Wnested-externs-2.c: New test.

diff --git gcc/c/c-decl.c gcc/c/c-decl.c
index f0c677b..16e4250 100644
--- gcc/c/c-decl.c
+++ gcc/c/c-decl.c
@@ -2949,7 +2949,8 @@ pushdecl (tree x)
        }
       if (scope != file_scope
          && !DECL_IN_SYSTEM_HEADER (x))
-       warning (OPT_Wnested_externs, "nested extern declaration of %qD", x);
+       warning_at (locus, OPT_Wnested_externs,
+                   "nested extern declaration of %qD", x);
 
       while (b && !B_IN_EXTERNAL_SCOPE (b))
        {
diff --git gcc/testsuite/gcc.dg/Wnested-externs-2.c 
gcc/testsuite/gcc.dg/Wnested-externs-2.c
index e69de29..77bed5f 100644
--- gcc/testsuite/gcc.dg/Wnested-externs-2.c
+++ gcc/testsuite/gcc.dg/Wnested-externs-2.c
@@ -0,0 +1,11 @@
+/* PR c/70791 */
+/* { dg-do compile } */
+/* { dg-options "-Wnested-externs" } */
+
+void
+bar (void)
+{
+  extern int i; /* { dg-warning "14:nested extern declaration of 'i'" } */
+  extern short foo (void); /* { dg-warning "16:nested extern declaration of 
'foo'" } */
+  extern struct S *s; /* { dg-warning "20:nested extern declaration of 's'" } 
*/
+}

        Marek

Reply via email to