[pushed] libcpp: modules and -include again
Checks
Commit Message
Tested x86_64-pc-linux-gnu, applying to trunk.
-- 8< --
I enabled include translation to header units in r15-1104-ga29f481bbcaf2b,
but it seems that patch wasn't sufficient, as any diagnostics in the main
source file would show up as coming from the header instead.
Fixed by setting buffer->file for leaving the file transition that my
previous patch made us enter. And don't push a buffer of newlines, in this
case that messes up line numbers instead of aligning them.
libcpp/ChangeLog:
* files.cc (_cpp_stack_file): Handle -include of header unit more
specially.
gcc/testsuite/ChangeLog:
* g++.dg/modules/dashinclude-1_b.C: Add an #error.
* g++.dg/modules/dashinclude-1_a.H: Remove dg-module-do run.
---
gcc/testsuite/g++.dg/modules/dashinclude-1_b.C | 2 ++
libcpp/files.cc | 10 ++++++++--
gcc/testsuite/g++.dg/modules/dashinclude-1_a.H | 1 -
3 files changed, 10 insertions(+), 3 deletions(-)
base-commit: 819f67a2f633d2000f09119f0e19b784ea0a4bd8
@@ -6,4 +6,6 @@ int main ()
return f();
}
+#error foo // { dg-error "foo" }
+
// { dg-final { scan-lang-dump {Translating include to import} module } }
@@ -977,8 +977,11 @@ _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, include_type type,
that. (We also need an extra newline, so this looks like a regular
file, which we do that to to make sure we don't fall off the end in the
middle of a line. */
- static uchar newlines[] = "\n\n\n";
- cpp_push_buffer (pfile, newlines, 2, true);
+ if (type != IT_CMDLINE)
+ {
+ static uchar newlines[] = "\n\n\n";
+ cpp_push_buffer (pfile, newlines, 2, true);
+ }
size_t len = strlen (buf);
buf[len] = '\n'; /* See above */
@@ -986,6 +989,9 @@ _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, include_type type,
= cpp_push_buffer (pfile, reinterpret_cast<unsigned char *> (buf),
len, true);
buffer->to_free = buffer->buf;
+ if (type == IT_CMDLINE)
+ /* Tell _cpp_pop_buffer to change files. */
+ buffer->file = file;
file->header_unit = +1;
_cpp_mark_file_once_only (pfile, file);
@@ -1,4 +1,3 @@
-// { dg-module-do run }
// { dg-additional-options "-fmodule-header" }
// { dg-module-cmi {} }