diff options
-rw-r--r-- | include/clang/Driver/ArgList.h | 4 | ||||
-rw-r--r-- | include/clang/Driver/Options.def | 1 | ||||
-rw-r--r-- | lib/Driver/ArgList.cpp | 9 | ||||
-rw-r--r-- | lib/Driver/Tools.cpp | 8 |
4 files changed, 22 insertions, 0 deletions
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. |