diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
index bf34207..6551955 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
@@ -218,43 +218,47 @@
       Instruction canonicalizedConstant = entry.getKey();
       assert canonicalizedConstant.instructionTypeCanBeCanonicalized();
       Instruction newConst;
-      switch (canonicalizedConstant.opcode()) {
-        case CONST_CLASS:
-          if (Log.ENABLED) {
-            numberOfConstClassCanonicalization++;
-          }
-          newConst = ConstClass.copyOf(code, canonicalizedConstant.asConstClass());
-          break;
-        case CONST_NUMBER:
-          if (Log.ENABLED) {
-            numberOfConstNumberCanonicalization++;
-          }
-          newConst = ConstNumber.copyOf(code, canonicalizedConstant.asConstNumber());
-          break;
-        case CONST_STRING:
-          if (Log.ENABLED) {
-            numberOfConstStringCanonicalization++;
-          }
-          newConst = ConstString.copyOf(code, canonicalizedConstant.asConstString());
-          break;
-        case DEX_ITEM_BASED_CONST_STRING:
-          if (Log.ENABLED) {
-            numberOfDexItemBasedConstStringCanonicalization++;
-          }
-          newConst =
-              DexItemBasedConstString.copyOf(
-                  code, canonicalizedConstant.asDexItemBasedConstString());
-          break;
-        case STATIC_GET:
-          if (Log.ENABLED) {
-            numberOfEffectivelyFinalFieldCanonicalization++;
-          }
-          newConst = StaticGet.copyOf(code, canonicalizedConstant.asStaticGet());
-          break;
-        default:
-          throw new Unreachable();
+      if (canonicalizedConstant.getBlock().isEntry()) {
+        newConst = canonicalizedConstant;
+      } else {
+        switch (canonicalizedConstant.opcode()) {
+          case CONST_CLASS:
+            if (Log.ENABLED) {
+              numberOfConstClassCanonicalization++;
+            }
+            newConst = ConstClass.copyOf(code, canonicalizedConstant.asConstClass());
+            break;
+          case CONST_NUMBER:
+            if (Log.ENABLED) {
+              numberOfConstNumberCanonicalization++;
+            }
+            newConst = ConstNumber.copyOf(code, canonicalizedConstant.asConstNumber());
+            break;
+          case CONST_STRING:
+            if (Log.ENABLED) {
+              numberOfConstStringCanonicalization++;
+            }
+            newConst = ConstString.copyOf(code, canonicalizedConstant.asConstString());
+            break;
+          case DEX_ITEM_BASED_CONST_STRING:
+            if (Log.ENABLED) {
+              numberOfDexItemBasedConstStringCanonicalization++;
+            }
+            newConst =
+                DexItemBasedConstString.copyOf(
+                    code, canonicalizedConstant.asDexItemBasedConstString());
+            break;
+          case STATIC_GET:
+            if (Log.ENABLED) {
+              numberOfEffectivelyFinalFieldCanonicalization++;
+            }
+            newConst = StaticGet.copyOf(code, canonicalizedConstant.asStaticGet());
+            break;
+          default:
+            throw new Unreachable();
+        }
+        insertCanonicalizedConstant(code, newConst);
       }
-      insertCanonicalizedConstant(code, newConst);
       for (Value outValue : entry.getValue()) {
         outValue.replaceUsers(newConst.outValue());
       }
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 b148604..14dd120 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -945,7 +945,7 @@
   // If non null it must be and passed to the consumer.
   public StringConsumer mainDexListConsumer = null;
 
-  // If null, no proguad map needs to be computed.
+  // If null, no proguard map needs to be computed.
   // If non null it must be and passed to the consumer.
   public StringConsumer proguardMapConsumer = null;
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationMonitorTest.java b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationMonitorTest.java
index f0901e8..7d99b55 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationMonitorTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationMonitorTest.java
@@ -6,7 +6,6 @@
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.NeverInline;
@@ -61,8 +60,7 @@
                       .filter(InstructionSubject::isMonitorEnter)
                       .findFirst();
               assertTrue(insertedMonitor.isPresent());
-              // TODO(b/235319568): Should not be line number 0.
-              assertEquals(0, testSubject.getLineNumberForInstruction(insertedMonitor.get()));
+              assertTrue(testSubject.getLineNumberForInstruction(insertedMonitor.get()) > 0);
             });
   }
 
