Add bool to verifier to allow soft failures.

When false, soft failures in the verifier become hard failures. It should
only be false when not compiling, and calling the verifier from the class
linker.

Change-Id: I664e5cbe491784b280aa5bfdb7e7fc0b771814f5
diff --git a/src/verifier/method_verifier.h b/src/verifier/method_verifier.h
index ae43162..7570b50 100644
--- a/src/verifier/method_verifier.h
+++ b/src/verifier/method_verifier.h
@@ -144,11 +144,12 @@
   };
 
   /* Verify a class. Returns "kNoFailure" on success. */
-  static FailureKind VerifyClass(const mirror::Class* klass, std::string& error)
+  static FailureKind VerifyClass(const mirror::Class* klass, std::string& error,
+                                 bool allow_soft_failures)
       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
   static FailureKind VerifyClass(const DexFile* dex_file, mirror::DexCache* dex_cache,
                                  mirror::ClassLoader* class_loader, uint32_t class_def_idx,
-                                 std::string& error)
+                                 std::string& error, bool allow_soft_failures)
       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
   static void VerifyMethodAndDump(std::ostream& os, uint32_t method_idx, const DexFile* dex_file,
@@ -206,7 +207,7 @@
                  mirror::ClassLoader* class_loader, uint32_t class_def_idx,
                  const DexFile::CodeItem* code_item,
                  uint32_t method_idx, mirror::AbstractMethod* method,
-                 uint32_t access_flags, bool can_load_classes)
+                 uint32_t access_flags, bool can_load_classes, bool allow_soft_failures)
           SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
   // Run verification on the method. Returns true if verification completes and false if the input
@@ -238,7 +239,8 @@
                                   mirror::DexCache* dex_cache,
                                   mirror::ClassLoader* class_loader, uint32_t class_def_idx,
                                   const DexFile::CodeItem* code_item,
-                                  mirror::AbstractMethod* method, uint32_t method_access_flags)
+                                  mirror::AbstractMethod* method, uint32_t method_access_flags,
+                                  bool allow_soft_failures)
           SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
   void FindLocksAtDexPc() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
@@ -636,6 +638,10 @@
   size_t monitor_enter_count_;
 
   const bool can_load_classes_;
+
+  // Converts soft failures to hard failures when false. Only false when the compiler isn't
+  // running and the verifier is called from the class linker.
+  const bool allow_soft_failures_;
 };
 std::ostream& operator<<(std::ostream& os, const MethodVerifier::FailureKind& rhs);