diff options
Diffstat (limited to 'src/linker/Linker/Annotations.cs')
-rw-r--r-- | src/linker/Linker/Annotations.cs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/linker/Linker/Annotations.cs b/src/linker/Linker/Annotations.cs index 37deab5f3..588d83fb0 100644 --- a/src/linker/Linker/Annotations.cs +++ b/src/linker/Linker/Annotations.cs @@ -598,6 +598,10 @@ namespace Mono.Linker /// and .ctors are reported as requiring unreferenced code when the declaring type has RUC on it.</remarks> internal bool DoesMethodRequireUnreferencedCode (MethodDefinition method, out RequiresUnreferencedCodeAttribute attribute) { + if (method.IsStaticConstructor ()) { + attribute = null; + return false; + } if (TryGetLinkerAttribute (method, out attribute)) return true; @@ -624,6 +628,26 @@ namespace Mono.Linker return false; } + internal bool DoesFieldRequireUnreferencedCode (FieldDefinition field, out RequiresUnreferencedCodeAttribute attribute) + { + if (!field.IsStatic || field.DeclaringType is null) { + attribute = null; + return false; + } + + return TryGetLinkerAttribute (field.DeclaringType, out attribute); + } + + internal bool DoesMemberRequireUnreferencedCode (IMemberDefinition member, out RequiresUnreferencedCodeAttribute attribute) + { + attribute = null; + return member switch { + MethodDefinition method => DoesMethodRequireUnreferencedCode (method, out attribute), + FieldDefinition field => DoesFieldRequireUnreferencedCode (field, out attribute), + _ => false + }; + } + public void EnqueueVirtualMethod (MethodDefinition method) { if (!method.IsVirtual) |