aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2010-05-05 10:43:36 +0000
committerJakub Jelinek <jakub@gcc.gnu.org>2010-05-05 12:43:36 +0200
commite972a1d38a15fce91d332f6f9ebee0490fe54743 (patch)
tree59842b6dc18621e5312a68fbb0c8fbf681aa0180 /gcc/varasm.c
parent2f41ecf538cfb7f3355dc1844345d9d78e0ca56a (diff)
downloadgcc-e972a1d38a15fce91d332f6f9ebee0490fe54743.zip
gcc-e972a1d38a15fce91d332f6f9ebee0490fe54743.tar.gz
gcc-e972a1d38a15fce91d332f6f9ebee0490fe54743.tar.bz2
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.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index bcb5b11..9f2f0a6 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"