aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2014-11-20 10:56:01 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2014-11-20 11:56:01 +0100
commit4a0a5d5fc14e61fb73c1440a5a5bf2bee0b7ced8 (patch)
tree2c28691e5427d101ea955d85c361e573716d9394
parent58b81ab059d8963e7b867bf67424714d88f1da94 (diff)
downloadgcc-4a0a5d5fc14e61fb73c1440a5a5bf2bee0b7ced8.zip
gcc-4a0a5d5fc14e61fb73c1440a5a5bf2bee0b7ced8.tar.gz
gcc-4a0a5d5fc14e61fb73c1440a5a5bf2bee0b7ced8.tar.bz2
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 <ebotcazou@adacore.com> * 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
-rw-r--r--gcc/ada/ChangeLog7
-rw-r--r--gcc/ada/exp_util.ads4
-rw-r--r--gcc/ada/sem_ch3.adb7
3 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index e12e368..d2746e1 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,10 @@
+2014-11-20 Eric Botcazou <ebotcazou@adacore.com>
+
+ * 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 <obry@adacore.com>
* 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 c0edb4b..671b13a 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 db348d7..28b4471 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);