Commit 6f346913 by Jason Merrill

c++: Avoid ICE when constant evaluation of __builtin_strchr fails.

If we can't change the argument to &"...", use the original arg instead of
the partially munged one.

	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.
parent 20afdcd3
2020-01-23 Jason Merrill <jason@redhat.com> 2020-01-23 Jason Merrill <jason@redhat.com>
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++/93345 - ICE with defaulted dtor and template.
PR c++/33799 PR c++/33799
* decl.c (cxx_maybe_build_cleanup): Don't try to set * decl.c (cxx_maybe_build_cleanup): Don't try to set
......
...@@ -1293,6 +1293,7 @@ cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun, ...@@ -1293,6 +1293,7 @@ cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun,
for (i = 0; i < nargs; ++i) for (i = 0; i < nargs; ++i)
{ {
tree arg = CALL_EXPR_ARG (t, i); tree arg = CALL_EXPR_ARG (t, i);
tree oarg = arg;
/* To handle string built-ins we need to pass ADDR_EXPR<STRING_CST> since /* To handle string built-ins we need to pass ADDR_EXPR<STRING_CST> since
expand_builtin doesn't know how to look in the values table. */ 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, ...@@ -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); arg = braced_lists_to_strings (TREE_TYPE (arg), arg);
if (TREE_CODE (arg) == STRING_CST) if (TREE_CODE (arg) == STRING_CST)
arg = build_address (arg); arg = build_address (arg);
else
arg = oarg;
} }
args[i] = arg; args[i] = arg;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment