[COMMITTED,7/9] ada: GNAT-LLVM compiler crash on container aggregates with iterators
Checks
Commit Message
From: Gary Dismukes <dismukes@adacore.com>
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.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/sem_ch5.adb | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
@@ -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