--- old/src/share/vm/classfile/classFileParser.cpp 2016-11-03 14:16:16.000000000 -0700 +++ new/src/share/vm/classfile/classFileParser.cpp 2016-11-03 14:16:16.000000000 -0700 @@ -22,11 +22,13 @@ * */ #include "precompiled.hpp" +#include "aot/aotLoader.hpp" #include "classfile/classFileParser.hpp" #include "classfile/classFileStream.hpp" #include "classfile/classLoader.hpp" #include "classfile/classLoaderData.inline.hpp" #include "classfile/defaultMethods.hpp" +#include "classfile/dictionary.hpp" #include "classfile/javaClasses.inline.hpp" #include "classfile/moduleEntry.hpp" #include "classfile/symbolTable.hpp" @@ -5190,6 +5192,19 @@ assert(_klass == ik, "invariant"); + ik->set_has_passed_fingerprint_check(false); + if (UseAOT && ik->supers_have_passed_fingerprint_checks()) { + uint64_t aot_fp = AOTLoader::get_saved_fingerprint(ik); + if (aot_fp != 0 && aot_fp == _stream->compute_fingerprint()) { + // This class matches with a class saved in an AOT library + ik->set_has_passed_fingerprint_check(true); + } else { + ResourceMark rm; + log_info(class, fingerprint)("%s : expected = " PTR64_FORMAT " actual = " PTR64_FORMAT, + ik->external_name(), aot_fp, _stream->compute_fingerprint()); + } + } + return ik; }