@@ -311,12 +311,37 @@ public:
r = lh;
return true;
}
+ virtual bool fold_range (prange &r, tree, const prange &lh,
+ const prange &, relation_trio) const
+ {
+ r = lh;
+ return true;
+ }
virtual bool op1_range (irange &r, tree, const irange &lhs,
const irange &, relation_trio) const
{
r = lhs;
return true;
}
+ virtual bool op1_range (prange &r, tree, const prange &lhs,
+ const prange &, relation_trio) const
+ {
+ r = lhs;
+ return true;
+ }
+ virtual bool pointers_handled_p (range_op_dispatch_type type,
+ unsigned dispatch) const
+ {
+ switch (type)
+ {
+ case DISPATCH_FOLD_RANGE:
+ return dispatch == RO_PPP;
+ case DISPATCH_OP1_RANGE:
+ return dispatch == RO_PPP;
+ default:
+ return true;
+ }
+ }
} op_cfn_pass_through_arg1;
// Implement range operator for CFN_BUILT_IN_SIGNBIT.
@@ -1107,6 +1132,17 @@ public:
r.set (type, wi::zero (TYPE_PRECISION (type)), max - 2);
return true;
}
+ virtual bool pointers_handled_p (range_op_dispatch_type type,
+ unsigned dispatch) const
+ {
+ switch (type)
+ {
+ case DISPATCH_FOLD_RANGE:
+ return dispatch == RO_IPI;
+ default:
+ return true;
+ }
+ }
} op_cfn_strlen;