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

            Bug ID: 79106
           Summary: wrong source line printed in diagnostics for a
                    translation unit
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: preprocessor
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

When printing the source file line in diagnostic messages for a translation
unit (a .i or .ii file) GCC uses the source file the translation unit was
created from rather than the translation unit itself.  That can be pretty
confusing for those unaware of this "feature."  (It took me a few minutes to
figure out what was going on while reducing a large translation unit to a small
test case.)

$ (set -x && cat a.c && cat a.i && /build/gcc-5-branch/gcc/xgcc -B
/build/gcc-5-branch/gcc -S a.i)
+ cat a.c
int foo (void) {
  return -1;
}

+ cat a.i
# 1 "a.c"
int foo (void) {
  return "";
}
+ /build/gcc-5-branch/gcc/xgcc -B /build/gcc-5-branch/gcc -S a.i
a.c: In function ‘foo’:
a.c:2:10: warning: return makes integer from pointer without a cast
[-Wint-conversion]
   return -1;
          ^

Clang, in contrast, prints the contents of translation unit as one would
presumably expect as I do:

$ clang -S a.i
a.c:2:10: warning: incompatible pointer to integer conversion returning
      'char [1]' from a function with result type 'int' [-Wint-conversion]
  return "";
         ^~
1 warning generated.

Reply via email to