--- /dev/null
+/* { dg-do preprocess } */
+/* { dg-additional-options -Wno-pedantic } */
+
+main-1 __FILE__
+
+# 7 "inner.h" 1
+inner-1 __FILE__
+# 9 "inside.h" 1
+inside-1 __FILE__
+# 11 "" 2
+inner-2 __FILE__
+#13 "" 2
+main-2 __FILE__
+
+
+/* { dg-final { scan-file line-1.i "main-1 \"\[^\n]*line-1.c\"\n" } } */
+/* { dg-final { scan-file line-1.i "main-2 \"\[^\n]*line-1.c\"\n" } } */
+/* { dg-final { scan-file line-1.i "inner-1 \"inner.h\"\n" } } */
+/* { dg-final { scan-file line-1.i "inner-2 \"inner.h\"\n" } } */
+/* { dg-final { scan-file line-1.i "inside-1 \"inside.h\"\n" } } */
+2019-08-30 Nathan Sidwell <nathan@acm.org>
+
+ New # semantics for popping to "" name.
+ libcpp/
+ * directives.c (do_linemarker): Popping to "" name means get the
+ name from the include stack..
+
2019-09-05 Nathan Sidwell <nathan@acm.org>
PR preprocessor/91639
map = LINEMAPS_LAST_ORDINARY_MAP (line_table);
const line_map_ordinary *from
= linemap_included_from_linemap (line_table, map);
- if (MAIN_FILE_P (map)
- || (from
- && filename_cmp (ORDINARY_MAP_FILE_NAME (from), new_file) != 0))
+
+ if (!from)
+ /* Not nested. */;
+ else if (!new_file[0])
+ /* Leaving to "" means fill in the popped-to name. */
+ new_file = ORDINARY_MAP_FILE_NAME (from);
+ else if (filename_cmp (ORDINARY_MAP_FILE_NAME (from), new_file) != 0)
+ /* It's the wrong name, Grommit! */
+ from = NULL;
+
+ if (!from)
{
cpp_warning (pfile, CPP_W_NONE,
"file \"%s\" linemarker ignored due to "
return;
}
}
+
/* Compensate for the increment in linemap_add that occurs in
_cpp_do_file_change. We're currently at the start of the line
*following* the #line directive. A separate location_t for this