diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java
index 5e9d63f..5a50ca4 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java
@@ -68,6 +68,8 @@
             instructions.add(new CfLoad(ValueType.fromDexType(factory.intType), 0));
             instructions.add(new CfConstNumber(enumValueInfo.convertToInt(), ValueType.INT));
             instructions.add(new CfIfCmp(If.Type.NE, ValueType.INT, dest));
+            // TODO(b/160939354): Should use the value passed to the enum constructor, since this
+            //  value may be different from the enum field name.
             instructions.add(new CfConstString(field.name));
             instructions.add(new CfReturn(ValueType.OBJECT));
             instructions.add(dest);
@@ -123,6 +125,8 @@
           (field, enumValueInfo) -> {
             CfLabel dest = new CfLabel();
             instructions.add(new CfLoad(ValueType.fromDexType(factory.stringType), 0));
+            // TODO(b/160939354): Should use the value passed to the enum constructor, since this
+            //  value may be different from the enum field name.
             instructions.add(new CfConstString(field.name));
             instructions.add(
                 new CfInvoke(Opcodes.INVOKEVIRTUAL, factory.stringMembers.equals, false));
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/EnumToStringLibTest.java b/src/test/java/com/android/tools/r8/enumunboxing/EnumToStringLibTest.java
index 83393bf..1a440cb 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/EnumToStringLibTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/EnumToStringLibTest.java
@@ -65,6 +65,7 @@
             .addKeepMainRule(AlwaysCorrectProgram.class)
             .addKeepMainRule(AlwaysCorrectProgram2.class)
             .addKeepRules(enumKeepRules.getKeepRules())
+            .addKeepAttributeLineNumberTable()
             .addOptionsModification(
                 options -> {
                   options.enableEnumUnboxing = enumUnboxing;
@@ -75,19 +76,26 @@
             .allowDiagnosticInfoMessages(enumUnboxing)
             .setMinApi(parameters.getApiLevel())
             .compile();
-    compile
-        .run(parameters.getRuntime(), AlwaysCorrectProgram.class)
-        .assertSuccessWithOutputLines("0", "1", "2", "0", "1", "2", "0", "1", "2");
+    if (enumKeepRules.isStudio() && enumValueOptimization && enumUnboxing) {
+      // TODO(b/160939354): Enum unboxing synthesizes a toString() method based on field names.
+      compile
+          .run(parameters.getRuntime(), AlwaysCorrectProgram.class)
+          .assertFailureWithErrorThatMatches(containsString("IllegalArgumentException"));
+    } else {
+      compile
+          .run(parameters.getRuntime(), AlwaysCorrectProgram.class)
+          .assertSuccessWithOutputLines("0", "1", "2", "0", "1", "2", "0", "1", "2");
+    }
     if (!enumKeepRules.isSnap() && enumUnboxing) {
-      // TODO(b/160667929): Fix toString and enum unboxing.
+      // TODO(b/160939354): Enum unboxing synthesizes a toString() method based on field names.
       compile
           .run(parameters.getRuntime(), AlwaysCorrectProgram2.class)
           .assertFailureWithErrorThatMatches(containsString("IllegalArgumentException"));
-      return;
+    } else {
+      compile
+          .run(parameters.getRuntime(), AlwaysCorrectProgram2.class)
+          .assertSuccessWithOutputLines("0", "1", "2", "0", "1", "2");
     }
-    compile
-        .run(parameters.getRuntime(), AlwaysCorrectProgram2.class)
-        .assertSuccessWithOutputLines("0", "1", "2", "0", "1", "2");
   }
 
   private void assertEnumFieldsMinified(CodeInspector codeInspector) throws Exception {
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingTestBase.java b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingTestBase.java
index 65aee25..02b5a5f 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingTestBase.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingTestBase.java
@@ -42,6 +42,10 @@
       return keepRules;
     }
 
+    public boolean isStudio() {
+      return this == STUDIO;
+    }
+
     public boolean isSnap() {
       return this == SNAP;
     }
