From: Eric Botcazou Date: Thu, 20 Nov 2014 10:56:01 +0000 (+0000) Subject: sem_ch3.adb (Analyze_Object_Declaration): Swap a couple of tests in a condition so... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4a0a5d5fc14e61fb73c1440a5a5bf2bee0b7ced8;p=gcc.git sem_ch3.adb (Analyze_Object_Declaration): Swap a couple of tests in a condition so Following_Address_Clause is invoked... 2014-11-20 Eric Botcazou * sem_ch3.adb (Analyze_Object_Declaration): Swap a couple of tests in a condition so Following_Address_Clause is invoked only if need be. * exp_util.ads (Following_Address_Clause): Add small note. From-SVN: r217834 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index e12e368833f..d2746e1511d 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2014-11-20 Eric Botcazou + + * sem_ch3.adb (Analyze_Object_Declaration): Swap a couple of + tests in a condition so Following_Address_Clause is invoked + only if need be. + * exp_util.ads (Following_Address_Clause): Add small note. + 2014-11-20 Pascal Obry * adaint.c (remove_handle): New local routine without a lock. diff --git a/gcc/ada/exp_util.ads b/gcc/ada/exp_util.ads index c0edb4b8e60..671b13a19b8 100644 --- a/gcc/ada/exp_util.ads +++ b/gcc/ada/exp_util.ads @@ -507,6 +507,10 @@ package Exp_Util is -- current declarative part to look for an address clause for the object -- being declared, and returns the clause if one is found, returns -- Empty otherwise. + -- + -- Note: this function can be costly and must be invoked with special care. + -- Possibly we could introduce a flag at parse time indicating the presence + -- of an address clause to speed this up??? procedure Force_Evaluation (Exp : Node_Id; diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index db348d7a617..28b44718406 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -3648,8 +3648,13 @@ package body Sem_Ch3 is if Comes_From_Source (N) and then Expander_Active - and then Present (Following_Address_Clause (N)) and then Nkind (E) = N_Aggregate + + -- Note the importance of doing this the following test after the + -- N_Aggregate test to avoid inefficiencies from too many calls to + -- the function Following_Address_Clause which can be expensive. + + and then Present (Following_Address_Clause (N)) then Set_Etype (E, T);