8200466: Revisit the setting of _transitive_interfaces in InstanceKlass

Delay the setting of _transitive_interfaces until after initialize_supers() in fill_instance_klass().

Reviewed-by: iklam, coleenp
This commit is contained in:
Calvin Cheung 2018-05-02 09:26:10 -07:00
parent 7dc011ccca
commit aedb6040c6
10 changed files with 35 additions and 18 deletions

View file

@ -224,7 +224,7 @@ bool Klass::can_be_primary_super_slow() const {
return true;
}
void Klass::initialize_supers(Klass* k, TRAPS) {
void Klass::initialize_supers(Klass* k, Array<Klass*>* transitive_interfaces, TRAPS) {
if (FastSuperclassLimit == 0) {
// None of the other machinery matters.
set_super(k);
@ -292,7 +292,7 @@ void Klass::initialize_supers(Klass* k, TRAPS) {
ResourceMark rm(THREAD); // need to reclaim GrowableArrays allocated below
// Compute the "real" non-extra secondaries.
GrowableArray<Klass*>* secondaries = compute_secondary_supers(extras);
GrowableArray<Klass*>* secondaries = compute_secondary_supers(extras, transitive_interfaces);
if (secondaries == NULL) {
// secondary_supers set by compute_secondary_supers
return;
@ -342,8 +342,10 @@ void Klass::initialize_supers(Klass* k, TRAPS) {
}
}
GrowableArray<Klass*>* Klass::compute_secondary_supers(int num_extra_slots) {
GrowableArray<Klass*>* Klass::compute_secondary_supers(int num_extra_slots,
Array<Klass*>* transitive_interfaces) {
assert(num_extra_slots == 0, "override for complex klasses");
assert(transitive_interfaces == NULL, "sanity");
set_secondary_supers(Universe::the_empty_klass_array());
return NULL;
}