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(
2759
2759
2760
2760
bool AllowValueExpansionWithoutPackReferences::diagnose (
2761
2761
const Solution &solution, bool asNote) const {
2762
- return false ;
2762
+ ValuePackExpansionWithoutPackReferences failure (solution, getLocator ());
2763
+ return failure.diagnose (asNote);
2763
2764
}
2764
2765
2765
2766
AllowValueExpansionWithoutPackReferences *
Original file line number Diff line number Diff line change @@ -3081,6 +3081,12 @@ namespace {
3081
3081
// pack expansion expression through the shape type variable.
3082
3082
SmallVector<ASTNode, 2 > expandedPacks;
3083
3083
expr->getExpandedPacks (expandedPacks);
3084
+
3085
+ if (expandedPacks.empty ()) {
3086
+ (void )CS.recordFix (AllowValueExpansionWithoutPackReferences::create (
3087
+ CS, CS.getConstraintLocator (expr)));
3088
+ }
3089
+
3084
3090
for (auto pack : expandedPacks) {
3085
3091
Type packType;
3086
3092
if (auto *elementExpr = getAsExpr<PackElementExpr>(pack)) {
Original file line number Diff line number Diff line change @@ -458,3 +458,26 @@ do {
458
458
// expected-error@-1 {{pack reference 'each T' can only appear in pack expansion}}
459
459
}
460
460
}
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