Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main' into unifyFlavors
Browse files Browse the repository at this point in the history
  • Loading branch information
CyrusNajmabadi committed Jun 11, 2024
2 parents fc72d2e + f2705c0 commit 603e356
Show file tree
Hide file tree
Showing 24 changed files with 31 additions and 572 deletions.
18 changes: 0 additions & 18 deletions src/Compilers/CSharp/Portable/Binder/Binder_Expressions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6593,15 +6593,6 @@ protected BoundExpression BindClassCreationExpression(
ReportMemberNotSupportedByDynamicDispatch(node, finalApplicableCandidates[0], analyzedArguments.Arguments, diagnostics);
}

if (finalApplicableCandidates.Length != 1 &&
Compilation.LanguageVersion > LanguageVersion.CSharp12 && // The following check (while correct) is redundant otherwise
HasApplicableMemberWithPossiblyExpandedNonArrayParamsCollection(analyzedArguments.Arguments, finalApplicableCandidates))
{
Error(diagnostics,
ErrorCode.WRN_DynamicDispatchToParamsCollectionConstructor,
node);
}

var argArray = BuildArgumentsForDynamicInvocation(analyzedArguments, diagnostics);
var refKindsArray = analyzedArguments.RefKinds.ToImmutableOrNull();

Expand Down Expand Up @@ -9712,15 +9703,6 @@ private BoundExpression BindIndexerOrIndexedPropertyAccess(
ReportMemberNotSupportedByDynamicDispatch(syntax, finalApplicableCandidates[0], analyzedArguments.Arguments, diagnostics);
}

if (finalApplicableCandidates.Length != 1 &&
Compilation.LanguageVersion > LanguageVersion.CSharp12 && // The following check (while correct) is redundant otherwise
HasApplicableMemberWithPossiblyExpandedNonArrayParamsCollection(analyzedArguments.Arguments, finalApplicableCandidates))
{
Error(diagnostics,
ErrorCode.WRN_DynamicDispatchToParamsCollectionIndexer,
syntax);
}

overloadResolutionResult.Free();
return BindDynamicIndexer(syntax, receiver, analyzedArguments, finalApplicableCandidates.SelectAsArray(r => r.Member), diagnostics);
}
Expand Down
29 changes: 2 additions & 27 deletions src/Compilers/CSharp/Portable/Binder/Binder_Invocation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -668,22 +668,6 @@ private static bool HasApplicableConditionalMethod(ImmutableArray<MemberResoluti
return false;
}

private bool HasApplicableMemberWithPossiblyExpandedNonArrayParamsCollection<TMember>(ArrayBuilder<BoundExpression> arguments, ImmutableArray<MemberResolutionResult<TMember>> finalApplicableCandidates)
where TMember : Symbol
{
foreach (var candidate in finalApplicableCandidates)
{
if ((candidate.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm ||
IsAmbiguousDynamicParamsArgument(arguments, candidate, argumentSyntax: out _)) &&
!candidate.Member.GetParameters().Last().Type.IsSZArray())
{
return true;
}
}

return false;
}

