[COMMITTED,18/30] ada: Apply restriction No_Implementation_Attributes to source nodes only
Commit Message
From: Piotr Trojanek <trojanek@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(-)
@@ -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