diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index 7a3224b..4aa5b7c 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -7,7 +7,7 @@
 import static org.objectweb.asm.ClassReader.SKIP_DEBUG;
 import static org.objectweb.asm.ClassReader.SKIP_FRAMES;
 import static org.objectweb.asm.Opcodes.ACC_DEPRECATED;
-import static org.objectweb.asm.Opcodes.ASM6;
+import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
 
 import com.android.tools.r8.ProgramResource.Kind;
 import com.android.tools.r8.dex.Constants;
@@ -199,7 +199,7 @@
         byte[] classCache,
         JarApplicationReader application,
         Consumer<DexClass> classConsumer) {
-      super(ASM6);
+      super(ASM_VERSION);
       this.origin = origin;
       this.classKind = classKind;
       this.classConsumer = classConsumer;
@@ -456,7 +456,7 @@
 
     public CreateFieldVisitor(CreateDexClassVisitor parent,
         int access, String name, String desc, String signature, Object value) {
-      super(ASM6);
+      super(ASM_VERSION);
       this.parent = parent;
       this.access = access;
       this.name = name;
@@ -568,7 +568,7 @@
 
     public CreateMethodVisitor(int access, String name, String desc, String signature,
         String[] exceptions, CreateDexClassVisitor parent) {
-      super(ASM6);
+      super(ASM_VERSION);
       this.name = name;
       this.parent = parent;
       this.method = parent.application.getMethod(parent.type, name, desc);
@@ -766,7 +766,7 @@
 
     public CreateAnnotationVisitor(
         JarApplicationReader application, BiConsumer<List<DexString>, List<DexValue>> onVisitEnd) {
-      super(ASM6);
+      super(ASM_VERSION);
       this.application = application;
       this.onVisitEnd = onVisitEnd;
     }
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index 3fc15e8..53aa5da 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -364,7 +364,7 @@
     private final boolean useJsrInliner;
 
     public SecondVisitor(BiFunction<String, String, JarCode> codeLocator, boolean useJsrInliner) {
-      super(Opcodes.ASM6);
+      super(InternalOptions.ASM_VERSION);
       this.codeLocator = codeLocator;
       this.useJsrInliner = useJsrInliner;
     }
@@ -375,7 +375,7 @@
       MethodNode node =
           useJsrInliner
               ? new JSRInlinerAdapter(null, access, name, desc, signature, exceptions)
-              : new MethodNode(Opcodes.ASM6, access, name, desc, signature, exceptions);
+              : new MethodNode(InternalOptions.ASM_VERSION, access, name, desc, signature, exceptions);
       JarCode code = null;
       MethodAccessFlags flags = JarClassFileReader.createMethodAccessFlags(name, access);
       if (!flags.isAbstract() && !flags.isNative()) {
diff --git a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
index d1e1c5c..c849750 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -58,6 +58,7 @@
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.naming.ClassNameMapper;
 import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.InternalOptions;
 import it.unimi.dsi.fastutil.ints.Int2ReferenceAVLTreeMap;
 import it.unimi.dsi.fastutil.ints.Int2ReferenceSortedMap;
 import java.util.ArrayList;
@@ -218,7 +219,7 @@
 
     ClassCodeVisitor(
         ReparseContext context, JarApplicationReader application, boolean useJsrInliner) {
-      super(Opcodes.ASM6);
+      super(InternalOptions.ASM_VERSION);
       this.context = context;
       this.application = application;
       this.usrJsrInliner = useJsrInliner;
@@ -256,7 +257,7 @@
     private DexMethod method;
 
     MethodCodeVisitor(JarApplicationReader application, LazyCfCode code) {
-      super(Opcodes.ASM6);
+      super(InternalOptions.ASM_VERSION);
       this.application = application;
       this.factory = application.getFactory();
       this.method = code.method;
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index 6a9e056..dabfd6c 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.jar;
 
-import static org.objectweb.asm.Opcodes.ASM6;
+import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
 
 import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.ClassFileConsumer;
@@ -410,8 +410,8 @@
 
   public static String printCf(byte[] result) {
     ClassReader reader = new ClassReader(result);
-    ClassNode node = new ClassNode(ASM6);
-    reader.accept(node, ASM6);
+    ClassNode node = new ClassNode(ASM_VERSION);
+    reader.accept(node, ASM_VERSION);
     StringWriter writer = new StringWriter();
     for (MethodNode method : node.methods) {
       writer.append(method.name).append(method.desc).append('\n');
diff --git a/src/main/java/com/android/tools/r8/jar/InliningConstraintVisitor.java b/src/main/java/com/android/tools/r8/jar/InliningConstraintVisitor.java
index c2efa88..d560332 100644
--- a/src/main/java/com/android/tools/r8/jar/InliningConstraintVisitor.java
+++ b/src/main/java/com/android/tools/r8/jar/InliningConstraintVisitor.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.jar;
 
-import static org.objectweb.asm.Opcodes.ASM6;
+import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.errors.Unreachable;
@@ -51,7 +51,7 @@
       GraphLense graphLense,
       DexEncodedMethod method,
       DexType invocationContext) {
-    super(ASM6);
+    super(ASM_VERSION);
     assert graphLense.isContextFreeForMethods();
     this.application = application;
     this.appView = appView;
diff --git a/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java b/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java
index 9bcb635..429c1eb 100644
--- a/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java
+++ b/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java
@@ -5,7 +5,7 @@
 package com.android.tools.r8.jar;
 
 import static org.objectweb.asm.Opcodes.ALOAD;
-import static org.objectweb.asm.Opcodes.ASM6;
+import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
 import static org.objectweb.asm.Opcodes.DLOAD;
 import static org.objectweb.asm.Opcodes.FLOAD;
 import static org.objectweb.asm.Opcodes.ILOAD;
@@ -25,7 +25,7 @@
   private final int arguments;
 
   public JarArgumentUseVisitor(DexEncodedMethod method, ArgumentUse registry) {
-    super(ASM6);
+    super(ASM_VERSION);
     this.registry = registry;
 
     DexProto proto = method.method.proto;
diff --git a/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java b/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java
index b445efc..991b861 100644
--- a/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java
+++ b/src/main/java/com/android/tools/r8/jar/JarRegisterEffectsVisitor.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.jar;
 
-import static org.objectweb.asm.Opcodes.ASM6;
+import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.errors.Unreachable;
@@ -27,7 +27,7 @@
 
   public JarRegisterEffectsVisitor(DexType clazz, UseRegistry registry,
       JarApplicationReader application) {
-    super(ASM6);
+    super(ASM_VERSION);
     this.clazz = clazz;
     this.registry = registry;
     this.application = application;
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 8df2e21..3a5bd94 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -39,6 +39,7 @@
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.function.Consumer;
+import org.objectweb.asm.Opcodes;
 
 public class InternalOptions {
 
@@ -51,6 +52,8 @@
     ON
   }
 
+  public static final int ASM_VERSION = Opcodes.ASM7;
+
   public final DexItemFactory itemFactory;
 
   public ProguardConfiguration getProguardConfiguration() {
diff --git a/src/test/examplesAndroidO/invokecustom/TestGenerator.java b/src/test/examplesAndroidO/invokecustom/TestGenerator.java
index 05a6f28..9964ed0 100644
--- a/src/test/examplesAndroidO/invokecustom/TestGenerator.java
+++ b/src/test/examplesAndroidO/invokecustom/TestGenerator.java
@@ -41,7 +41,7 @@
       ClassReader cr = new ClassReader(input);
       ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
       cr.accept(
-          new ClassVisitor(Opcodes.ASM6, cw) {
+          new ClassVisitor(Opcodes.ASM7, cw) {
             @Override
             public void visitEnd() {
               generateMethodTest1(cw);
diff --git a/src/test/examplesAndroidO/invokecustom2/TestGenerator.java b/src/test/examplesAndroidO/invokecustom2/TestGenerator.java
index 9bbc03a..377084e 100644
--- a/src/test/examplesAndroidO/invokecustom2/TestGenerator.java
+++ b/src/test/examplesAndroidO/invokecustom2/TestGenerator.java
@@ -42,7 +42,7 @@
       ClassReader cr = new ClassReader(input);
       ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
       cr.accept(
-          new ClassVisitor(Opcodes.ASM6, cw) {
+          new ClassVisitor(Opcodes.ASM7, cw) {
             @Override
             public void visitEnd() {
               generateMethodTest1(cw);
diff --git a/src/test/examplesAndroidO/stringconcat/TestGenerator.java b/src/test/examplesAndroidO/stringconcat/TestGenerator.java
index 12e5004..72bdfbf 100644
--- a/src/test/examplesAndroidO/stringconcat/TestGenerator.java
+++ b/src/test/examplesAndroidO/stringconcat/TestGenerator.java
@@ -51,12 +51,12 @@
       ClassReader cr = new ClassReader(input);
       ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
       cr.accept(
-          new ClassVisitor(Opcodes.ASM6, cw) {
+          new ClassVisitor(Opcodes.ASM7, cw) {
             @Override
             public MethodVisitor visitMethod(int access,
                 final String methodName, String desc, String signature, String[] exceptions) {
               MethodVisitor mv = super.visitMethod(access, methodName, desc, signature, exceptions);
-              return new MethodVisitor(Opcodes.ASM6, mv) {
+              return new MethodVisitor(Opcodes.ASM7, mv) {
                 private List<Object> recentConstants = new ArrayList<>();
 
                 @Override
diff --git a/src/test/examplesAndroidP/invokecustom/TestGenerator.java b/src/test/examplesAndroidP/invokecustom/TestGenerator.java
index 495f080..b08441c 100644
--- a/src/test/examplesAndroidP/invokecustom/TestGenerator.java
+++ b/src/test/examplesAndroidP/invokecustom/TestGenerator.java
@@ -41,7 +41,7 @@
       ClassReader cr = new ClassReader(inputStream);
       ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
       cr.accept(
-          new ClassVisitor(Opcodes.ASM6, cw) {
+          new ClassVisitor(Opcodes.ASM7, cw) {
             @Override
             public void visitEnd() {
               generateMethodTest1(cw);
diff --git a/src/test/java/com/android/tools/r8/CfFrontendExamplesTest.java b/src/test/java/com/android/tools/r8/CfFrontendExamplesTest.java
index a6578ee..fbdc6fc 100644
--- a/src/test/java/com/android/tools/r8/CfFrontendExamplesTest.java
+++ b/src/test/java/com/android/tools/r8/CfFrontendExamplesTest.java
@@ -8,6 +8,7 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableList;
 import java.io.PrintWriter;
@@ -396,7 +397,7 @@
     private final List<Part> parts = new ArrayList<>();
 
     ASMifierSorted() {
-      super(Opcodes.ASM6, "cw", 0);
+      super(InternalOptions.ASM_VERSION, "cw", 0);
     }
 
     @Override
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 0ad4f8e..bd57729 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -7,7 +7,7 @@
 import static com.google.common.collect.Lists.cartesianProduct;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.objectweb.asm.Opcodes.ASM6;
+import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
 
 import com.android.tools.r8.DataResourceProvider.Visitor;
 import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
@@ -894,7 +894,7 @@
       private String className;
 
       private ClassNameExtractor() {
-        super(ASM6);
+        super(ASM_VERSION);
       }
 
       @Override
diff --git a/src/test/java/com/android/tools/r8/cf/MethodHandleDump.java b/src/test/java/com/android/tools/r8/cf/MethodHandleDump.java
index 9adf616..f400169 100644
--- a/src/test/java/com/android/tools/r8/cf/MethodHandleDump.java
+++ b/src/test/java/com/android/tools/r8/cf/MethodHandleDump.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.cf;
 
+import com.android.tools.r8.utils.InternalOptions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableMap.Builder;
 import org.objectweb.asm.ClassReader;
@@ -87,7 +88,7 @@
     ClassReader cr = new ClassReader(input);
     ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
     cr.accept(
-        new ClassVisitor(ASM6, cw) {
+        new ClassVisitor(InternalOptions.ASM_VERSION, cw) {
 
           @Override
           public MethodVisitor visitMethod(
diff --git a/src/test/java/com/android/tools/r8/desugaring/interfacemethods/InterfaceMethodDesugaringTests.java b/src/test/java/com/android/tools/r8/desugaring/interfacemethods/InterfaceMethodDesugaringTests.java
index 3674108..a6ee6a5 100644
--- a/src/test/java/com/android/tools/r8/desugaring/interfacemethods/InterfaceMethodDesugaringTests.java
+++ b/src/test/java/com/android/tools/r8/desugaring/interfacemethods/InterfaceMethodDesugaringTests.java
@@ -22,6 +22,7 @@
 import com.android.tools.r8.desugaring.interfacemethods.static0.TestMainStatic0;
 import com.android.tools.r8.desugaring.interfacemethods.static1.TestMainStatic1;
 import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.InternalOptions;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -183,12 +184,12 @@
       ClassReader cr = new ClassReader(input);
       ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
       cr.accept(
-          new ClassVisitor(Opcodes.ASM6, cw) {
+          new ClassVisitor(InternalOptions.ASM_VERSION, cw) {
             @Override
             public MethodVisitor visitMethod(int access, String name,
                 String desc, String signature, String[] exceptions) {
               MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions);
-              return new MethodVisitor(Opcodes.ASM6, visitor) {
+              return new MethodVisitor(InternalOptions.ASM_VERSION, visitor) {
                 @Override
                 public void visitMethodInsn(
                     int opcode, String owner, String name, String desc, boolean itf) {
diff --git a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
index ac48680..a6fd390 100644
--- a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
+++ b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.AndroidAppConsumers;
+import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.codeinspector.AnnotationSubject;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -144,7 +145,7 @@
       throws IOException, ExecutionException {
     ClassReader classReader = new ClassReader(new FileInputStream(inputPath.toFile()));
     ReadSourceDebugExtensionAttribute sourceDebugExtensionReader =
-        new ReadSourceDebugExtensionAttribute(Opcodes.ASM6, null);
+        new ReadSourceDebugExtensionAttribute(InternalOptions.ASM_VERSION, null);
     classReader.accept(sourceDebugExtensionReader, 0);
 
     CodeInspector codeInspector = new CodeInspector(androidApp);
diff --git a/src/test/java/com/android/tools/r8/kotlin/AsmUtils.java b/src/test/java/com/android/tools/r8/kotlin/AsmUtils.java
index 7b7abcb..b4a9b24 100644
--- a/src/test/java/com/android/tools/r8/kotlin/AsmUtils.java
+++ b/src/test/java/com/android/tools/r8/kotlin/AsmUtils.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.kotlin;
 
 import com.android.tools.r8.utils.DescriptorUtils;
+import com.android.tools.r8.utils.InternalOptions;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.file.Files;
@@ -46,7 +47,7 @@
     public boolean foundMethod = false;
 
     public MethodFinder(String methodName, String methodDescriptor) {
-      super(Opcodes.ASM6);
+      super(InternalOptions.ASM_VERSION);
       this.methodName = methodName;
       this.methodDescriptor = methodDescriptor;
     }
@@ -77,7 +78,7 @@
     public boolean foundField = false;
 
     public FieldFinder(String fieldName, String fieldType) {
-      super(Opcodes.ASM6);
+      super(InternalOptions.ASM_VERSION);
       this.fieldName = fieldName;
       this.fieldDescriptor = DescriptorUtils.javaTypeToDescriptor(fieldType);
     }
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
index fac04f0..df88a4e 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -75,7 +76,7 @@
  */
 class AssertionEnablerClassAdapter extends ClassVisitor {
   AssertionEnablerClassAdapter(ClassVisitor visitor) {
-    super(Opcodes.ASM6, visitor);
+    super(InternalOptions.ASM_VERSION, visitor);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/InliningClassVersionTest.java b/src/test/java/com/android/tools/r8/shaking/examples/InliningClassVersionTest.java
index 1197c31..8cb9074 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/InliningClassVersionTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/InliningClassVersionTest.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.DescriptorUtils;
+import com.android.tools.r8.utils.InternalOptions;
 import com.google.common.io.ByteStreams;
 import java.nio.file.Path;
 import java.util.Collections;
@@ -49,7 +50,7 @@
     private final int version;
 
     DowngradeVisitor(ClassVisitor cv, int version) {
-      super(Opcodes.ASM6, cv);
+      super(InternalOptions.ASM_VERSION, cv);
       this.version = version;
     }
 
@@ -96,7 +97,7 @@
       private int version = -1;
 
       private ClassVersionReader() {
-        super(Opcodes.ASM6);
+        super(InternalOptions.ASM_VERSION);
       }
 
       @Override
