diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3d5823832279..d9946997ba09 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2020-01-22 Marek Polacek + + PR c++/93324 - ICE with -Wall on constexpr if. + * semantics.c (is_std_constant_evaluated_p): Check fndecl. + 2020-01-22 Patrick Palka * constraint.cc (get_mapped_args): Avoid using auto_vec diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 3669b247e346..3b88f1520bc8 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d22747b1dfed..70d7e8869e18 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-01-22 Marek Polacek + + PR c++/93324 - ICE with -Wall on constexpr if. + * g++.dg/cpp1z/constexpr-if33.C: New test. + 2020-01-22 Richard Sandiford * gcc.target/aarch64/sve/acle/general/stack_vars_1.c: New test. diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-if33.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-if33.C new file mode 100644 index 000000000000..e5ef659932b3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-if33.C @@ -0,0 +1,16 @@ +// PR c++/93324 - ICE with -Wall on constexpr if. +// { dg-do compile { target c++17 } } +// { dg-options "-Wall" } + +struct { + template + static constexpr bool a() { return 0; } +} e; + +template +void d() +{ + auto c(e); + using b = decltype(c); + if constexpr (b::a<2>()); +}