[gcc/devel/ranger] c++: Avoid ICE when constant evaluation of __builtin_strchr fails.
Aldy Hernandez
aldyh@gcc.gnu.org
Wed Jun 17 18:14:47 GMT 2020
https://gcc.gnu.org/g:6f346913f2a87e26c6095d9fbf3d20f926c5470a
commit 6f346913f2a87e26c6095d9fbf3d20f926c5470a
Author: Jason Merrill <jason@redhat.com>
Date: Thu Jan 23 12:43:15 2020 -0500
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.
Diff:
---
gcc/cp/ChangeLog | 4 ++++
gcc/cp/constexpr.c | 3 +++
gcc/testsuite/{gcc.c-torture/compile => c-c++-common}/pr34029-1.c | 0
3 files changed, 7 insertions(+)
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index f99951cb72c..b13ee2b3820 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
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++/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 5864b67d4de..f6b8f331bc9 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<STRING_CST> 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
More information about the Gcc-cvs
mailing list