diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index ae370ae..cb19bad 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -19,6 +19,7 @@
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.android.tools.r8.utils.Timing;
+import com.android.tools.r8.utils.VersionProperties;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
@@ -153,9 +154,13 @@
     if (options.hasMarker()) {
       return options.getMarker();
     }
-    return new Marker(Tool.D8)
+    Marker marker = new Marker(Tool.D8)
         .put("version", Version.LABEL)
         .put("min-api", options.minApiLevel);
+    if (Version.isDev()) {
+      marker.put("sha-1", VersionProperties.INSTANCE.getSha());
+    }
+    return marker;
   }
 
   private static CompilationResult runForTesting(
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 2b21efc..76a6ed1 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -48,6 +48,7 @@
 import com.android.tools.r8.utils.StringDiagnostic;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.android.tools.r8.utils.Timing;
+import com.android.tools.r8.utils.VersionProperties;
 import com.google.common.io.ByteStreams;
 import java.io.ByteArrayOutputStream;
 import java.io.FileOutputStream;
@@ -78,9 +79,13 @@
     if (options.hasMarker()) {
       return options.getMarker();
     }
-    return new Marker(Tool.R8)
+    Marker marker = new Marker(Tool.R8)
         .put("version", Version.LABEL)
         .put("min-api", options.minApiLevel);
+    if (Version.isDev()) {
+      marker.put("sha-1", VersionProperties.INSTANCE.getSha());
+    }
+    return marker;
   }
 
   public static void writeApplication(
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index c59c205..44e1bf4 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8;
 
 import com.android.tools.r8.utils.VersionProperties;
-import java.io.IOException;
 
 public final class Version {
 
@@ -16,13 +15,10 @@
 
   public static void printToolVersion(String toolName) {
     System.out.println(toolName + " " + Version.LABEL);
-    try {
-      VersionProperties version =
-          new VersionProperties(Version.class.getClassLoader());
-      System.out.println(version.getDescription());
-    } catch (IOException e) {
-      System.out.println("eng build");
-    }
+    System.out.println(VersionProperties.INSTANCE.getDescription());
+  }
 
+  public static boolean isDev() {
+    return LABEL.endsWith("-dev") || VersionProperties.INSTANCE.isEngineering();
   }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/VersionProperties.java b/src/main/java/com/android/tools/r8/utils/VersionProperties.java
index 57aea8b..28ac2ef 100644
--- a/src/main/java/com/android/tools/r8/utils/VersionProperties.java
+++ b/src/main/java/com/android/tools/r8/utils/VersionProperties.java
@@ -14,16 +14,29 @@
  */
 public class VersionProperties {
 
+  public static final VersionProperties INSTANCE = get();
+
   private static final String VERSION_CODE_KEY = "version-file.version.code";
   private static final String SHA_KEY = "version.sha";
   private static final String RELEASER_KEY = "releaser";
 
   private static final String RESOURCE_NAME = "r8-version.properties";
 
-  private String codeBase;
+  private String sha;
   private String releaser;
 
-  public VersionProperties(ClassLoader loader)
+  private static VersionProperties get() {
+    try {
+      return new VersionProperties(VersionProperties.class.getClassLoader());
+    } catch (IOException e) {
+      return new VersionProperties();
+    }
+  }
+
+  private VersionProperties() {
+  }
+
+  private VersionProperties(ClassLoader loader)
       throws IOException {
     try (InputStream resourceStream = loader.getResourceAsStream(RESOURCE_NAME)) {
       if (resourceStream == null) {
@@ -40,20 +53,24 @@
     long versionFileVersion = Long.parseLong(prop.getProperty(VERSION_CODE_KEY));
     assert versionFileVersion >= 1;
 
-    codeBase = prop.getProperty(SHA_KEY);
+    sha = prop.getProperty(SHA_KEY);
     releaser = prop.getProperty(RELEASER_KEY);
   }
 
   public String getDescription() {
-    if (codeBase != null && !codeBase.trim().isEmpty()) {
-      return "build " + codeBase + (releaser != null ? " from " + releaser : "");
-    } else {
-      return "eng build" + (releaser != null ? " from " + releaser : "");
-    }
+    return "build " + getSha() + (releaser != null ? " from " + releaser : "");
+  }
+
+  public String getSha() {
+    return isEngineering() ? "engineering" : sha;
   }
 
   @Override
   public String toString() {
-    return codeBase + " from " + releaser;
+    return sha + " from " + releaser;
+  }
+
+  public boolean isEngineering() {
+    return sha == null || sha.trim().isEmpty();
   }
 }
diff --git a/src/test/java/com/android/tools/r8/jasmin/BooleanByteConfusion.java b/src/test/java/com/android/tools/r8/jasmin/BooleanByteConfusion.java
index 931b58a..561fa9b 100644
--- a/src/test/java/com/android/tools/r8/jasmin/BooleanByteConfusion.java
+++ b/src/test/java/com/android/tools/r8/jasmin/BooleanByteConfusion.java
@@ -21,7 +21,7 @@
 
   @Test
   public void booleanByteConfusion() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     // public static void foo(boolean condition) {
diff --git a/src/test/java/com/android/tools/r8/jasmin/DebugLocalTests.java b/src/test/java/com/android/tools/r8/jasmin/DebugLocalTests.java
index a50c831..e572bfa 100644
--- a/src/test/java/com/android/tools/r8/jasmin/DebugLocalTests.java
+++ b/src/test/java/com/android/tools/r8/jasmin/DebugLocalTests.java
@@ -171,7 +171,7 @@
   // Check that we properly handle switching a local slot from one variable to another.
   @Test
   public void checkLocalChange() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     MethodSignature foo = clazz.addStaticMethod("foo", ImmutableList.of("I"), "I",
@@ -342,7 +342,7 @@
 
   @Test
   public void argumentLiveAtReturn() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     /*
@@ -443,7 +443,7 @@
 
   @Test
   public void testLocalSwitchRewriteToIfs() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     /*
@@ -541,7 +541,7 @@
 
   @Test
   public void testLocalSwitchRewriteToSwitches() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     /*
diff --git a/src/test/java/com/android/tools/r8/jasmin/FillBooleanArrayTruncation.java b/src/test/java/com/android/tools/r8/jasmin/FillBooleanArrayTruncation.java
index 6f9cb79..a38ee9e 100644
--- a/src/test/java/com/android/tools/r8/jasmin/FillBooleanArrayTruncation.java
+++ b/src/test/java/com/android/tools/r8/jasmin/FillBooleanArrayTruncation.java
@@ -45,7 +45,7 @@
 
   @Test
   public void filledArray() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     // Corresponds to something like the following (which doesn't compile with javac):
diff --git a/src/test/java/com/android/tools/r8/jasmin/InvalidDebugInfoTests.java b/src/test/java/com/android/tools/r8/jasmin/InvalidDebugInfoTests.java
index 1292846..9394995 100644
--- a/src/test/java/com/android/tools/r8/jasmin/InvalidDebugInfoTests.java
+++ b/src/test/java/com/android/tools/r8/jasmin/InvalidDebugInfoTests.java
@@ -27,7 +27,7 @@
   // will actually be a read of 'x'.
   @Test
   public void testInvalidInfoThrow() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("I"), "V",
@@ -86,7 +86,7 @@
   // in this test the scope of "y" (local 2) spans the exceptional edge in which it is not live.
   @Test
   public void testInvalidInfoBug37722432() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("I", "I"), "V",
@@ -219,7 +219,7 @@
 
   @Test
   public void invalidInfoBug63412730_onMove() throws Throwable {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
     MethodSignature method = clazz.addStaticMethod("bar", ImmutableList.of(), "V",
         ".limit stack 3",
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
index ec60d10..964f004 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
+++ b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
@@ -55,36 +55,6 @@
       public int getMajorVersion() {
         return 48;
       }
-    },
-    JSE_5 {
-      @Override
-      public int getMajorVersion() {
-        return 49;
-      }
-    },
-    JSE_6 {
-      @Override
-      public int getMajorVersion() {
-        return 50;
-      }
-    },
-    JSE_7 {
-      @Override
-      public int getMajorVersion() {
-        return 51;
-      }
-    },
-    JSE_8 {
-      @Override
-      public int getMajorVersion() {
-        return 52;
-      }
-    },
-    JSE_9 {
-      @Override
-      public int getMajorVersion() {
-        return 53;
-      }
     };
 
     public abstract int getMajorVersion();
@@ -248,7 +218,7 @@
   private final int majorVersion;
 
   public JasminBuilder() {
-    this(ClassFileVersion.JSE_8);
+    this(ClassFileVersion.JDK_1_4);
   }
 
   public JasminBuilder(ClassFileVersion version) {
diff --git a/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineDebugInfoTests.java b/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineDebugInfoTests.java
index 501ad41..9711c88 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineDebugInfoTests.java
+++ b/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineDebugInfoTests.java
@@ -16,7 +16,7 @@
 
   @Test
   public void testJsrWithStraightlineAndDebugInfoCode() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     MethodSignature foo = clazz.addStaticMethod("foo", ImmutableList.of("I"), "I",
diff --git a/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineTests.java b/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineTests.java
index 2db6e33..5e41a25 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineTests.java
+++ b/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineTests.java
@@ -161,7 +161,7 @@
 
   @Test
   public void testJsrWithStraightlineCode() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "I",
@@ -193,7 +193,7 @@
 
   @Test
   public void testJsrWithStraightlineCodeMultiple() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "I",
@@ -233,7 +233,7 @@
 
   @Test
   public void testJsrWithStraightlineCodeMultiple2() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "I",
@@ -279,7 +279,7 @@
 
   @Test
   public void testJsrWithControlFlowCode() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "V",
@@ -316,7 +316,7 @@
 
   @Test
   public void testJsrWithNestedJsr() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "V",
@@ -361,7 +361,7 @@
 
   @Test
   public void testJsrWithNestedJsrPopReturnAddress() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "V",
@@ -393,7 +393,7 @@
 
   @Test
   public void testJsrWithNestedPopReturnAddress2() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "V",
@@ -419,7 +419,7 @@
 
   @Test
   public void testJsrJustThrows() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "V",
@@ -451,7 +451,7 @@
 
   @Test
   public void testJsrJustThrows2() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "V",
@@ -490,7 +490,7 @@
 
   @Test
   public void testJsrWithException() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "V",
@@ -538,7 +538,7 @@
 
   @Test
   public void testJsrWithAddressManipulation() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of(), "V",
@@ -574,7 +574,7 @@
   @Test
   public void testJsrWithSharedExceptionHandler() throws Exception {
     // Regression test for b/37659886
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("I"), "V",
@@ -616,7 +616,7 @@
 
   @Test
   public void regressJsrHitParentCatchHandler() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("test", ImmutableList.of(), "I",
@@ -708,7 +708,7 @@
 
   @Test
   public void regressJsrHitParentCatchHandler2() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     generateRegressJsrHitParentCatchHandler2(clazz, "test1", "java/lang/Exception", false);
@@ -735,7 +735,7 @@
   // https://github.com/cbeust/testng/blob/4a8459e36f2b0ed057ffa7e470f1057e8e5b0ff9/src/main/java/org/testng/internal/Invoker.java#L1066
   // compiled with some ancient version of javac generating code with jsr for try/finally.
   public void regress38156139() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("Z"), "I",
@@ -788,7 +788,7 @@
 
   @Test
   public void regress37767254() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     // This is the code for the method org.apache.log4j.net.SocketAppender$Connector.run() from
@@ -1351,7 +1351,7 @@
   @Test
   // This test is based on the example on http://asm.ow2.org/doc/developer-guide.html.
   public void testJsrWithNestedRetBasedOnControlFlow2() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("Z"), "I",
@@ -1399,7 +1399,7 @@
   @Test
   // This test is based on the example on http://asm.ow2.org/doc/developer-guide.html.
   public void testJsrWithNestedRetBasedOnControlFlow3() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("Z"), "I",
diff --git a/src/test/java/com/android/tools/r8/jasmin/Regress63598979.java b/src/test/java/com/android/tools/r8/jasmin/Regress63598979.java
index e7c601c..edfaff0 100644
--- a/src/test/java/com/android/tools/r8/jasmin/Regress63598979.java
+++ b/src/test/java/com/android/tools/r8/jasmin/Regress63598979.java
@@ -13,7 +13,7 @@
 
   @Test
   public void testSimplifyIf() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("test1", ImmutableList.of("Z"), "Z",
diff --git a/src/test/java/com/android/tools/r8/jasmin/Regress64658224.java b/src/test/java/com/android/tools/r8/jasmin/Regress64658224.java
index 019e5e6..4390d30 100644
--- a/src/test/java/com/android/tools/r8/jasmin/Regress64658224.java
+++ b/src/test/java/com/android/tools/r8/jasmin/Regress64658224.java
@@ -13,7 +13,7 @@
 
   @Test
   public void testInvalidTypeInfoFromLocals() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("I"), "V",
diff --git a/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java b/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java
index b0a5589..6290e20 100644
--- a/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java
+++ b/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java
@@ -20,7 +20,7 @@
 
   @Test
   public void testConstantNotIntoEntryBlock() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     MethodSignature signature = clazz.addStaticMethod("test1", ImmutableList.of("I"), "I",
diff --git a/src/test/java/com/android/tools/r8/jasmin/TryCatchStateTests.java b/src/test/java/com/android/tools/r8/jasmin/TryCatchStateTests.java
index d9bd2c9..ff63ed9 100644
--- a/src/test/java/com/android/tools/r8/jasmin/TryCatchStateTests.java
+++ b/src/test/java/com/android/tools/r8/jasmin/TryCatchStateTests.java
@@ -14,7 +14,7 @@
 
   @Test
   public void testTryCatchStackHeight() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("I"), "I",
@@ -60,7 +60,7 @@
 
   @Test
   public void testTryCatchLocals() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("I"), "I",
@@ -108,7 +108,7 @@
 
   @Test
   public void testTryCatchOnUnreachableLabel() throws Exception {
-    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JSE_6);
+    JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
     JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
 
     clazz.addStaticMethod("foo", ImmutableList.of("I"), "I",
