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 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 begin case system__unsigned_types__unsigned!(A) is when 2 => return 0; when 3 => return 1; when 5 => return 2; when 7 => return 3; when others => [constraint_error when F "invalid data"] return -1; end case; end bug3_p__tRP; the unchecked conversion to unsigned must prevent any optimization. the optimizer must not be able to "see through" an unchecked conversion!