-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Closed
Copy link
Labels
4 - In ReviewA fix for the issue is submitted for review.A fix for the issue is submitted for review.Area-CompilersFeature - Extension EverythingThe extension everything featureThe extension everything feature
Milestone
Description
Discussed in #80091
Originally posted by LeQuackers August 29, 2025
Hi,
I was converting over some classic extension methods to the new C# 14 extension members, but I ran into an issue were one of the methods throw a BadImageFormatException HResult 0x8007000B, which was really strange.
Here's a watered down version of the method that caused it:
- C#14 Extension Version: The .NET Lab compiler is throwing an exception, so something's probably not right.
- Classic Extension Version: Works fine.
Pretty sure this isn't intended, so I'm leaving it here.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
new[] { 1, 2, 3, 4, 5 }.AsQueryable().LeftJoin(
new[] { 2, 4 }.AsQueryable(),
x => x,
x => x,
(x, y) => new { x, y });
public static class Extensions
{
extension<TLeft>(IQueryable<TLeft> left)
{
public IQueryable<TResult> LeftJoin<TRight, TKey, TResult>(
IQueryable<TRight> right,
Expression<Func<TLeft, TKey>> leftKeySelector,
Expression<Func<TRight, TKey>> rightKeySelector,
Expression<Func<TLeft, TRight, TResult>> resultSelector)
{
_ = left
.GroupJoin(right, leftKeySelector, rightKeySelector, (left, right) => new { left, right })
.SelectMany(x => x.right.DefaultIfEmpty(), (x, right) => new { x.left, right });
return Array.Empty<TResult>().AsQueryable();
}
}
}Stack
System.InvalidOperationException: This program location is thought to be unreachable. File='/_/src/Compilers/CSharp/Portable/Lowering/BoundTreeToDifferentEnclosingContextRewriter.cs' Line=184
at Microsoft.CodeAnalysis.CSharp.BoundTreeToDifferentEnclosingContextRewriter.VisitPropertySymbol(PropertySymbol property)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodBodyRewriter.VisitPropertySymbol(PropertySymbol symbol)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.VisitPropertyAccess(BoundPropertyAccess node)
at Microsoft.CodeAnalysis.CSharp.BoundPropertyAccess.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.VisitExpressionOrPatternWithoutStackGuard(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionOrPatternWithStackGuard(Int32& recursionDepth, BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.DoVisitList[BoundExpression](ImmutableArray`1 list)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.VisitList[BoundExpression](ImmutableArray`1 list)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodReferenceRewriter.<VisitCall>g__visitArgumentsAndFinishRewrite|3_0(BoundTreeRewriter rewriter, BoundCall node, BoundExpression rewrittenReceiver)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodReferenceRewriter.VisitCall(BoundTreeRewriter rewriter, BoundCall node)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodBodyRewriter.VisitCall(BoundCall node)
at Microsoft.CodeAnalysis.CSharp.BoundCall.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.VisitExpressionOrPatternWithoutStackGuard(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionOrPatternWithStackGuard(Int32& recursionDepth, BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.VisitReturnStatement(BoundReturnStatement node)
at Microsoft.CodeAnalysis.CSharp.BoundReturnStatement.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.DoVisitList[BoundStatement](ImmutableArray`1 list)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.VisitList[BoundStatement](ImmutableArray`1 list)
at Microsoft.CodeAnalysis.CSharp.BoundTreeToDifferentEnclosingContextRewriter.VisitBlock(BoundBlock node, Boolean removeInstrumentation)
at Microsoft.CodeAnalysis.CSharp.BoundTreeToDifferentEnclosingContextRewriter.VisitBlock(BoundBlock node)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodBodyRewriter.VisitBlock(BoundBlock node)
at Microsoft.CodeAnalysis.CSharp.BoundBlock.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodBodyRewriter.VisitLambda(BoundLambda node)
at Microsoft.CodeAnalysis.CSharp.BoundLambda.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.VisitExpressionOrPatternWithoutStackGuard(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionOrPatternWithStackGuard(Int32& recursionDepth, BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeToDifferentEnclosingContextRewriter.VisitConversion(BoundConversion node)
at Microsoft.CodeAnalysis.CSharp.BoundConversion.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.VisitExpressionOrPatternWithoutStackGuard(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionOrPatternWithStackGuard(Int32& recursionDepth, BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.DoVisitList[BoundExpression](ImmutableArray`1 list)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.VisitList[BoundExpression](ImmutableArray`1 list)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodReferenceRewriter.<VisitCall>g__visitArgumentsAndFinishRewrite|3_0(BoundTreeRewriter rewriter, BoundCall node, BoundExpression rewrittenReceiver)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodReferenceRewriter.VisitCall(BoundTreeRewriter rewriter, BoundCall node)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodBodyRewriter.VisitCall(BoundCall node)
at Microsoft.CodeAnalysis.CSharp.BoundCall.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.VisitExpressionOrPatternWithoutStackGuard(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionOrPatternWithStackGuard(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionOrPatternWithStackGuard(Int32& recursionDepth, BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.VisitExpressionStatement(BoundExpressionStatement node)
at Microsoft.CodeAnalysis.CSharp.BoundExpressionStatement.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.VisitSequencePoint(BoundSequencePoint node)
at Microsoft.CodeAnalysis.CSharp.BoundSequencePoint.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.DoVisitList[BoundStatement](ImmutableArray`1 list)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.VisitList[BoundStatement](ImmutableArray`1 list)
at Microsoft.CodeAnalysis.CSharp.BoundTreeToDifferentEnclosingContextRewriter.VisitBlock(BoundBlock node, Boolean removeInstrumentation)
at Microsoft.CodeAnalysis.CSharp.BoundTreeToDifferentEnclosingContextRewriter.VisitBlock(BoundBlock node)
at Microsoft.CodeAnalysis.CSharp.ExtensionMethodBodyRewriter.VisitBlock(BoundBlock node)
at Microsoft.CodeAnalysis.CSharp.BoundBlock.Accept(BoundTreeVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.Visit(BoundNode node)
at Microsoft.CodeAnalysis.CSharp.MethodCompiler.LowerBodyOrInitializer(MethodSymbol method, SourceExtensionImplementationMethodSymbol extensionImplementationMethod, Int32 methodOrdinal, BoundStatement body, SynthesizedSubmissionFields previousSubmissionFields, TypeCompilationState compilationState, MethodInstrumentation instrumentation, DebugDocumentProvider debugDocumentProvider, ImmutableArray`1& codeCoverageSpans, BindingDiagnosticBag diagnostics, VariableSlotAllocator& lazyVariableSlotAllocator, ArrayBuilder`1 lambdaDebugInfoBuilder, ArrayBuilder`1 lambdaRuntimeRudeEditsBuilder, ArrayBuilder`1 closureDebugInfoBuilder, ArrayBuilder`1 stateMachineStateDebugInfoBuilder, StateMachineTypeSymbol& stateMachineTypeOpt)
at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileMethod(MethodSymbol methodSymbol, Int32 methodOrdinal, ProcessedFieldInitializers& processedInitializers, SynthesizedSubmissionFields previousSubmissionFields, TypeCompilationState compilationState)
at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(NamedTypeSymbol containingType)
at Microsoft.CodeAnalysis.CSharp.MethodCompiler.VisitNamedType(NamedTypeSymbol symbol, TypeCompilationState arg)
at Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol.Accept[TypeCompilationState,Object](CSharpSymbolVisitor`2 visitor, TypeCompilationState argument)
at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamespace(NamespaceSymbol symbol)
at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileMethodBodies(CSharpCompilation compilation, PEModuleBuilder moduleBeingBuiltOpt, Boolean emittingPdb, Boolean hasDeclarationErrors, Boolean emitMethodBodies, BindingDiagnosticBag diagnostics, Predicate`1 filterOpt, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CompileMethods(CommonPEModuleBuilder moduleBuilder, Boolean emittingPdb, DiagnosticBag diagnostics, Predicate`1 filterOpt, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream metadataPEStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, RebuildData rebuildData, CompilationTestData testData, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, Stream metadataPEStream, RebuildData rebuildData, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, Stream metadataPEStream, CancellationToken cancellationToken)
at DotNetLab.Compiler.<>c__DisplayClass16_0.<CompileNoCacheAsync>g__getEmitStream|15(CSharpCompilation compilation, ImmutableArray`1& diagnostics)
at DotNetLab.Compiler.<>c__DisplayClass16_0.<CompileNoCacheAsync>g__getPeFile|17(CSharpCompilation compilation, ImmutableArray`1& diagnostics)
at DotNetLab.Compiler.CompileNoCacheAsync(CompilationInput compilationInput, ImmutableDictionary`2 assemblies, ImmutableDictionary`2 builtInAssemblies, AssemblyLoadContext alc)
at DotNetLab.Compiler.CompileAsync(CompilationInput input, ImmutableDictionary`2 assemblies, ImmutableDictionary`2 builtInAssemblies, AssemblyLoadContext alc)
at DotNetLab.Lab.CompilerProxy.CompileAsync(CompilationInput input)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
4 - In ReviewA fix for the issue is submitted for review.A fix for the issue is submitted for review.Area-CompilersFeature - Extension EverythingThe extension everything featureThe extension everything feature