From: Justin Squirek Date: Fri, 15 Jan 2021 15:59:49 +0000 (-0500) Subject: [Ada] Spurious constraint error on conversion of access types X-Git-Tag: basepoints/gcc-13~7772 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=55b93bbc2158203b776bf516cba0117208e2f649;p=thirdparty%2Fgcc.git [Ada] Spurious constraint error on conversion of access types gcc/ada/ * checks.adb (Make_Discriminant_Constraint_Check): Add check for null when the type being converted is an access type. --- diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index a4ad4e6dac26..6487944f23ef 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -3658,6 +3658,20 @@ package body Checks is Cond := Build_Discriminant_Checks (Expr, Expr_Type); Set_Discriminant_Constraint (Expr_Type, Old_Constraints); + -- Conversion between access types requires that we check for null + -- before checking discriminants. + + if Is_Access_Type (Etype (Expr)) then + Cond := Make_And_Then (Loc, + Left_Opnd => + Make_Op_Ne (Loc, + Left_Opnd => + Duplicate_Subexpr_No_Checks + (Expr, Name_Req => True), + Right_Opnd => Make_Null (Loc)), + Right_Opnd => Cond); + end if; + Insert_Action (N, Make_Raise_Constraint_Error (Loc, Condition => Cond,