<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Dec 4, 2014 at 4:01 PM, Nico Weber <span dir="ltr"><<a href="mailto:thakis@chromium.org" target="_blank">thakis@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">This doesn't look right. Isn't cc1 -fexceptions passed if either ObjC or C++ exceptions are enabled?</div></blockquote><div><br></div><div>Right, this change doesn't make sense to me; Clang's -cc1 interface has no compatibility goal with GCC's cc1plus, and we should only be defining __EXCEPTIONS if the *driver* has -fexceptions passed to it.</div><div><br></div><div>Perhaps the issue is that the driver should be forwarding -fexceptions to -fcxx-exceptions in more cases?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>As is, it looks like this breaks this lovely bit of code from breakpad in a .mm file:</div><div><br></div><div><div>#ifndef __EXCEPTIONS</div><div>// This file uses C++ try/catch (but shouldn't). Duplicate the macros from</div><div>// <c++/4.2.1/exception_defines.h> allowing this file to work properly with</div><div>// exceptions disabled even when other C++ libraries are used. #undef the try</div><div>// and catch macros first in case libstdc++ is in use and has already provided</div><div>// its own definitions.</div><div>#undef try</div><div>#define try       if (true)</div><div>#undef catch</div><div>#define catch(X)  if (false)</div><div>#endif  // __EXCEPTIONS</div><div><br></div></div><div>even though that file is built with an explicit -fno-exceptions. Repro:</div><div><br></div><div>$ bin/clang -fno-exceptions -x objective-c++ -dM /dev/null -E | grep EXCE<br></div><div><div>#define OBJC_ZEROCOST_EXCEPTIONS 1<br></div><div>#define __EXCEPTIONS 1</div></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 27, 2014 at 1:02 PM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: majnemer<br>
Date: Mon Oct 27 15:02:19 2014<br>
New Revision: 220714<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=220714&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=220714&view=rev</a><br>
Log:<br>
Frontend: Define __EXCEPTIONS if -fexceptions is passed<br>
<br>
GCC defines __EXCEPTIONS, regardless of language mode, if -fexceptions<br>
is passed.  We should do the same.<br>
<br>
This fixes PR21358.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Frontend/InitPreprocessor.cpp<br>
    cfe/trunk/test/Frontend/exceptions.c<br>
    cfe/trunk/test/Preprocessor/predefined-exceptions.m<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=220714&r1=220713&r2=220714&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=220714&r1=220713&r2=220714&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Mon Oct 27 15:02:19 2014<br>
@@ -550,7 +550,7 @@ static void InitializePredefinedMacros(c<br>
     Builder.defineMacro("__BLOCKS__");<br>
   }<br>
<br>
-  if (!LangOpts.MSVCCompat && LangOpts.CXXExceptions)<br>
+  if (!LangOpts.MSVCCompat && LangOpts.Exceptions)<br>
     Builder.defineMacro("__EXCEPTIONS");<br>
   if (!LangOpts.MSVCCompat && LangOpts.RTTI)<br>
     Builder.defineMacro("__GXX_RTTI");<br>
<br>
Modified: cfe/trunk/test/Frontend/exceptions.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/exceptions.c?rev=220714&r1=220713&r2=220714&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/exceptions.c?rev=220714&r1=220713&r2=220714&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Frontend/exceptions.c (original)<br>
+++ cfe/trunk/test/Frontend/exceptions.c Mon Oct 27 15:02:19 2014<br>
@@ -1,6 +1,9 @@<br>
-// RUN: %clang_cc1 -fms-compatibility -fexceptions -fcxx-exceptions -verify %s<br>
+// RUN: %clang_cc1 -fms-compatibility -fexceptions -fcxx-exceptions -DMS_MODE -verify %s<br>
 // expected-no-diagnostics<br>
<br>
-#if defined(__EXCEPTIONS)<br>
+// RUN: %clang_cc1 -fms-compatibility -fexceptions -verify %s<br>
+// expected-no-diagnostics<br>
+<br>
+#if defined(MS_MODE) && defined(__EXCEPTIONS)<br>
 #error __EXCEPTIONS should not be defined.<br>
 #endif<br>
<br>
Modified: cfe/trunk/test/Preprocessor/predefined-exceptions.m<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/predefined-exceptions.m?rev=220714&r1=220713&r2=220714&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/predefined-exceptions.m?rev=220714&r1=220713&r2=220714&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Preprocessor/predefined-exceptions.m (original)<br>
+++ cfe/trunk/test/Preprocessor/predefined-exceptions.m Mon Oct 27 15:02:19 2014<br>
@@ -1,6 +1,6 @@<br>
 // RUN: %clang_cc1 -x objective-c -fobjc-exceptions -fexceptions -E -dM %s | FileCheck -check-prefix=CHECK-OBJC-NOCXX %s<br>
 // CHECK-OBJC-NOCXX: #define OBJC_ZEROCOST_EXCEPTIONS 1<br>
-// CHECK-OBJC-NOCXX-NOT: #define __EXCEPTIONS 1<br>
+// CHECK-OBJC-NOCXX: #define __EXCEPTIONS 1<br>
<br>
 // RUN: %clang_cc1 -x objective-c++ -fobjc-exceptions -fexceptions -fcxx-exceptions -E -dM %s | FileCheck -check-prefix=CHECK-OBJC-CXX %s<br>
 // CHECK-OBJC-CXX: #define OBJC_ZEROCOST_EXCEPTIONS 1<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>