From 9783f6f2f67f9472fa428b984e4e045ee7b64f78 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 10 Dec 2025 23:11:26 +0800 Subject: c++/modules: #include -> import Since the standard library doesn't preclude an #include of a standard library header from bringing in declarations from other headers, we can translate an #include of any of the importable headers as an import of . To reduce the amount of C++ standard knowledge encoded in libcpp, I extend the translate_include callback to allow it to suggest an alternate header to try translating. It's a bit awkward to bounce back and forth, but this seems like the right division of responsibilities. libcpp/ChangeLog: * include/cpplib.h (struct cpp_callbacks): Replace 'path' parameter with file, angle_brackets, and alternate name. (cpp_get_name): Declare. * files.cc (cpp_get_name): New. (_cpp_stack_include, _cpp_post_stack_file, _cpp_stack_file) (_cpp_stack_translated_file): Refactor, try alternate file. gcc/cp/ChangeLog: * module.cc (maybe_translate_include): Suggest as an alternate for importable standard library headers. (importable_headers, is_importable_header): New. gcc/ChangeLog: * doc/invoke.texi (C++ Modules): Remove standard library header units from missing pieces, mention importable header redirection. gcc/testsuite/ChangeLog: * g++.dg/modules/compile-std1.C: Test translation. --- libcpp/include/cpplib.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'libcpp/include/cpplib.h') diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index 16f030c..65e1bc6 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -860,7 +860,8 @@ struct cpp_callbacks /* Maybe translate a #include into something else. Return a cpp_buffer containing the translation if translating. */ char *(*translate_include) (cpp_reader *, line_maps *, location_t, - const char *path); + _cpp_file *file, bool angle_brackets, + const char **alternate); }; #ifdef VMS -- cgit v1.1