diff options
author | Richard Biener <rguenther@suse.de> | 2022-01-24 14:59:00 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-01-31 09:38:10 +0100 |
commit | 625f16c798757dcbfdded841f01d7c566d15c55c (patch) | |
tree | 9d5ef9fef0337bced0c514059082bbe40e9f852c | |
parent | 23987912ddb4207de0714d81237f93f613557d1f (diff) | |
download | gcc-625f16c798757dcbfdded841f01d7c566d15c55c.tar.gz |
Fix multiple_of_p behavior with NOP_EXPR
We were passing down the original type to recursive invocations
of multiple_of_p for say (int)(unsigned * unsigned).
2022-01-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/100499
* 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.
-rw-r--r-- | gcc/fold-const.cc | 6 |
1 files 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); |