Patchwork Do not put location info on type expressions

login
register
mail settings
Submitter Eric Botcazou
Date Oct. 24, 2010, 11:17 a.m.
Message ID <201010241317.19933.ebotcazou@adacore.com>
Download mbox | patch
Permalink /patch/69030/
State New
Headers show

Comments

Eric Botcazou - Oct. 24, 2010, 11:17 a.m.
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.

Patch

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,