Package: g++-14 Version: 14.2.0-12 Severity: normal Dear Maintainer,
* What exactly did you do? First I prepared in /usr/include/c++/14/ string.gcm and fstream.gcm, calling g++ --std=c++26 -Wall -fmodules-ts -x c++-system-header string and g++ --std=c++26 -Wall -fmodules-ts -x c++-system-header fstream followed by mv gcm.cache/usr/include/c++/14/*.gcm . so they're located in /usr/include/c++/14/ and can be imported. Then I wrote the following source file (e.g., factory.cc, stripped down to its bare essentials (commented lines are covered below): --------------------------------------------------------------------- //#include <string> // #1 //#include <fstream> // export module Factory; // #2 export import <string>; // export import <fstream>; // export // { // template <typename Stream> Stream streamFactory(std::string const &name) { return Stream{ name }; } std::ifstream factory(std::string const &name) { return std::ifstream{ name }; } void consume(std::string const &name) { [[maybe_unused]] std::ifstream in{ streamFactory<std::ifstream>(name) }; // #3 // std::ifstream in; // #4 // in = streamFactory<std::ifstream>(name); // // std::ifstream in{ factory(name) }; // #5 } } // NOTE: #2 --------------------------------------------------------------------- In its directory I defined a sub-directory gcm.cache having a softlink usr -> /usr so the module-compiled headers are available. When compiling factory.cc using g++ -freport-bug --std=c++26 -Wall -fmodules-ts -c factory.cc an internal compiler error is reported: ---------------------------------------------------------------------------------------------- factory.cc: In function â<80><98>void consume(const std::string&)â<80><99>: factory.cc:24:66: internal compiler error: in simplify_aggr_init_expr, at cp/semantics.cc:4953 24 | std::ifstream in{ streamFactory<std::ifstream>(name) }; // #3 | ^ 0x1406bd1 internal_error(char const*, ...) ???:0 0x13ffe27 fancy_abort(char const*, int, char const*) ???:0 0x1694409 cp_gimplify_expr(tree_node**, gimple**, gimple**) ???:0 0x157d6fb gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) ???:0 0x157e5cd gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) ???:0 0x157e759 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) ???:0 0x157ec0a gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) ???:0 0x1573c56 gimplify_body(tree_node*, bool) ???:0 0x1572ce8 gimplify_function_tree(tree_node*) ???:0 0x157181f cgraph_node::analyze() ???:0 0x1aca30d symbol_table::finalize_compilation_unit() ???:0 Please submit a full bug report, with preprocessed source. Please include the complete backtrace with any bug report. See <file:///usr/share/doc/gcc-14/README.Bugs> for instructions. ---------------------------------------------------------------------------------------------- If, instead of line #3 the two lines #4 are used or line #5 is used compilation ends without errors. Also, if line #3 and the lines #1 are activated, but the module-related lines (#2) are removed, using a non-module compilation: g++ --std=c++26 -Wall -c factory.cc compilation successfully ends. Apparently using module-compilation initializing a std::ifstream using a function template factory function results in the internal compiler error. * What outcome did you expect instead? I expected that the function template returning a stream could be used to construct a stream object, like it's possible with a non-module compilation and with a module compilation using a plain factory function instead of a factory function which is a function template. *** End of the template - remove these template lines *** -- System Information: Debian Release: trixie/sid APT prefers testing APT policy: (500, 'testing'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 6.12.10-amd64 (SMP w/2 CPU threads; PREEMPT) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages g++-14 depends on: ii g++-14-x86-64-linux-gnu 14.2.0-12 ii gcc-14 14.2.0-12 ii gcc-14-base 14.2.0-12 g++-14 recommends no packages. Versions of packages g++-14 suggests: pn g++-14-multilib <none> pn gcc-14-doc <none> -- no debconf information