https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118829

            Bug ID: 118829
           Summary: [modules] ICE in add_indirects emitting template
                    typedef struct
           Product: gcc
           Version: 15.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: ---

Consider the following:

  // test.cpp
  export module M;
  template <typename> struct internal_capacity {
    typedef struct { } type;
  };

g++ -fmodules -S test.cpp:

test.cpp:1:8: internal compiler error: in add_indirects, at cp/module.cc:7660
    1 | export module M;
      |        ^~~~~~
0x3ca1957 internal_error(char const*, ...)
        ../../gcc/gcc/diagnostic-global-context.cc:517
0x3c6cc2c fancy_abort(char const*, int, char const*)
        ../../gcc/gcc/diagnostic.cc:1722
0x1104cce add_indirects
        ../../gcc/gcc/cp/module.cc:7660
0x110cc3f decl_node
        ../../gcc/gcc/cp/module.cc:9155
0x110f8ec tree_node
        ../../gcc/gcc/cp/module.cc:9782
0x110c52b decl_node
        ../../gcc/gcc/cp/module.cc:9070
0x110f8ec tree_node
        ../../gcc/gcc/cp/module.cc:9782
0x10fb0e7 tree_list
        ../../gcc/gcc/cp/module.cc:5258
0x111ed55 write_class_def
        ../../gcc/gcc/cp/module.cc:12637
0x1122d24 write_definition
        ../../gcc/gcc/cp/module.cc:13194
0x1128679 depset::hash::find_dependencies(module_state*)
        ../../gcc/gcc/cp/module.cc:14445
0x11387a5 module_state::write_begin(elf_out*, cpp_reader*,
module_state_config&, unsigned int&)
        ../../gcc/gcc/cp/module.cc:19323
0x114071e finish_module_processing(cpp_reader*)
        ../../gcc/gcc/cp/module.cc:21840
0x105a7f4 c_parse_final_cleanups()
        ../../gcc/gcc/cp/decl2.cc:5724
0x144d9d9 c_common_parse_file()
        ../../gcc/gcc/c-family/c-opts.cc:1408
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.

We hit the following assertion:

      tree type = TREE_TYPE (inner);
      gcc_checking_assert (DECL_ORIGINAL_TYPE (inner)
                           || TYPE_NAME (type) == inner);

I think the issue is that a struct which only gets its name for linkage
purposes within a template doesn't get its TYPE_NAME adjusted at that point; it
might be enough to simply account for that in the assertion but that need more
testing.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103524
[Bug 103524] [meta-bug] modules issue

Reply via email to