diff --git a/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs b/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs index 2ca4150db5114..35b2bc58b3301 100644 --- a/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs +++ b/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs @@ -1667,7 +1667,7 @@ private ImmutableArray LookupSymbolsInternal( TypeSymbol containingType = (TypeSymbol)container; foreach (MethodSymbol extensionMethod in lookupResult.Symbols) { - var reduced = extensionMethod.ReduceExtensionMethod(containingType, Compilation); + var reduced = extensionMethod.ReduceExtensionMethod(containingType, Compilation, discardUseSiteInfo: true); if ((object)reduced != null) { results.Add(reduced.GetPublicSymbol()); diff --git a/src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs index e359a98d68fa7..0db6182230402 100644 --- a/src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs @@ -738,7 +738,7 @@ public override TResult Accept(CSharpSymbolVisitor visitor) /// The compilation in which constraints should be checked. /// Should not be null, but if it is null we treat constraints as we would in the latest /// language version. - public MethodSymbol ReduceExtensionMethod(TypeSymbol receiverType, CSharpCompilation compilation) + public MethodSymbol ReduceExtensionMethod(TypeSymbol receiverType, CSharpCompilation compilation, bool discardUseSiteInfo = false) { if ((object)receiverType == null) { @@ -750,7 +750,7 @@ public MethodSymbol ReduceExtensionMethod(TypeSymbol receiverType, CSharpCompila return null; } - return ReducedExtensionMethodSymbol.Create(this, receiverType, compilation); + return ReducedExtensionMethodSymbol.Create(this, receiverType, compilation, discardUseSiteInfo); } /// diff --git a/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs index c59e90fd57611..ee6faafc48719 100644 --- a/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs @@ -34,13 +34,15 @@ internal sealed class ReducedExtensionMethodSymbol : MethodSymbol /// /// Compilation used to check constraints. /// The latest language version is assumed if this is null. - public static MethodSymbol Create(MethodSymbol method, TypeSymbol receiverType, CSharpCompilation compilation) + public static MethodSymbol Create(MethodSymbol method, TypeSymbol receiverType, CSharpCompilation compilation, bool discardUseSiteInfo = false) { Debug.Assert(method.IsExtensionMethod && method.MethodKind != MethodKind.ReducedExtension); Debug.Assert(method.ParameterCount > 0); Debug.Assert((object)receiverType != null); - var useSiteInfo = CompoundUseSiteInfo.DiscardedDependencies; + var useSiteInfo = discardUseSiteInfo + ? CompoundUseSiteInfo.Discarded + : CompoundUseSiteInfo.DiscardedDependencies; method = InferExtensionMethodTypeArguments(method, receiverType, compilation, ref useSiteInfo); if ((object)method == null) @@ -55,7 +57,7 @@ public static MethodSymbol Create(MethodSymbol method, TypeSymbol receiverType, return null; } - if (useSiteInfo.Diagnostics != null) + if (!discardUseSiteInfo && useSiteInfo.Diagnostics != null) { foreach (var diag in useSiteInfo.Diagnostics) {