For an object of a class-wide interface type, the object declaration is
rewritten as a renaming with a new entity, and debug info was not being
generated for the renaming, preventing printing of the object's value
in gdb. The entity of the renaming is now marked as needing debug info.

Tested on x86_64-pc-linux-gnu, committed on trunk

2012-03-19  Gary Dismukes  <dismu...@adacore.com>

        * exp_ch3.adb (Expand_N_Object_Declaration): In
        the case of an object of a class-wide interface type, where the
        declaration is rewritten as a renaming, call Set_Debug_Info_Needed
        on the renaming entity so that Materialize_Entity will be
        set. Also, change existing call (for other than interface cases)
        to call Set_Debug_Info_Needed rather than Set_Needs_Debug_Info
        (as specified for that flag).

Index: exp_ch3.adb
===================================================================
--- exp_ch3.adb (revision 185520)
+++ exp_ch3.adb (working copy)
@@ -4820,6 +4820,17 @@
                       Subtype_Mark        => New_Occurrence_Of (Typ, Loc),
                       Name => Convert_Tag_To_Interface (Typ, Tag_Comp)));
 
+                  --  If the original entity comes from source, then mark the
+                  --  new entity as needing debug information, even though it's
+                  --  defined by a generated renaming that does not come from
+                  --  source, so that Materialize_Entity will be set on the
+                  --  entity when Debug_Renaming_Declaration is called during
+                  --  analysis.
+
+                  if Comes_From_Source (Def_Id) then
+                     Set_Debug_Info_Needed (Defining_Identifier (N));
+                  end if;
+
                   Analyze (N, Suppress => All_Checks);
 
                   --  Replace internal identifier of rewritten node by the
@@ -5065,7 +5076,7 @@
             --  renaming that does not come from source.
 
             if Comes_From_Source (Defining_Identifier (N)) then
-               Set_Needs_Debug_Info (Defining_Identifier (N));
+               Set_Debug_Info_Needed (Defining_Identifier (N));
             end if;
 
             --  Now call the routine to generate debug info for the renaming

Reply via email to