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)

Reply via email to