diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-01-19 13:10:58 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-01-19 13:10:58 +0000 |
commit | fc7b8a38c59c9e724217801e5e54558da1d7714a (patch) | |
tree | 79f19be3420b68e5b5db1bf2f0a2e435d746a09e /gcc/ada | |
parent | 3603824982d0de14a3a72d2bd098dc534f8fa0ab (diff) | |
download | gcc-fc7b8a38c59c9e724217801e5e54558da1d7714a.tar.gz |
2017-01-19 Justin Squirek <squirek@adacore.com>
* exp_ch9.adb (Is_Pure_Barrier): Create function
Is_Count_Attribute to identify an expansion of the 'Count
attribute.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244631 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/exp_ch9.adb | 30 |
2 files changed, 36 insertions, 0 deletions
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 <squirek@adacore.com> + + * 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 <derodat@adacore.com> * 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 |