Commit 153d08d5 by Tom Tromey Committed by Tom Tromey

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
parent 7541c31b
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> 2006-05-25 Andrew Haley <aph@redhat.com>
PR java/27756 PR java/27756
......
...@@ -3117,6 +3117,12 @@ java_push_constant_from_pool (JCF *jcf, int index) ...@@ -3117,6 +3117,12 @@ java_push_constant_from_pool (JCF *jcf, int index)
c = build_ref_from_constant_pool (index); c = build_ref_from_constant_pool (index);
c = convert (promote_type (string_type_node), c); 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 else
c = get_constant (jcf, index); c = get_constant (jcf, index);
push_value (c); push_value (c);
......
/* Glue to interface gcj with bytecode verifier. /* 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. This file is part of GCC.
...@@ -329,6 +329,12 @@ vfy_object_type (void) ...@@ -329,6 +329,12 @@ vfy_object_type (void)
} }
vfy_jclass vfy_jclass
vfy_class_type (void)
{
return class_type_node;
}
vfy_jclass
vfy_string_type (void) vfy_string_type (void)
{ {
vfy_jclass k; vfy_jclass k;
......
...@@ -1975,6 +1975,10 @@ check_constant (int index) ...@@ -1975,6 +1975,10 @@ check_constant (int index)
init_type_from_tag (&t, int_type); init_type_from_tag (&t, int_type);
else if (vfy_tag (pool, index) == JV_CONSTANT_Float) else if (vfy_tag (pool, index) == JV_CONSTANT_Float)
init_type_from_tag (&t, float_type); 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 else
verify_fail_pc ("String, int, or float constant expected", vfr->start_PC); verify_fail_pc ("String, int, or float constant expected", vfr->start_PC);
return t; return t;
......
/* Declarations to interface gcj with bytecode verifier. /* 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. This file is part of GCC.
...@@ -112,6 +112,7 @@ vfy_jclass vfy_get_component_type (vfy_jclass klass); ...@@ -112,6 +112,7 @@ vfy_jclass vfy_get_component_type (vfy_jclass klass);
bool vfy_is_abstract (vfy_jclass klass); bool vfy_is_abstract (vfy_jclass klass);
vfy_jclass vfy_find_class (vfy_jclass klass, vfy_string name); vfy_jclass vfy_find_class (vfy_jclass klass, vfy_string name);
vfy_jclass vfy_object_type (void); vfy_jclass vfy_object_type (void);
vfy_jclass vfy_class_type (void);
vfy_jclass vfy_string_type (void); vfy_jclass vfy_string_type (void);
vfy_jclass vfy_throwable_type (void); vfy_jclass vfy_throwable_type (void);
vfy_jclass vfy_unsuitable_type (void); vfy_jclass vfy_unsuitable_type (void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment