On Sun, Apr 12, 2009 at 9:37 AM, Eric Botcazou <ebotca...@adacore.com> wrote:
>> I wonder what this exception in VRP looks like?
>
> I wasn't specifically referring to an exception in VRP.  I think that, when
> checks are off, it would be sufficient for gigi to emit sort of assertions
> for arguments on function entry (like your VRP patch did) and for return
> values on function calls; VRP would then just propagate them.
>
> Could ASSERT_EXPR be used for this purpose, i.e. could it be made a first
> class GENERIC (or GIMPLE) expression that front-ends could emit (during
> gimplification)?

Yes, we could do that.  Though a simpler form may be preferable, like
directly specifying a constant range/anti-range instead of encoding these
in (multiple) ASSERT_EXPRs.

I will think of something.

As for Ada - both function entry and exit constraints will be checked by
the caller/callee, correct?  So that once you inline VRP should be able
to derive the ranges from existing checks?  Thus - a IPA VRP pass should
be able to verify these properties across functions?

>> I also wonder if adding a test to the gimplifier that all integral typed
>> DECL types have NULL TREE_TYPE and TYPE_MIN/MAX_VALUE according to their
>> TYPE_PRECISION would pass with your changes (there may be such odd cases
>> with other frontends ...).
>
> Note that the changes don't eliminate subtypes (gigi generates the same
> GENERIC code), their actual bounds are only made private to gigi and their
> visible bounds set to that of the base type; IOW there is no lowering pass,
> except for the gimplification that will remove unnecessary casts.
>
> I think that the invariant should be that all integral types that appear in
> the code (types for declarations and expressions) have maximal bounds for
> their precision; "range" types should only be descriptive.

Yes, I agree.  I volunteer to prepare a verification pass that asserts this
property during gimplification.

Thanks,
Richard.

Reply via email to