aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEd Schonberg <schonber@gnat.com>2001-12-05 02:07:10 +0000
committerGeert Bosch <bosch@gcc.gnu.org>2001-12-05 03:07:10 +0100
commit57568d910cc8f333c9513ed9df37449e3ee97856 (patch)
tree41fa677b75bc4e9d96cdf8e68f525654d05c5f22 /gcc
parent0815d36a987898b2e76fabb53f76d895be7769ad (diff)
downloadgcc-57568d910cc8f333c9513ed9df37449e3ee97856.zip
gcc-57568d910cc8f333c9513ed9df37449e3ee97856.tar.gz
gcc-57568d910cc8f333c9513ed9df37449e3ee97856.tar.bz2
einfo.ads: Block_Node points to the identifier of the block...
* einfo.ads: Block_Node points to the identifier of the block, not to the block node itself, to preserve the link when the block is rewritten, e.g. within an if-statement with a static condition. * inline.adb (Cleanup_Scopes): recover block statement from block entity using new meaning of Block_Node. * sem_ch5.adb (Analyze_Block_Statement): set Block_Node to point to identifier of block node, rather than to node itself. From-SVN: r47649
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog12
-rw-r--r--gcc/ada/einfo.ads9
-rw-r--r--gcc/ada/inline.adb4
-rw-r--r--gcc/ada/sem_ch5.adb2
4 files changed, 23 insertions, 4 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index ec31744..cfe75b9 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,15 @@
+2001-12-04 Ed Schonberg <schonber@gnat.com>
+
+ * einfo.ads: Block_Node points to the identifier of the block, not to
+ the block node itself, to preserve the link when the block is
+ rewritten, e.g. within an if-statement with a static condition.
+
+ * inline.adb (Cleanup_Scopes): recover block statement from block
+ entity using new meaning of Block_Node.
+
+ * sem_ch5.adb (Analyze_Block_Statement): set Block_Node to point to
+ identifier of block node, rather than to node itself.
+
2001-12-04 Gary Dismukes <dismukes@gnat.com>
* layout.adb:
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index bac1287..af3c131 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -394,7 +394,14 @@ package Einfo is
-- returns the entity unchanged.
-- Block_Node (Node11)
--- Present in block entities. Points to the Block_Statement itself.
+-- Present in block entities. Points to the identifier in the
+-- Block_Statement itself. Used when retrieving the block construct
+-- for finalization purposes, The block entity has an implicit label
+-- declaration in the enclosing declarative part, and has otherwise
+-- no direct connection in the tree with the block statement.
+-- The link is to the identifier (which is an occurence of the entity)
+-- and not to the block_statement itself, because the statement may
+-- be rewritten, e.g. in the process of removing dead code.
-- Body_Entity (Node19)
-- Present in package and generic package entities, points to the
diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb
index b21ca1f..84a08ac 100644
--- a/gcc/ada/inline.adb
+++ b/gcc/ada/inline.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- $Revision: 1.55 $
+-- $Revision$
-- --
-- Copyright (C) 1992-2001 Free Software Foundation, Inc. --
-- --
@@ -672,7 +672,7 @@ package body Inline is
end if;
if Ekind (Scop) = E_Block then
- Decl := Block_Node (Scop);
+ Decl := Parent (Block_Node (Scop));
else
Decl := Unit_Declaration_Node (Scop);
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb
index 5fc1585..fcb7c78 100644
--- a/gcc/ada/sem_ch5.adb
+++ b/gcc/ada/sem_ch5.adb
@@ -427,7 +427,7 @@ package body Sem_Ch5 is
end if;
Set_Etype (Ent, Standard_Void_Type);
- Set_Block_Node (Ent, N);
+ Set_Block_Node (Ent, Identifier (N));
New_Scope (Ent);
if Present (Decls) then