<div><div dir="auto">Thanks for letting me know Reid.</div><div dir="auto">I’ll in work and won’t be able to access the repo until lunch time. (~3 hours)</div><div dir="auto">Feel free to revert if it is not trivial.</div><div dir="auto"><br></div><div dir="auto">The easy fix might be to change to == x86_64 from != x86 For is Windows in the default toolchain. That should restore the old behavior.</div><div dir="auto"><br></div><div dir="auto">I’m curious, is this in clang-cl mode?</div><div dir="auto"><br></div><br><div class="gmail_quote"><div>On Wed 29 Nov 2017 at 10:12, Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>I see a bunch of link errors that suggest we're using the wrong EH personality in MSVC mode now:<div><br></div><div><div>FAILED: win_clang_nacl_win64/swiftshader/libEGL.dll win_clang_nacl_win64/swiftshader/libEGL.dll.lib win_clang_nacl_win64/swiftshader/libEGL.dll.pdb </div><div>C:/b/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py link-wrapper environment.x64 False link.exe /nologo /IMPLIB:win_clang_nacl_win64/swiftshader/libEGL.dll.lib /DLL /OUT:win_clang_nacl_win64/swiftshader/libEGL.dll /PDB:win_clang_nacl_win64/swiftshader/libEGL.dll.pdb @win_clang_nacl_win64/swiftshader/libEGL.dll.rsp</div><div>Config.obj : error LNK2001: unresolved external symbol _Unwind_Resume</div><div>Display.obj : error LNK2001: unresolved external symbol _Unwind_Resume</div><div>Surface.obj : error LNK2001: unresolved external symbol _Unwind_Resume</div><div>Config.obj : error LNK2001: unresolved external symbol __gxx_personality_seh0</div><div>Display.obj : error LNK2001: unresolved external symbol __gxx_personality_seh0</div><div>Surface.obj : error LNK2001: unresolved external symbol __gxx_personality_seh0</div></div><div><br></div><div>I'll dig in a bit to see if there's an easy fix.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Nov 28, 2017 at 11:25 PM, Martell Malone via cfe-commits <span><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: martell<br>
Date: Tue Nov 28 23:25:12 2017<br>
New Revision: 319297<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=319297&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=319297&view=rev</a><br>
Log:<br>
Toolchain: Normalize dwarf, sjlj and seh eh<br>
<br>
This is a re-apply of r319294.<br>
<br>
adds -fseh-exceptions and -fdwarf-exceptions flags<br>
<br>
clang will check if the user has specified an exception model flag,<br>
in the absense of specifying the exception model clang will then check<br>
the driver default and append the model flag for that target to cc1<br>
<br>
-fno-exceptions has a higher priority then specifying the model<br>
<br>
move __SEH__ macro definitions out of Targets into InitPreprocessor<br>
behind the -fseh-exceptions flag<br>
<br>
move __ARM_DWARF_EH__ macrodefinitions out of verious targets and into<br>
InitPreprocessor behind the -fdwarf-exceptions flag and arm|thumb check<br>
<br>
remove unused USESEHExceptions from the MinGW Driver<br>
<br>
fold USESjLjExceptions into a new GetExceptionModel function that<br>
gives the toolchain classes more flexibility with eh models<br>
<br>
Reviewers: rnk, mstorsjo<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D39673" rel="noreferrer" target="_blank">https://reviews.llvm.org/D39673</a><br>
<br>
Added:<br>
    cfe/trunk/test/CodeGenCXX/mingw-w64-exceptions.c<br>
Modified:<br>
    cfe/trunk/docs/ClangCommandLineReference.rst<br>
    cfe/trunk/include/clang/Basic/LangOptions.def<br>
    cfe/trunk/include/clang/Driver/Options.td<br>
    cfe/trunk/include/clang/Driver/ToolChain.h<br>
    cfe/trunk/lib/Basic/Targets/ARM.cpp<br>
    cfe/trunk/lib/Basic/Targets/OSTargets.cpp<br>
    cfe/trunk/lib/Basic/Targets/OSTargets.h<br>
    cfe/trunk/lib/Basic/Targets/X86.h<br>
    cfe/trunk/lib/CodeGen/BackendUtil.cpp<br>
    cfe/trunk/lib/CodeGen/CGException.cpp<br>
    cfe/trunk/lib/Driver/ToolChain.cpp<br>
    cfe/trunk/lib/Driver/ToolChains/Clang.cpp<br>
    cfe/trunk/lib/Driver/ToolChains/Darwin.cpp<br>
    cfe/trunk/lib/Driver/ToolChains/Darwin.h<br>
    cfe/trunk/lib/Driver/ToolChains/FreeBSD.cpp<br>
    cfe/trunk/lib/Driver/ToolChains/FreeBSD.h<br>
    cfe/trunk/lib/Driver/ToolChains/MinGW.cpp<br>
    cfe/trunk/lib/Driver/ToolChains/MinGW.h<br>
    cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp<br>
    cfe/trunk/lib/Driver/ToolChains/NetBSD.h<br>
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
    cfe/trunk/lib/Frontend/InitPreprocessor.cpp<br>
    cfe/trunk/test/CodeGenCXX/mingw-w64-seh-exceptions.cpp<br>
    cfe/trunk/test/Preprocessor/arm-target-features.c<br>
    cfe/trunk/test/Preprocessor/init.c<br>
