diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-02-20 09:23:44 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-02-20 09:23:44 +0000 |
commit | b880909ab5b98baa7d69cf84a8b5c82586c60df5 (patch) | |
tree | 352c9bf2fcbfb122965ebe7edd97b4b0ebe9bacc /clang/lib/Driver/Tools.cpp | |
parent | 4ff6f7362b75c634b43f152491d50d6809080634 (diff) | |
download | llvm-b880909ab5b98baa7d69cf84a8b5c82586c60df5.zip llvm-b880909ab5b98baa7d69cf84a8b5c82586c60df5.tar.gz llvm-b880909ab5b98baa7d69cf84a8b5c82586c60df5.tar.bz2 |
[MSVC Compat] Add support for /GX, /GX-
These are legacy flags which map to /EHsc and /EHs-c- respectively.
llvm-svn: 261424
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 584dfed..9c64da5 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -5775,10 +5775,9 @@ static bool maybeConsumeDash(const std::string &EH, size_t &I) { namespace { struct EHFlags { - EHFlags() : Synch(false), Asynch(false), NoExceptC(false) {} - bool Synch; - bool Asynch; - bool NoExceptC; + bool Synch = false; + bool Asynch = false; + bool NoUnwindC = false; }; } // end anonymous namespace @@ -5802,7 +5801,7 @@ static EHFlags parseClangCLEHFlags(const Driver &D, const ArgList &Args) { EH.Asynch = maybeConsumeDash(EHVal, I); continue; case 'c': - EH.NoExceptC = maybeConsumeDash(EHVal, I); + EH.NoUnwindC = maybeConsumeDash(EHVal, I); continue; case 's': EH.Synch = maybeConsumeDash(EHVal, I); @@ -5814,6 +5813,12 @@ static EHFlags parseClangCLEHFlags(const Driver &D, const ArgList &Args) { break; } } + // The /GX, /GX- flags are only processed if there are not /EH flags. + if (EHArgs.empty() && + Args.hasFlag(options::OPT__SLASH_GX, options::OPT__SLASH_GX_)) { + EH.Synch = true; + EH.NoUnwindC = true; + } return EH; } @@ -9704,6 +9709,8 @@ std::unique_ptr<Command> visualstudio::Compiler::GetCommand( // Flags that can simply be passed through. Args.AddAllArgs(CmdArgs, options::OPT__SLASH_LD); Args.AddAllArgs(CmdArgs, options::OPT__SLASH_LDd); + Args.AddAllArgs(CmdArgs, options::OPT__SLASH_GX); + Args.AddAllArgs(CmdArgs, options::OPT__SLASH_GX_); Args.AddAllArgs(CmdArgs, options::OPT__SLASH_EH); Args.AddAllArgs(CmdArgs, options::OPT__SLASH_Zl); |