From 7b29d5abb27b20d336c62f6404efb8cf65df6847 Mon Sep 17 00:00:00 2001 From: Sebastien Pouliot Date: Thu, 5 Feb 2015 15:19:46 -0500 Subject: [PATCH] [linker] Preserve types given to custom attributes - even if they are inside an array [#26030] --- mcs/tools/linker/Mono.Linker.Steps/MarkStep.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mcs/tools/linker/Mono.Linker.Steps/MarkStep.cs b/mcs/tools/linker/Mono.Linker.Steps/MarkStep.cs index 430f2c2c885..18f34bdc9c8 100644 --- a/mcs/tools/linker/Mono.Linker.Steps/MarkStep.cs +++ b/mcs/tools/linker/Mono.Linker.Steps/MarkStep.cs @@ -269,11 +269,19 @@ namespace Mono.Linker.Steps { void MarkIfType (CustomAttributeArgument argument) { - if (argument.Type.FullName != "System.Type") - return; - - MarkType (argument.Type); - MarkType ((TypeReference) argument.Value); + var at = argument.Type; + if (at.IsArray) { + var et = at.GetElementType (); + if (et.Namespace != "System" || et.Name != "Type") + return; + + MarkType (et); + foreach (var cac in (CustomAttributeArgument[]) argument.Value) + MarkType ((TypeReference) cac.Value); + } else if (at.Namespace == "System" && at.Name == "Type") { + MarkType (argument.Type); + MarkType ((TypeReference) argument.Value); + } } protected bool CheckProcessed (IMetadataTokenProvider provider) -- 2.11.4.GIT