<br>
Modified: cfe/trunk/docs/ClangCommandLineReference.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ClangCommandLineReference.rst?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ClangCommandLineReference.rst?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/docs/ClangCommandLineReference.rst (original)<br>
+++ cfe/trunk/docs/ClangCommandLineReference.rst Tue Nov 28 23:25:12 2017<br>
@@ -1706,10 +1706,18 @@ Which overload candidates to show when o<br>
<br>
 Enable C++14 sized global deallocation functions<br>
<br>
+.. option:: -fdwarf-exceptions<br>
+<br>
+Use DWARF style exceptions<br>
+<br>
 .. option:: -fsjlj-exceptions<br>
<br>
 Use SjLj style exceptions<br>
<br>
+.. option:: -fseh-exceptions<br>
+<br>
+Use SEH style exceptions<br>
+<br>
 .. option:: -fslp-vectorize, -fno-slp-vectorize, -ftree-slp-vectorize<br>
<br>
 Enable the superword-level parallelism vectorization passes<br>
<br>
Modified: cfe/trunk/include/clang/Basic/LangOptions.def<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Basic/LangOptions.def (original)<br>
+++ cfe/trunk/include/clang/Basic/LangOptions.def Tue Nov 28 23:25:12 2017<br>
@@ -124,7 +124,9 @@ LANGOPT(ZVector           , 1, 0, "Syste<br>
 LANGOPT(Exceptions        , 1, 0, "exception handling")<br>
 LANGOPT(ObjCExceptions    , 1, 0, "Objective-C exceptions")<br>
 LANGOPT(CXXExceptions     , 1, 0, "C++ exceptions")<br>
+LANGOPT(DWARFExceptions   , 1, 0, "dwarf exception handling")<br>
 LANGOPT(SjLjExceptions    , 1, 0, "setjmp-longjump exception handling")<br>
+LANGOPT(SEHExceptions     , 1, 0, "SEH .xdata exception handling")<br>
 LANGOPT(ExternCNoUnwind   , 1, 0, "Assume extern C functions don't unwind")<br>
 LANGOPT(TraditionalCPP    , 1, 0, "traditional CPP emulation")<br>
 LANGOPT(RTTI              , 1, 1, "run-time type information")<br>
<br>
Modified: cfe/trunk/include/clang/Driver/Options.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Driver/Options.td (original)<br>
+++ cfe/trunk/include/clang/Driver/Options.td Tue Nov 28 23:25:12 2017<br>
@@ -800,8 +800,12 @@ def fencoding_EQ : Joined<["-"], "fencod<br>
 def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group<f_Group>, Flags<[CoreOption]>;<br>
 def fexceptions : Flag<["-"], "fexceptions">, Group<f_Group>, Flags<[CC1Option]>,<br>
   HelpText<"Enable support for exception handling">;<br>
+def fdwarf_exceptions : Flag<["-"], "fdwarf-exceptions">, Group<f_Group>,<br>
+  Flags<[CC1Option]>, HelpText<"Use DWARF style exceptions">;<br>
 def fsjlj_exceptions : Flag<["-"], "fsjlj-exceptions">, Group<f_Group>,<br>
   Flags<[CC1Option]>, HelpText<"Use SjLj style exceptions">;<br>
+def fseh_exceptions : Flag<["-"], "fseh-exceptions">, Group<f_Group>,<br>
+  Flags<[CC1Option]>, HelpText<"Use SEH style exceptions">;<br>
 def fexcess_precision_EQ : Joined<["-"], "fexcess-precision=">,<br>
     Group<clang_ignored_gcc_optimization_f_Group>;<br>
 def : Flag<["-"], "fexpensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>;<br>
<br>
Modified: cfe/trunk/include/clang/Driver/ToolChain.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Driver/ToolChain.h (original)<br>
+++ cfe/trunk/include/clang/Driver/ToolChain.h Tue Nov 28 23:25:12 2017<br>
@@ -397,10 +397,9 @@ public:<br>
     return llvm::DebuggerKind::GDB;<br>
   }<br>
