aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/class.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2005-06-15 19:11:43 +0000
committerTom Tromey <tromey@gcc.gnu.org>2005-06-15 19:11:43 +0000
commitfbb4c46b2d6b1cb70f05c25e01462d90282aece5 (patch)
treed75a57626d585261ba5d3eae3b74954aa5b37586 /gcc/java/class.c
parent92b5fbc5aebba9d16fb3247ad0b77020132a2427 (diff)
downloadgcc-fbb4c46b2d6b1cb70f05c25e01462d90282aece5.zip
gcc-fbb4c46b2d6b1cb70f05c25e01462d90282aece5.tar.gz
gcc-fbb4c46b2d6b1cb70f05c25e01462d90282aece5.tar.bz2
re PR libgcj/21906 (hang when invoking abstract method)
gcc/java/: PR libgcj/21906: * class.c (make_method_value): Use soft_abstractmethod_node for abstract method. * java-tree.h (soft_abstractmethod_node): New define. (JTI_SOFT_ABSTRACTMETHOD_NODE): New enum constant. * decl.c (java_init_decl_processing): Initialize soft_abstractmethod_node. libjava/: PR libgcj/21906: * defineclass.cc (handleMethodsEnd): Set ncode for abstract methods. * include/jvm.h (_Jv_ThrowAbstractMethodError): Declare. * link.cc (_Jv_ThrowAbstractMethodError): Renamed. No longer static. (append_partial_itable): Use it. (set_vtable_entries): Likewise. From-SVN: r100992
Diffstat (limited to 'gcc/java/class.c')
-rw-r--r--gcc/java/class.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/java/class.c b/gcc/java/class.c
index a555bf0..f444121 100644
--- a/gcc/java/class.c
+++ b/gcc/java/class.c
@@ -1315,7 +1315,10 @@ make_method_value (tree mdecl)
index = integer_minus_one_node;
code = null_pointer_node;
- if (!METHOD_ABSTRACT (mdecl))
+ if (METHOD_ABSTRACT (mdecl))
+ code = build1 (ADDR_EXPR, nativecode_ptr_type_node,
+ soft_abstractmethod_node);
+ else
code = build1 (ADDR_EXPR, nativecode_ptr_type_node,
make_local_function_alias (mdecl));
START_RECORD_CONSTRUCTOR (minit, method_type_node);