diff options
| author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-15 19:11:43 +0000 |
|---|---|---|
| committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-15 19:11:43 +0000 |
| commit | beb3619b397cda4a2bc36d3b926b653fc67627fd (patch) | |
| tree | d75a57626d585261ba5d3eae3b74954aa5b37586 /gcc/java | |
| parent | c8c2d11079530635a3bc051c8a6ef73dd2190d29 (diff) | |
| download | ppe42-gcc-beb3619b397cda4a2bc36d3b926b653fc67627fd.tar.gz ppe42-gcc-beb3619b397cda4a2bc36d3b926b653fc67627fd.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100992 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/java')
| -rw-r--r-- | gcc/java/ChangeLog | 10 | ||||
| -rw-r--r-- | gcc/java/class.c | 5 | ||||
| -rw-r--r-- | gcc/java/decl.c | 9 | ||||
| -rw-r--r-- | gcc/java/java-tree.h | 3 |
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index d8cdd416544..b6f6e3a694d 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,13 @@ +2005-06-15 Tom Tromey <tromey@redhat.com> + + 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. + 2005-06-13 Geoffrey Keating <geoffk@apple.com> * Make-lang.in (rule for installing gcj.1): Depends on installdirs. diff --git a/gcc/java/class.c b/gcc/java/class.c index a555bf09882..f4441214633 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); diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 891e4dbe406..5240fbacd3b 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -1107,6 +1107,15 @@ java_init_decl_processing (void) TREE_THIS_VOLATILE (soft_nullpointer_node) = 1; TREE_SIDE_EFFECTS (soft_nullpointer_node) = 1; + soft_abstractmethod_node + = builtin_function ("_Jv_ThrowAbstractMethodError", + build_function_type (void_type_node, endlink), + 0, NOT_BUILT_IN, NULL, NULL_TREE); + /* Mark soft_abstractmethod_node as a `noreturn' function with side + effects. */ + TREE_THIS_VOLATILE (soft_abstractmethod_node) = 1; + TREE_SIDE_EFFECTS (soft_abstractmethod_node) = 1; + t = tree_cons (NULL_TREE, class_ptr_type, tree_cons (NULL_TREE, object_ptr_type_node, endlink)); soft_checkcast_node diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index 5651dc3f643..3d0f2331110 100644 --- a/gcc/java/java-tree.h +++ b/gcc/java/java-tree.h @@ -392,6 +392,7 @@ enum java_tree_index JTI_SOFT_MULTIANEWARRAY_NODE, JTI_SOFT_BADARRAYINDEX_NODE, JTI_SOFT_NULLPOINTER_NODE, + JTI_SOFT_ABSTRACTMETHOD_NODE, JTI_SOFT_CHECKARRAYSTORE_NODE, JTI_SOFT_MONITORENTER_NODE, JTI_SOFT_MONITOREXIT_NODE, @@ -651,6 +652,8 @@ extern GTY(()) tree java_global_trees[JTI_MAX]; java_global_trees[JTI_SOFT_BADARRAYINDEX_NODE] #define soft_nullpointer_node \ java_global_trees[JTI_SOFT_NULLPOINTER_NODE] +#define soft_abstractmethod_node \ + java_global_trees[JTI_SOFT_ABSTRACTMETHOD_NODE] #define soft_checkarraystore_node \ java_global_trees[JTI_SOFT_CHECKARRAYSTORE_NODE] #define soft_monitorenter_node \ |

