-- { dg-do compile } -- { dg-options "-O2" } procedure Boolean_Subtype1 is subtype Component_T is Boolean; function Condition return Boolean is begin return True; end; V : Integer := 0; function Component_Value return Integer is begin V := V + 1; return V; end; Most_Significant : Component_T := False; Least_Significant : Component_T := True; begin if Condition then Most_Significant := True; end if; if Condition then Least_Significant := Component_T'Val (Component_Value); end if; if Least_Significant < Most_Significant then Least_Significant := Most_Significant; end if; if Least_Significant /= True then raise Program_Error; end if; end;