PR c++/93324 - ICE with -Wall on constexpr if.

This is a crash with constexpr if, when trying to see if the call in
the if-statement is std::is_constant_evaluated.

cp_get_callee_fndecl_nofold can return NULL_TREE and fndecl_built_in_p
doesn't expect to get a null tree, so check FNDECL first.
This commit is contained in:
Marek Polacek 2020-01-22 11:44:13 -05:00
parent bf91504dc2
commit 15ed55eabb
4 changed files with 29 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2020-01-22 Marek Polacek <polacek@redhat.com>
PR c++/93324 - ICE with -Wall on constexpr if.
* semantics.c (is_std_constant_evaluated_p): Check fndecl.
2020-01-22 Patrick Palka <ppalka@redhat.com>
* constraint.cc (get_mapped_args): Avoid using auto_vec

View File

@ -734,6 +734,9 @@ is_std_constant_evaluated_p (tree fn)
return false;
tree fndecl = cp_get_callee_fndecl_nofold (fn);
if (fndecl == NULL_TREE)
return false;
if (fndecl_built_in_p (fndecl, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
BUILT_IN_FRONTEND))
return true;

View File

@ -1,3 +1,8 @@
2020-01-22 Marek Polacek <polacek@redhat.com>
PR c++/93324 - ICE with -Wall on constexpr if.
* g++.dg/cpp1z/constexpr-if33.C: New test.
2020-01-22 Richard Sandiford <richard.sandiford@arm.com>
* gcc.target/aarch64/sve/acle/general/stack_vars_1.c: New test.

View File

@ -0,0 +1,16 @@
// PR c++/93324 - ICE with -Wall on constexpr if.
// { dg-do compile { target c++17 } }
// { dg-options "-Wall" }
struct {
template <int>
static constexpr bool a() { return 0; }
} e;
template <typename>
void d()
{
auto c(e);
using b = decltype(c);
if constexpr (b::a<2>());
}