https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105821

            Bug ID: 105821
           Summary: ICE for illegal constexpr-if
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fiesh at zefix dot tv
  Target Milestone: ---

The following code leads to resource exhaustion:

namespace a {};
template <int g, unsigned h> int r() {
  if constexpr (a) {
    return r<g, h / 2>();
  } else {
    return r<(g + h) / 2, h>();
  }
}
template <int f, unsigned g> int count() {
  return r<0, g>() + count<f, g * 2>();
}
struct q {
  const int p = count<0, 1>();
};

Tested with 7 through 12.  Changing "if constexpr(a)" to say "if
constexpr(a::b)" exhibits the same behavior.

(It also seems to crash clang-14, but not clang-13 and older.  It seems they do
crash with "a::b" instead of "a" though.)

Reply via email to