pointer_plus [0, 0] + const folding
authorAndrew MacLeod <amacleod@redhat.com>
Fri, 16 Oct 2020 19:10:17 +0000 (15:10 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Fri, 16 Oct 2020 19:10:17 +0000 (15:10 -0400)
Return a constant range if POINTER_PLUS is [0,0] plus a const.

* range-op.cc (pointer_plus_operator::wi_fold): Make pointer_plus
[0, 0] + const return a [const, const] range.

gcc/range-op.cc

index de4cfe4..0efa001 100644 (file)
@@ -3064,6 +3064,14 @@ pointer_plus_operator::wi_fold (irange &r, tree type,
                                const wide_int &rh_lb,
                                const wide_int &rh_ub) const
 {
+  // Check for [0,0] + const, and simply return the const.
+  if (lh_lb == 0 && lh_ub == 0 && rh_lb == rh_ub)
+    {
+      tree val = wide_int_to_tree (type, rh_lb);
+      r.set (val, val);
+      return;
+    }
+
   // For pointer types, we are really only interested in asserting
   // whether the expression evaluates to non-NULL.
   //