implicit_decl_warning wasn't getting a location, so the column info
was poor.  It's easy to fix this up.

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

2014-07-20  Marek Polacek  <pola...@redhat.com>

        PR c/61852
        * c-decl.c (implicit_decl_warning): Add location_t parameter.  Use it.
        (implicitly_declare): Pass location to implicit_decl_warning.

        * gcc.dg/pr61852.c: New test.

diff --git gcc/c/c-decl.c gcc/c/c-decl.c
index 0ca2e0d..425fc58 100644
--- gcc/c/c-decl.c
+++ gcc/c/c-decl.c
@@ -2951,18 +2951,18 @@ pushdecl_top_level (tree x)
 }
 
 static void
-implicit_decl_warning (tree id, tree olddecl)
+implicit_decl_warning (location_t loc, tree id, tree olddecl)
 {
   if (warn_implicit_function_declaration)
     {
       bool warned;
 
       if (flag_isoc99)
-       warned = pedwarn (input_location, OPT_Wimplicit_function_declaration,
+       warned = pedwarn (loc, OPT_Wimplicit_function_declaration,
                          "implicit declaration of function %qE", id);
       else
-       warned = warning (OPT_Wimplicit_function_declaration,
-                         G_("implicit declaration of function %qE"), id);
+       warned = warning_at (loc, OPT_Wimplicit_function_declaration,
+                            G_("implicit declaration of function %qE"), id);
       if (olddecl && warned)
        locate_old_decl (olddecl);
     }
@@ -3015,7 +3015,7 @@ implicitly_declare (location_t loc, tree functionid)
             then recycle the old declaration but with the new type.  */
          if (!C_DECL_IMPLICIT (decl))
            {
-             implicit_decl_warning (functionid, decl);
+             implicit_decl_warning (loc, functionid, decl);
              C_DECL_IMPLICIT (decl) = 1;
            }
          if (DECL_BUILT_IN (decl))
@@ -3052,7 +3052,7 @@ implicitly_declare (location_t loc, tree functionid)
   DECL_EXTERNAL (decl) = 1;
   TREE_PUBLIC (decl) = 1;
   C_DECL_IMPLICIT (decl) = 1;
-  implicit_decl_warning (functionid, 0);
+  implicit_decl_warning (loc, functionid, 0);
   asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
   if (asmspec_tree)
     set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
diff --git gcc/testsuite/gcc.dg/pr61852.c gcc/testsuite/gcc.dg/pr61852.c
index e69de29..f488aca 100644
--- gcc/testsuite/gcc.dg/pr61852.c
+++ gcc/testsuite/gcc.dg/pr61852.c
@@ -0,0 +1,10 @@
+/* PR c/61852 */
+/* { dg-do compile } */
+/* { dg-options "-Wimplicit-function-declaration" } */
+
+int
+f (int a)
+{
+  int b = a + a + a + ff (a); /* { dg-warning "23:implicit declaration of 
function" } */
+  return b;
+}

        Marek

Reply via email to