This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Second patch for HP-UX IA64 bootstrap failure


Try this.


r~



Index: expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.c,v
retrieving revision 1.718
diff -c -p -d -u -r1.718 expr.c
--- expr.c	8 Sep 2004 08:05:14 -0000	1.718
+++ expr.c	10 Sep 2004 22:06:52 -0000
@@ -6052,8 +6052,8 @@ expand_operands (tree exp0, tree exp1, r
    The TARGET, TMODE and MODIFIER arguments are as for expand_expr.  */
 
 static rtx
-expand_expr_addr_expr (tree exp, rtx target, enum machine_mode tmode,
-		       enum expand_modifier modifier)
+expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode,
+		         enum expand_modifier modifier)
 {
   rtx result, subtarget;
   tree inner, offset;
@@ -6080,7 +6080,7 @@ expand_expr_addr_expr (tree exp, rtx tar
 
     case CONST_DECL:
       /* Recurse and make the output_constant_def clause above handle this.  */
-      return expand_expr_addr_expr (DECL_INITIAL (exp), target,
+      return expand_expr_addr_expr_1 (DECL_INITIAL (exp), target,
 				    tmode, modifier);
 
     case REALPART_EXPR:
@@ -6140,7 +6140,7 @@ expand_expr_addr_expr (tree exp, rtx tar
   gcc_assert (inner != exp);
 
   subtarget = offset || bitpos ? NULL_RTX : target;
-  result = expand_expr_addr_expr (inner, subtarget, tmode, modifier);
+  result = expand_expr_addr_expr_1 (inner, subtarget, tmode, modifier);
 
   if (tmode == VOIDmode)
     {
@@ -6181,6 +6181,29 @@ expand_expr_addr_expr (tree exp, rtx tar
   return result;
 }
 
+static rtx
+expand_expr_addr_expr (tree exp, rtx target, enum machine_mode tmode,
+		       enum expand_modifier modifier)
+{
+  enum machine_mode rmode;
+  rtx result;
+
+  result = expand_expr_addr_expr_1 (exp, target, tmode, modifier);
+
+  /* Despite expand_expr claims concerning ignoring TMODE when not
+     strictly convenient, stuff breaks if we don't honor it.  */
+  if (tmode == VOIDmode)
+    tmode = TYPE_MODE (TREE_TYPE (exp));
+  rmode = GET_MODE (result);
+  if (rmode == VOIDmode)
+    rmode = tmode;
+  if (rmode != tmode)
+    result = convert_memory_address (tmode, result);
+ 
+  return result;
+}
+
+
 /* expand_expr: generate code for computing expression EXP.
    An rtx for the computed value is returned.  The value is never null.
    In the case of a void EXP, const0_rtx is returned.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]