@@ -3694,15 +3694,14 @@ Expr *ExprRewriter::coerceTupleToTuple(Expr *expr, TupleType *fromTuple,
3694
3694
// If we're default-initializing this member, there's nothing to do.
3695
3695
if (sources[i] == TupleShuffleExpr::DefaultInitialize) {
3696
3696
// Dig out the owner of the default arguments.
3697
+ ConcreteDeclRef argOwner;
3697
3698
if (!defaultArgsOwner) {
3698
- defaultArgsOwner
3699
+ argOwner
3699
3700
= findDefaultArgsOwner (cs, solution,
3700
3701
cs.getConstraintLocator (locator));
3701
- assert (defaultArgsOwner && " Missing default arguments owner?" );
3702
+ assert (argOwner && " Missing default arguments owner?" );
3702
3703
} else {
3703
- assert (findDefaultArgsOwner (cs, solution,
3704
- cs.getConstraintLocator (locator))
3705
- == defaultArgsOwner);
3704
+ argOwner = defaultArgsOwner;
3706
3705
}
3707
3706
3708
3707
anythingShuffled = true ;
@@ -3711,10 +3710,16 @@ Expr *ExprRewriter::coerceTupleToTuple(Expr *expr, TupleType *fromTuple,
3711
3710
3712
3711
// Create a caller-side default argument, if we need one.
3713
3712
if (auto defArg = getCallerDefaultArg (tc, dc, expr->getLoc (),
3714
- defaultArgsOwner , i).first ) {
3713
+ argOwner , i).first ) {
3715
3714
callerDefaultArgs.push_back (defArg);
3716
3715
sources[i] = TupleShuffleExpr::CallerDefaultInitialize;
3717
3716
}
3717
+ if (!defaultArgsOwner) {
3718
+ defaultArgsOwner = argOwner;
3719
+ } else {
3720
+ assert (defaultArgsOwner == argOwner &&
3721
+ " default args on same func have different owners" );
3722
+ }
3718
3723
continue ;
3719
3724
}
3720
3725
@@ -3956,21 +3961,20 @@ Expr *ExprRewriter::coerceScalarToTuple(Expr *expr, TupleType *toTuple,
3956
3961
3957
3962
assert (field.hasInit () && " Expected a default argument" );
3958
3963
3964
+ ConcreteDeclRef argOwner;
3959
3965
// Dig out the owner of the default arguments.
3960
3966
if (!defaultArgsOwner) {
3961
- defaultArgsOwner
3967
+ argOwner
3962
3968
= findDefaultArgsOwner (cs, solution,
3963
3969
cs.getConstraintLocator (locator));
3964
- assert (defaultArgsOwner && " Missing default arguments owner?" );
3970
+ assert (argOwner && " Missing default arguments owner?" );
3965
3971
} else {
3966
- assert (findDefaultArgsOwner (cs, solution,
3967
- cs.getConstraintLocator (locator))
3968
- == defaultArgsOwner);
3972
+ argOwner = defaultArgsOwner;
3969
3973
}
3970
3974
3971
3975
// Create a caller-side default argument, if we need one.
3972
3976
if (auto defArg = getCallerDefaultArg (tc, dc, expr->getLoc (),
3973
- defaultArgsOwner , i).first ) {
3977
+ argOwner , i).first ) {
3974
3978
// Record the caller-side default argument expression.
3975
3979
// FIXME: Do we need to record what this was synthesized from?
3976
3980
elements.push_back (TupleShuffleExpr::CallerDefaultInitialize);
@@ -3979,6 +3983,12 @@ Expr *ExprRewriter::coerceScalarToTuple(Expr *expr, TupleType *toTuple,
3979
3983
// Record the owner of the default argument.
3980
3984
elements.push_back (TupleShuffleExpr::DefaultInitialize);
3981
3985
}
3986
+ if (!defaultArgsOwner) {
3987
+ defaultArgsOwner = argOwner;
3988
+ } else {
3989
+ assert (defaultArgsOwner == argOwner &&
3990
+ " default args on same func have different owners" );
3991
+ }
3982
3992
3983
3993
++i;
3984
3994
}
@@ -4309,23 +4319,21 @@ Expr *ExprRewriter::coerceCallArguments(Expr *arg, Type paramType,
4309
4319
// If we are using a default argument, handle it now.
4310
4320
if (parameterBindings[paramIdx].empty ()) {
4311
4321
// Dig out the owner of the default arguments.
4322
+ ConcreteDeclRef argOwner;
4312
4323
if (!defaultArgsOwner) {
4313
- defaultArgsOwner
4324
+ argOwner
4314
4325
= findDefaultArgsOwner (cs, solution,
4315
4326
cs.getConstraintLocator (locator));
4316
- assert (defaultArgsOwner && " Missing default arguments owner?" );
4327
+ assert (argOwner && " Missing default arguments owner?" );
4317
4328
} else {
4318
- assert (findDefaultArgsOwner (cs, solution,
4319
- cs.getConstraintLocator (locator))
4320
- == defaultArgsOwner);
4329
+ argOwner = defaultArgsOwner;
4321
4330
}
4322
4331
4323
4332
// Create a caller-side default argument, if we need one.
4324
4333
Expr *defArg;
4325
4334
DefaultArgumentKind defArgKind;
4326
4335
std::tie (defArg, defArgKind) = getCallerDefaultArg (tc, dc, arg->getLoc (),
4327
- defaultArgsOwner,
4328
- paramIdx);
4336
+ argOwner, paramIdx);
4329
4337
4330
4338
// Note that we'll be doing a shuffle involving default arguments.
4331
4339
anythingShuffled = true ;
@@ -4344,6 +4352,12 @@ Expr *ExprRewriter::coerceCallArguments(Expr *arg, Type paramType,
4344
4352
} else {
4345
4353
sources.push_back (TupleShuffleExpr::DefaultInitialize);
4346
4354
}
4355
+ if (!defaultArgsOwner) {
4356
+ defaultArgsOwner = argOwner;
4357
+ } else {
4358
+ assert (defaultArgsOwner == argOwner &&
4359
+ " default args on same func have different owners" );
4360
+ }
4347
4361
continue ;
4348
4362
}
4349
4363
0 commit comments