Merge "Change return type of CfBuilder.build() to CfCode"
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
index 60f9c79..933f66d 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
@@ -11,12 +11,10 @@
 import com.android.tools.r8.cf.code.CfLabel;
 import com.android.tools.r8.cf.code.CfPosition;
 import com.android.tools.r8.cf.code.CfTryCatch;
-import com.android.tools.r8.errors.Unimplemented;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.AppInfoWithSubtyping;
 import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.CfCode.LocalVariableInfo;
-import com.android.tools.r8.graph.Code;
 import com.android.tools.r8.graph.DebugLocalInfo;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItemFactory;
@@ -106,27 +104,23 @@
     return factory;
   }
 
-  public Code build(CodeRewriter rewriter, InternalOptions options, AppInfoWithSubtyping appInfo) {
-    try {
-      types = new TypeVerificationHelper(code, factory, appInfo).computeVerificationTypes();
-      splitExceptionalBlocks();
-      LoadStoreHelper loadStoreHelper = new LoadStoreHelper(code, types);
-      loadStoreHelper.insertLoadsAndStores();
-      DeadCodeRemover.removeDeadCode(code, rewriter, options);
-      removeUnneededLoadsAndStores();
-      registerAllocator = new CfRegisterAllocator(code, options);
-      registerAllocator.allocateRegisters();
-      loadStoreHelper.insertPhiMoves(registerAllocator);
-      CodeRewriter.collapsTrivialGotos(method, code);
-      int instructionTableCount =
-          DexBuilder.instructionNumberToIndex(code.numberRemainingInstructions());
-      DexBuilder.removeRedundantDebugPositions(code, instructionTableCount);
-      CfCode code = buildCfCode();
-      return code;
-    } catch (Unimplemented e) {
-      System.out.println("Incomplete CF construction: " + e.getMessage());
-      return method.getCode().asJarCode();
-    }
+  public CfCode build(
+      CodeRewriter rewriter, InternalOptions options, AppInfoWithSubtyping appInfo) {
+    types = new TypeVerificationHelper(code, factory, appInfo).computeVerificationTypes();
+    splitExceptionalBlocks();
+    LoadStoreHelper loadStoreHelper = new LoadStoreHelper(code, types);
+    loadStoreHelper.insertLoadsAndStores();
+    DeadCodeRemover.removeDeadCode(code, rewriter, options);
+    removeUnneededLoadsAndStores();
+    registerAllocator = new CfRegisterAllocator(code, options);
+    registerAllocator.allocateRegisters();
+    loadStoreHelper.insertPhiMoves(registerAllocator);
+    CodeRewriter.collapsTrivialGotos(method, code);
+    int instructionTableCount =
+        DexBuilder.instructionNumberToIndex(code.numberRemainingInstructions());
+    DexBuilder.removeRedundantDebugPositions(code, instructionTableCount);
+    CfCode code = buildCfCode();
+    return code;
   }
 
   // Split all blocks with throwing instructions and exceptional edges such that any non-throwing
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 0f0b44a..2b6ad47 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppInfoWithSubtyping;
+import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.Code;
 import com.android.tools.r8.graph.DexAnnotation;
 import com.android.tools.r8.graph.DexApplication;
@@ -711,9 +712,7 @@
   private void finalizeToCf(DexEncodedMethod method, IRCode code, OptimizationFeedback feedback) {
     assert !method.getCode().isDexCode();
     CfBuilder builder = new CfBuilder(method, code, options.itemFactory);
-    // TODO(zerny): Change the return type of CfBuilder::build CfCode once complete.
-    Code result = builder.build(codeRewriter, options, appInfo.withSubtyping());
-    assert result.isCfCode() || result.isJarCode();
+    CfCode result = builder.build(codeRewriter, options, appInfo.withSubtyping());
     method.setCode(result);
     markProcessed(method, code, feedback);
   }