-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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
Requires on NativeAOT has problems with CompilerGeneratedCode #68786
Comments
Another problem is that nativeaot doesn't always treat [RequiresUnreferencedCode ("")]
static void TestLocalFunctionInMethodWithRequires ()
{
LocalFunction ();
void LocalFunction () => MethodWithRequires ();
}
static void TestAll ()
{
typeof (LocalFunctionsReferencedViaReflection).RequiresAll ();
} The |
NativeAot is also missing warnings for reflection access to compiler-generated code (IL2118). |
The problems with ldftn and lazy delegates are being addressed in #77457. |
…s warnings between ILLink and NativeAOT (#84770) This enables the last of the disabled `RequiresCapability` tests for NativeAOT. The implementation basically copies the logic from ILLink on how to produce warnings when method or field is marked due to reflection access. We decided that producing warnings due to reflection access to compiler generated methods is more trouble than benefit and thus we won't do that anymore. See reasoning in #85042. Otherwise the behavior in NativeAOT fully copies the one in ILLink (small exceptions due to better method overload resolution in NativeAOT). High-level behavior changes in NativeAOT: * Finally allow the NativeAOT compiler to produce IL2110, IL2111, IL2113 and IL2115 * Avoid generating warnings for override methods if the warning is already generated on the base method (for DAM marking) * Implement correct marking (and warnings) for "DAM on type" when the derived class has broader annotation than the base class/interface (this is mostly to avoid noise warnings) * Rename a set of methods and classes in data flow scanner to "Token", because they're only used when a given entity is accessed through its token (so `ldtoken` and similar). This allows for more precise handling of the cases above. Testing changes: * Allow specifying tool exceptions for `SkipKepItemsValidationAttribute` - this allows to enable one of the reflection tests for its diagnostics coverage, avoiding the necessity to fix everything around Kept behavior yet. * Couple of fixes in the test validator to correctly compare expected/actual diagnostics This fixes final bits of #68786 Fixes #68688 This helps with #82447
The remaining bits are fixed in #84770 |
Description
Doing some testing with the Requires attribute on CompilerGeneratedCode I realized that NativeAOT has differences with linker, it will not produce warnings for code using ldftn for example:
It will have problems with Lazy Delegates too
Suppression inside CompilerGeneratedCode is also not working
Reproduction Steps
Expected behavior
The warnings generated by dotnet/linker and nativeAOT should be the same
Actual behavior
NativeAOT sometimes misses generating some of the warnings and some other times it generates extra warnings
Regression?
No response
Known Workarounds
No response
Configuration
No response
Other information
No response
The text was updated successfully, but these errors were encountered: