]> granicus.if.org Git - clang/commitdiff
Remove -Wc++98-compat warning for an outrageously-rare circumstance of 'this'
authorRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 30 Apr 2012 23:33:33 +0000 (23:33 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 30 Apr 2012 23:33:33 +0000 (23:33 +0000)
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

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaExprCXX.cpp
test/SemaCXX/cxx98-compat.cpp
test/SemaCXX/warn-thread-safety-analysis.cpp

index 53fb9ec952d165b427e7188038810f88ef5693f8..141bd4cc443ad5bf43c358b387b3347169db2c5a 100644 (file)
@@ -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<CXX98Compat>, DefaultIgnore;
 def err_invalid_qualified_function_type : Error<
   "%select{static |non-}0member function %select{of type %2 |}1"
   "cannot have '%3' qualifier">;
index 7d345073d792c8446d915a4058423a7dd7413e74..af0f971c1ca3f50d882d49d5c9a9b00893a01298 100644 (file)
@@ -693,10 +693,6 @@ Sema::CXXThisScopeRAII::~CXXThisScopeRAII() {
 }
 
 void Sema::CheckCXXThisCapture(SourceLocation Loc, bool Explicit) {
-  if (getLangOpts().CPlusPlus0x &&
-      !dyn_cast_or_null<CXXMethodDecl>(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;
index cd3ffed54667cb6d36ac4e91f68ea780717a2172..b9a8a1c65e707f1c0aa329725866c6a59dff656f 100644 (file)
@@ -328,16 +328,6 @@ namespace NonTypeTemplateArgs {
   S<void(&)(), f> s2; // expected-warning {{non-type template argument referring to function 'f' with internal linkage is incompatible with C++98}}
 }
 
-namespace ThisInExceptionSpec {
-  template<int> struct T {};
-  struct S {
-    int n;
-    void f() throw (T<sizeof(n)>); // expected-warning {{use of 'this' outside a non-static member function is incompatible with C++98}}
-    void g() throw (T<sizeof(S::n)>); // expected-warning {{use of 'this' outside a non-static member function is incompatible with C++98}}
-    void h() throw (T<sizeof(this)>); // expected-warning {{use of 'this' outside a non-static member function is incompatible with C++98}}
-  };
-}
-
 namespace NullPointerTemplateArg {
   struct A {};
   template<int*> struct X {};
index 566e5c1b843bb6af9b516c4fd54a31659e2148f6..47d844d00337c077c0a24a6c20de1fbd7e6ed826 100644 (file)
@@ -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))