This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch] Do not put location info on type expressions
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sun, 24 Oct 2010 13:17:19 +0200
- Subject: [patch] Do not put location info on type expressions
Hi,
putting default location info, by means of input_location, on expressions for
offsets and sizes built for types is problematic, at least in Ada, as these
expressions are referenced in subprograms not directly related to the types.
This damages the debugging experience with back-and-forth jumps while single
stepping. So the attached patch removes them.
Tested (GCC + GDB) on x86_64-suse-linux, OK for mainline? And 4.5 branch?
2010-10-24 Eric Botcazou <ebotcazou@adacore.com>
* stor-layout.c (place_union_field): Do not put location information
on offset expressions.
(place_field): Likewise.
(finalize_record_size): Likewise on size expressions.
(finalize_type_size): Likewise.
(layout_type): Likewise.
--
Eric Botcazou
Index: stor-layout.c
===================================================================
--- stor-layout.c (revision 165881)
+++ stor-layout.c (working copy)
@@ -1064,8 +1064,7 @@ place_union_field (record_layout_info rl
if (TREE_CODE (rli->t) == UNION_TYPE)
rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
- rli->offset = fold_build3_loc (input_location, COND_EXPR, sizetype,
- DECL_QUALIFIER (field),
+ rli->offset = fold_build3 (COND_EXPR, sizetype, DECL_QUALIFIER (field),
DECL_SIZE_UNIT (field), rli->offset);
}
@@ -1252,7 +1251,7 @@ place_field (record_layout_info rli, tre
field);
}
else
- rli->bitpos = round_up_loc (input_location, rli->bitpos, type_align);
+ rli->bitpos = round_up (rli->bitpos, type_align);
}
if (! DECL_PACKED (field))
@@ -1433,7 +1432,7 @@ place_field (record_layout_info rli, tre
if (maximum_field_alignment != 0)
type_align = MIN (type_align, maximum_field_alignment);
- rli->bitpos = round_up_loc (input_location, rli->bitpos, type_align);
+ rli->bitpos = round_up (rli->bitpos, type_align);
/* If we really aligned, don't allow subsequent bitfields
to undo that. */
@@ -1547,10 +1546,9 @@ finalize_record_size (record_layout_info
= size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
/* Round the size up to be a multiple of the required alignment. */
- TYPE_SIZE (rli->t) = round_up_loc (input_location, unpadded_size,
- TYPE_ALIGN (rli->t));
+ TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
TYPE_SIZE_UNIT (rli->t)
- = round_up_loc (input_location, unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t));
+ = round_up (unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t));
if (TREE_CONSTANT (unpadded_size)
&& simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0
@@ -1570,7 +1568,7 @@ finalize_record_size (record_layout_info
rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
#endif
- unpacked_size = round_up_loc (input_location, TYPE_SIZE (rli->t), rli->unpacked_align);
+ unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
{
if (TYPE_NAME (rli->t))
@@ -1722,10 +1720,9 @@ finalize_type_size (tree type)
if (TYPE_SIZE (type) != 0)
{
- TYPE_SIZE (type) = round_up_loc (input_location,
- TYPE_SIZE (type), TYPE_ALIGN (type));
- TYPE_SIZE_UNIT (type) = round_up_loc (input_location, TYPE_SIZE_UNIT (type),
- TYPE_ALIGN_UNIT (type));
+ TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
+ TYPE_SIZE_UNIT (type)
+ = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN_UNIT (type));
}
/* Evaluate nonconstant sizes only once, either now or as soon as safe. */
@@ -2005,10 +2002,9 @@ layout_type (tree type)
length
= size_binop (PLUS_EXPR, size_one_node,
fold_convert (sizetype,
- fold_build2_loc (input_location,
- MINUS_EXPR,
- TREE_TYPE (lb),
- ub, lb)));
+ fold_build2 (MINUS_EXPR,
+ TREE_TYPE (lb),
+ ub, lb)));
TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
fold_convert (bitsizetype,