Skip to content

Commit 2f670a8

Browse files
committed
[CodeCompletion] Fix an assertion violation. rdar://23306548
When creating a SequenceExpr, we should always have an odd number of elements.
1 parent 840342b commit 2f670a8

File tree

3 files changed

+13
-0
lines changed

3 files changed

+13
-0
lines changed

lib/AST/Expr.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,7 @@ bool OverloadSetRefExpr::hasBaseObject() const {
899899
}
900900

901901
SequenceExpr *SequenceExpr::create(ASTContext &ctx, ArrayRef<Expr*> elements) {
902+
assert(elements.size() & 1 && "even number of elements in sequence");
902903
void *Buffer = ctx.Allocate(sizeof(SequenceExpr) +
903904
elements.size() * sizeof(Expr*),
904905
alignof(SequenceExpr));

lib/Parse/ParseExpr.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,10 @@ ParserResult<Expr> Parser::parseExprSequence(Diag<> Message,
291291
CodeCompletion->completeAssignmentRHS(assign);
292292
}
293293
consumeToken();
294+
if (SequencedExprs.size() > 0 && (SequencedExprs.size() & 1) == 0) {
295+
// Make sure we have odd number of sequence exprs.
296+
SequencedExprs.pop_back();
297+
}
294298
auto Result = SequencedExprs.size() == 1 ?
295299
makeParserResult(SequencedExprs[0]):
296300
makeParserResult(SequenceExpr::create(Context, SequencedExprs));
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// RUN: %complete-test -tok=TOK1 -hide-none %s -- %s
2+
3+
import QuartzCore
4+
5+
class Cl{
6+
var L : CALayer = {
7+
let layer = CALayer()
8+
layer.transform = #^TOK1^#

0 commit comments

Comments
 (0)