From: Chris Lattner Date: Mon, 12 Apr 2010 06:20:33 +0000 (+0000) Subject: fix a rejects-valid testcase involving super that I dreamt up. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=236beabc78c2998dbd0e45d952a3ca16f23134c7;p=clang fix a rejects-valid testcase involving super that I dreamt up. This also fixes cases where super is used in a block in a method which isn't valid. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101021 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp index ad422642e4..a29ea81f76 100644 --- a/lib/Parse/ParseExpr.cpp +++ b/lib/Parse/ParseExpr.cpp @@ -639,7 +639,9 @@ Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression, // Support 'Class.property' and 'super.property' notation. if (getLang().ObjC1 && Tok.is(tok::period) && - (Actions.getTypeName(II, ILoc, CurScope) || II.isStr("super"))) { + (Actions.getTypeName(II, ILoc, CurScope) || + // Allow the base to be 'super' if in an objc-method. + (II.isStr("super") && CurScope->isInObjcMethodScope()))) { SourceLocation DotLoc = ConsumeToken(); if (Tok.isNot(tok::identifier)) { diff --git a/test/SemaObjC/super.m b/test/SemaObjC/super.m index bae92cbdff..0c072e9194 100644 --- a/test/SemaObjC/super.m +++ b/test/SemaObjC/super.m @@ -49,3 +49,12 @@ void test() { [FooTD cMethod]; [super cMethod]; } + +struct SomeStruct { + int X; +}; + +int test2() { + struct SomeStruct super = { 0 }; + return super.X; +}