6895168: JCK api/signaturetest/sigtest.basic.html#basic test fails for jdk 5.0 with HS 16 in nightly build

Wed, 16 Dec 2009 14:27:50 -0800

author
xlu
date
Wed, 16 Dec 2009 14:27:50 -0800
changeset 1561
933a3e806ce6
parent 1559
2e8bdfdd3ba2
child 1562
ba60f0a5d714

6895168: JCK api/signaturetest/sigtest.basic.html#basic test fails for jdk 5.0 with HS 16 in nightly build
Reviewed-by: dholmes, acorn, jrose

src/share/vm/oops/instanceKlass.cpp file | annotate | diff | comparison | revisions
src/share/vm/oops/instanceKlass.hpp file | annotate | diff | comparison | revisions
src/share/vm/prims/jvm.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/oops/instanceKlass.cpp	Wed Dec 16 13:16:08 2009 -0800
     1.2 +++ b/src/share/vm/oops/instanceKlass.cpp	Wed Dec 16 14:27:50 2009 -0800
     1.3 @@ -2045,8 +2045,9 @@
     1.4      // As we walk along, look for equalities between outer1 and class2.
     1.5      // Eventually, the walks will terminate as outer1 stops
     1.6      // at the top-level class around the original class.
     1.7 -    symbolOop ignore_name;
     1.8 -    klassOop next = outer1->compute_enclosing_class(ignore_name, CHECK_false);
     1.9 +    bool ignore_inner_is_member;
    1.10 +    klassOop next = outer1->compute_enclosing_class(&ignore_inner_is_member,
    1.11 +                                                    CHECK_false);
    1.12      if (next == NULL)  break;
    1.13      if (next == class2())  return true;
    1.14      outer1 = instanceKlassHandle(THREAD, next);
    1.15 @@ -2055,8 +2056,9 @@
    1.16    // Now do the same for class2.
    1.17    instanceKlassHandle outer2 = class2;
    1.18    for (;;) {
    1.19 -    symbolOop ignore_name;
    1.20 -    klassOop next = outer2->compute_enclosing_class(ignore_name, CHECK_false);
    1.21 +    bool ignore_inner_is_member;
    1.22 +    klassOop next = outer2->compute_enclosing_class(&ignore_inner_is_member,
    1.23 +                                                    CHECK_false);
    1.24      if (next == NULL)  break;
    1.25      // Might as well check the new outer against all available values.
    1.26      if (next == class1())  return true;
     2.1 --- a/src/share/vm/oops/instanceKlass.hpp	Wed Dec 16 13:16:08 2009 -0800
     2.2 +++ b/src/share/vm/oops/instanceKlass.hpp	Wed Dec 16 14:27:50 2009 -0800
     2.3 @@ -337,12 +337,12 @@
     2.4    static bool is_same_class_package(oop class_loader1, symbolOop class_name1, oop class_loader2, symbolOop class_name2);
     2.5  
     2.6    // find an enclosing class (defined where original code was, in jvm.cpp!)
     2.7 -  klassOop compute_enclosing_class(symbolOop& simple_name_result, TRAPS) {
     2.8 +  klassOop compute_enclosing_class(bool* inner_is_member, TRAPS) {
     2.9      instanceKlassHandle self(THREAD, this->as_klassOop());
    2.10 -    return compute_enclosing_class_impl(self, simple_name_result, THREAD);
    2.11 +    return compute_enclosing_class_impl(self, inner_is_member, THREAD);
    2.12    }
    2.13    static klassOop compute_enclosing_class_impl(instanceKlassHandle self,
    2.14 -                                               symbolOop& simple_name_result, TRAPS);
    2.15 +                                               bool* inner_is_member, TRAPS);
    2.16  
    2.17    // tell if two classes have the same enclosing class (at package level)
    2.18    bool is_same_package_member(klassOop class2, TRAPS) {
     3.1 --- a/src/share/vm/prims/jvm.cpp	Wed Dec 16 13:16:08 2009 -0800
     3.2 +++ b/src/share/vm/prims/jvm.cpp	Wed Dec 16 14:27:50 2009 -0800
     3.3 @@ -1318,19 +1318,20 @@
     3.4      return NULL;
     3.5    }
     3.6  
     3.7 -  symbolOop simple_name = NULL;
     3.8 +  bool inner_is_member = false;
     3.9    klassOop outer_klass
    3.10      = instanceKlass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))
    3.11 -                          )->compute_enclosing_class(simple_name, CHECK_NULL);
    3.12 +                          )->compute_enclosing_class(&inner_is_member, CHECK_NULL);
    3.13    if (outer_klass == NULL)  return NULL;  // already a top-level class
    3.14 -  if (simple_name == NULL)  return NULL;  // an anonymous class (inside a method)
    3.15 +  if (!inner_is_member)  return NULL;     // an anonymous class (inside a method)
    3.16    return (jclass) JNIHandles::make_local(env, Klass::cast(outer_klass)->java_mirror());
    3.17  }
    3.18  JVM_END
    3.19  
    3.20  // should be in instanceKlass.cpp, but is here for historical reasons
    3.21  klassOop instanceKlass::compute_enclosing_class_impl(instanceKlassHandle k,
    3.22 -                                                     symbolOop& simple_name_result, TRAPS) {
    3.23 +                                                     bool* inner_is_member,
    3.24 +                                                     TRAPS) {
    3.25    Thread* thread = THREAD;
    3.26    const int inner_class_info_index = inner_class_inner_class_info_offset;
    3.27    const int outer_class_info_index = inner_class_outer_class_info_offset;
    3.28 @@ -1347,8 +1348,7 @@
    3.29    bool found = false;
    3.30    klassOop ok;
    3.31    instanceKlassHandle outer_klass;
    3.32 -  bool inner_is_member = false;
    3.33 -  int simple_name_index = 0;
    3.34 +  *inner_is_member = false;
    3.35  
    3.36    // Find inner_klass attribute
    3.37    for (int i = 0; i < i_length && !found; i += inner_class_next_offset) {
    3.38 @@ -1364,8 +1364,7 @@
    3.39          if (found && ooff != 0) {
    3.40            ok = i_cp->klass_at(ooff, CHECK_NULL);
    3.41            outer_klass = instanceKlassHandle(thread, ok);
    3.42 -          simple_name_index = noff;
    3.43 -          inner_is_member = true;
    3.44 +          *inner_is_member = true;
    3.45          }
    3.46        }
    3.47      }
    3.48 @@ -1377,7 +1376,7 @@
    3.49      if (encl_method_class_idx != 0) {
    3.50        ok = i_cp->klass_at(encl_method_class_idx, CHECK_NULL);
    3.51        outer_klass = instanceKlassHandle(thread, ok);
    3.52 -      inner_is_member = false;
    3.53 +      *inner_is_member = false;
    3.54      }
    3.55    }
    3.56  
    3.57 @@ -1387,9 +1386,7 @@
    3.58    // Throws an exception if outer klass has not declared k as an inner klass
    3.59    // We need evidence that each klass knows about the other, or else
    3.60    // the system could allow a spoof of an inner class to gain access rights.
    3.61 -  Reflection::check_for_inner_class(outer_klass, k, inner_is_member, CHECK_NULL);
    3.62 -
    3.63 -  simple_name_result = (inner_is_member ? i_cp->symbol_at(simple_name_index) : symbolOop(NULL));
    3.64 +  Reflection::check_for_inner_class(outer_klass, k, *inner_is_member, CHECK_NULL);
    3.65    return outer_klass();
    3.66  }
    3.67  

mercurial