* Robert Dewar: > Florian Weimer wrote: >> If this still doesn't convince you, here's an example which doesn't >> use Ada.Unchecked_Conversion at all. > > this example must print Success, that is guaranteed by the RM
Yes, I think so. What about the first one in PR21573? IMHO, the GNAT Reference Manual makes a guarantee that it prints SUCESS, too, but I could be misreading the documentation. > it is definitely critical that 'Valid not make "in-range" > assumptions. > the actual problem is optimization of this > routine presumably: > function bug3_p__tRP (A : bug3_p__t; F : boolean) return integer is Indeed. In this case, bug3_p__t has TYPE_MIN_VALUE and TYPE_MAX_VALUE set according to T'First'Enum_Rep and T'Last'Enum_Rep. Even without VRP, add_case_node and node_has_high_bound in stmt.c check these attributes and use them in optimizations. > the unchecked conversion to unsigned must prevent any optimization. > the optimizer must not be able to "see through" an unchecked conversion! I don't think we currently have a convenient way to express such an optimization barrier in the tree language. I fear that such barriers are also needed for all checks on scalars, by the way, not just 'Valid.