From 1de1073520a877b46a0b93c5b0eb4c0b29b97e84 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Thu, 4 Jan 2018 18:05:10 +0000 Subject: [PATCH] Add tree_fits_uhwi_p tests to BIT_FIELD_REF folder The first BIT_FIELD_REF folding pattern assumed without checking that operands satisfy tree_fits_uhwi_p. The second pattern does check this: /* On constants we can use native encode/interpret to constant fold (nearly) all BIT_FIELD_REFs. */ if (CONSTANT_CLASS_P (arg0) && can_native_interpret_type_p (type) && BITS_PER_UNIT == 8 && tree_fits_uhwi_p (op1) && tree_fits_uhwi_p (op2)) so this patch adds the checks to the first pattern too. This is needed for POLY_INT_CST bit positions. 2018-01-04 Richard Sandiford gcc/ * fold-const.c (fold_ternary_loc): Check tree_fits_uhwi_p before using tree_to_uhwi. From-SVN: r256258 --- gcc/ChangeLog | 5 +++++ gcc/fold-const.c | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 64326df830a..d2342b12b69 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-01-04 Richard Sandiford + + * fold-const.c (fold_ternary_loc): Check tree_fits_uhwi_p before + using tree_to_uhwi. + 2018-01-04 Richard Sandiford * tree-ssa-forwprop.c (is_combined_permutation_identity): Allow diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 46490cad0bc..521c2dc09ce 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -11643,7 +11643,9 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type, if (TREE_CODE (arg0) == VECTOR_CST && (type == TREE_TYPE (TREE_TYPE (arg0)) || (TREE_CODE (type) == VECTOR_TYPE - && TREE_TYPE (type) == TREE_TYPE (TREE_TYPE (arg0))))) + && TREE_TYPE (type) == TREE_TYPE (TREE_TYPE (arg0)))) + && tree_fits_uhwi_p (op1) + && tree_fits_uhwi_p (op2)) { tree eltype = TREE_TYPE (TREE_TYPE (arg0)); unsigned HOST_WIDE_INT width = tree_to_uhwi (TYPE_SIZE (eltype));