# HG changeset patch # User vlivanov # Date 1377801859 -14400 # Node ID 8947af8a9cec0bdc505faee911216311e3468369 # Parent 29aa8936f03c6209661702f7747bbd15e939d99d 8023976: assert(!CompilationPolicy::can_be_compiled(this, comp_level)) failed: sanity check Reviewed-by: kvn, twisti diff -r 29aa8936f03c -r 8947af8a9cec src/share/vm/oops/method.cpp --- a/src/share/vm/oops/method.cpp Wed Aug 28 11:22:43 2013 +0200 +++ b/src/share/vm/oops/method.cpp Thu Aug 29 22:44:19 2013 +0400 @@ -720,11 +720,22 @@ } } +bool Method::is_always_compilable() const { + // Generated adapters must be compiled + if (is_method_handle_intrinsic() && is_synthetic()) { + assert(!is_not_c1_compilable(), "sanity check"); + assert(!is_not_c2_compilable(), "sanity check"); + return true; + } + + return false; +} + bool Method::is_not_compilable(int comp_level) const { if (number_of_breakpoints() > 0) return true; - if (is_method_handle_intrinsic()) - return !is_synthetic(); // the generated adapters must be compiled + if (is_always_compilable()) + return false; if (comp_level == CompLevel_any) return is_not_c1_compilable() || is_not_c2_compilable(); if (is_c1_compile(comp_level)) @@ -736,6 +747,10 @@ // call this when compiler finds that this method is not compilable void Method::set_not_compilable(int comp_level, bool report, const char* reason) { + if (is_always_compilable()) { + // Don't mark a method which should be always compilable + return; + } print_made_not_compilable(comp_level, /*is_osr*/ false, report, reason); if (comp_level == CompLevel_all) { set_not_c1_compilable(); diff -r 29aa8936f03c -r 8947af8a9cec src/share/vm/oops/method.hpp --- a/src/share/vm/oops/method.hpp Wed Aug 28 11:22:43 2013 +0200 +++ b/src/share/vm/oops/method.hpp Thu Aug 29 22:44:19 2013 +0400 @@ -796,6 +796,7 @@ void set_not_osr_compilable_quietly(int comp_level = CompLevel_all) { set_not_osr_compilable(comp_level, false); } + bool is_always_compilable() const; private: void print_made_not_compilable(int comp_level, bool is_osr, bool report, const char* reason);