diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f99951cb72c5..b13ee2b38207 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2020-01-23 Jason Merrill + PR c++/93331 - ICE with __builtin_strchr. + * constexpr.c (cxx_eval_builtin_function_call): Use the original + argument if we didn't manage to extract a STRING_CST. + PR c++/93345 - ICE with defaulted dtor and template. PR c++/33799 * decl.c (cxx_maybe_build_cleanup): Don't try to set diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 5864b67d4de0..f6b8f331bc9c 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -1293,6 +1293,7 @@ cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun, for (i = 0; i < nargs; ++i) { tree arg = CALL_EXPR_ARG (t, i); + tree oarg = arg; /* To handle string built-ins we need to pass ADDR_EXPR since expand_builtin doesn't know how to look in the values table. */ @@ -1327,6 +1328,8 @@ cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun, arg = braced_lists_to_strings (TREE_TYPE (arg), arg); if (TREE_CODE (arg) == STRING_CST) arg = build_address (arg); + else + arg = oarg; } args[i] = arg; diff --git a/gcc/testsuite/gcc.c-torture/compile/pr34029-1.c b/gcc/testsuite/c-c++-common/pr34029-1.c similarity index 100% rename from gcc/testsuite/gcc.c-torture/compile/pr34029-1.c rename to gcc/testsuite/c-c++-common/pr34029-1.c