| Regression test for the combination of dex2oat using: |
| - jar with multidex |
| - vdex file where one dex file fails to fast verify (for example because of a |
| boot classpath change) |
| - dex files being compiled individually |
| |
| We used to crash in CompilerDriver::FastVerify, assuming that only FastVerify |
| can update the compiled_classes_ map. However, this isn't the case if one of the |
| dex file ended up needing full verification. |
| |
| We need prebuilts of the .jar and .dm file as we rely on the bootclasspath to |
| change which isn't expressable in a run-test. So we locally modified |
| android.system.Int32Ref to inherit java.util.HashMap. |
| |
| The code that was used to generate the prebuilts is as follows: |
| |
| |
| file Main.java in classes.dex: |
| |
| import java.util.HashMap; |
| import android.system.Int32Ref; |
| |
| public class Main { |
| public static void main(String[] args) throws Exception { |
| try { |
| FailVerification.foo(); |
| throw new Exception("Expected error"); |
| } catch (Error expected) { |
| } |
| } |
| } |
| |
| class FailVerification extends Foo { |
| |
| public static void foo() { |
| Int32Ref ref = new Int32Ref(42); |
| takeHashMap(ref); |
| } |
| |
| public static void takeHashMap(HashMap m) {} |
| } |
| |
| file Foo.java in classes2.dex: |
| |
| public class Foo { |
| } |