mosa / MOSA-Project

Managed Operating System Alliance Project
https://www.mosa-project.org/
Other
406 stars 82 forks source link

Assertion fails during ComputeArgumentSize #1093

Closed jvyden closed 11 months ago

jvyden commented 11 months ago

image

Unsure how to reproduce, but it happens during compilation in the mosa branch of my project (https://github.com/jvyden/BoringOS) under my MOSA-Project fork.

/usr/bin/dotnet Tools/Mosa.Tool.Launcher.dll BoringOS.MOSA.dll
Process terminated. Assertion failed.
   at Mosa.Compiler.Framework.CompilerStages.MetadataStage.ComputeArgumentSize(MosaType type, Object value)
   at Mosa.Compiler.Framework.CompilerStages.MetadataStage.CreateCustomAttributeArgument(String name, Int32 count, String argName, Argument arg, Boolean isField)
   at Mosa.Compiler.Framework.CompilerStages.MetadataStage.CreateCustomAttribute(MosaUnit unit, MosaCustomAttribute ca, Int32 position)
   at Mosa.Compiler.Framework.CompilerStages.MetadataStage.CreateCustomAttributesTable(MosaUnit unit)
   at Mosa.Compiler.Framework.CompilerStages.MetadataStage.CreateFieldDefinitions(MosaType type)
   at Mosa.Compiler.Framework.CompilerStages.MetadataStage.CreateTypeDefinition(MosaType type, LinkerSymbol assemblyTableSymbol)
   at Mosa.Compiler.Framework.CompilerStages.MetadataStage.CreateAssemblyDefinition(MosaModule module)
   at Mosa.Compiler.Framework.CompilerStages.MetadataStage.CreateDefinitionTables()
   at Mosa.Compiler.Framework.CompilerStages.MetadataStage.Finalization()
   at Mosa.Compiler.Framework.BaseCompilerStage.ExecuteFinalization()
   at Mosa.Compiler.Framework.Compiler.Finalization()
   at Mosa.Compiler.Framework.MosaCompiler.Finalization()
   at Mosa.Compiler.Framework.MosaCompiler.Compile(Boolean skipFinalization)
   at Mosa.Utility.Launcher.Builder.Compile()
   at Mosa.Utility.Launcher.Builder.Build()
   at Mosa.Tool.Launcher.MainWindow.<CompileBuildAndStart>b__21_0(Object _)
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()

Process finished with exit code 134.
jvyden commented 11 months ago

The line in question: https://github.com/mosa/MOSA-Project/blob/666f01ab4dd21229d2100412b52fddaf131a6465/Source/Mosa.Compiler.Framework/CompilerStages/MetadataStage.cs#L833

jvyden commented 11 months ago

Seems to happen while trying to compile the NullableAttribute.

In MetadataStage.CreateCustomAttributeArgument(), attributeName evaluates to

BoringOS.BoringKernel+<>c__DisplayClass14_0::programs System.Collections.Generic.List`1<BoringOS.Programs.Program>>>0:NullableAttribute:0

jvyden commented 11 months ago

Narrowing it down further, it seems to be this line: https://github.com/jvyden/BoringOS/blob/mosa/BoringOS/BoringKernel.cs#L101

Marking the BoringKernel class as non-nullable with #nullable disable lets the compilation process succeed!

So, defining List<Program> causes the compiler to crash for some reason. Seems it's passing down a raw list of arguments from dnlib?

tgiphil commented 11 months ago

@kiootic Hi! Can you help with this issue?

kiootic commented 11 months ago

This patch should fix the problem. 0001-Fix-ineffective-mapping-of-custom-argument-list.patch

tgiphil commented 11 months ago

Thank you!

charsleysa commented 11 months ago

Fixed by https://github.com/mosa/MOSA-Project/commit/b883129a9c9ea7e922e68cfe118e5121be2bf745 Thanks @kiootic