https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86767
Bug ID: 86767 Summary: continue statements in constexpr functions causes unbounded looping Product: gcc Version: 8.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: syang0 at cs dot stanford.edu Target Milestone: --- Created attachment 44476 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44476&action=edit main.cc The constexpr function below fails to evaluate at compile-time and causes unbounded looping on the inner for-loop, despite it having a very well defined bound [0, 10). The cause seems to be related to the "continue" statement in the outer for loop of the constexpr function. If I remove the "continue" completely, the code compiles fine. If I remove the constexpr requirement for "num" variable in main() (which stores the return value), it compiles and runs fine without hanging. This problem reproduces in g++ versions 8.2, 8.1, 7.3, 7.2, 7.1, 6.3, and 5.5 and was compiled with the command 'g++ --std=c++17 main.cc' constexpr int sampleFn() { for (int i = 0; i < 10; ++i) { continue; // Should never run and is well bounded, but compiler hangs here for (int j = 0; j < 10; ++j ) {} } return 10; } void test() { // Removing 'constexpr' allows compilation to proceed constexpr int num = sampleFn(); }