aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2006-05-26 15:41:46 +0000
committerTom Tromey <tromey@gcc.gnu.org>2006-05-26 15:41:46 +0000
commit153d08d59b0aba73ff4f8a525138ff7a38f0b517 (patch)
tree88690a510261c7f1c3fc40c4ca51027140d15d66 /gcc/java
parent7541c31ba2afb0b9e5c7893117d8f63a1a7b0e41 (diff)
downloadgcc-153d08d59b0aba73ff4f8a525138ff7a38f0b517.zip
gcc-153d08d59b0aba73ff4f8a525138ff7a38f0b517.tar.gz
gcc-153d08d59b0aba73ff4f8a525138ff7a38f0b517.tar.bz2
expr.c (java_push_constant_from_pool): Handle 'ldc class'.
* expr.c (java_push_constant_from_pool): Handle 'ldc class'. * verify-glue.c (vfy_class_type): New function. * verify-impl.c (check_constant): Allow 'ldc class'. * verify.h (vfy_class_type): Declare. From-SVN: r114135
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog7
-rw-r--r--gcc/java/expr.c6
-rw-r--r--gcc/java/verify-glue.c8
-rw-r--r--gcc/java/verify-impl.c4
-rw-r--r--gcc/java/verify.h3
5 files changed, 26 insertions, 2 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index fa2580f..edcde22 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,10 @@
+2006-05-26 Tom Tromey <tromey@redhat.com>
+
+ * expr.c (java_push_constant_from_pool): Handle 'ldc class'.
+ * verify-glue.c (vfy_class_type): New function.
+ * verify-impl.c (check_constant): Allow 'ldc class'.
+ * verify.h (vfy_class_type): Declare.
+
2006-05-25 Andrew Haley <aph@redhat.com>
PR java/27756
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index b2e03fc..94f76fd 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -3117,6 +3117,12 @@ java_push_constant_from_pool (JCF *jcf, int index)
c = build_ref_from_constant_pool (index);
c = convert (promote_type (string_type_node), c);
}
+ else if (JPOOL_TAG (jcf, index) == CONSTANT_Class
+ || JPOOL_TAG (jcf, index) == CONSTANT_ResolvedClass)
+ {
+ tree record = get_class_constant (jcf, index);
+ c = build_class_ref (record);
+ }
else
c = get_constant (jcf, index);
push_value (c);
diff --git a/gcc/java/verify-glue.c b/gcc/java/verify-glue.c
index 737a19b..23fcaba 100644
--- a/gcc/java/verify-glue.c
+++ b/gcc/java/verify-glue.c
@@ -1,5 +1,5 @@
/* Glue to interface gcj with bytecode verifier.
- Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GCC.
@@ -329,6 +329,12 @@ vfy_object_type (void)
}
vfy_jclass
+vfy_class_type (void)
+{
+ return class_type_node;
+}
+
+vfy_jclass
vfy_string_type (void)
{
vfy_jclass k;
diff --git a/gcc/java/verify-impl.c b/gcc/java/verify-impl.c
index f672fcf..886dfe7 100644
--- a/gcc/java/verify-impl.c
+++ b/gcc/java/verify-impl.c
@@ -1975,6 +1975,10 @@ check_constant (int index)
init_type_from_tag (&t, int_type);
else if (vfy_tag (pool, index) == JV_CONSTANT_Float)
init_type_from_tag (&t, float_type);
+ else if (vfy_tag (pool, index) == JV_CONSTANT_Class
+ || vfy_tag (pool, index) == JV_CONSTANT_ResolvedClass)
+ /* FIXME: should only allow this for 1.5 bytecode. */
+ init_type_from_class (&t, vfy_class_type ());
else
verify_fail_pc ("String, int, or float constant expected", vfr->start_PC);
return t;
diff --git a/gcc/java/verify.h b/gcc/java/verify.h
index d635193..b85176e 100644
--- a/gcc/java/verify.h
+++ b/gcc/java/verify.h
@@ -1,5 +1,5 @@
/* Declarations to interface gcj with bytecode verifier.
- Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GCC.
@@ -112,6 +112,7 @@ vfy_jclass vfy_get_component_type (vfy_jclass klass);
bool vfy_is_abstract (vfy_jclass klass);
vfy_jclass vfy_find_class (vfy_jclass klass, vfy_string name);
vfy_jclass vfy_object_type (void);
+vfy_jclass vfy_class_type (void);
vfy_jclass vfy_string_type (void);
vfy_jclass vfy_throwable_type (void);
vfy_jclass vfy_unsuitable_type (void);