dotnet / dotnet/linker

Assert failing when trimming Maui Android app

Open
#2,658 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
392
Forks
128
Avg merge
2d 10h
Merged PRs (30d)
2

Description

### Repro steps

1. Install Maui, or build it from source: https://github.com/dotnet/maui/blob/main/.github/DEVELOPMENT.md (ping @eerhardt if you are going to set it up yourself. It is currently a little hard to set up.)
2. `dotnet new maui`
3. `dotnet restore`
4. `dotnet build -f net6.0-android -r android-arm64 -c Release --no-restore /bl`
5. Look at the command line passed to `$task illink`, and use that command line with a `Debug` built linker.
6. Running the Debug linker with the same command line hits assertions here:

https://github.com/dotnet/linker/blob/c4abaf33f967a8fa42eb20fc386b774ad74ef319/src/linker/Linker/Annotations.cs#L490-L495

![image](https://user-images.githubusercontent.com/8291187/155755950-2ae9f7a8-f188-44b0-9640-19bfea57978c.png)

  | Name | Value | Type
-- | -- | -- | --
◢ | GetPreservedMethods (definition) | Count = 1 | System.Collections.Generic.List
  | ▶ [0] | {System.Void GoogleGson.FieldNamingPolicyInvoker::.ctor(System.IntPtr,Android.Runtime.JniHandleOwnership)} | Mono.Cecil.MethodDefinition
  | ▶ Raw View |   |  
▶ | method | {System.Void GoogleGson.FieldNamingPolicyInvoker::.ctor(System.IntPtr,Android.Runtime.JniHandleOwnership)} | Mono.Cecil.MethodDefinition

```
> illink.dll!Mono.Linker.AnnotationStore.AddPreservedMethod(Mono.Cecil.IMemberDefinition definition, Mono.Cecil.MethodDefinition method) Line 494 C#
illink.dll!Mono.Linker.AnnotationStore.AddPreservedMethod(Mono.Cecil.TypeDefinition type, Mono.Cecil.MethodDefinition method) Line 464 C#
Microsoft.Android.Sdk.ILLink.dll!MonoDroid.Tuner.MarkJavaObjects.PreserveMethod(Mono.Cecil.TypeDefinition type, Mono.Cecil.MethodDefinition method) Line 151 C#
Microsoft.Android.Sdk.ILLink.dll!MonoDroid.Tuner.MarkJavaObjects.PreserveIntPtrConstructor(Mono.Cecil.TypeDefinition type) Line 109 C#
Microsoft.Android.Sdk.ILLink.dll!MonoDroid.Tuner.MarkJavaObjects.PreserveJavaObjectImplementation(Mono.Cecil.TypeDefinition type) Line 61 C#
Microsoft.Android.Sdk.ILLink.dll!MonoDroid.Tuner.MarkJavaObjects.ProcessType(Mono.Cecil.TypeDefinition type) Line 44 C#
illink.dll!Mono.Linker.Steps.MarkStep.MarkType(Mono.Cecil.TypeReference reference, Mono.Linker.DependencyInfo reason, Mono.Linker.MessageOrigin? origin) Line 1870 C#
illink.dll!Mono.Linker.Steps.MarkStep.MarkField(Mono.Cecil.FieldDefinition field, Mono.Linker.DependencyInfo reason) Line 1679 C#
illink.dll!Mono.Linker.Steps.MarkStep.MarkEntireType(Mono.Cecil.TypeDefinition type, Mono.Linker.DependencyInfo reason) Line 377 C#
illink.dll!Mono.Linker.Steps.MarkStep.MarkEntireAssembly(Mono.Cecil.AssemblyDefinition assembly) Line 1409 C#
illink.dll!Mono.Linker.Steps.MarkStep.MarkAssembly(Mono.Cecil.AssemblyDefinition assembly, Mono.Linker.DependencyInfo reason) Line 1385 C#
illink.dll!Mono.Linker.Steps.MarkStep.MarkModule(Mono.Cecil.ModuleDefinition module, Mono.Linker.DependencyInfo reason) Line 1736 C#
illink.dll!Mono.Linker.Steps.MarkStep.ProcessMarkedPending() Line 503 C#
illink.dll!Mono.Linker.Steps.MarkStep.Initialize() Line 250 C#
illink.dll!Mono.Linker.Steps.MarkStep.Process(Mono.Linker.LinkContext context) Line 240 C#
illink.dll!Mono.Linker.Pipeline.ProcessStep(Mono.Linker.LinkContext context, Mono.Linker.Steps.IStep step) Line 166 C#
illink.dll!Mono.Linker.Pipeline.Process(Mono.Linker.LinkContext context) Line 159 C#
illink.dll!Mono.Linker.Driver.Run(Mono.Linker.ILogger customLogger, bool throwOnFatalLinkerException) Line 779 C#
illink.dll!Mono.Linker.Driver.Main(string[] args) Line 61 C#
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.