<br>
-  /// UseSjLjExceptions - Does this tool chain use SjLj exceptions.<br>
-  virtual bool UseSjLjExceptions(const llvm::opt::ArgList &Args) const {<br>
-    return false;<br>
-  }<br>
+  /// GetExceptionModel - Return the tool chain exception model.<br>
+  virtual llvm::ExceptionHandling<br>
+  GetExceptionModel(const llvm::opt::ArgList &Args) const;<br>
<br>
   /// SupportsEmbeddedBitcode - Does this tool chain support embedded bitcode.<br>
   virtual bool SupportsEmbeddedBitcode() const {<br>
<br>
Modified: cfe/trunk/lib/Basic/Targets/ARM.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/ARM.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/ARM.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Basic/Targets/ARM.cpp (original)<br>
+++ cfe/trunk/lib/Basic/Targets/ARM.cpp Tue Nov 28 23:25:12 2017<br>
@@ -1000,7 +1000,6 @@ void MinGWARMTargetInfo::getTargetDefine<br>
                                           MacroBuilder &Builder) const {<br>
   WindowsARMTargetInfo::getTargetDefines(Opts, Builder);<br>
   Builder.defineMacro("_ARM_");<br>
-  Builder.defineMacro("__ARM_DWARF_EH__");<br>
 }<br>
<br>
 CygwinARMTargetInfo::CygwinARMTargetInfo(const llvm::Triple &Triple,<br>
<br>
Modified: cfe/trunk/lib/Basic/Targets/OSTargets.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/OSTargets.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/OSTargets.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Basic/Targets/OSTargets.cpp (original)<br>
+++ cfe/trunk/lib/Basic/Targets/OSTargets.cpp Tue Nov 28 23:25:12 2017<br>
@@ -133,10 +133,6 @@ void getDarwinDefines(MacroBuilder &Buil<br>
   if (Triple.isOSDarwin())<br>
     Builder.defineMacro("__MACH__");<br>
<br>
-  // The Watch ABI uses Dwarf EH.<br>
-  if (Triple.isWatchABI())<br>
-    Builder.defineMacro("__ARM_DWARF_EH__");<br>
-<br>
   PlatformMinVersion = VersionTuple(Maj, Min, Rev);<br>
 }<br>
 } // namespace targets<br>
<br>
Modified: cfe/trunk/lib/Basic/Targets/OSTargets.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/OSTargets.h?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/OSTargets.h?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Basic/Targets/OSTargets.h (original)<br>
+++ cfe/trunk/lib/Basic/Targets/OSTargets.h Tue Nov 28 23:25:12 2017<br>
@@ -358,17 +358,6 @@ protected:<br>
     Builder.defineMacro("__ELF__");<br>
     if (Opts.POSIXThreads)<br>
       Builder.defineMacro("_REENTRANT");<br>
-<br>
-    switch (Triple.getArch()) {<br>
-    default:<br>
-      break;<br>
-    case llvm::Triple::arm:<br>
-    case llvm::Triple::armeb:<br>
-    case llvm::Triple::thumb:<br>
-    case llvm::Triple::thumbeb:<br>
-      Builder.defineMacro("__ARM_DWARF_EH__");<br>
-      break;<br>
-    }<br>
   }<br>
<br>
 public:<br>
<br>
Modified: cfe/trunk/lib/Basic/Targets/X86.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.h?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.h?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Basic/Targets/X86.h (original)<br>
+++ cfe/trunk/lib/Basic/Targets/X86.h Tue Nov 28 23:25:12 2017<br>
@@ -710,15 +710,6 @@ public:<br>
     LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();<br>
     HasFloat128 = true;<br>
   }<br>
-<br>
-  void getTargetDefines(const LangOptions &Opts,<br>
-                        MacroBuilder &Builder) const override {<br>
-    WindowsX86_64TargetInfo::getTargetDefines(Opts, Builder);<br>
-<br>
-    // GCC defines this macro when it is using __gxx_personality_seh0.<br>
-    if (!Opts.SjLjExceptions)<br>
-      Builder.defineMacro("__SEH__");<br>
-  }<br>
 };<br>
<br>
 // x86-64 Cygwin target<br>
@@ -740,10 +731,6 @@ public:<br>
     DefineStd(Builder, "unix", Opts);<br>
     if (Opts.CPlusPlus)<br>
       Builder.defineMacro("_GNU_SOURCE");<br>
-<br>
-    // GCC defines this macro when it is using __gxx_personality_seh0.<br>
-    if (!Opts.SjLjExceptions)<br>
-      Builder.defineMacro("__SEH__");<br>
   }<br>
 };<br>
