Thanks! On 3 February 2017 at 22:34, Hans Wennborg <h...@chromium.org> wrote:
> Thanks! r294059. > > On Fri, Feb 3, 2017 at 2:29 PM, Richard Smith <richardsm...@google.com> > wrote: > > It looks like the only cases it should have any real impact on are those > > where we would previously miscompile/crash, so this seems OK to me to > merge > > to Clang 4. > > > > > > On 3 February 2017 at 13:45, Hans Wennborg <h...@chromium.org> wrote: > >> > >> IIUC, this isn't strictly fixing a regression from 3.9, but it looks > >> like a pretty small diff. > >> > >> Richard, what do you think? > >> > >> On Fri, Feb 3, 2017 at 6:37 AM, Alex L <arpha...@gmail.com> wrote: > >> > Hi Hans, > >> > > >> > Is there any chance we can merge this for 4.0? It fixed a nasty bug > >> > where > >> > clang didn't catch invalid ObjC++ code during semantic analysis which > >> > led to > >> > invalid object files or crashes in CodeGen. > >> > > >> > Cheers, > >> > Alex > >> > > >> > On 3 February 2017 at 14:22, Alex Lorenz via cfe-commits > >> > <cfe-commits@lists.llvm.org> wrote: > >> >> > >> >> Author: arphaman > >> >> Date: Fri Feb 3 08:22:33 2017 > >> >> New Revision: 294008 > >> >> > >> >> URL: http://llvm.org/viewvc/llvm-project?rev=294008&view=rev > >> >> Log: > >> >> [Sema][ObjC++] Typo correction should handle ivars and properties > >> >> > >> >> After r260016 and r260017 disabled typo correction for ivars and > >> >> properties > >> >> clang didn't report errors about unresolved identifier in the base of > >> >> ivar > >> >> and > >> >> property ref expressions. This meant that clang invoked CodeGen on > >> >> invalid > >> >> AST > >> >> which then caused a crash. > >> >> > >> >> This commit re-enables typo correction for ivars and properites, and > >> >> fixes > >> >> the > >> >> PR25113 & PR26486 (that were originally fixed in r260017 and r260016) > >> >> in a > >> >> different manner by transforming the Objective-C ivar reference > >> >> expression > >> >> with > >> >> 'IsFreeIvar' preserved. > >> >> > >> >> rdar://30310772 > >> >> > >> >> Modified: > >> >> cfe/trunk/lib/Sema/SemaExprCXX.cpp > >> >> cfe/trunk/lib/Sema/TreeTransform.h > >> >> cfe/trunk/test/SemaObjCXX/typo-correction.mm > >> >> > >> >> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp > >> >> URL: > >> >> > >> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ > SemaExprCXX.cpp?rev=294008&r1=294007&r2=294008&view=diff > >> >> > >> >> > >> >> ============================================================ > ================== > >> >> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original) > >> >> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Fri Feb 3 08:22:33 2017 > >> >> @@ -7250,14 +7250,6 @@ public: > >> >> > >> >> ExprResult TransformBlockExpr(BlockExpr *E) { return Owned(E); } > >> >> > >> >> - ExprResult TransformObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { > >> >> - return Owned(E); > >> >> - } > >> >> - > >> >> - ExprResult TransformObjCIvarRefExpr(ObjCIvarRefExpr *E) { > >> >> - return Owned(E); > >> >> - } > >> >> - > >> >> ExprResult Transform(Expr *E) { > >> >> ExprResult Res; > >> >> while (true) { > >> >> > >> >> Modified: cfe/trunk/lib/Sema/TreeTransform.h > >> >> URL: > >> >> > >> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ > TreeTransform.h?rev=294008&r1=294007&r2=294008&view=diff > >> >> > >> >> > >> >> ============================================================ > ================== > >> >> --- cfe/trunk/lib/Sema/TreeTransform.h (original) > >> >> +++ cfe/trunk/lib/Sema/TreeTransform.h Fri Feb 3 08:22:33 2017 > >> >> @@ -2982,16 +2982,17 @@ public: > >> >> ExprResult RebuildObjCIvarRefExpr(Expr *BaseArg, ObjCIvarDecl > *Ivar, > >> >> SourceLocation IvarLoc, > >> >> bool IsArrow, bool > >> >> IsFreeIvar) > >> >> { > >> >> - // FIXME: We lose track of the IsFreeIvar bit. > >> >> CXXScopeSpec SS; > >> >> DeclarationNameInfo NameInfo(Ivar->getDeclName(), IvarLoc); > >> >> - return getSema().BuildMemberReferenceExpr(BaseArg, > >> >> BaseArg->getType(), > >> >> - /*FIXME:*/IvarLoc, > >> >> IsArrow, > >> >> - SS, SourceLocation(), > >> >> - > >> >> /*FirstQualifierInScope=*/nullptr, > >> >> - NameInfo, > >> >> - > >> >> /*TemplateArgs=*/nullptr, > >> >> - /*S=*/nullptr); > >> >> + ExprResult Result = getSema().BuildMemberReferenceExpr( > >> >> + BaseArg, BaseArg->getType(), > >> >> + /*FIXME:*/ IvarLoc, IsArrow, SS, SourceLocation(), > >> >> + /*FirstQualifierInScope=*/nullptr, NameInfo, > >> >> + /*TemplateArgs=*/nullptr, > >> >> + /*S=*/nullptr); > >> >> + if (IsFreeIvar && Result.isUsable()) > >> >> + cast<ObjCIvarRefExpr>(Result.get())->setIsFreeIvar( > IsFreeIvar); > >> >> + return Result; > >> >> } > >> >> > >> >> /// \brief Build a new Objective-C property reference expression. > >> >> > >> >> Modified: cfe/trunk/test/SemaObjCXX/typo-correction.mm > >> >> URL: > >> >> > >> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > SemaObjCXX/typo-correction.mm?rev=294008&r1=294007&r2=294008&view=diff > >> >> > >> >> > >> >> ============================================================ > ================== > >> >> --- cfe/trunk/test/SemaObjCXX/typo-correction.mm (original) > >> >> +++ cfe/trunk/test/SemaObjCXX/typo-correction.mm Fri Feb 3 08:22:33 > >> >> 2017 > >> >> @@ -21,3 +21,18 @@ public: > >> >> self.m_prop2 = new ClassB(m_prop1); // expected-error {{use of > >> >> undeclared identifier 'm_prop1'; did you mean '_m_prop1'?}} > >> >> } > >> >> @end > >> >> + > >> >> +// rdar://30310772 > >> >> + > >> >> +@interface InvalidNameInIvarAndPropertyBase > >> >> +{ > >> >> +@public > >> >> + float _a; > >> >> +} > >> >> +@property float _b; > >> >> +@end > >> >> + > >> >> +void invalidNameInIvarAndPropertyBase() { > >> >> + float a = ((InvalidNameInIvarAndPropertyBase*)node)->_a; // > >> >> expected-error {{use of undeclared identifier 'node'}} > >> >> + float b = ((InvalidNameInIvarAndPropertyBase*)node)._b; // > >> >> expected-error {{use of undeclared identifier 'node'}} > >> >> +} > >> >> > >> >> > >> >> _______________________________________________ > >> >> 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