Merged in r292313. Thanks, Hans
On Tue, Jan 17, 2017 at 8:56 AM, Argyrios Kyrtzidis <akyr...@gmail.com> wrote: > Hi Hans, > > Could this go into the stable branch ? > > On Sat, Jan 14, 2017 at 10:11 PM, Argyrios Kyrtzidis via cfe-commits > <cfe-commits@lists.llvm.org> wrote: >> >> Author: akirtzidis >> Date: Sun Jan 15 00:11:04 2017 >> New Revision: 292052 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=292052&view=rev >> Log: >> [code-completion] Fix crash when trying to do postfix completion of >> instance member inside a static function. >> >> Modified: >> cfe/trunk/lib/Parse/ParseExpr.cpp >> cfe/trunk/test/CodeCompletion/member-access.cpp >> >> Modified: cfe/trunk/lib/Parse/ParseExpr.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseExpr.cpp?rev=292052&r1=292051&r2=292052&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Parse/ParseExpr.cpp (original) >> +++ cfe/trunk/lib/Parse/ParseExpr.cpp Sun Jan 15 00:11:04 2017 >> @@ -1652,9 +1652,10 @@ Parser::ParsePostfixExpressionSuffix(Exp >> >> if (Tok.is(tok::code_completion)) { >> // Code completion for a member access expression. >> - Actions.CodeCompleteMemberReferenceExpr( >> - getCurScope(), LHS.get(), OpLoc, OpKind == tok::arrow, >> - ExprStatementTokLoc == LHS.get()->getLocStart()); >> + if (Expr *Base = LHS.get()) >> + Actions.CodeCompleteMemberReferenceExpr( >> + getCurScope(), Base, OpLoc, OpKind == tok::arrow, >> + ExprStatementTokLoc == Base->getLocStart()); >> >> cutOffParsing(); >> return ExprError(); >> >> Modified: cfe/trunk/test/CodeCompletion/member-access.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/member-access.cpp?rev=292052&r1=292051&r2=292052&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/CodeCompletion/member-access.cpp (original) >> +++ cfe/trunk/test/CodeCompletion/member-access.cpp Sun Jan 15 00:11:04 >> 2017 >> @@ -27,6 +27,16 @@ public: >> >> void test(const Proxy &p) { >> p-> >> +} >> + >> +struct Test1 { >> + Base1 b; >> + >> + static void sfunc() { >> + b. // expected-error {{invalid use of member 'b' in static member >> function}} >> + } >> +}; >> + >> // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:29:6 %s -o - | >> FileCheck -check-prefix=CHECK-CC1 %s >> // CHECK-CC1: Base1 : Base1:: >> // CHECK-CC1: member1 : [#int#][#Base1::#]member1 >> @@ -39,4 +49,6 @@ void test(const Proxy &p) { >> // CHECK-CC1: memfun1 (Hidden) : [#void#]Base2::memfun1(<#int#>) >> // CHECK-CC1: memfun2 : [#void#][#Base3::#]memfun2(<#int#>) >> // CHECK-CC1: memfun3 : [#int#]memfun3(<#int#>) >> - >> + >> +// Make sure this doesn't crash >> +// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:36:7 %s -verify >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits