(root)/
gcc-13.2.0/
gcc/
testsuite/
gnat.dg/
hardbool.adb
-- { dg-do compile }
-- { dg-options "-O -gnatVT -fdump-tree-optimized" }

--  Check that we perform the expected validity checks for
--  hardbool-annotated types, even when checking of tests is disabled.

package body Hardbool is
   function T return Boolean is (Boolean (X) and then Boolean (Y));

   procedure P1 is
   begin
      X := HBool1 (not Y);
   end P1;

   procedure P2 is
   begin
      X := HBool1 (if Y then HBool2'(False) else HBool2'(True));
   end P2;

   procedure P3 is
   begin
      X := (if Y then HBool1'(False) else HBool1'(True));
   end P3;

   procedure Q1 is
   begin
      Y := HBool2 (not X);
   end Q1;

   procedure Q2 is
   begin
      Y := HBool2 (if X then HBool1'(False) else HBool1'(True));
   end Q2;

   procedure Q3 is
   begin
      Y := (if X then HBool2'(False) else HBool2'(True));
   end Q3;

end Hardbool;

-- One for each type's _rep_to_pos function.
-- { dg-final { scan-tree-dump-times "gnat_rcheck_CE_Invalid_Data ..hardbool.ads" 2 "optimized" } }

-- One check for each variable used in T, one use in each P* and in each Q*.
-- { dg-final { scan-tree-dump-times "gnat_rcheck_CE_Invalid_Data ..hardbool.adb" 8 "optimized" } }