<br>
<br>
Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Tue Nov 28 23:25:12 2017<br>
@@ -424,6 +424,10 @@ static void initTargetOptions(llvm::Targ<br>
<br>
   if (LangOpts.SjLjExceptions)<br>
     Options.ExceptionModel = llvm::ExceptionHandling::SjLj;<br>
+  if (LangOpts.SEHExceptions)<br>
+    Options.ExceptionModel = llvm::ExceptionHandling::WinEH;<br>
+  if (LangOpts.DWARFExceptions)<br>
+    Options.ExceptionModel = llvm::ExceptionHandling::DwarfCFI;<br>
<br>
   Options.NoInfsFPMath = CodeGenOpts.NoInfsFPMath;<br>
   Options.NoNaNsFPMath = CodeGenOpts.NoNaNsFPMath;<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CGException.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CGException.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGException.cpp Tue Nov 28 23:25:12 2017<br>
@@ -112,17 +112,11 @@ EHPersonality::MSVC_C_specific_handler =<br>
 const EHPersonality<br>
 EHPersonality::MSVC_CxxFrameHandler3 = { "__CxxFrameHandler3", nullptr };<br>
<br>
-/// On Win64, use libgcc's SEH personality function. We fall back to dwarf on<br>
-/// other platforms, unless the user asked for SjLj exceptions.<br>
-static bool useLibGCCSEHPersonality(const llvm::Triple &T) {<br>
-  return T.isOSWindows() && T.getArch() == llvm::Triple::x86_64;<br>
-}<br>
-<br>
 static const EHPersonality &getCPersonality(const llvm::Triple &T,<br>
                                             const LangOptions &L) {<br>
   if (L.SjLjExceptions)<br>
     return EHPersonality::GNU_C_SJLJ;<br>
-  else if (useLibGCCSEHPersonality(T))<br>
+  if (L.SEHExceptions)<br>
     return EHPersonality::GNU_C_SEH;<br>
   return EHPersonality::GNU_C;<br>
 }<br>
@@ -144,7 +138,7 @@ static const EHPersonality &getObjCPerso<br>
   case ObjCRuntime::ObjFW:<br>
     if (L.SjLjExceptions)<br>
       return EHPersonality::GNU_ObjC_SJLJ;<br>
-    else if (useLibGCCSEHPersonality(T))<br>
+    if (L.SEHExceptions)<br>
       return EHPersonality::GNU_ObjC_SEH;<br>
     return EHPersonality::GNU_ObjC;<br>
   }<br>
@@ -155,7 +149,7 @@ static const EHPersonality &getCXXPerson<br>
                                               const LangOptions &L) {<br>
   if (L.SjLjExceptions)<br>
     return EHPersonality::GNU_CPlusPlus_SJLJ;<br>
-  else if (useLibGCCSEHPersonality(T))<br>
+  if (L.SEHExceptions)<br>
     return EHPersonality::GNU_CPlusPlus_SEH;<br>
   return EHPersonality::GNU_CPlusPlus;<br>
 }<br>
@@ -211,6 +205,10 @@ const EHPersonality &EHPersonality::get(<br>
   if (T.isWindowsMSVCEnvironment() && !L.ObjC1) {<br>
     if (L.SjLjExceptions)<br>
       return EHPersonality::GNU_CPlusPlus_SJLJ;<br>
+    if (L.SEHExceptions)<br>
+      return EHPersonality::GNU_CPlusPlus_SEH;<br>
+    if (L.DWARFExceptions)<br>
+      return EHPersonality::GNU_CPlusPlus;<br>
     else<br>
       return EHPersonality::MSVC_CxxFrameHandler3;<br>
   }<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChain.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChain.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChain.cpp Tue Nov 28 23:25:12 2017<br>
@@ -27,6 +27,8 @@<br>
 #include "llvm/Support/ErrorHandling.h"<br>
 #include "llvm/Support/FileSystem.h"<br>
 #include "llvm/Support/Path.h"<br>
+#include "llvm/MC/MCAsmInfo.h"<br>
+#include "llvm/MC/MCRegisterInfo.h"<br>
 #include "llvm/Support/TargetParser.h"<br>
 #include "llvm/Support/TargetRegistry.h"<br>
<br>
@@ -449,6 +451,13 @@ ObjCRuntime ToolChain::getDefaultObjCRun<br>
                      VersionTuple());<br>
 }<br>
