@@ -62,7 +62,6 @@ protected LinkContext Context {
6262 protected Queue < ( MethodDefinition , DependencyInfo , MessageOrigin ) > _methods ;
6363 protected HashSet < ( MethodDefinition , MarkScopeStack . Scope ) > _virtual_methods ;
6464 protected Queue < AttributeProviderPair > _assemblyLevelAttributes ;
65- readonly List < AttributeProviderPair > _ivt_attributes ;
6665 protected Queue < ( AttributeProviderPair , DependencyInfo , MarkScopeStack . Scope ) > _lateMarkedAttributes ;
6766 protected List < ( TypeDefinition , MarkScopeStack . Scope ) > _typesWithInterfaces ;
6867 protected HashSet < AssemblyDefinition > _dynamicInterfaceCastableImplementationTypesDiscovered ;
@@ -222,7 +221,6 @@ public MarkStep ()
222221 _methods = new Queue < ( MethodDefinition , DependencyInfo , MessageOrigin ) > ( ) ;
223222 _virtual_methods = new HashSet < ( MethodDefinition , MarkScopeStack . Scope ) > ( ) ;
224223 _assemblyLevelAttributes = new Queue < AttributeProviderPair > ( ) ;
225- _ivt_attributes = new List < AttributeProviderPair > ( ) ;
226224 _lateMarkedAttributes = new Queue < ( AttributeProviderPair , DependencyInfo , MarkScopeStack . Scope ) > ( ) ;
227225 _typesWithInterfaces = new List < ( TypeDefinition , MarkScopeStack . Scope ) > ( ) ;
228226 _dynamicInterfaceCastableImplementationTypesDiscovered = new HashSet < AssemblyDefinition > ( ) ;
@@ -288,42 +286,6 @@ protected virtual void Complete ()
288286 }
289287 }
290288
291- bool ProcessInternalsVisibleAttributes ( )
292- {
293- bool marked_any = false ;
294- foreach ( var attr in _ivt_attributes ) {
295-
296- var provider = attr . Provider ;
297- Debug . Assert ( attr . Provider is ModuleDefinition or AssemblyDefinition ) ;
298- var assembly = ( provider is ModuleDefinition module ) ? module . Assembly : provider as AssemblyDefinition ;
299-
300- using var assemblyScope = ScopeStack . PushLocalScope ( new MessageOrigin ( assembly ) ) ;
301-
302- if ( ! Annotations . IsMarked ( attr . Attribute ) && IsInternalsVisibleAttributeAssemblyMarked ( attr . Attribute ) ) {
303- MarkCustomAttribute ( attr . Attribute , new DependencyInfo ( DependencyKind . AssemblyOrModuleAttribute , attr . Provider ) ) ;
304- marked_any = true ;
305- }
306- }
307-
308- return marked_any ;
309-
310- bool IsInternalsVisibleAttributeAssemblyMarked ( CustomAttribute ca )
311- {
312- System . Reflection . AssemblyName an ;
313- try {
314- an = new System . Reflection . AssemblyName ( ( string ) ca . ConstructorArguments [ 0 ] . Value ) ;
315- } catch {
316- return false ;
317- }
318-
319- var assembly = Context . GetLoadedAssembly ( an . Name ! ) ;
320- if ( assembly == null )
321- return false ;
322-
323- return Annotations . IsMarked ( assembly . MainModule ) ;
324- }
325- }
326-
327289 static bool TypeIsDynamicInterfaceCastableImplementation ( TypeDefinition type )
328290 {
329291 if ( ! type . IsInterface || ! type . HasInterfaces || ! type . HasCustomAttributes )
@@ -416,8 +378,7 @@ void Process ()
416378 ProcessMarkedPending ( ) ||
417379 ProcessLazyAttributes ( ) ||
418380 ProcessLateMarkedAttributes ( ) ||
419- MarkFullyPreservedAssemblies ( ) ||
420- ProcessInternalsVisibleAttributes ( ) ) ;
381+ MarkFullyPreservedAssemblies ( ) ) ;
421382
422383 ProcessPendingTypeChecks ( ) ;
423384 }
@@ -1170,6 +1131,9 @@ protected virtual bool ShouldMarkCustomAttribute (CustomAttribute ca, ICustomAtt
11701131 case "System.Runtime.InteropServices.InterfaceTypeAttribute" :
11711132 case "System.Runtime.InteropServices.GuidAttribute" :
11721133 return true ;
1134+ // May be implicitly used by the runtime
1135+ case "System.Runtime.CompilerServices.InternalsVisibleToAttribute" :
1136+ return true ;
11731137 }
11741138
11751139 TypeDefinition ? type = Context . Resolve ( attr_type ) ;
@@ -1547,10 +1511,7 @@ bool ProcessLazyAttributes ()
15471511 if ( IsAttributeRemoved ( customAttribute , resolved . DeclaringType ) && Annotations . GetAction ( CustomAttributeSource . GetAssemblyFromCustomAttributeProvider ( assemblyLevelAttribute . Provider ) ) == AssemblyAction . Link )
15481512 continue ;
15491513
1550- if ( customAttribute . AttributeType . IsTypeOf ( "System.Runtime.CompilerServices" , "InternalsVisibleToAttribute" ) && ! Annotations . IsMarked ( customAttribute ) ) {
1551- _ivt_attributes . Add ( assemblyLevelAttribute ) ;
1552- continue ;
1553- } else if ( ! ShouldMarkTopLevelCustomAttribute ( assemblyLevelAttribute , resolved ) ) {
1514+ if ( ! ShouldMarkTopLevelCustomAttribute ( assemblyLevelAttribute , resolved ) ) {
15541515 skippedItems . Add ( assemblyLevelAttribute ) ;
15551516 continue ;
15561517 }
0 commit comments