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. pushing to trunk -- Nathan Sidwell
diff --git i/gcc/diagnostic.c w/gcc/diagnostic.c index 1b6c9845892..fe509d88e6d 100644 --- i/gcc/diagnostic.c +++ w/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, ":");