diff options
author | David Malcolm <dmalcolm@redhat.com> | 2022-10-04 20:19:06 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2022-10-04 20:19:06 -0400 |
commit | 7f42f7adfa69fea029fbb76286048f712bb017ff (patch) | |
tree | c438ef87124d2519f4f894f5b92789f6ee2bb31c /gcc | |
parent | e6fe02d832209393474ca049ca5e0b56a053fadd (diff) | |
download | gcc-7f42f7adfa69fea029fbb76286048f712bb017ff.zip gcc-7f42f7adfa69fea029fbb76286048f712bb017ff.tar.gz gcc-7f42f7adfa69fea029fbb76286048f712bb017ff.tar.bz2 |
analyzer: fold -(-(VAL)) to VAL
gcc/analyzer/ChangeLog:
* region-model-manager.cc
(region_model_manager::maybe_fold_unaryop): Fold -(-(VAL)) to VAL.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/analyzer/region-model-manager.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc index ed5b9c7..1956cfc 100644 --- a/gcc/analyzer/region-model-manager.cc +++ b/gcc/analyzer/region-model-manager.cc @@ -432,6 +432,17 @@ region_model_manager::maybe_fold_unaryop (tree type, enum tree_code op, } } break; + case NEGATE_EXPR: + { + /* -(-(VAL)) is VAL, for integer types. */ + if (const unaryop_svalue *unaryop = arg->dyn_cast_unaryop_svalue ()) + if (unaryop->get_op () == NEGATE_EXPR + && type == unaryop->get_type () + && type + && INTEGRAL_TYPE_P (type)) + return unaryop->get_arg (); + } + break; } /* Constants. */ |