https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114961
Bug ID: 114961 Summary: [modules] using imported member functions in constexpr context causes ICE Product: gcc Version: 14.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jasio.lpn at gmail dot com Target Milestone: --- I have custom Vector class that behaves like std::vector - it allocates memory on heap and frees it in destructor so it can be used in constexpr contexts. This Vector class is implemented in module interface unit: // MyVector.cpp ... export module Vector; export template <template T> class Vector { ... constexpr Vector(std::size_t initialSize) noexcept { ... } constexpr std::size_t size() const noexcept { ... } }; // end of MyVector.cpp Now I want to use this is consteval function in main.cpp: // main.cpp #include <iostream> #include <array> import MyVector; consteval auto getArraySize() { MyVector<int> vecP(5); return vecP.size(); } int main() { std::array<int, getArraySize()> arr{}; std::cout << "arr size: " << arr.size() << "\n"; } // end of main.cpp This code causes ICE: /usr/local/bin/x86_64-linux-gnu-x86_64-linux-gnu-g++-14 -g -std=gnu++23 -fdiagnostics-color=always -MD -MT <cut>/main.cpp.o -MF <cut>/main.cpp.o.d -fmodules-ts -fmodule-mapper=<cut>/main.cpp.o.modmap -MD -fdeps-format=p1689r5 -x c++ -o <cut>/main.cpp.o -c <cut>/main.cpp <cut>/main.cpp:55:1: internal compiler error: in add_to_same_comdat_group, at symtab.cc:492 55 | } | ^ 0x6adb5d symtab_node::add_to_same_comdat_group(symtab_node*) ../../src/gcc/symtab.cc:492 0x8282c0 maybe_optimize_cdtor(tree_node*) ../../src/gcc/cp/optimize.cc:776 0x7aa967 import_export_decl(tree_node*) ../../src/gcc/cp/decl2.cc:3351 0x7aa967 c_parse_final_cleanups() ../../src/gcc/cp/decl2.cc:5289 0x98da64 c_common_parse_file() ../../src/gcc/c-family/c-opts.cc:1329 GCC version: gcc version 14.0.1 20240506 (prerelease) (GCC)