blob: ac6d2dd08d43501d38db563e74584e5c1cd21e08 [file] [log] [blame]
// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.ir;
import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
import static com.android.tools.r8.ir.DebugLocalStartOutsideRangeTest.PrintHelper$PrintUriAdapter$1Dump.dump;
import static org.hamcrest.CoreMatchers.containsString;
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
@RunWith(Parameterized.class)
public class DebugLocalStartOutsideRangeTest extends TestBase {
private final TestParameters parameters;
@Parameters(name = "{0}")
public static TestParametersCollection data() {
return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
}
public DebugLocalStartOutsideRangeTest(TestParameters parameters) {
this.parameters = parameters;
}
@Test
public void testD8() throws CompilationFailedException {
testForD8(parameters.getBackend())
.addProgramClassFileData(dump())
.setMinApi(parameters.getApiLevel())
.compileWithExpectedDiagnostics(
diagnostics -> {
diagnostics.assertNoWarningsMatch(
diagnosticMessage(containsString("Could not find phi type for register")));
});
}
public static class PrintHelper$PrintUriAdapter$1Dump implements Opcodes {
public static byte[] dump() {
ClassWriter classWriter = new ClassWriter(0);
FieldVisitor fieldVisitor;
MethodVisitor methodVisitor;
classWriter.visit(
V1_7,
ACC_SUPER,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"Landroid/os/AsyncTask<Landroid/net/Uri;Ljava/lang/Boolean;Landroid/graphics/Bitmap;>;",
"android/os/AsyncTask",
null);
classWriter.visitSource("PrintHelper.java", null);
classWriter.visitOuterClass(
"androidx/print/PrintHelper$PrintUriAdapter",
"onLayout",
"(Landroid/print/PrintAttributes;Landroid/print/PrintAttributes;Landroid/os/CancellationSignal;Landroid/print/PrintDocumentAdapter$LayoutResultCallback;Landroid/os/Bundle;)V");
classWriter.visitInnerClass(
"androidx/print/PrintHelper$PrintUriAdapter",
"androidx/print/PrintHelper",
"PrintUriAdapter",
ACC_PRIVATE);
classWriter.visitInnerClass("androidx/print/PrintHelper$PrintUriAdapter$1", null, null, 0);
classWriter.visitInnerClass(
"android/print/PrintAttributes$MediaSize",
"android/print/PrintAttributes",
"MediaSize",
ACC_PUBLIC | ACC_FINAL | ACC_STATIC);
classWriter.visitInnerClass(
"android/print/PrintDocumentInfo$Builder",
"android/print/PrintDocumentInfo",
"Builder",
ACC_PUBLIC | ACC_FINAL | ACC_STATIC);
{
fieldVisitor =
classWriter.visitField(
ACC_FINAL | ACC_SYNTHETIC,
"val$cancellationSignal",
"Landroid/os/CancellationSignal;",
null,
null);
fieldVisitor.visitEnd();
}
{
fieldVisitor =
classWriter.visitField(
ACC_FINAL | ACC_SYNTHETIC,
"val$newPrintAttributes",
"Landroid/print/PrintAttributes;",
null,
null);
fieldVisitor.visitEnd();
}
{
fieldVisitor =
classWriter.visitField(
ACC_FINAL | ACC_SYNTHETIC,
"val$oldPrintAttributes",
"Landroid/print/PrintAttributes;",
null,
null);
fieldVisitor.visitEnd();
}
{
fieldVisitor =
classWriter.visitField(
ACC_FINAL | ACC_SYNTHETIC,
"val$layoutResultCallback",
"Landroid/print/PrintDocumentAdapter$LayoutResultCallback;",
null,
null);
fieldVisitor.visitEnd();
}
{
fieldVisitor =
classWriter.visitField(
ACC_FINAL | ACC_SYNTHETIC,
"this$1",
"Landroidx/print/PrintHelper$PrintUriAdapter;",
null,
null);
fieldVisitor.visitEnd();
}
{
methodVisitor =
classWriter.visitMethod(
ACC_PROTECTED, "onPostExecute", "(Landroid/graphics/Bitmap;)V", null, null);
methodVisitor.visitCode();
Label label0 = new Label();
Label label1 = new Label();
Label label2 = new Label();
methodVisitor.visitTryCatchBlock(label0, label1, label2, null);
Label label3 = new Label();
methodVisitor.visitTryCatchBlock(label2, label3, label2, null);
Label label4 = new Label();
methodVisitor.visitLabel(label4);
methodVisitor.visitLineNumber(450, label4);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitVarInsn(ALOAD, 1);
methodVisitor.visitMethodInsn(
INVOKESPECIAL, "android/os/AsyncTask", "onPostExecute", "(Ljava/lang/Object;)V", false);
Label label5 = new Label();
methodVisitor.visitLabel(label5);
methodVisitor.visitLineNumber(454, label5);
methodVisitor.visitVarInsn(ALOAD, 1);
Label label6 = new Label();
methodVisitor.visitJumpInsn(IFNULL, label6);
methodVisitor.visitFieldInsn(
GETSTATIC, "androidx/print/PrintHelper", "PRINT_ACTIVITY_RESPECTS_ORIENTATION", "Z");
Label label7 = new Label();
methodVisitor.visitJumpInsn(IFEQ, label7);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"this$1",
"Landroidx/print/PrintHelper$PrintUriAdapter;");
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter",
"this$0",
"Landroidx/print/PrintHelper;");
methodVisitor.visitFieldInsn(GETFIELD, "androidx/print/PrintHelper", "mOrientation", "I");
methodVisitor.visitJumpInsn(IFNE, label6);
methodVisitor.visitLabel(label7);
methodVisitor.visitLineNumber(458, label7);
methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitInsn(DUP);
methodVisitor.visitVarInsn(ASTORE, 3);
methodVisitor.visitInsn(MONITORENTER);
methodVisitor.visitLabel(label0);
methodVisitor.visitLineNumber(459, label0);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"this$1",
"Landroidx/print/PrintHelper$PrintUriAdapter;");
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter",
"mAttributes",
"Landroid/print/PrintAttributes;");
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL,
"android/print/PrintAttributes",
"getMediaSize",
"()Landroid/print/PrintAttributes$MediaSize;",
false);
methodVisitor.visitVarInsn(ASTORE, 2);
Label label8 = new Label();
methodVisitor.visitLabel(label8);
methodVisitor.visitLineNumber(460, label8);
methodVisitor.visitVarInsn(ALOAD, 3);
methodVisitor.visitInsn(MONITOREXIT);
methodVisitor.visitLabel(label1);
Label label9 = new Label();
methodVisitor.visitJumpInsn(GOTO, label9);
methodVisitor.visitLabel(label2);
methodVisitor.visitFrame(
Opcodes.F_FULL,
4,
new Object[] {
"androidx/print/PrintHelper$PrintUriAdapter$1",
"android/graphics/Bitmap",
Opcodes.TOP,
"java/lang/Object"
},
1,
new Object[] {"java/lang/Throwable"});
methodVisitor.visitVarInsn(ASTORE, 4);
methodVisitor.visitVarInsn(ALOAD, 3);
methodVisitor.visitInsn(MONITOREXIT);
methodVisitor.visitLabel(label3);
methodVisitor.visitVarInsn(ALOAD, 4);
methodVisitor.visitInsn(ATHROW);
methodVisitor.visitLabel(label9);
methodVisitor.visitLineNumber(462, label9);
methodVisitor.visitFrame(
Opcodes.F_FULL,
3,
new Object[] {
"androidx/print/PrintHelper$PrintUriAdapter$1",
"android/graphics/Bitmap",
"android/print/PrintAttributes$MediaSize"
},
0,
new Object[] {});
methodVisitor.visitVarInsn(ALOAD, 2);
methodVisitor.visitJumpInsn(IFNULL, label6);
Label label10 = new Label();
methodVisitor.visitLabel(label10);
methodVisitor.visitLineNumber(463, label10);
methodVisitor.visitVarInsn(ALOAD, 2);
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL, "android/print/PrintAttributes$MediaSize", "isPortrait", "()Z", false);
methodVisitor.visitVarInsn(ALOAD, 1);
methodVisitor.visitMethodInsn(
INVOKESTATIC,
"androidx/print/PrintHelper",
"isPortrait",
"(Landroid/graphics/Bitmap;)Z",
false);
methodVisitor.visitJumpInsn(IF_ICMPEQ, label6);
Label label11 = new Label();
methodVisitor.visitLabel(label11);
methodVisitor.visitLineNumber(464, label11);
methodVisitor.visitTypeInsn(NEW, "android/graphics/Matrix");
methodVisitor.visitInsn(DUP);
methodVisitor.visitMethodInsn(
INVOKESPECIAL, "android/graphics/Matrix", "<init>", "()V", false);
methodVisitor.visitVarInsn(ASTORE, 3);
Label label12 = new Label();
methodVisitor.visitLabel(label12);
methodVisitor.visitLineNumber(466, label12);
methodVisitor.visitVarInsn(ALOAD, 3);
methodVisitor.visitLdcInsn(new Float("90.0"));
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL, "android/graphics/Matrix", "postRotate", "(F)Z", false);
methodVisitor.visitInsn(POP);
Label label13 = new Label();
methodVisitor.visitLabel(label13);
methodVisitor.visitLineNumber(467, label13);
methodVisitor.visitVarInsn(ALOAD, 1);
methodVisitor.visitInsn(ICONST_0);
methodVisitor.visitInsn(ICONST_0);
methodVisitor.visitVarInsn(ALOAD, 1);
Label label14 = new Label();
methodVisitor.visitLabel(label14);
methodVisitor.visitLineNumber(468, label14);
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL, "android/graphics/Bitmap", "getWidth", "()I", false);
methodVisitor.visitVarInsn(ALOAD, 1);
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL, "android/graphics/Bitmap", "getHeight", "()I", false);
methodVisitor.visitVarInsn(ALOAD, 3);
methodVisitor.visitInsn(ICONST_1);
Label label15 = new Label();
methodVisitor.visitLabel(label15);
methodVisitor.visitLineNumber(467, label15);
methodVisitor.visitMethodInsn(
INVOKESTATIC,
"android/graphics/Bitmap",
"createBitmap",
"(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)Landroid/graphics/Bitmap;",
false);
methodVisitor.visitVarInsn(ASTORE, 1);
methodVisitor.visitLabel(label6);
methodVisitor.visitLineNumber(474, label6);
methodVisitor.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"this$1",
"Landroidx/print/PrintHelper$PrintUriAdapter;");
methodVisitor.visitVarInsn(ALOAD, 1);
methodVisitor.visitFieldInsn(
PUTFIELD,
"androidx/print/PrintHelper$PrintUriAdapter",
"mBitmap",
"Landroid/graphics/Bitmap;");
Label label16 = new Label();
methodVisitor.visitLabel(label16);
methodVisitor.visitLineNumber(475, label16);
methodVisitor.visitVarInsn(ALOAD, 1);
Label label17 = new Label();
methodVisitor.visitJumpInsn(IFNULL, label17);
Label label18 = new Label();
methodVisitor.visitLabel(label18);
methodVisitor.visitLineNumber(476, label18);
methodVisitor.visitTypeInsn(NEW, "android/print/PrintDocumentInfo$Builder");
methodVisitor.visitInsn(DUP);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"this$1",
"Landroidx/print/PrintHelper$PrintUriAdapter;");
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter",
"mJobName",
"Ljava/lang/String;");
methodVisitor.visitMethodInsn(
INVOKESPECIAL,
"android/print/PrintDocumentInfo$Builder",
"<init>",
"(Ljava/lang/String;)V",
false);
methodVisitor.visitInsn(ICONST_1);
Label label19 = new Label();
methodVisitor.visitLabel(label19);
methodVisitor.visitLineNumber(477, label19);
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL,
"android/print/PrintDocumentInfo$Builder",
"setContentType",
"(I)Landroid/print/PrintDocumentInfo$Builder;",
false);
methodVisitor.visitInsn(ICONST_1);
Label label20 = new Label();
methodVisitor.visitLabel(label20);
methodVisitor.visitLineNumber(478, label20);
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL,
"android/print/PrintDocumentInfo$Builder",
"setPageCount",
"(I)Landroid/print/PrintDocumentInfo$Builder;",
false);
Label label21 = new Label();
methodVisitor.visitLabel(label21);
methodVisitor.visitLineNumber(479, label21);
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL,
"android/print/PrintDocumentInfo$Builder",
"build",
"()Landroid/print/PrintDocumentInfo;",
false);
methodVisitor.visitVarInsn(ASTORE, 2);
Label label22 = new Label();
methodVisitor.visitLabel(label22);
methodVisitor.visitLineNumber(481, label22);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"val$newPrintAttributes",
"Landroid/print/PrintAttributes;");
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"val$oldPrintAttributes",
"Landroid/print/PrintAttributes;");
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL,
"android/print/PrintAttributes",
"equals",
"(Ljava/lang/Object;)Z",
false);
Label label23 = new Label();
methodVisitor.visitJumpInsn(IFNE, label23);
methodVisitor.visitInsn(ICONST_1);
Label label24 = new Label();
methodVisitor.visitJumpInsn(GOTO, label24);
methodVisitor.visitLabel(label23);
methodVisitor.visitFrame(
Opcodes.F_APPEND, 1, new Object[] {"android/print/PrintDocumentInfo"}, 0, null);
methodVisitor.visitInsn(ICONST_0);
methodVisitor.visitLabel(label24);
methodVisitor.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {Opcodes.INTEGER});
methodVisitor.visitVarInsn(ISTORE, 3);
Label label25 = new Label();
methodVisitor.visitLabel(label25);
methodVisitor.visitLineNumber(483, label25);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"val$layoutResultCallback",
"Landroid/print/PrintDocumentAdapter$LayoutResultCallback;");
methodVisitor.visitVarInsn(ALOAD, 2);
methodVisitor.visitVarInsn(ILOAD, 3);
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL,
"android/print/PrintDocumentAdapter$LayoutResultCallback",
"onLayoutFinished",
"(Landroid/print/PrintDocumentInfo;Z)V",
false);
Label label26 = new Label();
methodVisitor.visitLabel(label26);
methodVisitor.visitLineNumber(485, label26);
Label label27 = new Label();
methodVisitor.visitJumpInsn(GOTO, label27);
methodVisitor.visitLabel(label17);
methodVisitor.visitLineNumber(486, label17);
methodVisitor.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"val$layoutResultCallback",
"Landroid/print/PrintDocumentAdapter$LayoutResultCallback;");
methodVisitor.visitInsn(ACONST_NULL);
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL,
"android/print/PrintDocumentAdapter$LayoutResultCallback",
"onLayoutFailed",
"(Ljava/lang/CharSequence;)V",
false);
methodVisitor.visitLabel(label27);
methodVisitor.visitLineNumber(488, label27);
methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitFieldInsn(
GETFIELD,
"androidx/print/PrintHelper$PrintUriAdapter$1",
"this$1",
"Landroidx/print/PrintHelper$PrintUriAdapter;");
methodVisitor.visitInsn(ACONST_NULL);
methodVisitor.visitFieldInsn(
PUTFIELD,
"androidx/print/PrintHelper$PrintUriAdapter",
"mLoadBitmap",
"Landroid/os/AsyncTask;");
Label label28 = new Label();
methodVisitor.visitLabel(label28);
methodVisitor.visitLineNumber(489, label28);
methodVisitor.visitInsn(RETURN);
Label label29 = new Label();
methodVisitor.visitLabel(label29);
methodVisitor.visitLocalVariable(
"rotation", "Landroid/graphics/Matrix;", null, label12, label6, 3);
methodVisitor.visitLocalVariable(
"mediaSize", "Landroid/print/PrintAttributes$MediaSize;", null, label8, label6, 2);
methodVisitor.visitLocalVariable(
"info", "Landroid/print/PrintDocumentInfo;", null, label22, label26, 2);
methodVisitor.visitLocalVariable("changed", "Z", null, label25, label26, 3);
methodVisitor.visitLocalVariable(
"this", "Landroidx/print/PrintHelper$PrintUriAdapter$1;", null, label4, label29, 0);
methodVisitor.visitLocalVariable(
"bitmap", "Landroid/graphics/Bitmap;", null, label4, label29, 1);
methodVisitor.visitMaxs(7, 5);
methodVisitor.visitEnd();
}
classWriter.visitEnd();
return classWriter.toByteArray();
}
}
}