class.c (build_vtable_entry_ref): Subtract in char*, not ptrdiff_t.
authorJoern Rennecke <amylaar@redhat.com>
Thu, 30 Aug 2001 12:44:22 +0000 (12:44 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 30 Aug 2001 12:44:22 +0000 (08:44 -0400)
        * class.c (build_vtable_entry_ref): Subtract in char*, not
        ptrdiff_t.

Co-Authored-By: Jason Merrill <jason@redhat.com>
From-SVN: r45284

gcc/cp/ChangeLog
gcc/cp/class.c

index 4a4f80d784edf62a8a2e70efbbe57ed961372b49..5acd064033553aa69069a8de0a19a28bf58531bd 100644 (file)
@@ -1,3 +1,9 @@
+2001-08-30  Joern Rennecke <amylaar@redhat.com>
+           Jason Merrill  <jason_merrill@redhat.com>
+
+       * class.c (build_vtable_entry_ref): Subtract in char*, not
+       ptrdiff_t.
+
 2001-08-23  Jason Merrill  <jason_merrill@redhat.com>
 
        * tree.c (cp_build_qualified_type_real): Use get_qualified_type.
index 8f60f23a7c0ca845ffce396ac8960961317e77f2..3a9e38923e16c8e07fdabf2d8da3df472e987fa0 100644 (file)
@@ -444,9 +444,12 @@ build_vtable_entry_ref (basetype, idx)
   s = build_tree_list (build_string (1, "s"), s);
 
   i = build_array_ref (first_fn, idx);
-  i = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i, 0));
+  /* We must not convert to ptrdiff_type node here, since this could widen
+     from a partial to an integral node, which would create a
+     convert_expression that would be in the way of any simplifications.  */
+  i = build_c_cast (string_type_node, build_unary_op (ADDR_EXPR, i, 0));
   i2 = build_array_ref (vtable, build_int_2 (0,0));
-  i2 = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i2, 0));
+  i2 = build_c_cast (string_type_node, build_unary_op (ADDR_EXPR, i2, 0));
   i = cp_build_binary_op (MINUS_EXPR, i, i2);
   i = build_tree_list (build_string (1, "i"), i);