diff --git a/cmd/soong_ui/main.go b/cmd/soong_ui/main.go
index 2ca7ebf..0619b5c 100644
--- a/cmd/soong_ui/main.go
+++ b/cmd/soong_ui/main.go
@@ -114,11 +114,7 @@
 	} else if os.Args[1] == "--dumpvars-mode" {
 		dumpVars(buildCtx, config, os.Args[2:])
 	} else {
-		toBuild := build.BuildAll
-		if config.Checkbuild() {
-			toBuild |= build.RunBuildTests
-		}
-		build.Build(buildCtx, config, toBuild)
+		build.Build(buildCtx, config, build.BuildAll)
 	}
 }
 
diff --git a/ui/build/Android.bp b/ui/build/Android.bp
index 5809894..d1b4943 100644
--- a/ui/build/Android.bp
+++ b/ui/build/Android.bp
@@ -36,7 +36,6 @@
         "proc_sync.go",
         "signal.go",
         "soong.go",
-        "test_build.go",
         "util.go",
     ],
     testSrcs: [
diff --git a/ui/build/build.go b/ui/build/build.go
index 78eb6a3..0df22b3 100644
--- a/ui/build/build.go
+++ b/ui/build/build.go
@@ -68,7 +68,6 @@
 	BuildSoong         = 1 << iota
 	BuildKati          = 1 << iota
 	BuildNinja         = 1 << iota
-	RunBuildTests      = 1 << iota
 	BuildAll           = BuildProductConfig | BuildSoong | BuildKati | BuildNinja
 )
 
@@ -173,18 +172,14 @@
 		}
 	}
 
-	// Write combined ninja file
-	createCombinedBuildNinjaFile(ctx, config)
-
-	if what&RunBuildTests != 0 {
-		testForDanglingRules(ctx, config)
-	}
-
 	if what&BuildNinja != 0 {
 		if !config.SkipMake() {
 			installCleanIfNecessary(ctx, config)
 		}
 
+		// Write combined ninja file
+		createCombinedBuildNinjaFile(ctx, config)
+
 		// Run ninja
 		runNinja(ctx, config)
 	}
diff --git a/ui/build/config.go b/ui/build/config.go
index 99ae2da..940bb2f 100644
--- a/ui/build/config.go
+++ b/ui/build/config.go
@@ -34,12 +34,11 @@
 	environ   *Environment
 
 	// From the arguments
-	parallel   int
-	keepGoing  int
-	verbose    bool
-	checkbuild bool
-	dist       bool
-	skipMake   bool
+	parallel  int
+	keepGoing int
+	verbose   bool
+	dist      bool
+	skipMake  bool
 
 	// From the product config
 	katiArgs     []string
@@ -207,8 +206,6 @@
 		} else {
 			if arg == "dist" {
 				c.dist = true
-			} else if arg == "checkbuild" {
-				c.checkbuild = true
 			}
 			c.arguments = append(c.arguments, arg)
 		}
@@ -316,12 +313,6 @@
 	panic("SetKatiSuffix has not been called")
 }
 
-// Checkbuild returns true if "checkbuild" was one of the build goals, which means that the
-// user is interested in additional checks at the expense of build time.
-func (c *configImpl) Checkbuild() bool {
-	return c.checkbuild
-}
-
 func (c *configImpl) Dist() bool {
 	return c.dist
 }
diff --git a/ui/build/test_build.go b/ui/build/test_build.go
deleted file mode 100644
index d5e244c..0000000
--- a/ui/build/test_build.go
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2017 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package build
-
-import (
-	"bufio"
-	"path/filepath"
-	"strings"
-)
-
-// Checks for files in the out directory that have a rule that depends on them but no rule to
-// create them. This catches a common set of build failures where a rule to generate a file is
-// deleted (either by deleting a module in an Android.mk file, or by modifying the build system
-// incorrectly).  These failures are often not caught by a local incremental build because the
-// previously built files are still present in the output directory.
-func testForDanglingRules(ctx Context, config Config) {
-	ctx.BeginTrace("test for dangling rules")
-	defer ctx.EndTrace()
-
-	// Get a list of leaf nodes in the dependency graph from ninja
-	executable := config.PrebuiltBuildTool("ninja")
-
-	args := []string{}
-	args = append(args, config.NinjaArgs()...)
-	args = append(args, "-f", config.CombinedNinjaFile())
-	args = append(args, "-t", "targets", "rule")
-
-	cmd := Command(ctx, config, "ninja", executable, args...)
-	stdout, err := cmd.StdoutPipe()
-	if err != nil {
-		ctx.Fatal(err)
-	}
-
-	cmd.StartOrFatal()
-
-	outDir := config.OutDir()
-	bootstrapDir := filepath.Join(outDir, "soong", ".bootstrap")
-	miniBootstrapDir := filepath.Join(outDir, "soong", ".minibootstrap")
-
-	var danglingRules []string
-
-	scanner := bufio.NewScanner(stdout)
-	for scanner.Scan() {
-		line := scanner.Text()
-		if !strings.HasPrefix(line, outDir) {
-			// Leaf node is not in the out directory.
-			continue
-		}
-		if strings.HasPrefix(line, bootstrapDir) || strings.HasPrefix(line, miniBootstrapDir) {
-			// Leaf node is in one of Soong's bootstrap directories, which do not have
-			// full build rules in the primary build.ninja file.
-			continue
-		}
-		danglingRules = append(danglingRules, line)
-	}
-
-	cmd.WaitOrFatal()
-
-	if len(danglingRules) > 0 {
-		ctx.Println("Dependencies in out found with no rule to create them:")
-		for _, dep := range danglingRules {
-			ctx.Println(dep)
-		}
-		ctx.Fatal("")
-	}
-}
