typeck.c (build_unary_op): Do not resort to address arithmetic when taking the addres...
authorMark Mitchell <mark@codesourcery.com>
Tue, 10 May 2005 05:31:15 +0000 (05:31 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 10 May 2005 05:31:15 +0000 (05:31 +0000)
* typeck.c (build_unary_op): Do not resort to address arithmetic
when taking the address of a COMPONENT_REF.

From-SVN: r99503

gcc/cp/ChangeLog
gcc/cp/typeck.c

index 5052341..8241534 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-09  Mark Mitchell  <mark@codesourcery.com>
+
+       * typeck.c (build_unary_op): Do not resort to address arithmetic
+       when taking the address of a COMPONENT_REF.
+       
 2005-05-08  Kazu Hirata  <kazu@cs.umass.edu>
 
        * class.c (vtbl_init_data_s): Change the type of fns to
index 2b4d9ec..bd73969 100644 (file)
@@ -4107,15 +4107,10 @@ build_unary_op (enum tree_code code, tree xarg, int noconvert)
          }
        else
          {
+           tree object = TREE_OPERAND (arg, 0);
            tree field = TREE_OPERAND (arg, 1);
-           tree rval = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0);
-           tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (rval)),
-                                     decl_type_context (field),
-                                     ba_check, NULL);
-           
-           rval = build_base_path (PLUS_EXPR, rval, binfo, 1);
-
-           TREE_OPERAND (arg, 0) = build_indirect_ref (rval, NULL);
+           gcc_assert (same_type_ignoring_top_level_qualifiers_p
+                       (TREE_TYPE (object), decl_type_context (field)));
            addr = build_address (arg);
          }