aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/java/ChangeLog10
-rw-r--r--gcc/java/class.c5
-rw-r--r--gcc/java/decl.c9
-rw-r--r--gcc/java/java-tree.h3
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index d8cdd41..b6f6e3a 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 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);
diff --git a/gcc/java/decl.c b/gcc/java/decl.c
index 891e4db..5240fba 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 5651dc3..3d0f233 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 \