When checking a series of files, if some warnings or errors are issued but only coming from some includes, it's not possible to identify which source file is responsible since its filename is not displayed. So, if the first warning is from a file other than the source file, display first a note coming from the source file itself. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> --- lib.c | 13 +++++++++++++ validation/cast-kinds-check.c | 1 + 2 files changed, 14 insertions(+) diff --git a/lib.c b/lib.c index 4e8d7b451747..b94c2c83c1c5 100644 --- a/lib.c +++ b/lib.c @@ -50,6 +50,18 @@ #include "bits.h" +static void show_top_filename(const char *name) +{ + static const char *last; + + if (name == base_filename) + return; + if (name == last) + return; + fprintf(stderr, "%s: note: in included file:\n", base_filename); + last = name; +} + static void do_warn(const char *type, struct position pos, const char * fmt, va_list args) { static char buffer[512]; @@ -63,6 +75,7 @@ static void do_warn(const char *type, struct position pos, const char * fmt, va_ name = stream_name(pos.stream); fflush(stdout); + show_top_filename(name); fprintf(stderr, "%s:%d:%d: %s%s%s\n", name, pos.line, pos.pos, diag_prefix, type, buffer); } diff --git a/validation/cast-kinds-check.c b/validation/cast-kinds-check.c index 0c0cd67368a3..32a106d413da 100644 --- a/validation/cast-kinds-check.c +++ b/validation/cast-kinds-check.c @@ -6,6 +6,7 @@ * check-assert: sizeof(long) == 8 * * check-error-start +cast-kinds-check.c: note: in included file: optim/cast-kinds.c:5:45: warning: cast drops bits optim/cast-kinds.c:6:47: warning: cast drops bits optim/cast-kinds.c:7:46: warning: cast drops bits -- 2.27.0