https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114868
Bug ID: 114868 Summary: [modules] func declared in GMF and exported via using-decl in module partition is not actually exported Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: m.cencora at gmail dot com Target Milestone: --- $ cat mod.cpp export module mod; export import :part; export void foo() { } $ cat mod-part.cpp module; #include "bar.hpp" export module mod:part; export using ::bar; export void bar_non_gmf() { } $ cat usage.cpp import mod; int main() { foo(); bar(); bar_non_gmf(); } $ g++ -std=c++2b -fmodules-ts mod-part.cpp mod.cpp usage.cpp usage.cpp: In function ‘int main()’: usage.cpp:6:5: error: ‘bar’ was not declared in this scope 6 | bar(); | ^~~ When I compile mod-part.cpp on its own, it seems that bar symbol is not emitted in the object file: $ g++ -std=c++2b -fmodules-ts mod-part.cpp -c -o mod-part.o $ readelf -s mod-part.o | c++filt Symbol table '.symtab' contains 5 entries: Num: Value Size Type Bind Vis Ndx Name 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS mod-part.cpp 2: 0000000000000000 0 SECTION LOCAL DEFAULT 1 .text 3: 0000000000000000 11 FUNC GLOBAL DEFAULT 1 bar_non_gmf@mod() 4: 000000000000000b 11 FUNC GLOBAL DEFAULT 1 initializer for module mod:part