Merge pull request #3709 from rolfbjarne/linker-mark-nested-types
authorAlexander Köplinger <alex.koeplinger@outlook.com>
Wed, 5 Oct 2016 11:51:00 +0000 (13:51 +0200)
committerGitHub <noreply@github.com>
Wed, 5 Oct 2016 11:51:00 +0000 (13:51 +0200)
[linker] We need to mark nested types even if the declaring type isn't marked.

mcs/tools/linker/Mono.Linker.Steps/MarkStep.cs

index 0c39910ff5ea06b2d5a538e7ebbda7b09f27f63b..9bf293d7f13fe527b221ceab7461a6c35e2a7d84 100644 (file)
@@ -69,29 +69,27 @@ namespace Mono.Linker.Steps {
                protected virtual void InitializeAssembly (AssemblyDefinition assembly)
                {
                        MarkAssembly (assembly);
-                       foreach (TypeDefinition type in assembly.MainModule.Types) {
-                               if (!Annotations.IsMarked (type))
-                                       continue;
 
+                       foreach (TypeDefinition type in assembly.MainModule.Types)
                                InitializeType (type);
-                       }
                }
 
                void InitializeType (TypeDefinition type)
                {
+                       if (type.HasNestedTypes) {
+                               foreach (var nested in type.NestedTypes)
+                                       InitializeType (nested);
+                       }
+
+                       if (!Annotations.IsMarked (type))
+                               return;
+
                        MarkType (type);
 
                        if (type.HasFields)
                                InitializeFields (type);
                        if (type.HasMethods)
                                InitializeMethods (type.Methods);
-
-                       if (type.HasNestedTypes) {
-                               foreach (var nested in type.NestedTypes) {
-                                       if (Annotations.IsMarked (nested))
-                                               InitializeType (nested);
-                               }
-                       }
                }
 
                void InitializeFields (TypeDefinition type)