-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Closed
Labels
area-NativeAOT-coreclrarea-Tools-ILLink.NET linker development as well as trimming analyzers.NET linker development as well as trimming analyzersin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged
Milestone
Description
When a type provides an interface implementation via a base method, there can be new unexpected trim analysis warnings pointing to the base method. For example:
interface I {
void M();
}
class Base {
[RequiresUnreferencedCode("Message")]
public void M() { }
}This code is fine on its own, and produces no trim analysis warnings. Now if another piece of code has:
class Derived : Base, I {}this causes a new warning to appear at Base.M:
interface I {
void M();
}
class Base {
[RequiresUnreferencedCode("Message")]
public void M() { } // warning IL2046: Member 'Base.M()' with 'RequiresUnreferencedCodeAttribute' implements interface member 'I.M()' without 'RequiresUnreferencedCodeAttribute'. 'RequiresUnreferencedCodeAttribute' annotations must match across all interface implementations or overrides.
}In general, the derived class could be defined in another assembly, leading to trim warnings that "blame" a correctly annotated assembly. The warning should instead point to Derived, similar to what happens if there's a mismatch in the base/interface signatures:
interface I {
void M();
}
class Base {
public int M() { }
}
class Derived : Base, I { } // error CS0738: 'Derived' does not implement interface member 'I.M()'. 'Base.M()' cannot implement 'I.M()' because it does not have the matching return type of 'void'.ILLink, NativeAot, and the ILLink Roslyn analyzer all share the problematic behavior.
Metadata
Metadata
Assignees
Labels
area-NativeAOT-coreclrarea-Tools-ILLink.NET linker development as well as trimming analyzers.NET linker development as well as trimming analyzersin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged
Type
Projects
Status
No status