https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117969
Bug ID: 117969 Summary: internal compiler error: in build_data_member_initialization, at cp/constexpr.cc:453 Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: ice-on-invalid-code Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- template<typename T, unsigned long N> struct array { T a[N]; T* data() const { return a; } unsigned long size() const { return N; } }; template<typename T> struct span { template<typename Iter> constexpr explicit span(Iter first, unsigned long count) : ptr(first), size(count) { if (__builtin_expect(!valid_range(first, first + count), 0)) throw; } template<typename U, unsigned long ArrayExtent> constexpr span(const array<U, ArrayExtent>& arr) noexcept : span(static_cast<T*>(arr.data()), ArrayExtent) { } T* ptr; unsigned size; }; struct A { constexpr A(span<const unsigned char>) {} }; constexpr A val{array<unsigned char, 2>{{0x11, 0x22}}}; s.cc:35:17: error: ‘constexpr span<T>::span(const array<U, ArrayExtent>&) [with U = unsigned char; long unsigned int ArrayExtent = 2; T = const unsigned char]’ called in a constant expression 35 | constexpr A val{array<unsigned char, 2>{{0x11, 0x22}}}; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ s.cc:23:5: note: ‘constexpr span<T>::span(const array<U, ArrayExtent>&) [with U = unsigned char; long unsigned int ArrayExtent = 2; T = const unsigned char]’ is not usable as a ‘constexpr’ function because: 23 | span(const array<U, ArrayExtent>& arr) noexcept | ^~~~ s.cc:23:5: internal compiler error: in build_data_member_initialization, at cp/constexpr.cc:453 0x2809950 internal_error(char const*, ...) /home/jwakely/src/gcc/gcc/gcc/diagnostic-global-context.cc:517 0xa24eff fancy_abort(char const*, int, char const*) /home/jwakely/src/gcc/gcc/gcc/diagnostic.cc:1696 0x738702 build_data_member_initialization /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:453 0xa770cc build_constexpr_constructor_member_initializers /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:665 0xa770cc massage_constexpr_body /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:789 0xa8c902 explain_invalid_constexpr_fn(tree_node*) /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:1100 0xa79a8a cxx_eval_call_expression /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:3121 0xa7b812 cxx_eval_constant_expression /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:7579 0xa7d8eb cxx_eval_constant_expression /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:7705 0xa784b3 cxx_bind_parameters_in_call /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:1907 0xa784b3 cxx_eval_call_expression /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:3059 0xa7b812 cxx_eval_constant_expression /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:7579 0xa8816f cxx_eval_outermost_constant_expr /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:8868 0xa8e002 maybe_constant_init_1 /home/jwakely/src/gcc/gcc/gcc/cp/constexpr.cc:9379 0xd04e6c store_init_value(tree_node*, tree_node*, vec<tree_node*, va_gc, vl_embed>**, int) /home/jwakely/src/gcc/gcc/gcc/cp/typeck2.cc:909 0xadcc10 check_initializer /home/jwakely/src/gcc/gcc/gcc/cp/decl.cc:7877 0xb07c55 cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int, cp_decomp*) /home/jwakely/src/gcc/gcc/gcc/cp/decl.cc:8937 0xc15798 cp_parser_init_declarator /home/jwakely/src/gcc/gcc/gcc/cp/parser.cc:23955 0xc1c8c1 cp_parser_simple_declaration /home/jwakely/src/gcc/gcc/gcc/cp/parser.cc:16201 0xc26f35 cp_parser_declaration /home/jwakely/src/gcc/gcc/gcc/cp/parser.cc:15874 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.