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

            Bug ID: 114856
           Summary: [14 regression][modules] ICE (segfault)
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: D.Klein at gsi dot de
  Target Milestone: ---

Created attachment 58042
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58042&action=edit
/tmp/ccHpxCro.out - preprocessed source

❯ cat repro.cpp
module;

#include <array>
#include <string>
#include <vector>

export module repro;

export struct data {
  std::vector<std::array<std::string, 3>> asdf{{"42","42","42"}};
};

❯ g++ -v -save-temps -freport-bug -fmodules-ts repro.cpp
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/home/dklein/gcc-master/libexec/gcc/x86_64-pc-linux-gnu/14.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ./configure --prefix=/home/dklein/gcc-master
--disable-multilib --disable-bootstrap : (reconfigured) ./configure
--prefix=/home/dklein/gcc-master --disable-multilib --disable-bootstrap :
(reconfigured) ./configure --prefix=/home/dklein/gcc-master --disable-multilib
--disable-bootstrap --enable-languages=c,c++,fortran,lto,objc --no-create
--no-recursion
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.0.1 20240425 (experimental) (GCC)
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-freport-bug' '-fmodules-ts'
'-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-'
 /home/dklein/gcc-master/libexec/gcc/x86_64-pc-linux-gnu/14.0.1/cc1plus -E
-quiet -v -D_GNU_SOURCE repro.cpp -mtune=generic -march=x86-64 -freport-bug
-fmodules-ts -fpch-preprocess -o a-repro.ii
ignoring nonexistent directory
"/home/dklein/gcc-master/lib/gcc/x86_64-pc-linux-gnu/14.0.1/../../../../x86_64-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:

/home/dklein/gcc-master/lib/gcc/x86_64-pc-linux-gnu/14.0.1/../../../../include/c++/14.0.1

/home/dklein/gcc-master/lib/gcc/x86_64-pc-linux-gnu/14.0.1/../../../../include/c++/14.0.1/x86_64-pc-linux-gnu

/home/dklein/gcc-master/lib/gcc/x86_64-pc-linux-gnu/14.0.1/../../../../include/c++/14.0.1/backward
 /home/dklein/gcc-master/lib/gcc/x86_64-pc-linux-gnu/14.0.1/include
 /usr/local/include
 /home/dklein/gcc-master/include
 /home/dklein/gcc-master/lib/gcc/x86_64-pc-linux-gnu/14.0.1/include-fixed
 /usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-freport-bug' '-fmodules-ts'
'-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-'
 /home/dklein/gcc-master/libexec/gcc/x86_64-pc-linux-gnu/14.0.1/cc1plus
-fpreprocessed a-repro.ii -quiet -dumpdir a- -dumpbase repro.cpp -dumpbase-ext
.cpp -mtune=generic -march=x86-64 -version -freport-bug -fmodules-ts -o
a-repro.s
GNU C++17 (GCC) version 14.0.1 20240425 (experimental) (x86_64-pc-linux-gnu)
        compiled by GNU C version 14.0.1 20240411 (Red Hat 14.0.1-0), GMP
version 6.2.1, MPFR version 4.2.1, MPC version 1.3.1, isl version none
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: 66103b0a3eb595c28eae89ea7eb332ba
repro.cpp:7:9: internal compiler error: Segmentation fault
    7 | export module repro;
      |         ^~~~~~
0x12ff8df crash_signal
        ../.././gcc/toplev.cc:319
0xb512ae tree_check(tree_node*, char const*, int, char const*, tree_code)
        ../.././gcc/tree.h:3623
0xb512ae get_merge_kind
        ../.././gcc/cp/module.cc:10679
0xb512ae decl_value
        ../.././gcc/cp/module.cc:7787
0xb5a4a3 depset::hash::find_dependencies(module_state*)
        ../.././gcc/cp/module.cc:13592
0xb5b2f3 module_state::write_begin(elf_out*, cpp_reader*, module_state_config&,
unsigned int&)
        ../.././gcc/cp/module.cc:18198
0xb5c9a4 finish_module_processing(cpp_reader*)
        ../.././gcc/cp/module.cc:20562
0xae6ee1 c_parse_final_cleanups()
        ../.././gcc/cp/decl2.cc:5357
0xd37c50 c_common_parse_file()
        ../.././gcc/c-family/c-opts.cc:1329
Please submit a full bug report, with preprocessed source.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Preprocessed source stored into /tmp/ccHpxCro.out file, please attach this to
your bugreport.

repro.cpp compiles with GCC 13.2.0 (https://godbolt.org/z/Ph834fvja). A git
bisect from 1604f7cebc49220e47d584615bcd91b1fdc1267f to releases/gcc-13.2.0
suggests the following commit to introduce the regression:

commit 2823b4d96d9ec4ad4e67e5e8edaa1b060a467491
Author: Nathaniel Shead <nathanielosh...@gmail.com>
Date:   Thu Feb 29 22:49:13 2024 +1100

    c++: Ensure DECL_CONTEXT is set for temporary vars [PR114005]

    Modules streaming requires DECL_CONTEXT to be set for anything streamed.
    This patch ensures that 'create_temporary_var' does set a DECL_CONTEXT
    for these variables (such as the backing storage for initializer_lists)
    even if not inside a function declaration.

            PR c++/114005

    gcc/cp/ChangeLog:

            * init.cc (create_temporary_var): Use current_scope instead of
            current_function_decl.

    gcc/testsuite/ChangeLog:

            * g++.dg/modules/pr114005_a.C: New test.
            * g++.dg/modules/pr114005_b.C: New test.

    Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com>

Reply via email to