From: Richard Smith Date: Mon, 30 Apr 2012 23:33:33 +0000 (+0000) Subject: Remove -Wc++98-compat warning for an outrageously-rare circumstance of 'this' X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=aa5498649c7ad1b61e5da2497e8c60c924ac5e55;p=clang Remove -Wc++98-compat warning for an outrageously-rare circumstance of 'this' being used in an exception specification in a way which isn't otherwise ill-formed in C++98: this warning also incorrectly triggered on uses of 'this' inside thread-safety attributes, and the mechanism required to tell these cases apart is more complex than can be justified by the (minimal) value of this part of -Wc++98-compat. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155857 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 53fb9ec952..141bd4cc44 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -3849,9 +3849,6 @@ def err_this_static_member_func : Error< "declaration">; def err_invalid_member_use_in_static_method : Error< "invalid use of member %0 in static member function">; -def warn_cxx98_compat_this_outside_method : Warning< - "use of 'this' outside a non-static member function is incompatible " - "with C++98">, InGroup, DefaultIgnore; def err_invalid_qualified_function_type : Error< "%select{static |non-}0member function %select{of type %2 |}1" "cannot have '%3' qualifier">; diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 7d345073d7..af0f971c1c 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -693,10 +693,6 @@ Sema::CXXThisScopeRAII::~CXXThisScopeRAII() { } void Sema::CheckCXXThisCapture(SourceLocation Loc, bool Explicit) { - if (getLangOpts().CPlusPlus0x && - !dyn_cast_or_null(getFunctionLevelDeclContext())) - Diag(Loc, diag::warn_cxx98_compat_this_outside_method); - // We don't need to capture this in an unevaluated context. if (ExprEvalContexts.back().Context == Unevaluated && !Explicit) return; diff --git a/test/SemaCXX/cxx98-compat.cpp b/test/SemaCXX/cxx98-compat.cpp index cd3ffed546..b9a8a1c65e 100644 --- a/test/SemaCXX/cxx98-compat.cpp +++ b/test/SemaCXX/cxx98-compat.cpp @@ -328,16 +328,6 @@ namespace NonTypeTemplateArgs { S s2; // expected-warning {{non-type template argument referring to function 'f' with internal linkage is incompatible with C++98}} } -namespace ThisInExceptionSpec { - template struct T {}; - struct S { - int n; - void f() throw (T); // expected-warning {{use of 'this' outside a non-static member function is incompatible with C++98}} - void g() throw (T); // expected-warning {{use of 'this' outside a non-static member function is incompatible with C++98}} - void h() throw (T); // expected-warning {{use of 'this' outside a non-static member function is incompatible with C++98}} - }; -} - namespace NullPointerTemplateArg { struct A {}; template struct X {}; diff --git a/test/SemaCXX/warn-thread-safety-analysis.cpp b/test/SemaCXX/warn-thread-safety-analysis.cpp index 566e5c1b84..47d844d003 100644 --- a/test/SemaCXX/warn-thread-safety-analysis.cpp +++ b/test/SemaCXX/warn-thread-safety-analysis.cpp @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -verify -Wthread-safety %s +// RUN: %clang_cc1 -fsyntax-only -verify -Wthread-safety -std=c++11 -Wc++98-compat %s #define LOCKABLE __attribute__ ((lockable)) #define SCOPED_LOCKABLE __attribute__ ((scoped_lockable))