https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118296
Bug ID: 118296
Summary: internal compiler error: in cxx_eval_bare_aggregate,
at cp/constexpr.cc WHEN block{...}appeared in [...]
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: terryinzaghi at 163 dot com
Target Milestone: ---
internal compiler error: in cxx_eval_bare_aggregate, at cp/constexpr.cc:5301
WHEN put
{...}/*to match std::initializer_list*/
into
[...]/*multi params array subscriptoperator*/
gcc 14.2
/*Code Can Trigger This Error*/
#include <cstdint>
#include <type_traits>
#include <initializer_list>
struct J {
const char* _key = nullptr;
constexpr J(std::initializer_list<J> l)
{}
constexpr J(double)
{}
template<typename T> requires(std::is_integral_v<T>)constexpr J(T v)
{}
constexpr J(bool)
{}
template<std::size_t N>constexpr J(const char(&s)[N])
{}
constexpr J(std::nullptr_t)
{}
};
struct Array {
constexpr J operator[](auto... Js) const {
return(J{Js...});
};
};
static constexpr auto a = Array{};
struct Key {
const char* _key = nullptr;
constexpr Key(){}
template<std::size_t N>constexpr auto operator[](const char(&s)[N]) const{
Key nk{};
nk._key =s;
return(nk);
};
constexpr J operator=(J j) const{
j._key = _key;
return(j);
};
};
static constexpr auto k = Key{};
int main() {
constexpr J json = {
k["abc"] = 1.1,
k["def"] = true,
k["ghi"] = false,
k["kk"] = nullptr,
k["str"] = "sssssssssssssssssssssssssssssss",
k["dict"] = {
k["aaa"] = 1.1,
k["def"] = true,
k["ghi"] = false,
k["kk"] = nullptr
},
k["ary"] = a[
1.1,
true,
false,
nullptr,
////<remove this block will make it work>
{
k["abc"] = 1.1,
k["def"] = true,
k["ghi"] = false,
k["kk"] = nullptr,
k["dict"] = {
k["abc"] = 1.1,
k["def"] = true,
k["ghi"] = false,
k["kk"] = nullptr
}
},
////</remove this block will make it work>
1.1,
true,
false,
nullptr,
a[1,2,3,4,5]
]
};
};