OSDN Git Service

* expr.c (build_known_method_ref): Use method's context to find
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Jan 2003 21:19:50 +0000 (21:19 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Jan 2003 21:19:50 +0000 (21:19 +0000)
method table index.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61670 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/expr.c

index 092d5bd..3050610 100644 (file)
@@ -1,5 +1,10 @@
 2003-01-23  Tom Tromey  <tromey@redhat.com>
 
+       * expr.c (build_known_method_ref): Use method's context to find
+       method table index.
+
+2003-01-23  Tom Tromey  <tromey@redhat.com>
+
        * constants.c (set_constant_entry): Allocated cleared memory.
 
 2003-01-22  Tom Tromey  <tromey@redhat.com>
index bf1f41b..5ce92e0 100644 (file)
@@ -1748,13 +1748,16 @@ build_known_method_ref (tree method, tree method_type ATTRIBUTE_UNUSED,
 
         SELF_TYPE->methods[METHOD_INDEX].ncode
 
-        This is guaranteed to work (assuming SELF_TYPE has
-        been initialized), since if the method is not compiled yet,
-        its ncode points to a trampoline that forces compilation. */
+      */
 
       int method_index = 0;
-      tree meth;
-      tree ref = build_class_ref (self_type);
+      tree meth, ref;
+
+      /* The method might actually be declared in some superclass, so
+        we have to use its class context, not the caller's notion of
+        where the method is.  */
+      self_type = DECL_CONTEXT (method);
+      ref = build_class_ref (self_type);
       ref = build1 (INDIRECT_REF, class_type_node, ref);
       if (ncode_ident == NULL_TREE)
        ncode_ident = get_identifier ("ncode");