aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/tree-ssa-ccp.c11
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3fb67e7..47ada40 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -2,6 +2,9 @@
* builtins.c (expand_builtin_stpcpy): Don't modify len.
+ * tree-ssa-ccp.c (ccp_fold_builtin): Strip conversion exprs
+ with prejudice.
+
2004-07-10 Kelley Cook <kcook@gcc.gnu.org>
* flags.h: Delete redundant prototypes that are being generated
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index d2c503d..01da8f8 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -2405,7 +2405,16 @@ ccp_fold_builtin (tree stmt, tree fn)
}
if (result && ignore)
- STRIP_NOPS (result);
+ {
+ /* STRIP_NOPS isn't strong enough -- it'll stop when we change modes,
+ but given that we're ignoring the result, we don't care what type
+ is being returned by the transformed function. */
+ while (TREE_CODE (result) == NOP_EXPR
+ || TREE_CODE (result) == CONVERT_EXPR
+ || TREE_CODE (result) == NON_LVALUE_EXPR)
+ result = TREE_OPERAND (result, 0);
+ }
+
return result;
}