dotnet/roslyn

It looks like OverloadResolution.GetParameterType doesn't perform complete check before digging through param array

Open

#20,249 opened on Jun 15, 2017

View on GitHub
 (0 comments) (0 reactions) (0 assignees)C# (4,257 forks)batch import
Area-CompilersBugLanguage-C#help wanted

Repository metrics

Stars
 (20,414 stars)
PR merge metrics
 (Avg merge 6d 17h) (256 merged PRs in 30d)

Description

The check that the parameter is the last parameter is not performed, but I believe it should be see OverloadResolution.IsValidParams.

private static TypeSymbol GetParameterType(int argIndex, MemberAnalysisResult result, ImmutableArray<ParameterSymbol> parameters, out RefKind refKind)
        {
            int paramIndex = result.ParameterFromArgument(argIndex);
            ParameterSymbol parameter = parameters[paramIndex];
            refKind = parameter.RefKind;

            if (result.Kind == MemberResolutionKind.ApplicableInExpandedForm &&
                parameter.IsParams && parameter.Type.IsSZArray())
            {
                return ((ArrayTypeSymbol)parameter.Type).ElementType;
            }
            else
            {
                return parameter.Type;
            }
        }

Contributor guide