diff --git a/lib/Driver/ToolChains/Clang.cpp b/lib/Driver/ToolChains/Clang.cpp index d23ccc1244b0014bb484f6877c388c6dc4b7b48d..ea0603c630feb85f1267879f691e9c566285781b 100644 --- a/lib/Driver/ToolChains/Clang.cpp +++ b/lib/Driver/ToolChains/Clang.cpp @@ -4268,7 +4268,19 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // Forward -Xclang arguments to -cc1, and -mllvm arguments to the LLVM option // parser. - Args.AddAllArgValues(CmdArgs, options::OPT_Xclang); + // -finclude-default-header flag is for preprocessor, + // do not pass it to other cc1 commands when save-temps is enabled + if (C.getDriver().isSaveTempsEnabled() && + !isa<PreprocessJobAction>(JA)) { + for (auto Arg : Args.filtered(options::OPT_Xclang)) { + Arg->claim(); + if (StringRef(Arg->getValue()) != "-finclude-default-header") + CmdArgs.push_back(Arg->getValue()); + } + } + else { + Args.AddAllArgValues(CmdArgs, options::OPT_Xclang); + } for (const Arg *A : Args.filtered(options::OPT_mllvm)) { A->claim(); diff --git a/test/Driver/include-default-header.cl b/test/Driver/include-default-header.cl new file mode 100644 index 0000000000000000000000000000000000000000..accc6d55db51109e196710fbcad93574ee3bf22b --- /dev/null +++ b/test/Driver/include-default-header.cl @@ -0,0 +1,4 @@ +// RUN: %clang -v -save-temps -x cl -Xclang -cl-std=CL2.0 -Xclang -finclude-default-header -target amdgcn -S -c %s + +void test() {} +