From 30c5436856b33e15387ec7a14bcd10c49236e340 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Mon, 3 Nov 2008 22:47:57 +0000 Subject: [PATCH] Check that this cannot be used in a default argument. Happily, it was already implemented git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58649 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclCXX.cpp | 9 +++++++-- test/SemaCXX/default2.cpp | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 9c1e4a949f..4a2f0b43f6 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -84,8 +84,13 @@ namespace { VDecl->getName(), DefaultArg->getSourceRange()); } - // FIXME: when Clang has support for member functions, "this" - // will also need to be diagnosed. + // C++ [dcl.fct.default]p8: + // The keyword this shall not be used in a default argument of a + // member function. + // Note: this requirement is already diagnosed by + // Sema::ActOnCXXThis, because the use of "this" inside a default + // argument doesn't occur inside the body of a non-static member + // function. return false; } diff --git a/test/SemaCXX/default2.cpp b/test/SemaCXX/default2.cpp index d3e999c34c..89eb4671d9 100644 --- a/test/SemaCXX/default2.cpp +++ b/test/SemaCXX/default2.cpp @@ -36,3 +36,7 @@ void nondecl(int (*f)(int x = 5)) // {expected-error {{default arguments can onl void (*f2)(int = 17) // {expected-error {{default arguments can only be specified}}} = (void (*)(int = 42))f; // {expected-error {{default arguments can only be specified}}} } + +class X { + void f(X* x = this); // expected-error{{invalid use of 'this' outside of a nonstatic member function}} +}; -- 2.50.1