Author: rsmith
Date: Wed Aug 31 15:38:32 2016
New Revision: 280289

URL: http://llvm.org/viewvc/llvm-project?rev=280289&view=rev
Log:
Don't diagnoes a mismatch between implicit and explicit exception
specifications under -fno-exceptions, just as we don't diagnose other exception
specification mismatch errors.

Modified:
    cfe/trunk/lib/Sema/SemaExceptionSpec.cpp
    cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2-noexceptions.cpp
    cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2.cpp

Modified: cfe/trunk/lib/Sema/SemaExceptionSpec.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExceptionSpec.cpp?rev=280289&r1=280288&r2=280289&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExceptionSpec.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExceptionSpec.cpp Wed Aug 31 15:38:32 2016
@@ -235,7 +235,7 @@ bool Sema::CheckEquivalentExceptionSpec(
     //   If a declaration of a function has an implicit
     //   exception-specification, other declarations of the function shall
     //   not specify an exception-specification.
-    if (getLangOpts().CPlusPlus11 &&
+    if (getLangOpts().CPlusPlus11 && getLangOpts().CXXExceptions &&
         hasImplicitExceptionSpec(Old) != hasImplicitExceptionSpec(New)) {
       Diag(New->getLocation(), diag::ext_implicit_exception_spec_mismatch)
         << hasImplicitExceptionSpec(Old);

Modified: 
cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2-noexceptions.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2-noexceptions.cpp?rev=280289&r1=280288&r2=280289&view=diff
==============================================================================
--- cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2-noexceptions.cpp 
(original)
+++ cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2-noexceptions.cpp 
Wed Aug 31 15:38:32 2016
@@ -1,3 +1,5 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
 // RUN: %clang_cc1 -fsyntax-only -verify %s
 // expected-no-diagnostics
 namespace std {

Modified: cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2.cpp?rev=280289&r1=280288&r2=280289&view=diff
==============================================================================
--- cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2.cpp (original)
+++ cfe/trunk/test/CXX/basic/basic.stc/basic.stc.dynamic/p2.cpp Wed Aug 31 
15:38:32 2016
@@ -1,3 +1,5 @@
+// RUN: %clang_cc1 -fsyntax-only -fexceptions -fcxx-exceptions -verify 
-std=c++98 %s
+// RUN: %clang_cc1 -fsyntax-only -fexceptions -fcxx-exceptions -verify 
-std=c++11 %s
 // RUN: %clang_cc1 -fsyntax-only -fexceptions -fcxx-exceptions -verify %s
 int *use_new(int N) {
   if (N == 1)
@@ -19,10 +21,21 @@ namespace std {
   typedef __SIZE_TYPE__ size_t;
 }
 
-void* operator new(std::size_t) throw(std::bad_alloc); // 
expected-note{{previous declaration}}
+void* operator new(std::size_t) throw(std::bad_alloc);
+#if __cplusplus < 201103L
+// expected-note@-2 {{previous declaration}}
+#endif
 void* operator new[](std::size_t) throw(std::bad_alloc); 
 void operator delete(void*) throw(); // expected-note{{previous declaration}}
 void operator delete[](void*) throw();
 
-void* operator new(std::size_t); // expected-warning{{'operator new' is 
missing exception specification 'throw(std::bad_alloc)'}}
-void operator delete(void*); // expected-warning{{'operator delete' is missing 
exception specification 'throw()'}}
+void* operator new(std::size_t);
+#if __cplusplus < 201103L
+// expected-warning@-2 {{'operator new' is missing exception specification 
'throw(std::bad_alloc)'}}
+#endif
+void operator delete(void*);
+#if __cplusplus < 201103L
+// expected-warning@-2 {{'operator delete' is missing exception specification 
'throw()'}}
+#else
+// expected-warning@-4 {{previously declared with an explicit exception 
specification redeclared with an implicit}}
+#endif


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to