> The patch is OK, but it doesn't change anything for c52103x as this is a > pure gimplifier problem. Try running ACATS at -O0:
Or just compile the attached reduced testcase at -O0: c52103x.adb: In function 'C52103X': c52103x.adb:1:1: error: type mismatch in binary truth expression boolean system__unsigned_types__packed_byte boolean D.2363 = D.2361 && D.2362; -- Eric Botcazou
PROCEDURE C52103X IS BEGIN CONSTR_ERR: -- THIS BLOCK CATCHES CONSTRAINT_ERROR -- FOR THE TYPE DECLARATION. BEGIN DCL_ARR: DECLARE -- THIS BLOCK DECLARES THE ARRAY TYPE TYPE TA42 IS ARRAY( INTEGER RANGE -2..INTEGER'LAST ) OF BOOLEAN ; -- CONSTRAINT_ERROR MAY BE RAISED BY THE -- ARRAY TYPE DECLARATION. PRAGMA PACK (TA42); SUBTYPE TA41 IS TA42 ; BEGIN OBJ_DCL: DECLARE -- THIS BLOCK DECLARES TWO BOOLEAN ARRAYS THAT -- HAVE INTEGER'LAST + 3 COMPONENTS; -- STORAGE_ERROR MAY BE RAISED. ARR41 : TA41 ; ARR42 : TA42 ; BEGIN DO_SLICE: BEGIN -- SLICE ASSIGNMENT: ARR42( -1..INTEGER'LAST ) := ARR41( -2..INTEGER'LAST-1) ; CHK_SLICE: BEGIN FOR I IN -1..2 LOOP IF ARR42( I ) /= FALSE AND I /= 0 THEN raise Program_Error; ELSIF ARR42( I ) /= TRUE AND I = 0 THEN raise Program_Error; END IF; END LOOP; IF ARR42( -2 ) /= TRUE THEN raise Program_Error; END IF; END CHK_SLICE; END DO_SLICE; END OBJ_DCL; END DCL_ARR; END CONSTR_ERR; END C52103X;