diff options
| author | 2016-10-28 08:54:59 +0000 | |
|---|---|---|
| committer | 2016-10-28 08:54:59 +0000 | |
| commit | d6435da102851e155acd12adc420e7df3db47903 (patch) | |
| tree | d2142ead7c59adffd7771a216e0ca89aab8717f9 /compiler/driver/compiler_driver.cc | |
| parent | 5a8292618f25634b51eb97fdd0377de3d02d9489 (diff) | |
| parent | e3eae5e41502c85ba0b4ef88340c10bb53795a47 (diff) | |
Merge "compiler_driver: loosen DCHECK for java/lang/invoke classes."
Diffstat (limited to 'compiler/driver/compiler_driver.cc')
| -rw-r--r-- | compiler/driver/compiler_driver.cc | 20 | 
1 files changed, 14 insertions, 6 deletions
| diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index 56b4ebd608..1b87725230 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -24,6 +24,8 @@  #include <malloc.h>  // For mallinfo  #endif +#include "android-base/strings.h" +  #include "art_field-inl.h"  #include "art_method-inl.h"  #include "base/array_ref.h" @@ -2011,12 +2013,18 @@ class VerifyClassVisitor : public CompilationVisitor {        CHECK(klass->IsCompileTimeVerified() || klass->IsErroneous())            << klass->PrettyDescriptor() << ": state=" << klass->GetStatus(); -      // It is *very* problematic if there are verification errors in the boot classpath. -      // For example, we rely on things working OK without verification when the -      // decryption dialog is brought up. So abort in a debug build if we find this violated. -      DCHECK(!manager_->GetCompiler()->GetCompilerOptions().IsBootImage() || klass->IsVerified()) -          << "Boot classpath class " << klass->PrettyClass() -          << " failed to fully verify."; +      // It is *very* problematic if there are verification errors in the boot classpath. For example, +      // we rely on things working OK without verification when the decryption dialog is brought up. +      // So abort in a debug build if we find this violated. +      if (kIsDebugBuild) { +        // TODO(narayan): Remove this special case for signature polymorphic +        // invokes once verifier support is fully implemented. +        if (manager_->GetCompiler()->GetCompilerOptions().IsBootImage() && +            !android::base::StartsWith(descriptor, "Ljava/lang/invoke/")) { +          DCHECK(klass->IsVerified()) << "Boot classpath class " << klass->PrettyClass() +              << " failed to fully verify: state= " << klass->GetStatus(); +        } +      }      } else {        // Make the skip a soft failure, essentially being considered as verify at runtime.        failure_kind = verifier::MethodVerifier::kSoftFailure; |