-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Move ILLink.LinkAttributes to shared and support NullabilityInfoContext with trimming nullability attributes #56475
Conversation
…eclr - Move IntrinsicAttribute to mono only - Introduce feature switches for NullabilityInfoContext and AggressiveAttributeTrimming - Minor other cleanup
…abilityInfoContext.
Note regarding the This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change. |
Tagging subscribers to 'linkable-framework': @eerhardt, @vitek-karas, @LakshanF, @sbomer, @joperezr Issue DetailsThis addresses how we are trimming attributes in .NET 6. The problems being solved here are:
Note: It is probably easiest to review commit-by-commit. The 1st commit is a straight copy from mono to shared, while changes are made in the 2nd commit. @jkotas @MichalStrehovsky @davidwrighton - are there other attributes besides runtime/src/mono/System.Private.CoreLib/src/ILLink/ILLink.LinkAttributes.xml Lines 4 to 191 in 6789379
|
@@ -25,6 +25,8 @@ configurations but their defaults might vary as any SDK can set the defaults dif | |||
| EnableCppCLIHostActivation | System.Runtime.InteropServices.EnableCppCLIHostActivation | C++/CLI host activation code is disabled when set to false and related functionality can be trimmed. | | |||
| MetadataUpdaterSupport | System.Reflection.Metadata.MetadataUpdater.IsSupported | Metadata update related code to be trimmed when set to false | | |||
| _EnableConsumingManagedCodeFromNativeHosting | System.Runtime.InteropServices.EnableConsumingManagedCodeFromNativeHosting | Getting a managed function from native hosting is disabled when set to false and related functionality can be trimmed. | | |||
| NullabilityInfoContextSupport | System.Reflection.NullabilityInfoContext.IsSupported | Nullable attributes can be trimmed when set to false | | |||
| _AggressiveAttributeTrimming | System.AggressiveAttributeTrimming | When set to true, aggressively trims attributes to allow for the most size savings possible, even if it could result in runtime behavior changes | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why does the name have the _
prefix?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The same reason _EnableConsumingManagedCodeFromNativeHosting
has a _
prefix. This isn't intended to be a "public" setting, but only exists for Blazor WASM to trim these attributes, and an escape hatch for developers in case we got it wrong.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NullabilityInfoContext
related changes LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good - except for the selection of which attributes are dangerous to trim, I'll leave that to more knowledgeable people.
src/libraries/System.Runtime/tests/System/Reflection/NullabilityInfoContextTests.cs
Show resolved
Hide resolved
Adding a few more coreclr devs to answer this question: are there other attributes besides runtime/src/mono/System.Private.CoreLib/src/ILLink/ILLink.LinkAttributes.xml Lines 4 to 191 in 6789379
cc @JulieLeeMSFT @AndyAyersMS @tommcdon @agocke It looks like runtime/src/coreclr/vm/methodtable.cpp Lines 9849 to 9863 in 3ce1168
|
I would be leery of trimming any custom attribute that the runtime checks for. I don't know how to effectively enumerate that set, perhaps @jkotas or @davidwrighton can say... |
Would this be a decent approach?
|
Maybe? I don't how easy it actually is to enumerate all the attributes. One place to look is https://github.com/dotnet/runtime/blob/main/src/coreclr/vm/wellknownattributes.h but I suspect it's just convention that attributes are listed there and there may be others that the runtime looks for. |
My thought was just to do a |
My look at this list found only |
After searching for each attribute in the list in
|
…l the time on mono WASM
This addresses how we are trimming attributes in .NET 6. The problems being solved here are:
NullabilityInfoContext.Create
will throw an exception.Note: It is probably easiest to review commit-by-commit. The 1st commit is a straight copy from mono to shared, while changes are made in the 2nd commit.
Fix #48217
Fix #55860
@jkotas @MichalStrehovsky @davidwrighton - are there other attributes besides
IntrinsicAttribute
in this list that shouldn't be removed incoreclr
? For example, questionable ones for me were:NonVersionableAttribute
,AsyncMethodBuilderAttribute
,SkipLocalsInitAttribute
,EmbeddedAttribute
,NativeIntegerAttribute
, orIsUnmanagedAttribute
?runtime/src/mono/System.Private.CoreLib/src/ILLink/ILLink.LinkAttributes.xml
Lines 4 to 191 in 6789379