https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65466

            Bug ID: 65466
           Summary: Unnecessary source line output for "note: each
                    undeclared identifier is reported only once"
           Product: gcc
           Version: 4.9.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: achurch+gcc at achurch dot org

For the first undeclared identifier found in a source file, GCC outputs an
additional diagnostic, "note: each undeclared identifier is reported only once
for each function it appears in", and then (assuming no
-fno-diagnostics-show-caret) displays the source line and location of the
undeclared identifier.  The note itself is fine, but the source location only
clutters up the output since it was already displayed for the actual warning. 
This is exacerbated if the undeclared identifier was used in a macro, since the
macro expansion is also printed twice (as in the example below).

It seems to me it would make more sense to either suppress the source line
display and macro expansion for the "note: each undeclared..." diagnostic, or
merge that text into the warning text for the first instance of the warning,
perhaps: "'bar' undeclared (first use in this function; each undeclared
identifier is reported only once for each function it appears in)".

$ cat foo.c
#define FOO(x) x
int foo(void) {return FOO(bar);}
$ gcc-4.9.2 -c foo.c
foo.c: In function 'foo':
foo.c:2:27: error: 'bar' undeclared (first use in this function)
 int foo(void) {return FOO(bar);}
                           ^
foo.c:1:16: note: in definition of macro 'FOO'
 #define FOO(x) x
                ^
foo.c:2:27: note: each undeclared identifier is reported only once for each
function it appears in
 int foo(void) {return FOO(bar);}
                           ^
foo.c:1:16: note: in definition of macro 'FOO'
 #define FOO(x) x
                ^

Reply via email to