From 204b61b906f2f806eec2f7bb72d4dd79c88d688a Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Mon, 23 Nov 2020 07:34:17 -0800 Subject: [PATCH] Diagnostic for module importation This tweaks the 'included from ...' printing to deal with imports in the 'include' path. One new thing is that there can now be two 'include' names on a single line. For example 'in module X, included at Y'. This reads better than placing them on different lines. gcc/ * diagnostic.c (diagnostic_report_current_module): Adjust for C++ module importation. --- gcc/diagnostic.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index 1b6c9845892..fe509d88e6d 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -689,12 +689,13 @@ diagnostic_report_current_module (diagnostic_context *context, location_t where) set_last_module (context, map); if (! MAIN_FILE_P (map)) { - bool first = true; + bool first = true, need_inc = true, was_module = MAP_MODULE_P (map); expanded_location s = {}; do { where = linemap_included_from (map); map = linemap_included_from_linemap (line_table, map); + bool is_module = MAP_MODULE_P (map); s.file = LINEMAP_FILE (map); s.line = SOURCE_LINE (map, where); int col = -1; @@ -706,14 +707,24 @@ diagnostic_report_current_module (diagnostic_context *context, location_t where) const char *line_col = maybe_line_and_column (s.line, col); static const char *const msgs[] = { - N_("In file included from"), + NULL, N_(" from"), + N_("In file included from"), /* 2 */ + N_(" included from"), + N_("In module"), /* 4 */ + N_("of module"), + N_("In module imported at"), /* 6 */ + N_("imported at"), }; - unsigned index = !first; + + unsigned index = (was_module ? 6 : is_module ? 4 + : need_inc ? 2 : 0) + !first; + pp_verbatim (context->printer, "%s%s %r%s%s%R", - first ? "" : ",\n", _(msgs[index]), + first ? "" : was_module ? ", " : ",\n", + _(msgs[index]), "locus", s.file, line_col); - first = false; + first = false, need_inc = was_module, was_module = is_module; } while (! MAIN_FILE_P (map)); pp_verbatim (context->printer, ":"); -- 2.30.2