* [Ada] Fix missing debug info for concatenation
@ 2011-08-02 14:39 Arnaud Charlet
0 siblings, 0 replies; only message in thread
From: Arnaud Charlet @ 2011-08-02 14:39 UTC (permalink / raw)
To: gcc-patches; +Cc: Robert Dewar
[-- Attachment #1: Type: text/plain, Size: 1485 bytes --]
The new concatenation circuitry installed some time ago, results in
missing debug information when a constant string is initialized with
the result of a concatenation. This is because the resulting generated
renaming did not generate required debug information. This patch fixes
the problem with concatenation, and is actually a little more general
than that, so may fix some other problems with missing debug info.
The following is a test program
1. procedure debugconcat is
2. x : string := "hello";
3. y : string := "goodbye";
4. z : constant string := x & y;
5. begin
6. null;
7. end;
Before the patch, the debugger could not print the string z. With the
following script:
gnatmake debugconcat -g
cp gdbinit2 .gdbinit
gdb --quiet debugconcat.exe >log 2>&1
rm .gdbinit
grep " = " log
where gdbinit2 contains:
break debugconcat.adb:6
run
print z
quit
y
the output of the grep command should be:
$1 = "hellogoodbye"
Tested on x86_64-pc-linux-gnu, committed on trunk
2011-08-02 Robert Dewar <dewar@adacore.com>
* einfo.ads (Materialize_Entity): Document this is only for renamings
* exp_ch3.adb (Expand_N_Object_Declaration): Make sure we generate
required debug information in the case where we transform the object
declaration into a renaming declaration.
* exp_ch4.adb (Expand_Concatenate): Generate debug info for result
object
* exp_dbug.ads (Debug_Renaming_Declaration): Document setting of
Materialize_Entity.
[-- Attachment #2: difs --]
[-- Type: text/plain, Size: 3813 bytes --]
Index: einfo.ads
===================================================================
--- einfo.ads (revision 177161)
+++ einfo.ads (working copy)
@@ -2943,11 +2943,10 @@
-- used to reference tasks implementing such interface.
-- Materialize_Entity (Flag168)
--- Present in all entities. Set only for constant or renamed entities
--- which should be materialized for debugging purposes. In the case of
--- a constant, a memory location should be allocated containing the
--- value. In the case of a renaming, a memory location containing the
--- renamed address should be allocated.
+-- Present in all entities. Set only for renamed obects which should be
+-- materialized for debugging purposes. This means that a memory location
+-- containing the renamed address should be allocated. This is needed so
+-- that the debugger can find the entity.
-- Mechanism (Uint8) (returned as Mechanism_Type)
-- Present in functions and non-generic formal parameters. Indicates
Index: exp_dbug.ads
===================================================================
--- exp_dbug.ads (revision 176998)
+++ exp_dbug.ads (working copy)
@@ -1082,7 +1082,8 @@
function Debug_Renaming_Declaration (N : Node_Id) return Node_Id;
-- The argument N is a renaming declaration. The result is a variable
-- declaration as described in the above paragraphs. If N is not a special
- -- debug declaration, then Empty is returned.
+ -- debug declaration, then Empty is returned. This function also takes care
+ -- of setting Materialize_Entity on the renamed entity where required.
---------------------------
-- Packed Array Encoding --
Index: exp_ch4.adb
===================================================================
--- exp_ch4.adb (revision 177156)
+++ exp_ch4.adb (working copy)
@@ -2875,10 +2875,12 @@
-- Now we construct an array object with appropriate bounds. We mark
-- the target as internal to prevent useless initialization when
- -- Initialize_Scalars is enabled.
+ -- Initialize_Scalars is enabled. Also since this is the actual result
+ -- entity, we make sure we have debug information for the result.
Ent := Make_Temporary (Loc, 'S');
Set_Is_Internal (Ent);
+ Set_Needs_Debug_Info (Ent);
-- If the bound is statically known to be out of range, we do not want
-- to abort, we want a warning and a runtime constraint error. Note that
Index: exp_ch3.adb
===================================================================
--- exp_ch3.adb (revision 177161)
+++ exp_ch3.adb (working copy)
@@ -34,6 +34,7 @@
with Exp_Ch7; use Exp_Ch7;
with Exp_Ch9; use Exp_Ch9;
with Exp_Ch11; use Exp_Ch11;
+with Exp_Dbug; use Exp_Dbug;
with Exp_Disp; use Exp_Disp;
with Exp_Dist; use Exp_Dist;
with Exp_Smem; use Exp_Smem;
@@ -5215,6 +5216,26 @@
Set_Renamed_Object (Defining_Identifier (N), Expr_Q);
Set_Analyzed (N);
+
+ -- We do need to deal with debug issues for this renaming
+
+ -- First, if entity comes from source, then mark it as needing
+ -- debug information, even though it is defined by a generated
+ -- renaming that does not come from source.
+
+ if Comes_From_Source (Defining_Identifier (N)) then
+ Set_Needs_Debug_Info (Defining_Identifier (N));
+ end if;
+
+ -- Now call the routine to generate debug info for the renaming
+
+ declare
+ Decl : constant Node_Id := Debug_Renaming_Declaration (N);
+ begin
+ if Present (Decl) then
+ Insert_Action (N, Decl);
+ end if;
+ end;
end if;
end if;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-08-02 14:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-02 14:39 [Ada] Fix missing debug info for concatenation Arnaud Charlet
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).