private void ReportMemberNotSupportedByDynamicDispatch<TMember>(SyntaxNode syntax, MemberResolutionResult<TMember> candidate, ArrayBuilder<BoundExpression> arguments, BindingDiagnosticBag diagnostics)
where TMember : Symbol
{
Expand Down Expand Up @@ -838,7 +822,7 @@ private BoundExpression BindMethodGroupInvocation(
}
else
{
ReportDynamicInvocationWarnings(syntax, methodGroup, diagnostics, resolution, finalApplicableCandidates);
ReportDynamicInvocationWarnings(syntax, methodGroup, diagnostics, finalApplicableCandidates);

result = BindDynamicInvocation(syntax, methodGroup, resolution.AnalyzedArguments, finalApplicableCandidates.SelectAsArray(r => r.Member), diagnostics, queryClause);
}
Expand All @@ -860,23 +844,14 @@ private BoundExpression BindMethodGroupInvocation(
return result;
}

private void ReportDynamicInvocationWarnings(SyntaxNode syntax, BoundMethodGroup methodGroup, BindingDiagnosticBag diagnostics, MethodGroupResolution resolution, ImmutableArray<MemberResolutionResult<MethodSymbol>> finalApplicableCandidates)
private void ReportDynamicInvocationWarnings(SyntaxNode syntax, BoundMethodGroup methodGroup, BindingDiagnosticBag diagnostics, ImmutableArray<MemberResolutionResult<MethodSymbol>> finalApplicableCandidates)
{
if (HasApplicableConditionalMethod(finalApplicableCandidates))
{
// warning CS1974: The dynamically dispatched call to method 'Goo' may fail at runtime
// because one or more applicable overloads are conditional methods
Error(diagnostics, ErrorCode.WRN_DynamicDispatchToConditionalMethod, syntax, methodGroup.Name);
}

if (finalApplicableCandidates.Length != 1 &&
Compilation.LanguageVersion > LanguageVersion.CSharp12 && // The following check (while correct) is redundant otherwise
HasApplicableMemberWithPossiblyExpandedNonArrayParamsCollection(resolution.AnalyzedArguments.Arguments, finalApplicableCandidates))
{
Error(diagnostics,
ErrorCode.WRN_DynamicDispatchToParamsCollectionMethod,
syntax, methodGroup.Name);
}
}

private bool IsAmbiguousDynamicParamsArgument<TMethodOrPropertySymbol>(ArrayBuilder<BoundExpression> arguments, MemberResolutionResult<TMethodOrPropertySymbol> candidate, out SyntaxNode argumentSyntax)
Expand Down
18 changes: 0 additions & 18 deletions src/Compilers/CSharp/Portable/CSharpResources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -7860,24 +7860,6 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ
<data name="ERR_ParamsCollectionAmbiguousDynamicArgument" xml:space="preserve">
<value>Ambiguity between expanded and normal forms of non-array params collection parameter of '{0}', the only corresponding argument has the type 'dynamic'. Consider casting the dynamic argument.</value>
</data>
<data name="WRN_DynamicDispatchToParamsCollectionMethod" xml:space="preserve">
<value>One or more overloads of method '{0}' having non-array params collection parameter might be applicable only in expanded form which is not supported during dynamic dispatch.</value>
</data>
<data name="WRN_DynamicDispatchToParamsCollectionMethod_Title" xml:space="preserve">
<value>One or more overloads of method having non-array params collection parameter might be applicable only in expanded form which is not supported during dynamic dispatch.</value>
</data>
<data name="WRN_DynamicDispatchToParamsCollectionIndexer" xml:space="preserve">
<value>One or more indexer overloads having non-array params collection parameter might be applicable only in expanded form which is not supported during dynamic dispatch.</value>
</data>
<data name="WRN_DynamicDispatchToParamsCollectionIndexer_Title" xml:space="preserve">
<value>One or more indexer overloads having non-array params collection parameter might be applicable only in expanded form which is not supported during dynamic dispatch.</value>
</data>
<data name="WRN_DynamicDispatchToParamsCollectionConstructor" xml:space="preserve">
<value>One or more constructor overloads having non-array params collection parameter might be applicable only in expanded form which is not supported during dynamic dispatch.</value>
</data>
<data name="WRN_DynamicDispatchToParamsCollectionConstructor_Title" xml:space="preserve">
<value>One or more constructor overloads having non-array params collection parameter might be applicable only in expanded form which is not supported during dynamic dispatch.</value>
</data>
<data name="ERR_ParamsCollectionInfiniteChainOfConstructorCalls" xml:space="preserve">
<value>Creation of params collection '{0}' results in an infinite chain of invocation of constructor '{1}'.</value>
</data>
Expand Down
6 changes: 3 additions & 3 deletions src/Compilers/CSharp/Portable/Errors/ErrorCode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2290,9 +2290,9 @@ internal enum ErrorCode

ERR_DynamicDispatchToParamsCollection = 9218,
ERR_ParamsCollectionAmbiguousDynamicArgument = 9219,
WRN_DynamicDispatchToParamsCollectionMethod = 9220,
WRN_DynamicDispatchToParamsCollectionIndexer = 9221,
WRN_DynamicDispatchToParamsCollectionConstructor = 9222,
// available 9220,
// available 9221,
// available 9222,
ERR_ParamsCollectionInfiniteChainOfConstructorCalls = 9223,
ERR_ParamsMemberCannotBeLessVisibleThanDeclaringMember = 9224,
ERR_ParamsCollectionConstructorDoesntInitializeRequiredMember = 9225,
Expand Down
6 changes: 0 additions & 6 deletions src/Compilers/CSharp/Portable/Errors/ErrorFacts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -558,9 +558,6 @@ internal static int GetWarningLevel(ErrorCode code)
case ErrorCode.WRN_CollectionExpressionRefStructMayAllocate:
case ErrorCode.WRN_CollectionExpressionRefStructSpreadMayAllocate:
case ErrorCode.WRN_ConvertingLock:
case ErrorCode.WRN_DynamicDispatchToParamsCollectionMethod:
case ErrorCode.WRN_DynamicDispatchToParamsCollectionIndexer:
case ErrorCode.WRN_DynamicDispatchToParamsCollectionConstructor:
case ErrorCode.WRN_PartialPropertySignatureDifference:

return 1;
Expand Down Expand Up @@ -2423,9 +2420,6 @@ or ErrorCode.ERR_CollectionExpressionMissingAdd
or ErrorCode.WRN_ConvertingLock
or ErrorCode.ERR_DynamicDispatchToParamsCollection
or ErrorCode.ERR_ParamsCollectionAmbiguousDynamicArgument
or ErrorCode.WRN_DynamicDispatchToParamsCollectionMethod
or ErrorCode.WRN_DynamicDispatchToParamsCollectionIndexer
or ErrorCode.WRN_DynamicDispatchToParamsCollectionConstructor
or ErrorCode.ERR_ParamsCollectionInfiniteChainOfConstructorCalls
or ErrorCode.ERR_ParamsMemberCannotBeLessVisibleThanDeclaringMember
or ErrorCode.ERR_ParamsCollectionConstructorDoesntInitializeRequiredMember
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 0 additions & 30 deletions src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 0 additions & 30 deletions src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 603e356

Please sign in to comment.