diff --git a/src/Compilers/CSharp/Portable/Lowering/ExtensionMethodReferenceRewriter.cs b/src/Compilers/CSharp/Portable/Lowering/ExtensionMethodReferenceRewriter.cs index df8f863cd8639..170b95e3af901 100644 --- a/src/Compilers/CSharp/Portable/Lowering/ExtensionMethodReferenceRewriter.cs +++ b/src/Compilers/CSharp/Portable/Lowering/ExtensionMethodReferenceRewriter.cs @@ -239,10 +239,18 @@ public static BoundNode VisitFunctionPointerLoad(BoundTreeRewriter rewriter, Bou // Local rewriter should have already rewritten interpolated strings into their final form of calls and gotos Debug.Assert(node.InterpolatedStringHandlerData is null); + MethodSymbol? method = VisitMethodSymbolWithExtensionRewrite(rewriter, node.Method); + TypeSymbol? constrainedToType = rewriter.VisitType(node.ConstrainedToType); + + if (Symbol.Equals(method, node.Method, TypeCompareKind.AllIgnoreOptions) && TypeSymbol.Equals(constrainedToType, node.ConstrainedToType, TypeCompareKind.AllIgnoreOptions)) + { + return node.Data; + } + return BoundBinaryOperator.UncommonData.CreateIfNeeded( node.ConstantValueOpt, - VisitMethodSymbolWithExtensionRewrite(rewriter, node.Method), - rewriter.VisitType(node.ConstrainedToType), + method, + constrainedToType, node.OriginalUserDefinedOperatorsOpt); }