Author: rsmith
Date: Fri Jan 17 15:01:18 2014
New Revision: 199512
URL: http://llvm.org/viewvc/llvm-project?rev=199512&view=rev
Log:
Don't allow 'this' within typedefs within classes that otherwise look like they
might be member function declarations. Patch by Harald van Dijk!
Modified:
cfe/trunk/lib/Parse/ParseDecl.cpp
cfe/trunk/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp
Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=199512&r1=199511&r2=199512&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Fri Jan 17 15:01:18 2014
@@ -5155,6 +5155,7 @@ void Parser::ParseFunctionDeclarator(Dec
// FIXME: currently, "static" case isn't handled correctly.
bool IsCXX11MemberFunction =
getLangOpts().CPlusPlus11 &&
+ D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
(D.getContext() == Declarator::MemberContext
? !D.getDeclSpec().isFriendSpecified()
: D.getContext() == Declarator::FileContext &&
Modified: cfe/trunk/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp?rev=199512&r1=199511&r2=199512&view=diff
==============================================================================
--- cfe/trunk/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp (original)
+++ cfe/trunk/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp Fri Jan 17
15:01:18 2014
@@ -6,6 +6,8 @@ struct S {
int arr[sizeof(this)]; // expected-error {{invalid use of 'this' outside of
a non-static member function}}
int sz = sizeof(this); // ok
+
+ typedef auto f() -> decltype(this); // expected-error {{invalid use of
'this' outside of a non-static member function}}
};
namespace CaptureThis {
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits