diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-02-20 09:23:47 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-02-20 09:23:47 +0000 |
commit | 960813e1643ec788707bf18b0cdce4bb142d560a (patch) | |
tree | 2b288c4a0e9e8686841868ba4d58f22ec95a3dbe /clang/lib/Driver/Tools.cpp | |
parent | b880909ab5b98baa7d69cf84a8b5c82586c60df5 (diff) | |
download | bcm5719-llvm-960813e1643ec788707bf18b0cdce4bb142d560a.tar.gz bcm5719-llvm-960813e1643ec788707bf18b0cdce4bb142d560a.zip |
[MSVC Compat] Implement -EHc semantics
The -EHc flag implicitly adds a nothrow attribute to any extern "C"
function when exceptions are enabled.
llvm-svn: 261425
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 9c64da58c27..fd647a484e6 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -5786,8 +5786,7 @@ struct EHFlags { /// - s: Cleanup after "synchronous" exceptions, aka C++ exceptions. /// - a: Cleanup after "asynchronous" exceptions, aka structured exceptions. /// The 'a' modifier is unimplemented and fundamentally hard in LLVM IR. -/// - c: Assume that extern "C" functions are implicitly noexcept. This -/// modifier is an optimization, so we ignore it for now. +/// - c: Assume that extern "C" functions are implicitly nounwind. /// The default is /EHs-c-, meaning cleanups are disabled. static EHFlags parseClangCLEHFlags(const Driver &D, const ArgList &Args) { EHFlags EH; @@ -5897,10 +5896,11 @@ void Clang::AddClangCLArgs(const ArgList &Args, ArgStringList &CmdArgs, const Driver &D = getToolChain().getDriver(); EHFlags EH = parseClangCLEHFlags(D, Args); - // FIXME: Do something with NoExceptC. if (EH.Synch || EH.Asynch) { CmdArgs.push_back("-fcxx-exceptions"); CmdArgs.push_back("-fexceptions"); + if (EH.NoUnwindC) + CmdArgs.push_back("-fexternc-nounwind"); } // /EP should expand to -E -P. |