We were passing down the original type to recursive invocations of multiple_of_p for say (int)(unsigned * unsigned).
Bootstrap and regtest pending on x86_64-unknown-linux-gnu. 2022-01-24 Richard Biener <rguent...@suse.de> * fold-const.cc (multiple_of_p): Pass the correct type of the expression to the recursive invocation of multiple_of_p for conversions and use CASE_CONVERT. --- gcc/fold-const.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index fd9c6352d4f..b155611578d 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -14149,14 +14149,14 @@ multiple_of_p (tree type, const_tree top, const_tree bottom) } return 0; - case NOP_EXPR: + CASE_CONVERT: /* Can't handle conversions from non-integral or wider integral type. */ if ((TREE_CODE (TREE_TYPE (TREE_OPERAND (top, 0))) != INTEGER_TYPE) || (TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (top, 0))))) return 0; - - /* fall through */ + return multiple_of_p (TREE_TYPE (TREE_OPERAND (top, 0)), + TREE_OPERAND (top, 0), bottom); case SAVE_EXPR: return multiple_of_p (type, TREE_OPERAND (top, 0), bottom); -- 2.31.1