@@ -394,7 +394,7 @@ TupleTypeRepr::TupleTypeRepr(ArrayRef<TypeRepr *> Elements, SourceRange Parens,
394394 ArrayRef<SourceLoc> underscoreLocs,
395395 SourceLoc Ellipsis, unsigned EllipsisIdx)
396396 : TypeRepr(TypeReprKind::Tuple), NumElements(Elements.size()),
397- Parens(Parens), Ellipsis (Ellipsis), EllipsisIdx(EllipsisIdx ) {
397+ Parens(Parens), HasEllipsis (Ellipsis.isValid() ) {
398398
399399 NameStatus = ElementNames.empty () ? NotNamed
400400 : underscoreLocs.empty () ? HasNames : HasLabels;
@@ -415,6 +415,10 @@ TupleTypeRepr::TupleTypeRepr(ArrayRef<TypeRepr *> Elements, SourceRange Parens,
415415 std::uninitialized_copy (underscoreLocs.begin (), underscoreLocs.end (),
416416 getTrailingObjects<SourceLoc>() +
417417 ElementNameLocs.size ());
418+
419+ // Set ellipsis location and index.
420+ if (Ellipsis.isValid ())
421+ getTrailingObjects<SourceLocAndIdx>()[0 ] = {Ellipsis, EllipsisIdx};
418422}
419423
420424TupleTypeRepr *TupleTypeRepr::create (const ASTContext &C,
@@ -432,10 +436,12 @@ TupleTypeRepr *TupleTypeRepr::create(const ASTContext &C,
432436 assert (Ellipsis.isValid () ? EllipsisIdx < Elements.size ()
433437 : EllipsisIdx == Elements.size ());
434438
435- size_t size = totalSizeToAlloc<TypeRepr *, Identifier, SourceLoc>(
439+ size_t size =
440+ totalSizeToAlloc<TypeRepr *, Identifier, SourceLoc, SourceLocAndIdx>(
436441 Elements.size (),
437442 ElementNames.size (),
438- ElementNameLocs.size () + underscoreLocs.size ());
443+ ElementNameLocs.size () + underscoreLocs.size (),
444+ Ellipsis.isValid () ? 1 : 0 );
439445 void *mem = C.Allocate (size, alignof (TupleTypeRepr));
440446 return new (mem) TupleTypeRepr (Elements, Parens, ElementNames,
441447 ElementNameLocs, underscoreLocs,
0 commit comments