c++ - g++ internal compiler error segmentation fault with recursive constexpr -


i updated g++ version 6.3.0 (g++ (homebrew gcc 6.3.0) 6.3.0), g++: internal compiler error: segmentation fault: 11 (program cc1plus). previous version (i'm not sure around) 5.2 worked. , on 1 of other computers use g++ (ubuntu 5.2.1-22ubuntu2) 5.2.1 , works.

the code is:

constexpr bool checkforprimenumber(const int p, const int t) {     return p <= t or (p % t , checkforprimenumber(p, t + 2)); }  constexpr bool checkforprimenumber(const int p) {     return p == 2 or (p & 1 , checkforprimenumber(p, 3)); }  int main()  {     static_assert(checkforprimenumber(65521), "bug..."); } 

i compile code with

g++ test.cpp -std=c++11 -fconstexpr-depth=65535 

what can possibly work around this?

edit:

bug report sumitted

the error comes stack overflow internally in g++. allegedly able increase stack (on macos 10.11.6). however, did not resolve issue @ hand. came solution, split check 2 branches, here code:

constexpr bool checkforprimenumber(const int p, const int t, const int hi) {     return p < hi , (p <= t or (p % t , checkforprimenumber(p, t + 2, hi))); }  constexpr bool checkforprimenumber(const int p) {     return p == 2 or (p & 1 , (checkforprimenumber(p, 3, 32768) or checkforprimenumber(p, 3+32768, 65536))); }  int main() {     static_assert(checkforprimenumber(65521), ""); } 

thanks

edit:

as suggested in comments solution may use c++14:

constexpr bool checkforprimenumber(const int p) {     if (p < 2)         return false;     if (p == 2)         return true;     if (~p & 1)         return false;     (int = 3; < p; += 2)     {         if (p % == 0)             return false;     }     return true; } 

Comments

Popular posts from this blog

python - How to insert QWidgets in the middle of a Layout? -

python - serve multiple gunicorn django instances under nginx ubuntu -

module - Prestashop displayPaymentReturn hook url -