diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Basic/DiagnosticFrontendKinds.td | 1 | ||||
-rw-r--r-- | clang/include/clang/Basic/TargetInfo.h | 7 | ||||
-rw-r--r-- | clang/tools/clang-cc/clang-cc.cpp | 13 |
3 files changed, 21 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td b/clang/include/clang/Basic/DiagnosticFrontendKinds.td index a06042ed4b1..432b63a8b07 100644 --- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td +++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td @@ -11,6 +11,7 @@ let Component = "Frontend" in { def err_fe_unknown_triple : Error< "unknown target triple '%0', please use -triple or -arch">; +def err_fe_unknown_target_abi : Error<"unknown target ABI '%0'">; def err_fe_error_reading : Error<"error reading '%0'">; def err_fe_error_reading_stdin : Error<"error reading stdin">; def err_fe_error_backend : Error<"error in backend: %0">, DefaultFatal; diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index f8dca87a260..ee742aafe37 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -352,6 +352,13 @@ public: llvm::StringMap<bool> &Features) const { } + /// setABI - Use the specific ABI. + /// + /// \return - False on error (invalid ABI name). + virtual bool setABI(const std::string &Name) { + return false; + } + /// setFeatureEnabled - Enable or disable a specific target feature, /// the feature name must be valid. /// diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp index 30aef0b98d0..179fb334f1a 100644 --- a/clang/tools/clang-cc/clang-cc.cpp +++ b/clang/tools/clang-cc/clang-cc.cpp @@ -663,6 +663,10 @@ static llvm::cl::opt<bool> NoElideConstructors("fno-elide-constructors", llvm::cl::desc("Disable C++ copy constructor elision")); +static llvm::cl::opt<std::string> +TargetABI("target-abi", + llvm::cl::desc("Target a particular ABI type")); + // It might be nice to add bounds to the CommandLine library directly. struct OptLevelParser : public llvm::cl::parser<unsigned> { @@ -2242,6 +2246,15 @@ int main(int argc, char **argv) { return 1; } + // Set the target ABI if specified. + if (!TargetABI.empty()) { + if (!Target->setABI(TargetABI)) { + Diags.Report(FullSourceLoc(), diag::err_fe_unknown_target_abi) + << TargetABI; + return 1; + } + } + if (!InheritanceViewCls.empty()) // C++ visualization? ProgAction = InheritanceView; |