Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compilation with module initializer fails #56572

Closed
aelij opened this issue Sep 21, 2021 · 2 comments
Closed

Compilation with module initializer fails #56572

aelij opened this issue Sep 21, 2021 · 2 comments
Labels
Area-Compilers Resolution-Duplicate The described behavior is tracked in another issue untriaged Issues and PRs which have not yet been triaged by a lead

Comments

@aelij
Copy link
Contributor

aelij commented Sep 21, 2021

Version Used: 4.0.0-4.final, .NET 5.0.10

Steps to Reproduce:

using System;
using System.IO;
using System.Linq;
using System.Runtime.Loader;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;

const string ModuleInit = @"
            internal static class ModuleInitializer
            {
                [System.Runtime.CompilerServices.ModuleInitializer]
                internal static void Initialize() =>
                    System.Console.WriteLine(2);
            }
        ";

const string Code = "System.Console.WriteLine(1);";

var compilation = CSharpCompilation.Create(
    "test",
    new[]
    {
        SyntaxFactory.ParseSyntaxTree(ModuleInit),
        SyntaxFactory.ParseSyntaxTree(Code)
    },
    references: AssemblyLoadContext.Default.Assemblies
        .Where(a => a.FullName.Contains("System"))
        .Select(a => MetadataReference.CreateFromFile(a.Location)));

using var peStream = File.OpenWrite("test.dll");
using var pdbStream = File.OpenWrite("test.pdb");
try
{
    var emitResult = compilation.Emit(
        peStream: peStream,
        pdbStream: pdbStream);
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}

Expected Behavior:
Compilation succeeds.

Actual Behavior:

System.InvalidOperationException: This program location is thought to be unreachable.
   at Microsoft.Cci.RootModuleType.Microsoft.Cci.INamespaceTypeReference.GetUnit(EmitContext context)
   at Microsoft.Cci.MetadataWriter.GetDefiningUnitReference(ITypeReference typeReference, EmitContext context)
   at Microsoft.Cci.MetadataWriter.GetMethodHandle(IMethodReference methodReference)
   at Microsoft.Cci.PdbWriter.SerializeDebugInfo(IMethodBody methodBody, StandaloneSignatureHandle localSignatureHandleOpt, CustomDebugInfoWriter customDebugInfoWriter)
   at Microsoft.Cci.MetadataWriter.SerializeMethodBodies(BlobBuilder ilBuilder, PdbWriter nativePdbWriterOpt, Blob& mvidStringFixup)
   at Microsoft.Cci.MetadataWriter.BuildMetadataAndIL(PdbWriter nativePdbWriterOpt, BlobBuilder ilBuilder, BlobBuilder mappedFieldDataBuilder, BlobBuilder managedResourceDataBuilder, Blob& mvidFixup, Blob& mvidStringFixup)
   at Microsoft.Cci.PeWriter.WritePeToStream(EmitContext context, CommonMessageProvider messageProvider, Func`1 getPeStream, Func`1 getPortablePdbStreamOpt, PdbWriter nativePdbWriterOpt, String pdbPathOpt, Boolean metadataOnly, Boolean isDeterministic, Boolean emitTestCoverageData, Nullable`1 privateKeyOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.SerializePeToStream(CommonPEModuleBuilder moduleBeingBuilt, DiagnosticBag metadataDiagnostics, CommonMessageProvider messageProvider, Func`1 getPeStream, Func`1 getMetadataPeStreamOpt, Func`1 getPortablePdbStreamOpt, PdbWriter nativePdbWriterOpt, String pdbPathOpt, RebuildData rebuildData, Boolean metadataOnly, Boolean includePrivateMembers, Boolean isDeterministic, Boolean emitTestCoverageData, Nullable`1 privateKeyOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.SerializeToPeStream(CommonPEModuleBuilder moduleBeingBuilt, EmitStreamProvider peStreamProvider, EmitStreamProvider metadataPEStreamProvider, EmitStreamProvider pdbStreamProvider, RebuildData rebuildData, Func`2 testSymWriterFactory, DiagnosticBag diagnostics, EmitOptions emitOptions, Nullable`1 privateKeyOpt, 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 Program.<Main>$(String[] args) in Program.cs:line 34
@dotnet-issue-labeler dotnet-issue-labeler bot added Area-Compilers untriaged Issues and PRs which have not yet been triaged by a lead labels Sep 21, 2021
@RikkiGibson
Copy link
Contributor

Looks like duplicate of #56412.

@RikkiGibson RikkiGibson added the Resolution-Duplicate The described behavior is tracked in another issue label Sep 21, 2021
@RikkiGibson
Copy link
Contributor

Closing the issue since it appears to be a duplicate of a solved issue. Thank you for reporting. If you feel there's been a mistake, feel free to follow up or reopen the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-Compilers Resolution-Duplicate The described behavior is tracked in another issue untriaged Issues and PRs which have not yet been triaged by a lead
Projects
None yet
Development

No branches or pull requests

2 participants