xref: /aosp_15_r20/external/toolchain-utils/compiler_wrapper/clang_syntax_flag.go (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1// Copyright 2019 The ChromiumOS Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package main
6
7func processClangSyntaxFlag(builder *commandBuilder) (clangSyntax bool) {
8	builder.transformArgs(func(arg builderArg) string {
9		if arg.value == "-clang-syntax" {
10			clangSyntax = true
11			return ""
12		}
13		return arg.value
14	})
15	return clangSyntax
16}
17
18func checkClangSyntax(env env, clangCmd *command, gccCmd *command) (exitCode int, err error) {
19	clangSyntaxCmd := &command{
20		Path:       clangCmd.Path,
21		Args:       append(clangCmd.Args, "-fsyntax-only", "-stdlib=libstdc++"),
22		EnvUpdates: clangCmd.EnvUpdates,
23	}
24
25	getStdin, err := prebufferStdinIfNeeded(env, clangCmd)
26	if err != nil {
27		return 0, wrapErrorwithSourceLocf(err, "prebuffering stdin: %v", err)
28	}
29
30	exitCode, err = wrapSubprocessErrorWithSourceLoc(clangSyntaxCmd,
31		env.run(clangSyntaxCmd, getStdin(), env.stdout(), env.stderr()))
32	if err != nil || exitCode != 0 {
33		return exitCode, err
34	}
35	return wrapSubprocessErrorWithSourceLoc(gccCmd,
36		env.run(gccCmd, getStdin(), env.stdout(), env.stderr()))
37}
38