Remove flto dependent flags when -flto is removed.

* C++ source files could be compiled with "-fwhole-program-vtables"
  in cppflags. We need to filter out those flto dependent flags
  in flags.CppFlags and use flags.toolingCppFlags instead of
  flags.cppFlags.

Test: build with WITH_TIDY=1
Change-Id: Ic2b0f99b95a5f0422f879226e6f6060cab71456a
diff --git a/cc/builder.go b/cc/builder.go
index 5a77d3e..7d207b0 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -236,29 +236,30 @@
 }
 
 type builderFlags struct {
-	globalFlags    string
-	arFlags        string
-	asFlags        string
-	cFlags         string
-	toolingCFlags  string // A separate set of Cflags for clang LibTooling tools
-	conlyFlags     string
-	cppFlags       string
-	ldFlags        string
-	libFlags       string
-	yaccFlags      string
-	protoFlags     string
-	protoOutParams string
-	tidyFlags      string
-	sAbiFlags      string
-	yasmFlags      string
-	aidlFlags      string
-	rsFlags        string
-	toolchain      config.Toolchain
-	clang          bool
-	tidy           bool
-	coverage       bool
-	sAbiDump       bool
-	protoRoot      bool
+	globalFlags     string
+	arFlags         string
+	asFlags         string
+	cFlags          string
+	toolingCFlags   string // A separate set of cFlags for clang LibTooling tools
+	toolingCppFlags string // A separate set of cppFlags for clang LibTooling tools
+	conlyFlags      string
+	cppFlags        string
+	ldFlags         string
+	libFlags        string
+	yaccFlags       string
+	protoFlags      string
+	protoOutParams  string
+	tidyFlags       string
+	sAbiFlags       string
+	yasmFlags       string
+	aidlFlags       string
+	rsFlags         string
+	toolchain       config.Toolchain
+	clang           bool
+	tidy            bool
+	coverage        bool
+	sAbiDump        bool
+	protoRoot       bool
 
 	systemIncludeFlags string
 
@@ -330,7 +331,7 @@
 	toolingCppflags := strings.Join([]string{
 		commonFlags,
 		flags.toolingCFlags,
-		flags.cppFlags,
+		flags.toolingCppFlags,
 	}, " ")
 
 	cppflags := strings.Join([]string{
diff --git a/cc/config/clang.go b/cc/config/clang.go
index 36afc68..186d790 100644
--- a/cc/config/clang.go
+++ b/cc/config/clang.go
@@ -93,8 +93,10 @@
 })
 
 var ClangLibToolingUnknownCflags = []string{
+	// Remove -flto and other flto dependent flags.
 	"-flto*",
 	"-fsanitize*",
+	"-fwhole-program-vtables",
 }
 
 func init() {
diff --git a/cc/sabi.go b/cc/sabi.go
index 42b2f35..72a3c5c 100644
--- a/cc/sabi.go
+++ b/cc/sabi.go
@@ -71,6 +71,7 @@
 	// Assuming that the cflags which clang LibTooling tools cannot
 	// understand have not been converted to ninja variables yet.
 	flags.ToolingCFlags = filterOutWithPrefix(flags.CFlags, config.ClangLibToolingUnknownCflags)
+	flags.ToolingCppFlags = filterOutWithPrefix(flags.CppFlags, config.ClangLibToolingUnknownCflags)
 
 	// RSClang does not support recent mcpu option likes exynos-m2.
 	// So we need overriding mcpu option when we want to use it.
diff --git a/cc/util.go b/cc/util.go
index 8de4210..93cf536 100644
--- a/cc/util.go
+++ b/cc/util.go
@@ -59,29 +59,30 @@
 
 func flagsToBuilderFlags(in Flags) builderFlags {
 	return builderFlags{
-		globalFlags:    strings.Join(in.GlobalFlags, " "),
-		arFlags:        strings.Join(in.ArFlags, " "),
-		asFlags:        strings.Join(in.AsFlags, " "),
-		cFlags:         strings.Join(in.CFlags, " "),
-		toolingCFlags:  strings.Join(in.ToolingCFlags, " "),
-		conlyFlags:     strings.Join(in.ConlyFlags, " "),
-		cppFlags:       strings.Join(in.CppFlags, " "),
-		yaccFlags:      strings.Join(in.YaccFlags, " "),
-		protoFlags:     strings.Join(in.protoFlags, " "),
-		protoOutParams: strings.Join(in.protoOutParams, ","),
-		aidlFlags:      strings.Join(in.aidlFlags, " "),
-		rsFlags:        strings.Join(in.rsFlags, " "),
-		ldFlags:        strings.Join(in.LdFlags, " "),
-		libFlags:       strings.Join(in.libFlags, " "),
-		tidyFlags:      strings.Join(in.TidyFlags, " "),
-		sAbiFlags:      strings.Join(in.SAbiFlags, " "),
-		yasmFlags:      strings.Join(in.YasmFlags, " "),
-		toolchain:      in.Toolchain,
-		clang:          in.Clang,
-		coverage:       in.Coverage,
-		tidy:           in.Tidy,
-		sAbiDump:       in.SAbiDump,
-		protoRoot:      in.ProtoRoot,
+		globalFlags:     strings.Join(in.GlobalFlags, " "),
+		arFlags:         strings.Join(in.ArFlags, " "),
+		asFlags:         strings.Join(in.AsFlags, " "),
+		cFlags:          strings.Join(in.CFlags, " "),
+		toolingCFlags:   strings.Join(in.ToolingCFlags, " "),
+		toolingCppFlags: strings.Join(in.ToolingCppFlags, " "),
+		conlyFlags:      strings.Join(in.ConlyFlags, " "),
+		cppFlags:        strings.Join(in.CppFlags, " "),
+		yaccFlags:       strings.Join(in.YaccFlags, " "),
+		protoFlags:      strings.Join(in.protoFlags, " "),
+		protoOutParams:  strings.Join(in.protoOutParams, ","),
+		aidlFlags:       strings.Join(in.aidlFlags, " "),
+		rsFlags:         strings.Join(in.rsFlags, " "),
+		ldFlags:         strings.Join(in.LdFlags, " "),
+		libFlags:        strings.Join(in.libFlags, " "),
+		tidyFlags:       strings.Join(in.TidyFlags, " "),
+		sAbiFlags:       strings.Join(in.SAbiFlags, " "),
+		yasmFlags:       strings.Join(in.YasmFlags, " "),
+		toolchain:       in.Toolchain,
+		clang:           in.Clang,
+		coverage:        in.Coverage,
+		tidy:            in.Tidy,
+		sAbiDump:        in.SAbiDump,
+		protoRoot:       in.ProtoRoot,
 
 		systemIncludeFlags: strings.Join(in.SystemIncludeFlags, " "),