aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 410acdf..7b0e872 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -4544,6 +4544,7 @@ get_narrower (tree op, int *unsignedp_ptr)
int uns = 0;
int first = 1;
tree win = op;
+ bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
while (TREE_CODE (op) == NOP_EXPR)
{
@@ -4580,6 +4581,10 @@ get_narrower (tree op, int *unsignedp_ptr)
uns = TYPE_UNSIGNED (TREE_TYPE (op));
first = 0;
op = TREE_OPERAND (op, 0);
+ /* Keep trying to narrow, but don't assign op to win if it
+ would turn an integral type into something else. */
+ if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
+ continue;
}
win = op;