diff mbox

Do not put location info on type expressions

Message ID 201010241317.19933.ebotcazou@adacore.com
State New
Headers show

Commit Message

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

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,