From: Piotr Trojanek <troja...@adacore.com> Restriction No_Implementation_Attributes must not be applied to nodes that come from expansion. In particular, it must not be applied to Object_Size, which is implementation-defined attribute before Ada 2022, but appears in expansion of tagged types since Ada 95.
gcc/ada/ * sem_attr.adb (Analyze_Attribute): Move IF statement that checks restriction No_Implementation_Attributes for Ada 2005, 2012 and Ada 2022 attributes inside Comes_From_Source condition that checks the same restriction for Ada 83 attributes. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/sem_attr.adb | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 6c32d201c55..414224e86b6 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -3221,9 +3221,10 @@ package body Sem_Attr is Check_Restriction_No_Use_Of_Attribute (N); - -- Deal with Ada 83 issues - if Comes_From_Source (N) then + + -- Deal with Ada 83 issues + if not Attribute_83 (Attr_Id) then if Ada_Version = Ada_83 then Error_Msg_Name_1 := Aname; @@ -3234,19 +3235,19 @@ package body Sem_Attr is Check_Restriction (No_Implementation_Attributes, N); end if; end if; - end if; - -- Deal with Ada 2005 attributes that are implementation attributes - -- because they appear in a version of Ada before Ada 2005, ditto for - -- Ada 2012 and Ada 2022 attributes appearing in an earlier version. + -- Deal with Ada 2005 attributes that are implementation attributes + -- because they appear in a version of Ada before Ada 2005, ditto for + -- Ada 2012 and Ada 2022 attributes appearing in an earlier version. - if (Attribute_05 (Attr_Id) and then Ada_Version < Ada_2005) - or else - (Attribute_12 (Attr_Id) and then Ada_Version < Ada_2012) - or else - (Attribute_22 (Attr_Id) and then Ada_Version < Ada_2022) - then - Check_Restriction (No_Implementation_Attributes, N); + if (Attribute_05 (Attr_Id) and then Ada_Version < Ada_2005) + or else + (Attribute_12 (Attr_Id) and then Ada_Version < Ada_2012) + or else + (Attribute_22 (Attr_Id) and then Ada_Version < Ada_2022) + then + Check_Restriction (No_Implementation_Attributes, N); + end if; end if; -- Remote access to subprogram type access attribute reference needs -- 2.43.2