https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99309
Bug ID: 99309 Summary: Segmentation fault with __builtin_constant_p usage at -O2 Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: gcc at mailinator dot com Target Milestone: --- Compile: g++ -O2 a.cpp ./a.out Current output: 1 610334368 Segmentation fault (core dumped) Code: #include<iostream> struct T { int val; explicit constexpr operator int() const { return val; } constexpr T(int64_t v):val(v){} void operator*=(T m) { //std::cerr<<"start\n"; if(__builtin_constant_p(m.val)){ std::cerr<<"normal\n"; return; }else if(__builtin_constant_p(val)){ std::cerr<<"recursive\n"; return; }else{ std::cerr<<"return\n"; return; } } }; int main(){ T constexpr step=610334368; T value=1; for(int _=0; _<100; ++_){ std::cerr<<(int)value<<' '<<(int)step<<'\n'; value*=step; std::cerr<<(int)value<<' '<<(int)step<<'\n'; } }