[PATCH] D37322: [Sema] Correct typos in LHS, RHS before building a binop expression.
Volodymyr Sapsai via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 30 18:19:18 PDT 2017
vsapsai created this revision.
Specifically, typo correction should be done before dispatching between
different kinds of binary operations like pseudo-object assignment,
overloaded binary operation, etc.
Without this change we hit an assertion
Assertion failed: (!LHSExpr->hasPlaceholderType(BuiltinType::PseudoObject)), function CheckAssignmentOperands
when in Objective-C we reference a property without `self` and there are
2 equally good typo correction candidates: ivar and a class name. In
this case LHS expression in `BuildBinOp` is
CXXDependentScopeMemberExpr
`-TypoExpr
and instead of handling Obj-C property assignment as pseudo-object
assignment, we call `CreateBuiltinBinOp` which corrects typo to
ObjCPropertyRefExpr '<pseudo-object type>'
`-ImplicitCastExpr
`-ObjCIvarRefExpr
`-ImplicitCastExpr
`-DeclRefExpr
but cannot handle pseudo-objects and asserts about it (indirectly,
through `CheckAssignmentOperands`).
There is no crash in Objective-C++ but I've added a test case because in
the fix we execute different paths for C and C++. I've also considered
removing typo correction from `CreateBuiltinBinOp` and it doesn't cause
any test failures. But I decided to keep it because `CreateBuiltinBinOp`
sometimes is called directly, not through `BuildBinOp`.
rdar://problem/33102722
https://reviews.llvm.org/D37322
Files:
clang/lib/Sema/SemaExpr.cpp
clang/test/SemaObjC/typo-correction.m
clang/test/SemaObjCXX/typo-correction.mm
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37322.113348.patch
Type: text/x-patch
Size: 4811 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170831/2d376556/attachment.bin>
More information about the cfe-commits
mailing list