https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118904
Bug ID: 118904 Summary: [modules] ICE with std::source_location::current in inline function Product: gcc Version: 14.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nshead at gcc dot gnu.org Blocks: 103524 Target Milestone: --- The following sample ICEs on current trunk: module; #include <source_location> export module M; inline void foo() { std::source_location::current(); } g++ -fmodules -std=c++20 -S test.cpp test.cpp:3:8: internal compiler error: in tree_node, at cp/module.cc:9759 3 | export module M; | ^~~~~~ 0x3ca6deb internal_error(char const*, ...) ../../gcc/gcc/diagnostic-global-context.cc:517 0x3c720c0 fancy_abort(char const*, int, char const*) ../../gcc/gcc/diagnostic.cc:1722 0x111219b tree_node ../../gcc/gcc/cp/module.cc:9759 0x11023bb core_vals ../../gcc/gcc/cp/module.cc:6242 0x1106f74 tree_node_vals ../../gcc/gcc/cp/module.cc:7492 0x1110fbf tree_value ../../gcc/gcc/cp/module.cc:9476 0x1112201 tree_node ../../gcc/gcc/cp/module.cc:9779 0x1103eb4 core_vals ../../gcc/gcc/cp/module.cc:6670 0x1106f74 tree_node_vals ../../gcc/gcc/cp/module.cc:7492 0x1110fbf tree_value ../../gcc/gcc/cp/module.cc:9476 0x1112201 tree_node ../../gcc/gcc/cp/module.cc:9779 0x11023bb core_vals ../../gcc/gcc/cp/module.cc:6242 0x1106f74 tree_node_vals ../../gcc/gcc/cp/module.cc:7492 0x1110fbf tree_value ../../gcc/gcc/cp/module.cc:9476 0x1112201 tree_node ../../gcc/gcc/cp/module.cc:9779 0x11023bb core_vals ../../gcc/gcc/cp/module.cc:6242 0x1106f74 tree_node_vals ../../gcc/gcc/cp/module.cc:7492 0x1110fbf tree_value ../../gcc/gcc/cp/module.cc:9476 0x1112201 tree_node ../../gcc/gcc/cp/module.cc:9779 0x11023bb core_vals ../../gcc/gcc/cp/module.cc:6242 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. The cause of the ICE is that the implicit VAR_DECL created within 'fold_builtin_source_location' has no 'DECL_CONTEXT', which the modules implementation generally relies on to stream correctly. Disabling this checking assertion exposes other issues, too; in particular, similarly to PR98893 the name of the backing for the source location var is created by incrementing a global 'source_location_id' counter, which doesn't work properly across modules causing clashes. We'll need to come up with a way to ensure that we properly emit the declarations; a possible testcase is // header.hpp #include <source_location> inline auto foo() { return std::source_location::current(); } // main.cpp import "header.hpp"; int main() { auto a = foo().file_name(); auto b = std::source_location::current().file_name(); return !(a[0] == b[0]); } Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103524 [Bug 103524] [meta-bug] modules issue