diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2009-03-18 08:01:15 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-18 08:01:15 +0000 |
| commit | 4b6058e33aebf20d1bed1252ddc78f4a05deb15b (patch) | |
| tree | 3170014b13158dfdaffcf236007358e1da8c74cf /clang/lib | |
| parent | 64a6a092b1f13a7d7aee9fbe143f0d9c5ce891b5 (diff) | |
| download | bcm5719-llvm-4b6058e33aebf20d1bed1252ddc78f4a05deb15b.tar.gz bcm5719-llvm-4b6058e33aebf20d1bed1252ddc78f4a05deb15b.zip | |
Driver: Add "d" flag to Options.def for options which are completely
handled by driver.
- This is not very precise, we use it to drive the "forward-to-gcc"
predicate, when trying to talk to a generic gcc tool.
- Slightly better than what ccc was doing, and should be good
enough. Platforms which want a robust driver should implement a
proper tool chain.
llvm-svn: 67181
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Driver/OptTable.cpp | 16 | ||||
| -rw-r--r-- | clang/lib/Driver/Option.cpp | 3 |
2 files changed, 15 insertions, 4 deletions
diff --git a/clang/lib/Driver/OptTable.cpp b/clang/lib/Driver/OptTable.cpp index 54e5ee1b6a2..7b7e2a7bbcc 100644 --- a/clang/lib/Driver/OptTable.cpp +++ b/clang/lib/Driver/OptTable.cpp @@ -29,7 +29,7 @@ struct Info { static Info OptionInfos[] = { // The InputOption info - { "<input>", "", Option::InputClass, OPT_INVALID, OPT_INVALID, 0 }, + { "<input>", "d", Option::InputClass, OPT_INVALID, OPT_INVALID, 0 }, // The UnknownOption info { "<unknown>", "", Option::UnknownClass, OPT_INVALID, OPT_INVALID, 0 }, @@ -107,14 +107,24 @@ Option *OptTable::constructOption(options::ID id) const { for (const char *s = info.Flags; *s; ++s) { switch (*s) { default: assert(0 && "Invalid option flag."); - case 'J': Opt->setForceJoinedRender(true); break; - case 'S': Opt->setForceSeparateRender(true); break; + case 'J': + assert(info.Kind == Option::SeparateClass && "Invalid option."); + Opt->setForceJoinedRender(true); break; + case 'S': + assert(info.Kind == Option::JoinedClass && "Invalid option."); + Opt->setForceSeparateRender(true); break; + case 'd': Opt->setForwardToGCC(false); break; case 'i': Opt->setNoOptAsInput(true); break; case 'l': Opt->setLinkerInput(true); break; case 'u': Opt->setUnsupported(true); break; } } + // Linker inputs shouldn't be forwarded to GCC as arguments (they + // will, however, be forwarded as inputs). + if (Opt->isLinkerInput()) + Opt->setForwardToGCC(false); + return Opt; } diff --git a/clang/lib/Driver/Option.cpp b/clang/lib/Driver/Option.cpp index 503b54d8fe6..12d501b3cb9 100644 --- a/clang/lib/Driver/Option.cpp +++ b/clang/lib/Driver/Option.cpp @@ -20,7 +20,8 @@ Option::Option(OptionClass _Kind, options::ID _ID, const char *_Name, const OptionGroup *_Group, const Option *_Alias) : Kind(_Kind), ID(_ID), Name(_Name), Group(_Group), Alias(_Alias), Unsupported(false), LinkerInput(false), NoOptAsInput(false), - ForceSeparateRender(false), ForceJoinedRender(false) + ForceSeparateRender(false), ForceJoinedRender(false), + ForwardToGCC(true) { // Multi-level aliases are not supported, and alias options cannot |

