fixup wip
diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt
index fa67e49..7b3407f 100644
--- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt
+++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt
@@ -114,9 +114,13 @@
                 if (it == ExitCode.OK) {
                     performWorkAfterSuccessfulCompilation(caches)
                 }
+                doCloseCaches(caches, args)
             }
-        } finally {
-            doCloseCaches(caches, args)
+        } catch (e: Throwable) {
+            reporter.measure(BuildTime.CLEAR_OUTPUT_ON_REBUILD) {
+                cleanOutputsAndLocalStateOnRebuild(args)
+            }
+            throw e
         }
     }
 
@@ -129,6 +133,15 @@
         abiSnapshot: AbiSnapshot?,
         classpathAbiSnapshot: Map<String, AbiSnapshot>
     ): ExitCode {
+        val abiSnapshot = if (compilationMode is CompilationMode.Incremental && withAbiSnapshot) {
+            AbiSnapshotImpl.read(abiSnapshotFile, reporter)
+        } else {
+            if (withAbiSnapshot) {
+                compilationMode = CompilationMode.Rebuild(BuildAttribute.NO_ABI_SNAPSHOT)
+            }
+            null
+        }
+
         val exitCode = if (withAbiSnapshot) {
             compileIncrementally(
                 args, caches, allSourceFiles, compilationMode, messageCollector,
@@ -177,14 +190,6 @@
             }
 
             var compilationMode = sourcesToCompile(caches, changedFiles, args, messageCollector, classpathAbiSnapshot)
-            val abiSnapshot = if (compilationMode is CompilationMode.Incremental && withAbiSnapshot) {
-                AbiSnapshotImpl.read(abiSnapshotFile, reporter)
-            } else {
-                if (withAbiSnapshot) {
-                    compilationMode = CompilationMode.Rebuild(BuildAttribute.NO_ABI_SNAPSHOT)
-                }
-                null
-            }
 
             when (compilationMode) {
                 is CompilationMode.Incremental -> {
@@ -211,6 +216,10 @@
             reporter.report {
                 "Incremental compilation analysis failed: ${e.stackTraceToString()}.\nFalling back to non-incremental compilation."
             }
+
+            reporter.measure(BuildTime.CLEAR_OUTPUT_ON_REBUILD) {
+                cleanOutputsAndLocalStateOnRebuild(args)
+            }
         } finally {
             doCloseCaches(caches, args)
         }