diff options
author | Gary Dismukes <dismukes@adacore.com> | 2024-07-23 21:05:29 +0000 |
---|---|---|
committer | Marc Poulhiès <dkm@gcc.gnu.org> | 2024-08-06 10:54:31 +0200 |
commit | c0c1e02070f3b05eb9cd0001028be45bbe847ced (patch) | |
tree | d1fa4fd6b19010f23c77fdb8b68d55fa7617af1b | |
parent | 3e2b3dd728d851480bb752055bb0937cd4812ef1 (diff) | |
download | gcc-c0c1e02070f3b05eb9cd0001028be45bbe847ced.zip gcc-c0c1e02070f3b05eb9cd0001028be45bbe847ced.tar.gz gcc-c0c1e02070f3b05eb9cd0001028be45bbe847ced.tar.bz2 |
ada: GNAT-LLVM compiler crash on container aggregates with iterators
Recent fixes for container aggregates with iterated element associations
exposed a latent bug with loops that are wrapped in blocks, where the loop
entity's scope was not adjusted to reflect the new enclosing block scope.
gcc/ada/
* sem_ch5.adb (Analyze_Loop_Statement.Wrap_Loop_Statement): Remove
the loop Entity_Id from its old scope and insert it in the new
block scope that wraps it.
-rw-r--r-- | gcc/ada/sem_ch5.adb | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index d44a12d..30fee6e 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -3800,8 +3800,9 @@ package body Sem_Ch5 is procedure Wrap_Loop_Statement (Manage_Sec_Stack : Boolean) is Loc : constant Source_Ptr := Sloc (N); - Blk : Node_Id; - Blk_Id : Entity_Id; + Blk : Node_Id; + Blk_Id : Entity_Id; + Loop_Id : constant Entity_Id := Entity (Identifier (N)); begin Blk := @@ -3816,6 +3817,12 @@ package body Sem_Ch5 is Rewrite (N, Blk); Analyze (N); + + -- Transfer the loop entity from its old scope to the new block + -- scope. + + Remove_Entity (Loop_Id); + Append_Entity (Loop_Id, Blk_Id); end Wrap_Loop_Statement; -- Local variables |