diff --git a/cc/cc.go b/cc/cc.go index 53ec89939..1100bac6e 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -65,7 +65,7 @@ func init() { ctx.TopDown("tsan_deps", sanitizerDepsMutator(tsan)) ctx.BottomUp("tsan", sanitizerMutator(tsan)).Parallel() - ctx.TopDown("sanitize_runtime_deps", sanitizerRuntimeDepsMutator) + ctx.TopDown("sanitize_runtime_deps", sanitizerRuntimeDepsMutator).Parallel() ctx.BottomUp("sanitize_runtime", sanitizerRuntimeMutator).Parallel() ctx.BottomUp("coverage", coverageMutator).Parallel() diff --git a/cc/sanitize.go b/cc/sanitize.go index 08736e0e8..44bf9a3d4 100644 --- a/cc/sanitize.go +++ b/cc/sanitize.go @@ -706,8 +706,8 @@ func sanitizerRuntimeDepsMutator(mctx android.TopDownMutatorContext) { if !isSanitizableDependencyTag(mctx.OtherModuleDependencyTag(child)) { return false } - if d, ok := child.(*Module); ok && d.static() && d.sanitize != nil { + if d, ok := child.(*Module); ok && d.static() && d.sanitize != nil { if enableMinimalRuntime(d.sanitize) { // If a static dependency is built with the minimal runtime, // make sure we include the ubsan minimal runtime. @@ -718,8 +718,17 @@ func sanitizerRuntimeDepsMutator(mctx android.TopDownMutatorContext) { // make sure we include the ubsan runtime. c.sanitize.Properties.UbsanRuntimeDep = true } + + if c.sanitize.Properties.MinimalRuntimeDep && + c.sanitize.Properties.UbsanRuntimeDep { + // both flags that this mutator might set are true, so don't bother recursing + return false + } + + return true + } else { + return false } - return true }) } } diff --git a/finder/finder_test.go b/finder/finder_test.go index 29711fc2a..f6d0aa9e8 100644 --- a/finder/finder_test.go +++ b/finder/finder_test.go @@ -891,8 +891,8 @@ func TestFileAdded(t *testing.T) { IncludeFiles: []string{"findme.txt"}, }, ) - foundPaths := finder.FindNamedAt("/tmp", "findme.txt") filesystem.Clock.Tick() + foundPaths := finder.FindNamedAt("/tmp", "findme.txt") finder.Shutdown() // check the response of the first finder assertSameResponse(t, foundPaths, []string{"/tmp/a/findme.txt"}) @@ -1522,8 +1522,8 @@ func TestUpdatingDbIffChanged(t *testing.T) { IncludeFiles: []string{"hi.txt"}, }, ) - foundPaths := finder.FindAll() filesystem.Clock.Tick() + foundPaths := finder.FindAll() finder.Shutdown() // check results assertSameResponse(t, foundPaths, []string{"/tmp/a/hi.txt"}) @@ -1583,8 +1583,8 @@ func TestDirectoryNotPermitted(t *testing.T) { IncludeFiles: []string{"hi.txt"}, }, ) - foundPaths := finder.FindAll() filesystem.Clock.Tick() + foundPaths := finder.FindAll() finder.Shutdown() allPaths := []string{"/tmp/hi.txt", "/tmp/a/hi.txt", "/tmp/a/a/hi.txt", "/tmp/b/hi.txt"} // check results @@ -1629,8 +1629,8 @@ func TestFileNotPermitted(t *testing.T) { IncludeFiles: []string{"hi.txt"}, }, ) - foundPaths := finder.FindAll() filesystem.Clock.Tick() + foundPaths := finder.FindAll() finder.Shutdown() // check results assertSameResponse(t, foundPaths, []string{"/tmp/hi.txt"}) @@ -1650,8 +1650,8 @@ func TestCacheEntryPathUnexpectedError(t *testing.T) { IncludeFiles: []string{"hi.txt"}, }, ) - foundPaths := finder.FindAll() filesystem.Clock.Tick() + foundPaths := finder.FindAll() finder.Shutdown() // check results assertSameResponse(t, foundPaths, []string{"/tmp/a/hi.txt"})