aboutsummaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1998-05-05 23:18:02 +0000
committerJeffrey A Law <law@cygnus.com>1998-05-05 23:18:02 +0000
commitccb3c38893bb04a2af88541782c99392a33f54fa (patch)
tree017db6c8be411c52ab98093e94dcce3c7ca3f029 /gcc/dwarf2out.c
parentd89fae0d3464c3fbb22eb8898fc173b57ba6a89a (diff)
* Check in merge from gcc2. See ChangeLog.12 for details.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@19553 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index e8ba8e3995b..ab2fab79d48 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -7174,10 +7174,22 @@ add_bound_info (subrange_die, bound_attr, bound)
{
register dw_die_ref ctx = lookup_decl_die (current_function_decl);
register dw_die_ref decl_die = new_die (DW_TAG_variable, ctx);
+ register rtx loc = SAVE_EXPR_RTL (bound);
+
+ /* If the RTL for the SAVE_EXPR is memory, handle the case where
+ it references an outer function's frame. */
+
+ if (GET_CODE (loc) == MEM)
+ {
+ rtx new_addr = fix_lexical_addr (XEXP (loc, 0), bound);
+
+ if (XEXP (loc, 0) != new_addr)
+ loc = gen_rtx (MEM, GET_MODE (loc), new_addr);
+ }
+
add_AT_flag (decl_die, DW_AT_artificial, 1);
add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
- add_AT_location_description (decl_die, DW_AT_location,
- SAVE_EXPR_RTL (bound));
+ add_AT_location_description (decl_die, DW_AT_location, loc);
add_AT_die_ref (subrange_die, bound_attr, decl_die);
}