diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f4eaef744c11922d0e771a1b8cfa82236342dcb4..32c07125d0a284096c42f5bf3dc2c85966af8d09 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-06-24  Andrew Pinski  <apinski@apple.com>
+
+	* objc-act.c (build_objc_method_call): Save the lookup_object
+	so we do not call it twice.
+
 2004-06-24  Richard Henderson  <rth@redhat.com>
 
 	* tree-ssa-dom.c (real_avail_expr_hash): New.
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 9664273529db715eb88764a979d5aa77b77992d9..39e6f765ae7a3cefb7dafd6e21294217e8525a62 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -5869,6 +5869,9 @@ build_objc_method_call (int super_flag, tree method_prototype,
   tree method, t;
 
   lookup_object = build_c_cast (rcv_p, lookup_object);
+    
+  /* Use SAVE_EXPR to avoid evaluating the receiver twice.  */
+  lookup_object = save_expr (lookup_object);
 
   if (flag_next_runtime)
     {
@@ -5895,9 +5898,8 @@ build_objc_method_call (int super_flag, tree method_prototype,
       tree object;
 
       /* First, call the lookup function to get a pointer to the method,
-	 then cast the pointer, then call it with the method arguments.
-	 Use SAVE_EXPR to avoid evaluating the receiver twice.  */
-      lookup_object = save_expr (lookup_object);
+	 then cast the pointer, then call it with the method arguments.  */
+      
       object = (super_flag ? self_decl : lookup_object);
 
       t = tree_cons (NULL_TREE, selector, NULL_TREE);