diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2010-05-05 10:43:36 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-05-05 12:43:36 +0200 |
commit | e972a1d38a15fce91d332f6f9ebee0490fe54743 (patch) | |
tree | 59842b6dc18621e5312a68fbb0c8fbf681aa0180 /gcc/varasm.c | |
parent | 2f41ecf538cfb7f3355dc1844345d9d78e0ca56a (diff) | |
download | gcc-e972a1d38a15fce91d332f6f9ebee0490fe54743.tar.gz |
re PR debug/43478 (Missing DW_AT_location for a variable)
PR debug/43478
* df-problems.c (struct dead_debug_use, struct dead_debug): New.
(dead_debug_init, dead_debug_finish): New functions.
(dead_debug_add, dead_debug_insert_before): Likewise.
(df_note_bb_compute): Initialize a dead_debug object, add dead
debug uses to it, insert debug bind insns before death insns,
reset debug insns that refer to pending uses at the end.
* rtl.h (make_debug_expr_from_rtl): New prototype.
* varasm.c (make_debug_expr_from_rtl): New function.
Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r159063
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r-- | gcc/varasm.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c index bcb5b114238..9f2f0a6f957 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -7261,4 +7261,31 @@ default_elf_asm_output_external (FILE *file ATTRIBUTE_UNUSED, maybe_assemble_visibility (decl); } +/* Create a DEBUG_EXPR_DECL / DEBUG_EXPR pair from RTL expression + EXP. */ +rtx +make_debug_expr_from_rtl (const_rtx exp) +{ + tree ddecl = make_node (DEBUG_EXPR_DECL), type; + enum machine_mode mode = GET_MODE (exp); + rtx dval; + + DECL_ARTIFICIAL (ddecl) = 1; + if (REG_P (exp) && REG_EXPR (exp)) + type = TREE_TYPE (REG_EXPR (exp)); + else if (MEM_P (exp) && MEM_EXPR (exp)) + type = TREE_TYPE (MEM_EXPR (exp)); + else + type = NULL_TREE; + if (type && TYPE_MODE (type) == mode) + TREE_TYPE (ddecl) = type; + else + TREE_TYPE (ddecl) = lang_hooks.types.type_for_mode (mode, 1); + DECL_MODE (ddecl) = mode; + dval = gen_rtx_DEBUG_EXPR (mode); + DEBUG_EXPR_TREE_DECL (dval) = ddecl; + SET_DECL_RTL (ddecl, dval); + return dval; +} + #include "gt-varasm.h" |