Forward os.Stdin to child processes.

BUG=chromium:773875
TEST=unit tests, build glibc with compiler wrapper

Change-Id: I0b5c1f5adaee18499b72747cd6042b00a9d52c1d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/1760973
Reviewed-by: George Burgess <gbiv@chromium.org>
Tested-by: Tobias Bosch <tbosch@google.com>
diff --git a/compiler_wrapper/compiler_wrapper.go b/compiler_wrapper/compiler_wrapper.go
index 4aa91c6..429484c 100644
--- a/compiler_wrapper/compiler_wrapper.go
+++ b/compiler_wrapper/compiler_wrapper.go
@@ -5,6 +5,7 @@
 package main
 
 import (
+	"bytes"
 	"fmt"
 	"io"
 	"path/filepath"
@@ -40,14 +41,16 @@
 }
 
 func callCompilerWithRunAndCompareToOldWrapper(env env, cfg *config, inputCmd *command) (exitCode int, err error) {
+	stdinBuffer := &bytes.Buffer{}
 	recordingEnv := &commandRecordingEnv{
-		env: env,
+		env:         env,
+		stdinReader: io.TeeReader(env.stdin(), stdinBuffer),
 	}
 	// Note: this won't do a real exec as recordingEnv redirects exec to run.
 	if exitCode, err = callCompilerInternal(recordingEnv, cfg, inputCmd); err != nil {
 		return 0, err
 	}
-	if err = compareToOldWrapper(env, cfg, inputCmd, recordingEnv.cmdResults, exitCode); err != nil {
+	if err = compareToOldWrapper(env, cfg, inputCmd, stdinBuffer.Bytes(), recordingEnv.cmdResults, exitCode); err != nil {
 		return exitCode, err
 	}
 	return exitCode, nil
@@ -89,10 +92,8 @@
 			if err != nil {
 				return 0, err
 			}
-			exitCode, err = checkClangSyntax(env, clangCmd)
-			if err != nil || exitCode != 0 {
-				return exitCode, err
-			}
+			gccCmd := calcGccCommand(mainBuilder)
+			return checkClangSyntax(env, clangCmd, gccCmd)
 		}
 		compilerCmd = calcGccCommand(mainBuilder)
 	}