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