diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2009-03-29 22:29:05 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-29 22:29:05 +0000 |
| commit | 53b406f40a95f594f6e7e43da6314ee092313985 (patch) | |
| tree | ad95be4fb1d3392235f12ea3c170e6eb8a5281e6 /clang/lib | |
| parent | f64f5307dc2334f5d1a7ca602ccc22567af32de6 (diff) | |
| download | bcm5719-llvm-53b406f40a95f594f6e7e43da6314ee092313985.tar.gz bcm5719-llvm-53b406f40a95f594f6e7e43da6314ee092313985.zip | |
Driver: Track which original arguments an arg is derived from, so that
we can properly claim arguments, even if they have been translated by
the tool chain.
llvm-svn: 68020
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Driver/Arg.cpp | 35 | ||||
| -rw-r--r-- | clang/lib/Driver/ArgList.cpp | 17 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 40 |
3 files changed, 48 insertions, 44 deletions
diff --git a/clang/lib/Driver/Arg.cpp b/clang/lib/Driver/Arg.cpp index 1d8d2497b65..e227d7e2ea1 100644 --- a/clang/lib/Driver/Arg.cpp +++ b/clang/lib/Driver/Arg.cpp @@ -14,11 +14,9 @@ using namespace clang::driver; -Arg::Arg(ArgClass _Kind, const Option *_Opt, unsigned _Index) - : Kind(_Kind), - Opt(_Opt), - Index(_Index), - Claimed(false) +Arg::Arg(ArgClass _Kind, const Option *_Opt, unsigned _Index, + const Arg *_BaseArg) + : Kind(_Kind), Opt(_Opt), BaseArg(_BaseArg), Index(_Index), Claimed(false) { } @@ -76,8 +74,8 @@ void Arg::renderAsInput(const ArgList &Args, ArgStringList &Output) const { Output.push_back(getValue(Args, i)); } -FlagArg::FlagArg(const Option *Opt, unsigned Index) - : Arg(FlagClass, Opt, Index) { +FlagArg::FlagArg(const Option *Opt, unsigned Index, const Arg *BaseArg) + : Arg(FlagClass, Opt, Index, BaseArg) { } void FlagArg::render(const ArgList &Args, ArgStringList &Output) const { @@ -89,8 +87,9 @@ const char *FlagArg::getValue(const ArgList &Args, unsigned N) const { return 0; } -PositionalArg::PositionalArg(const Option *Opt, unsigned Index) - : Arg(PositionalClass, Opt, Index) { +PositionalArg::PositionalArg(const Option *Opt, unsigned Index, + const Arg *BaseArg) + : Arg(PositionalClass, Opt, Index, BaseArg) { } void PositionalArg::render(const ArgList &Args, ArgStringList &Output) const { @@ -102,8 +101,8 @@ const char *PositionalArg::getValue(const ArgList &Args, unsigned N) const { return Args.getArgString(getIndex()); } -JoinedArg::JoinedArg(const Option *Opt, unsigned Index) - : Arg(JoinedClass, Opt, Index) { +JoinedArg::JoinedArg(const Option *Opt, unsigned Index, const Arg *BaseArg) + : Arg(JoinedClass, Opt, Index, BaseArg) { } void JoinedArg::render(const ArgList &Args, ArgStringList &Output) const { @@ -122,8 +121,8 @@ const char *JoinedArg::getValue(const ArgList &Args, unsigned N) const { } CommaJoinedArg::CommaJoinedArg(const Option *Opt, unsigned Index, - const char *Str) - : Arg(CommaJoinedClass, Opt, Index) { + const char *Str, const Arg *BaseArg) + : Arg(CommaJoinedClass, Opt, Index, BaseArg) { const char *Prev = Str; for (;; ++Str) { char c = *Str; @@ -149,8 +148,9 @@ const char *CommaJoinedArg::getValue(const ArgList &Args, unsigned N) const { return Values[N].c_str(); } -SeparateArg::SeparateArg(const Option *Opt, unsigned Index, unsigned _NumValues) - : Arg(SeparateClass, Opt, Index), NumValues(_NumValues) { +SeparateArg::SeparateArg(const Option *Opt, unsigned Index, unsigned _NumValues, + const Arg *BaseArg) + : Arg(SeparateClass, Opt, Index, BaseArg), NumValues(_NumValues) { } void SeparateArg::render(const ArgList &Args, ArgStringList &Output) const { @@ -172,8 +172,9 @@ const char *SeparateArg::getValue(const ArgList &Args, unsigned N) const { return Args.getArgString(getIndex() + 1 + N); } -JoinedAndSeparateArg::JoinedAndSeparateArg(const Option *Opt, unsigned Index) - : Arg(JoinedAndSeparateClass, Opt, Index) { +JoinedAndSeparateArg::JoinedAndSeparateArg(const Option *Opt, unsigned Index, + const Arg *BaseArg) + : Arg(JoinedAndSeparateClass, Opt, Index, BaseArg) { } void JoinedAndSeparateArg::render(const ArgList &Args, diff --git a/clang/lib/Driver/ArgList.cpp b/clang/lib/Driver/ArgList.cpp index 44549b0636b..2e526ab5d54 100644 --- a/clang/lib/Driver/ArgList.cpp +++ b/clang/lib/Driver/ArgList.cpp @@ -196,23 +196,24 @@ const char *DerivedArgList::MakeArgString(const char *Str) const { return BaseArgs.MakeArgString(Str); } -Arg *DerivedArgList::MakeFlagArg(const Option *Opt) const { - return new FlagArg(Opt, BaseArgs.MakeIndex(Opt->getName())); +Arg *DerivedArgList::MakeFlagArg(const Arg *BaseArg, const Option *Opt) const { + return new FlagArg(Opt, BaseArgs.MakeIndex(Opt->getName()), BaseArg); } -Arg *DerivedArgList::MakePositionalArg(const Option *Opt, +Arg *DerivedArgList::MakePositionalArg(const Arg *BaseArg, const Option *Opt, const char *Value) const { - return new PositionalArg(Opt, BaseArgs.MakeIndex(Value)); + return new PositionalArg(Opt, BaseArgs.MakeIndex(Value), BaseArg); } -Arg *DerivedArgList::MakeSeparateArg(const Option *Opt, +Arg *DerivedArgList::MakeSeparateArg(const Arg *BaseArg, const Option *Opt, const char *Value) const { - return new SeparateArg(Opt, BaseArgs.MakeIndex(Opt->getName(), Value), 1); + return new SeparateArg(Opt, BaseArgs.MakeIndex(Opt->getName(), Value), 1, + BaseArg); } -Arg *DerivedArgList::MakeJoinedArg(const Option *Opt, +Arg *DerivedArgList::MakeJoinedArg(const Arg *BaseArg, const Option *Opt, const char *Value) const { std::string Joined(Opt->getName()); Joined += Value; - return new JoinedArg(Opt, BaseArgs.MakeIndex(Joined.c_str())); + return new JoinedArg(Opt, BaseArgs.MakeIndex(Joined.c_str()), BaseArg); } diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index 8bbf2a67bc5..744882a9a05 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -142,7 +142,7 @@ DerivedArgList *Darwin_X86::TranslateArgs(InputArgList &Args) const { if (!Args.hasArg(options::OPT_mmacosx_version_min_EQ, false)) { const Option *O = Opts.getOption(options::OPT_mmacosx_version_min_EQ); - DAL->append(DAL->MakeJoinedArg(O, MacosxVersionMin.c_str())); + DAL->append(DAL->MakeJoinedArg(0, O, MacosxVersionMin.c_str())); } for (ArgList::iterator it = Args.begin(), ie = Args.end(); it != ie; ++it) { @@ -173,6 +173,7 @@ DerivedArgList *Darwin_X86::TranslateArgs(InputArgList &Args) const { continue; } + XarchArg->setBaseArg(A); A = XarchArg; } @@ -188,64 +189,65 @@ DerivedArgList *Darwin_X86::TranslateArgs(InputArgList &Args) const { case options::OPT_mkernel: case options::OPT_fapple_kext: DAL->append(A); - DAL->append(DAL->MakeFlagArg(Opts.getOption(options::OPT_static))); - DAL->append(DAL->MakeFlagArg(Opts.getOption(options::OPT_static))); + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_static))); + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_static))); break; case options::OPT_dependency_file: - DAL->append(DAL->MakeSeparateArg(Opts.getOption(options::OPT_MF), + DAL->append(DAL->MakeSeparateArg(A, Opts.getOption(options::OPT_MF), A->getValue(Args))); break; case options::OPT_gfull: - DAL->append(DAL->MakeFlagArg(Opts.getOption(options::OPT_g_Flag))); - DAL->append(DAL->MakeFlagArg( + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_g_Flag))); + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_fno_eliminate_unused_debug_symbols))); break; case options::OPT_gused: - DAL->append(DAL->MakeFlagArg(Opts.getOption(options::OPT_g_Flag))); - DAL->append(DAL->MakeFlagArg( + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_g_Flag))); + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_feliminate_unused_debug_symbols))); break; case options::OPT_fterminated_vtables: case options::OPT_findirect_virtual_calls: - DAL->append(DAL->MakeFlagArg(Opts.getOption(options::OPT_fapple_kext))); - DAL->append(DAL->MakeFlagArg(Opts.getOption(options::OPT_static))); + DAL->append(DAL->MakeFlagArg(A, + Opts.getOption(options::OPT_fapple_kext))); + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_static))); break; case options::OPT_shared: - DAL->append(DAL->MakeFlagArg(Opts.getOption(options::OPT_dynamiclib))); + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_dynamiclib))); break; case options::OPT_fconstant_cfstrings: - DAL->append(DAL->MakeFlagArg( + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_mconstant_cfstrings))); break; case options::OPT_fno_constant_cfstrings: - DAL->append(DAL->MakeFlagArg( + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_mno_constant_cfstrings))); break; case options::OPT_Wnonportable_cfstrings: - DAL->append(DAL->MakeFlagArg( + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_mwarn_nonportable_cfstrings))); break; case options::OPT_Wno_nonportable_cfstrings: - DAL->append(DAL->MakeFlagArg( + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_mno_warn_nonportable_cfstrings))); break; case options::OPT_fpascal_strings: - DAL->append(DAL->MakeFlagArg( + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_mpascal_strings))); break; case options::OPT_fno_pascal_strings: - DAL->append(DAL->MakeFlagArg( + DAL->append(DAL->MakeFlagArg(A, Opts.getOption(options::OPT_mno_pascal_strings))); break; } @@ -256,10 +258,10 @@ DerivedArgList *Darwin_X86::TranslateArgs(InputArgList &Args) const { // look it up. if (getArchName() == "x86_64") if (!Args.hasArg(options::OPT_m64, false)) - DAL->append(DAL->MakeFlagArg(Opts.getOption(options::OPT_m64))); + DAL->append(DAL->MakeFlagArg(0, Opts.getOption(options::OPT_m64))); if (!Args.hasArg(options::OPT_mtune_EQ, false)) - DAL->append(DAL->MakeJoinedArg(Opts.getOption(options::OPT_mtune_EQ), + DAL->append(DAL->MakeJoinedArg(0, Opts.getOption(options::OPT_mtune_EQ), "core2")); return DAL; |

