From: Daniel Dunbar Date: Fri, 3 Apr 2009 20:51:31 +0000 (+0000) Subject: Driver: Explicitly ignore -fpch-preprocess when using clang, we don't X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=68fb469aeb19144403e703b825854d08353c8eea;p=clang Driver: Explicitly ignore -fpch-preprocess when using clang, we don't need to do anything special to support this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68403 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/ArgList.h b/include/clang/Driver/ArgList.h index 3fae792d3a..a0b925279c 100644 --- a/include/clang/Driver/ArgList.h +++ b/include/clang/Driver/ArgList.h @@ -116,6 +116,10 @@ namespace driver { void AddAllArgsTranslated(ArgStringList &Output, options::ID Id0, const char *Translation) const; + /// ClaimAllArgs - Claim all arguments which match the given + /// option id. + void ClaimAllArgs(options::ID Id0) const; + /// @} /// @name Arg Synthesis /// @{ diff --git a/include/clang/Driver/Options.def b/include/clang/Driver/Options.def index f8b5d42442..febf2e0ffc 100644 --- a/include/clang/Driver/Options.def +++ b/include/clang/Driver/Options.def @@ -454,6 +454,7 @@ OPTION("-force_cpusubtype_ALL", force__cpusubtype__ALL, Flag, INVALID, INVALID, OPTION("-force_flat_namespace", force__flat__namespace, Flag, INVALID, INVALID, "", 0, 0, 0) OPTION("-foutput-class-dir=", foutput_class_dir_EQ, Joined, f_Group, INVALID, "", 0, 0, 0) OPTION("-fpascal-strings", fpascal_strings, Flag, clang_f_Group, INVALID, "", 0, 0, 0) +OPTION("-fpch-preprocess", fpch_preprocess, Flag, f_Group, INVALID, "", 0, 0, 0) OPTION("-fpic", fpic, Flag, f_Group, INVALID, "", 0, 0, 0) OPTION("-fpie", fpie, Flag, f_Group, INVALID, "", 0, 0, 0) OPTION("-fprint-source-range-info", fprint_source_range_info, Flag, clang_f_Group, INVALID, "", 0, 0, 0) diff --git a/lib/Driver/ArgList.cpp b/lib/Driver/ArgList.cpp index 6d19f1acc5..69cb85b7fc 100644 --- a/lib/Driver/ArgList.cpp +++ b/lib/Driver/ArgList.cpp @@ -140,6 +140,15 @@ void ArgList::AddAllArgsTranslated(ArgStringList &Output, options::ID Id0, } } +void ArgList::ClaimAllArgs(options::ID Id0) const { + // FIXME: Make fast. + for (const_iterator it = begin(), ie = end(); it != ie; ++it) { + const Arg *A = *it; + if (A->getOption().matches(Id0)) + A->claim(); + } +} + // InputArgList::InputArgList(const char **ArgBegin, const char **ArgEnd) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 16677439e9..70daaf5a62 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -415,6 +415,14 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Args.MakeArgString(getToolChain().GetProgramPath(C, "clang-cc").c_str()); Dest.addCommand(new Command(Exec, CmdArgs)); + // Claim some arguments which clang supports automatically. + + // -fpch-preprocess is used with gcc to add a special marker in the + // -output to include the PCH file. Clang's PTH solution is + // -completely transparent, so we do not need to deal with it at + // -all. + Args.ClaimAllArgs(options::OPT_fpch_preprocess); + // Claim some arguments which clang doesn't support, but we don't // care to warn the user about.