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';
        }
}

Reply via email to