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.
+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
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;
+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.
--- /dev/null
+// 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>());
+}