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
This commit is contained in:
Tom Tromey 2006-05-26 15:41:46 +00:00 committed by Tom Tromey
parent 7541c31ba2
commit 153d08d59b
5 changed files with 26 additions and 2 deletions

View file

@ -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

View file

@ -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);

View file

@ -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.
@ -328,6 +328,12 @@ vfy_object_type (void)
return k;
}
vfy_jclass
vfy_class_type (void)
{
return class_type_node;
}
vfy_jclass
vfy_string_type (void)
{

View file

@ -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;

View file

@ -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);