<br>
+llvm::ExceptionHandling<br>
+ToolChain::GetExceptionModel(const llvm::opt::ArgList &Args) const {<br>
+  if (Triple.isOSWindows() && Triple.getArch() != llvm::Triple::x86)<br>
+    return llvm::ExceptionHandling::WinEH;<br>
+  return llvm::ExceptionHandling::None;<br>
+}<br>
+<br>
 bool ToolChain::isThreadModelSupported(const StringRef Model) const {<br>
   if (Model == "single") {<br>
     // FIXME: 'single' is only supported on ARM and WebAssembly so far.<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Tue Nov 28 23:25:12 2017<br>
@@ -4166,9 +4166,33 @@ void Clang::ConstructJob(Compilation &C,<br>
     addExceptionArgs(Args, InputType, getToolChain(), KernelOrKext, Runtime,<br>
                      CmdArgs);<br>
<br>
-  if (Args.hasArg(options::OPT_fsjlj_exceptions) ||<br>
-      getToolChain().UseSjLjExceptions(Args))<br>
-    CmdArgs.push_back("-fsjlj-exceptions");<br>
+  // Handle exception personalities<br>
+  Arg *A = Args.getLastArg(options::OPT_fsjlj_exceptions,<br>
+                           options::OPT_fseh_exceptions,<br>
+                           options::OPT_fdwarf_exceptions);<br>
+  if (A) {<br>
+    const Option &Opt = A->getOption();<br>
+    if (Opt.matches(options::OPT_fsjlj_exceptions))<br>
+      CmdArgs.push_back("-fsjlj-exceptions");<br>
+    if (Opt.matches(options::OPT_fseh_exceptions))<br>
+      CmdArgs.push_back("-fseh-exceptions");<br>
+    if (Opt.matches(options::OPT_fdwarf_exceptions))<br>
+      CmdArgs.push_back("-fdwarf-exceptions");<br>
+  } else {<br>
+    switch(getToolChain().GetExceptionModel(Args)) {<br>
+      default:<br>
+        break;<br>
+      case llvm::ExceptionHandling::DwarfCFI:<br>
+        CmdArgs.push_back("-fdwarf-exceptions");<br>
+        break;<br>
+      case llvm::ExceptionHandling::SjLj:<br>
+        CmdArgs.push_back("-fsjlj-exceptions");<br>
+        break;<br>
+      case llvm::ExceptionHandling::WinEH:<br>
+        CmdArgs.push_back("-fseh-exceptions");<br>
+        break;<br>
+    }<br>
+  }<br>
<br>
   // C++ "sane" operator new.<br>
   if (!Args.hasFlag(options::OPT_fassume_sane_operator_new,<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/Darwin.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/Darwin.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/Darwin.cpp Tue Nov 28 23:25:12 2017<br>
@@ -1881,7 +1881,7 @@ bool MachO::IsUnwindTablesDefault(const<br>
   // Unwind tables are not emitted if -fno-exceptions is supplied (except when<br>
   // targeting x86_64).<br>
   return getArch() == llvm::Triple::x86_64 ||<br>
-         (!UseSjLjExceptions(Args) &&<br>
+         (GetExceptionModel(Args) != llvm::ExceptionHandling::SjLj &&<br>
           Args.hasFlag(options::OPT_fexceptions, options::OPT_fno_exceptions,<br>
                        true));<br>
 }<br>
@@ -1892,15 +1892,18 @@ bool MachO::UseDwarfDebugFlags() const {<br>
   return false;<br>
 }<br>
<br>
-bool Darwin::UseSjLjExceptions(const ArgList &Args) const {<br>
+llvm::ExceptionHandling Darwin::GetExceptionModel(const ArgList &Args) const {<br>
   // Darwin uses SjLj exceptions on ARM.<br>
   if (getTriple().getArch() != llvm::Triple::arm &&<br>
       getTriple().getArch() != llvm::Triple::thumb)<br>
-    return false;<br>
+    return llvm::ExceptionHandling::None;<br>
<br>
   // Only watchOS uses the new DWARF/Compact unwinding method.<br>
   llvm::Triple Triple(ComputeLLVMTriple(Args));<br>
-  return !Triple.isWatchABI();<br>
+  if(Triple.isWatchABI())<br>
+    return llvm::ExceptionHandling::DwarfCFI;<br>
+<br>
+  return llvm::ExceptionHandling::SjLj;<br>
 }<br>
<br>
 bool Darwin::SupportsEmbeddedBitcode() const {<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/Darwin.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.h?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.h?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/Darwin.h (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/Darwin.h Tue Nov 28 23:25:12 2017<br>
@@ -247,8 +247,9 @@ public:<br>
<br>
   bool UseDwarfDebugFlags() const override;<br>
<br>
-  bool UseSjLjExceptions(const llvm::opt::ArgList &Args) const override {<br>
-    return false;<br>
+  llvm::ExceptionHandling<br>
+  GetExceptionModel(const llvm::opt::ArgList &Args) const override {<br>
+    return llvm::ExceptionHandling::None;<br>
   }<br>
<br>
   /// }<br>
@@ -455,7 +456,8 @@ public:<br>
<br>
   void CheckObjCARC() const override;<br>
<br>
-  bool UseSjLjExceptions(const llvm::opt::ArgList &Args) const override;<br>
+  llvm::ExceptionHandling GetExceptionModel(<br>
+      const llvm::opt::ArgList &Args) const override;<br>
<br>
   bool SupportsEmbeddedBitcode() const override;<br>
<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/FreeBSD.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/FreeBSD.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/FreeBSD.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/FreeBSD.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/FreeBSD.cpp Tue Nov 28 23:25:12 2017<br>
@@ -359,17 +359,18 @@ Tool *FreeBSD::buildAssembler() const {<br>
<br>
 Tool *FreeBSD::buildLinker() const { return new tools::freebsd::Linker(*this); }<br>
<br>
-bool FreeBSD::UseSjLjExceptions(const ArgList &Args) const {<br>
+llvm::ExceptionHandling FreeBSD::GetExceptionModel(const ArgList &Args) const {<br>
   // FreeBSD uses SjLj exceptions on ARM oabi.<br>
   switch (getTriple().getEnvironment()) {<br>
   case llvm::Triple::GNUEABIHF:<br>
   case llvm::Triple::GNUEABI:<br>
   case llvm::Triple::EABI:<br>
-    return false;<br>
-<br>
+    return llvm::ExceptionHandling::None;<br>
   default:<br>
-    return (getTriple().getArch() == llvm::Triple::arm ||<br>
-            getTriple().getArch() == llvm::Triple::thumb);<br>
+    if (getTriple().getArch() == llvm::Triple::arm ||<br>
+        getTriple().getArch() == llvm::Triple::thumb)<br>
+      return llvm::ExceptionHandling::SjLj;<br>
+    return llvm::ExceptionHandling::None;<br>
   }<br>
 }<br>
<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/FreeBSD.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/FreeBSD.h?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/FreeBSD.h?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/FreeBSD.h (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/FreeBSD.h Tue Nov 28 23:25:12 2017<br>
@@ -66,7 +66,8 @@ public:<br>
   void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,<br>
                            llvm::opt::ArgStringList &CmdArgs) const override;<br>
<br>
-  bool UseSjLjExceptions(const llvm::opt::ArgList &Args) const override;<br>
+  llvm::ExceptionHandling GetExceptionModel(<br>
+      const llvm::opt::ArgList &Args) const override;<br>
   bool isPIEDefault() const override;<br>
   SanitizerMask getSupportedSanitizers() const override;<br>
   unsigned GetDefaultDwarfVersion() const override { return 2; }<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/MinGW.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/MinGW.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/MinGW.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/MinGW.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/MinGW.cpp Tue Nov 28 23:25:12 2017<br>
@@ -367,8 +367,11 @@ bool toolchains::MinGW::isPICDefaultForc<br>
   return getArch() == llvm::Triple::x86_64;<br>
 }<br>
<br>
-bool toolchains::MinGW::UseSEHExceptions() const {<br>
-  return getArch() == llvm::Triple::x86_64;<br>
+llvm::ExceptionHandling<br>
+toolchains::MinGW::GetExceptionModel(const ArgList &Args) const {<br>
+  if (getArch() == llvm::Triple::x86_64)<br>
+    return llvm::ExceptionHandling::WinEH;<br>
+  return llvm::ExceptionHandling::DwarfCFI;<br>
 }<br>
<br>
 void toolchains::MinGW::AddCudaIncludeArgs(const ArgList &DriverArgs,<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/MinGW.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/MinGW.h?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/MinGW.h?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/MinGW.h (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/MinGW.h Tue Nov 28 23:25:12 2017<br>
@@ -64,7 +64,9 @@ public:<br>
   bool isPICDefault() const override;<br>
   bool isPIEDefault() const override;<br>
   bool isPICDefaultForced() const override;<br>
-  bool UseSEHExceptions() const;<br>
+<br>
+  llvm::ExceptionHandling GetExceptionModel(<br>
+      const llvm::opt::ArgList &Args) const override;<br>
<br>
   void<br>
   AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp Tue Nov 28 23:25:12 2017<br>
@@ -416,6 +416,15 @@ void NetBSD::addLibStdCxxIncludePaths(co<br>
                            "", DriverArgs, CC1Args);<br>
 }<br>
<br>
+llvm::ExceptionHandling NetBSD::GetExceptionModel(const ArgList &Args) const {<br>
+  // NetBSD uses Dwarf exceptions on ARM.<br>
+  llvm::Triple::ArchType TArch = getTriple().getArch();<br>
+  if (TArch == llvm::Triple::arm || TArch == llvm::Triple::armeb ||<br>
+      TArch == llvm::Triple::thumb || TArch == llvm::Triple::thumbeb)<br>
+    return llvm::ExceptionHandling::DwarfCFI;<br>
+  return llvm::ExceptionHandling::None;<br>
+}<br>
+<br>
 SanitizerMask NetBSD::getSupportedSanitizers() const {<br>
   const bool IsX86 = getTriple().getArch() == llvm::Triple::x86;<br>
   const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64;<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/NetBSD.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/NetBSD.h?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/NetBSD.h?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/NetBSD.h (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/NetBSD.h Tue Nov 28 23:25:12 2017<br>
@@ -69,6 +69,9 @@ public:<br>
     return true;<br>
   }<br>
<br>
+  llvm::ExceptionHandling GetExceptionModel(<br>
+      const llvm::opt::ArgList &Args) const override;<br>
+<br>
   SanitizerMask getSupportedSanitizers() const override;<br>
<br>
 protected:<br>
<br>
Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Nov 28 23:25:12 2017<br>
@@ -2141,7 +2141,18 @@ static void ParseLangArgs(LangOptions &O<br>
   Opts.Exceptions = Args.hasArg(OPT_fexceptions);<br>
   Opts.ObjCExceptions = Args.hasArg(OPT_fobjc_exceptions);<br>
   Opts.CXXExceptions = Args.hasArg(OPT_fcxx_exceptions);<br>
-  Opts.SjLjExceptions = Args.hasArg(OPT_fsjlj_exceptions);<br>
+<br>
+  // Handle exception personalities<br>
+  Arg *A = Args.getLastArg(options::OPT_fsjlj_exceptions,<br>
+                           options::OPT_fseh_exceptions,<br>
+                           options::OPT_fdwarf_exceptions);<br>
+  if (A) {<br>
+    const Option &Opt = A->getOption();<br>
+    Opts.SjLjExceptions = Opt.matches(options::OPT_fsjlj_exceptions);<br>
+    Opts.SEHExceptions = Opt.matches(options::OPT_fseh_exceptions);<br>
+    Opts.DWARFExceptions = Opt.matches(options::OPT_fdwarf_exceptions);<br>
+  }<br>
+<br>
   Opts.ExternCNoUnwind = Args.hasArg(OPT_fexternc_nounwind);<br>
   Opts.TraditionalCPP = Args.hasArg(OPT_traditional_cpp);<br>
<br>
<br>
Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Tue Nov 28 23:25:12 2017<br>
@@ -677,8 +677,14 @@ static void InitializePredefinedMacros(c<br>
     Builder.defineMacro("__EXCEPTIONS");<br>
   if (!LangOpts.MSVCCompat && LangOpts.RTTI)<br>
     Builder.defineMacro("__GXX_RTTI");<br>
+<br>
   if (LangOpts.SjLjExceptions)<br>
     Builder.defineMacro("__USING_SJLJ_EXCEPTIONS__");<br>
+  else if (LangOpts.SEHExceptions)<br>
+    Builder.defineMacro("__SEH__");<br>
+  else if (LangOpts.DWARFExceptions &&<br>
+          (TI.getTriple().isThumb() || TI.getTriple().isARM()))<br>
+    Builder.defineMacro("__ARM_DWARF_EH__");<br>
<br>
   if (LangOpts.Deprecated)<br>
     Builder.defineMacro("__DEPRECATED");<br>
<br>
Added: cfe/trunk/test/CodeGenCXX/mingw-w64-exceptions.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mingw-w64-exceptions.c?rev=319297&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mingw-w64-exceptions.c?rev=319297&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGenCXX/mingw-w64-exceptions.c (added)<br>
+++ cfe/trunk/test/CodeGenCXX/mingw-w64-exceptions.c Tue Nov 28 23:25:12 2017<br>
@@ -0,0 +1,22 @@<br>
+// RUN: %clang -target x86_64-windows-gnu -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SEH<br>
+// RUN: %clang -target i686-windows-gnu -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DWARF<br>
+<br>
+// RUN: %clang -target x86_64-windows-gnu -fsjlj-exceptions -c %s -### 2>&1 | \<br>
+// RUN: FileCheck %s --check-prefix=CHECK-SJLJ<br>
+<br>
+// RUN: %clang -target x86_64-windows-gnu -fdwarf-exceptions -c %s -### 2>&1 | \<br>
+// RUN: FileCheck %s --check-prefix=CHECK-DWARF<br>
+<br>
+// RUN: %clang -target x86_64-windows-gnu -fsjlj-exceptions -fseh-exceptions -c %s -### 2>&1 | \<br>
+// RUN: FileCheck %s --check-prefix=CHECK-SEH<br>
+<br>
+// RUN: %clang -target x86_64-windows-gnu -fseh-exceptions -fsjlj-exceptions -c %s -### 2>&1 | \<br>
+// RUN: FileCheck %s --check-prefix=CHECK-SJLJ<br>
+<br>
+// RUN: %clang -target x86_64-windows-gnu -fseh-exceptions -fdwarf-exceptions -c %s -### 2>&1 | \<br>
+// RUN: FileCheck %s --check-prefix=CHECK-DWARF<br>
+<br>
+// CHECK-SEH: "-fseh-exceptions"<br>
+// CHECK-SJLJ: "-fsjlj-exceptions"<br>
+// CHECK-DWARF-NOT: "-fsjlj-exceptions"<br>
+// CHECK-DWARF-NOT: "-fseh-exceptions"<br>
<br>
Modified: cfe/trunk/test/CodeGenCXX/mingw-w64-seh-exceptions.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mingw-w64-seh-exceptions.cpp?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mingw-w64-seh-exceptions.cpp?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGenCXX/mingw-w64-seh-exceptions.cpp (original)<br>
+++ cfe/trunk/test/CodeGenCXX/mingw-w64-seh-exceptions.cpp Tue Nov 28 23:25:12 2017<br>
@@ -1,4 +1,5 @@<br>
-// RUN: %clang_cc1 %s -fexceptions -emit-llvm -triple x86_64-w64-windows-gnu -o - | FileCheck %s --check-prefix=X64<br>
+// RUN: %clang_cc1 %s -fexceptions -fseh-exceptions -emit-llvm -triple x86_64-w64-windows-gnu -o - | FileCheck %s --check-prefix=X64<br>
+// RUN: %clang_cc1 %s -fexceptions -fdwarf-exceptions -emit-llvm -triple i686-w64-windows-gnu -o - | FileCheck %s --check-prefix=X86<br>
 // RUN: %clang_cc1 %s -fexceptions -emit-llvm -triple i686-w64-windows-gnu -o - | FileCheck %s --check-prefix=X86<br>
<br>
 extern "C" void foo();<br>
<br>
Modified: cfe/trunk/test/Preprocessor/arm-target-features.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/arm-target-features.c?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/arm-target-features.c?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Preprocessor/arm-target-features.c (original)<br>
+++ cfe/trunk/test/Preprocessor/arm-target-features.c Tue Nov 28 23:25:12 2017<br>
@@ -214,6 +214,7 @@<br>
 // A5:#define __ARM_ARCH_7A__ 1<br>
 // A5-NOT:#define __ARM_ARCH_EXT_IDIV__<br>
 // A5:#define __ARM_ARCH_PROFILE 'A'<br>
+// A5-NOT:#define __ARM_DWARF_EH__ 1<br>
 // A5-NOT: #define __ARM_FEATURE_DIRECTED_ROUNDING<br>
 // A5:#define __ARM_FEATURE_DSP 1<br>
 // A5-NOT: #define __ARM_FEATURE_NUMERIC_MAXMIN<br>
@@ -225,6 +226,7 @@<br>
 // A7:#define __ARM_ARCH 7<br>
 // A7:#define __ARM_ARCH_EXT_IDIV__ 1<br>
 // A7:#define __ARM_ARCH_PROFILE 'A'<br>
+// A7-NOT:#define __ARM_DWARF_EH__ 1<br>
 // A7:#define __ARM_FEATURE_DSP 1<br>
 // A7:#define __ARM_FP 0xE<br>
<br>
<br>
Modified: cfe/trunk/test/Preprocessor/init.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=319297&r1=319296&r2=319297&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=319297&r1=319296&r2=319297&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Preprocessor/init.c (original)<br>
+++ cfe/trunk/test/Preprocessor/init.c Tue Nov 28 23:25:12 2017<br>
@@ -1442,6 +1442,7 @@<br>
 //<br>
 // ARM-MSVC: #define _M_ARM_NT 1<br>
 // ARM-MSVC: #define _WIN32 1<br>
+// ARM-MSVC-NOT:#define __ARM_DWARF_EH__ 1<br>
<br>
 // RUN: %clang_cc1 -E -dM -ffreestanding -triple=aarch64-windows-msvc < /dev/null | FileCheck -match-full-lines -check-prefix AARCH64-MSVC %s<br>
 //<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>
</blockquote></div></div>