]> gcc.gnu.org Git - gcc.git/commitdiff
decl.c (gnat_to_gnu_entity): If not optimizing...
authorEric Botcazou <ebotcazou@adacore.com>
Thu, 6 Nov 2008 11:51:11 +0000 (11:51 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Thu, 6 Nov 2008 11:51:11 +0000 (11:51 +0000)
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Out_Parameter>: If not
optimizing, create a PARM_DECL pointing to the VAR_DECL for debugging
purposes.

From-SVN: r141639

gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c

index 5e9f8b719b1cbc0b681b75b0fefcd339fa8191ee..a1c70a6bb737527f637269534b71fcaa4504c3ae 100644 (file)
@@ -1,3 +1,9 @@
+2008-11-06  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Out_Parameter>: If not
+       optimizing, create a PARM_DECL pointing to the VAR_DECL for debugging
+       purposes.
+
 2008-11-06  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/misc.c (gnat_printable_name): Always return a copy
index cdee227760825eda9ee9b87a3b946534545924f0..188b896180d3054ec07775f86a0668272e170f18 100644 (file)
@@ -1318,6 +1318,24 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
                                               get_block_jmpbuf_decl ())),
                              gnat_entity);
 
+       /* If we are defining an Out parameter and we're not optimizing,
+          create a fake PARM_DECL for debugging purposes and make it
+          point to the VAR_DECL.  Suppress debug info for the latter
+          but make sure it will still live on the stack so it can be
+          accessed from within the debugger through the PARM_DECL.  */
+       if (kind == E_Out_Parameter && definition && !optimize)
+         {
+           tree param = create_param_decl (gnu_entity_id, gnu_type, false);
+           gnat_pushdecl (param, gnat_entity);
+           SET_DECL_VALUE_EXPR (param, gnu_decl);
+           DECL_HAS_VALUE_EXPR_P (param) = 1;
+           if (debug_info_p)
+             debug_info_p = false;
+           else
+             DECL_IGNORED_P (param) = 1;
+           TREE_ADDRESSABLE (gnu_decl) = 1;
+         }
+
        /* If this is a public constant or we're not optimizing and we're not
           making a VAR_DECL for it, make one just for export or debugger use.
           Likewise if the address is taken or if either the object or type is
This page took 0.103678 seconds and 5 git commands to generate.