forked from OSchip/llvm-project
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. llvm-svn: 280289
This commit is contained in:
parent
0786d5b9e6
commit
e3ea001ec8
|
@ -235,7 +235,7 @@ bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {
|
|||
// 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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue