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

            Bug ID: 118671
           Summary: [15 regression] ICE in
                    output_constructor_regular_field at, varasm.cc
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: enrico.seiler+gccbugs at outlook dot com
  Target Milestone: ---

The following results in an ICE:

```
#include <optional>
#include <vector>

std::vector<std::optional<int>> a{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
```

Reduced version without includes:

```
namespace std {

template <typename> struct initializer_list {
private:
  int *_M_array;
  unsigned long _M_len;
};

struct in_place_t {} in_place;

struct optional {
  constexpr optional(int __t) : optional(in_place, __t) {}
  template <typename... _Args>
  constexpr optional(in_place_t, _Args... __args) : _M_value(__args...) {}

  int _M_value;
};

struct vector {
  vector(initializer_list<optional>);
};

} // namespace std

std::vector a{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
```

Compiler Explorer: https://godbolt.org/z/Eja9To1nP

test.cpp:24:74: internal compiler error: in output_constructor_regular_field,
at varasm.cc:5800
   24 |               1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1};
      |                                                                        
 ^
0x28bba41 internal_error(char const*, ...)
        diagnostic-global-context.cc:517
0xab3e27 fancy_abort(char const*, int, char const*)
        diagnostic.cc:1722
0x9d71b6 output_constructor_regular_field
        varasm.cc:5800
0x9d71b6 output_constructor
        varasm.cc:6117
0x181c6c5 assemble_variable_contents
        varasm.cc:2440
0x18224ad assemble_variable(tree_node*, int, int, int)
        varasm.cc:2619
0x1826b89 varpool_node::assemble_decl()
        varpool.cc:596
0xefab33 output_in_order
        cgraphunit.cc:2209
0xefab33 symbol_table::compile()
        cgraphunit.cc:2415
0xefdb27 symbol_table::compile()
        cgraphunit.cc:2329
0xefdb27 symbol_table::finalize_compilation_unit()
        cgraphunit.cc:2603

I have not bisected, but I can point to a range:

Last known working:
https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=e9bd9d42dddd7a9b1c080426b0b16d3704673cbf
First known fail:
https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=06b78732f7ce424ab7d8c619f1ea90936fedff51

Reply via email to