diff options
author | Javier Miranda <miranda@adacore.com> | 2025-02-06 09:40:57 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2025-06-05 15:39:51 +0200 |
commit | d056ac5fce4cf6de698b4e1e4fe266e5ebbd0530 (patch) | |
tree | 7b60f21e10bc734061b4e47c8bb8ab70caf3dab1 | |
parent | 48a5910dde566180a0a0878651a78ccece89be45 (diff) | |
download | gcc-d056ac5fce4cf6de698b4e1e4fe266e5ebbd0530.zip gcc-d056ac5fce4cf6de698b4e1e4fe266e5ebbd0530.tar.gz gcc-d056ac5fce4cf6de698b4e1e4fe266e5ebbd0530.tar.bz2 |
ada: Spurious compilation error with repeated loop index
When multiple for-loop statements in the same scope use the
same index name to iterate through container elements, the
compiler reports a spurious error indicating a conflict
between index names.
gcc/ada/ChangeLog:
* exp_ch7.adb (Process_Object_Declaration): Avoid generating
duplicate names for master nodes.
-rw-r--r-- | gcc/ada/exp_ch7.adb | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 67af1d7..905094c 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -2783,16 +2783,31 @@ package body Exp_Ch7 is Master_Node_Id := Make_Defining_Identifier (Master_Node_Loc, Chars => New_External_Name (Chars (Obj_Id), Suffix => "MN")); + Master_Node_Decl := Make_Master_Node_Declaration (Master_Node_Loc, Master_Node_Id, Obj_Id); Push_Scope (Scope (Obj_Id)); + + -- Avoid generating duplicate names for master nodes + + if Ekind (Obj_Id) = E_Loop_Parameter + and then + Present (Current_Entity_In_Scope (Chars (Master_Node_Id))) + then + Set_Chars (Master_Node_Id, + New_External_Name (Chars (Obj_Id), + Suffix => "MN", + Suffix_Index => -1)); + end if; + if not Has_Strict_Ctrl_Objs or else Count = 1 then Prepend_To (Decls, Master_Node_Decl); else Insert_Before (Decl, Master_Node_Decl); end if; + Analyze (Master_Node_Decl); Pop_Scope; |