[CodeCompletion] Fix an assertion violation. rdar://23306548

When creating a SequenceExpr, we should always have an odd number of
elements.
This commit is contained in:
Xi Ge
2015-12-09 11:57:03 -08:00
parent 840342b920
commit 2f670a8134
3 changed files with 13 additions and 0 deletions

View File

@@ -899,6 +899,7 @@ bool OverloadSetRefExpr::hasBaseObject() const {
}
SequenceExpr *SequenceExpr::create(ASTContext &ctx, ArrayRef<Expr*> elements) {
assert(elements.size() & 1 && "even number of elements in sequence");
void *Buffer = ctx.Allocate(sizeof(SequenceExpr) +
elements.size() * sizeof(Expr*),
alignof(SequenceExpr));

View File

@@ -291,6 +291,10 @@ parse_operator:
CodeCompletion->completeAssignmentRHS(assign);
}
consumeToken();
if (SequencedExprs.size() > 0 && (SequencedExprs.size() & 1) == 0) {
// Make sure we have odd number of sequence exprs.
SequencedExprs.pop_back();
}
auto Result = SequencedExprs.size() == 1 ?
makeParserResult(SequencedExprs[0]):
makeParserResult(SequenceExpr::create(Context, SequencedExprs));

View File

@@ -0,0 +1,8 @@
// RUN: %complete-test -tok=TOK1 -hide-none %s -- %s
import QuartzCore
class Cl{
var L : CALayer = {
let layer = CALayer()
layer.transform = #^TOK1^#