> Hmm, sad. As the a check in tree-cfg for truth-expressions about > having type-precision of 1 would be a good way. What is actual the > cause for not setting type-precision here?
But we are setting it: /* In Ada, we use an unsigned 8-bit type for the default boolean type. */ boolean_type_node = make_unsigned_type (8); TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE); See make_unsigned_type: /* Create and return a type for unsigned integers of PRECISION bits. */ tree make_unsigned_type (int precision) { tree type = make_node (INTEGER_TYPE); TYPE_PRECISION (type) = precision; fixup_unsigned_type (type); return type; } The other languages are changing the precision, but in Ada we need a standard scalar (precision == mode size) in order to support invalid values. > At least in testcases I didn't found a regression caused by this. Right, I've just installed the attached testcase, it passes with the unmodified compiler but fails with your gcc-interface/misc.c change. 2011-05-17 Eric Botcazou <ebotca...@adacore.com> * gnat.dg/invalid1.adb: New test. -- Eric Botcazou
-- { dg-do run } -- { dg-options "-gnatws -gnatVa" } pragma Initialize_Scalars; procedure Invalid1 is X : Boolean; A : Boolean := False; procedure Uninit (B : out Boolean) is begin if A then B := True; raise Program_Error; end if; end; begin -- first, check that initialize_scalars is enabled begin if X then A := False; end if; raise Program_Error; exception when Constraint_Error => null; end; -- second, check if copyback of an invalid value raises constraint error begin Uninit (A); if A then -- we expect constraint error in the 'if' above according to gnat ug: -- .... -- call. Note that there is no specific option to test `out' -- parameters, but any reference within the subprogram will be tested -- in the usual manner, and if an invalid value is copied back, any -- reference to it will be subject to validity checking. -- ... raise Program_Error; end if; raise Program_Error; exception when Constraint_Error => null; end; end;