c++: diagnosing if-stmt with non-constant branches [PR105050]
authorPatrick Palka <ppalka@redhat.com>
Sat, 26 Mar 2022 14:20:18 +0000 (10:20 -0400)
committerPatrick Palka <ppalka@redhat.com>
Sat, 26 Mar 2022 14:20:18 +0000 (10:20 -0400)
commitff465bd8a0f0f96a00d3067018442917b194b7af
treef15d80be7e43b2fc92aa879bd2eec915bada60b4
parent04f19580e8dbdbc7366d0f5fd068aa0cecafdc9d
c++: diagnosing if-stmt with non-constant branches [PR105050]

When an if-stmt is determined to be non-constant because both of its
branches are non-constant, we issue a somewhat generic error which,
since the error also points to the 'if' token, misleadingly suggests
the condition is at fault:

  constexpr-105050.C:8:3: error: expression â€˜<statement>’ is not a constant expression
      8 |   if (p != q && *p < 0)
        |   ^~

This patch clarifies the error message to instead read:

  constexpr-105050.C:8:3: error: neither branch of â€˜if’ is a constant expression
      8 |   if (p != q && *p < 0)
        |   ^~

PR c++/105050

gcc/cp/ChangeLog:

* constexpr.cc (potential_constant_expression_1) <case IF_STMT>:
Clarify error message when a if-stmt is non-constant because its
branches are non-constant.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1y/constexpr-105050.C: New test.
gcc/cp/constexpr.cc
gcc/testsuite/g++.dg/cpp1y/constexpr-105050.C [new file with mode: 0644]