From 58d27da9306d829548d5343d70b3562d95186a55 Mon Sep 17 00:00:00 2001 From: Justin Squirek Date: Thu, 19 Jan 2017 13:10:58 +0000 Subject: [PATCH] exp_ch9.adb (Is_Pure_Barrier): Create function Is_Count_Attribute to identify an expansion of the 'Count attribute. 2017-01-19 Justin Squirek * exp_ch9.adb (Is_Pure_Barrier): Create function Is_Count_Attribute to identify an expansion of the 'Count attribute. From-SVN: r244631 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/exp_ch9.adb | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 8287640adb5..0b0888a9e7a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2017-01-19 Justin Squirek + + * exp_ch9.adb (Is_Pure_Barrier): Create function + Is_Count_Attribute to identify an expansion of the 'Count + attribute. + 2017-01-19 Pierre-Marie de Rodat * exp_dbug.adb (Debug_Renaming_Declaration): Process underlying types. diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index 4a98f191d86..9ea30eebe57 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -6025,6 +6025,25 @@ package body Exp_Ch9 is --------------------- function Is_Pure_Barrier (N : Node_Id) return Traverse_Result is + function Is_Count_Attribute (N : Node_Id) return Boolean; + -- Check whether N is part of an expansion of the Count attribute. + -- Return True if N represents the expanded function call. + + ------------------------ + -- Is_Count_Attribute -- + ------------------------ + + function Is_Count_Attribute (N : Node_Id) return Boolean is + begin + return + Nkind (N) = N_Function_Call + and then Present (Original_Node (N)) + and then Nkind (Original_Node (N)) = N_Attribute_Reference + and then Attribute_Name (Original_Node (N)) = Name_Count; + end Is_Count_Attribute; + + -- Start of processing for Is_Pure_Barrier + begin case Nkind (N) is when N_Expanded_Name @@ -6034,6 +6053,12 @@ package body Exp_Ch9 is return Abandon; end if; + if Present (Parent (N)) + and then Is_Count_Attribute (Parent (N)) + then + return OK; + end if; + case Ekind (Entity (N)) is when E_Constant | E_Discriminant @@ -6057,6 +6082,11 @@ package body Exp_Ch9 is null; end case; + when N_Function_Call => + if Is_Count_Attribute (N) then + return OK; + end if; + when N_Character_Literal | N_Integer_Literal | N_Real_Literal -- 2.30.2