File tree Expand file tree Collapse file tree 3 files changed +31
-1
lines changed Expand file tree Collapse file tree 3 files changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -2759,7 +2759,8 @@ DestructureTupleToMatchPackExpansionParameter::create(
27592759
27602760bool AllowValueExpansionWithoutPackReferences::diagnose (
27612761 const Solution &solution, bool asNote) const {
2762- return false ;
2762+ ValuePackExpansionWithoutPackReferences failure (solution, getLocator ());
2763+ return failure.diagnose (asNote);
27632764}
27642765
27652766AllowValueExpansionWithoutPackReferences *
Original file line number Diff line number Diff line change @@ -3081,6 +3081,12 @@ namespace {
30813081 // pack expansion expression through the shape type variable.
30823082 SmallVector<ASTNode, 2 > expandedPacks;
30833083 expr->getExpandedPacks (expandedPacks);
3084+
3085+ if (expandedPacks.empty ()) {
3086+ (void )CS.recordFix (AllowValueExpansionWithoutPackReferences::create (
3087+ CS, CS.getConstraintLocator (expr)));
3088+ }
3089+
30843090 for (auto pack : expandedPacks) {
30853091 Type packType;
30863092 if (auto *elementExpr = getAsExpr<PackElementExpr>(pack)) {
Original file line number Diff line number Diff line change @@ -458,3 +458,26 @@ do {
458458 // expected-error@-1 {{pack reference 'each T' can only appear in pack expansion}}
459459 }
460460}
461+
462+ // rdar://107835215 - failed to produce a diagnostic for invalid pack expansion expression
463+ do {
464+ func test1( x: Int ) {
465+ repeat x
466+ // expected-error@-1:5 {{value pack expansion must contain at least one pack reference}}
467+ }
468+
469+ func test2< T: Numeric > ( _ x: T ) {
470+ repeat print( x * 2 )
471+ // expected-error@-1:5 {{value pack expansion must contain at least one pack reference}}
472+ }
473+
474+ struct S < T> {
475+ init ( _: T ) { }
476+ }
477+
478+ func test< each T > ( x: repeat each T , y: Int ) {
479+ func f< each A , each B > ( _: repeat each A , y: repeat each B ) { }
480+ f ( repeat each x, y: repeat [ S ( y) ] )
481+ // expected-error@-1:25 {{value pack expansion must contain at least one pack reference}}
482+ }
483+ }
You can’t perform that action at this time.
0 commit comments