Open
Description
Description
ILLink.RoslynAnalyzer.DynamicallyAccessedMembersAnalyzer fails if you use a C#14 extension with IsAotCompatible=true
Reproduction Steps
build this:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
</Project>
public static class Extensions
{
extension(string source)
{
public bool IsNullOrEmpty() => string.IsNullOrEmpty(source);
}
}
Expected behavior
No warnings or errors
Actual behavior
CSC : warning AD0001: Analyzer 'ILLink.RoslynAnalyzer.DynamicallyAccessedMembersAnalyzer' threw an exception of type 'System.InvalidCastException' with message 'Unable to cast object of type 'Microsoft.CodeAnalysis.CSharp.Symbols.PublicModel.NonErrorNamedTypeSymbol' to type 'Microsoft.CodeAnalysis.IMethodSymbol'.'. [C:\Users\Admin\source\repos\Test1\Test1.csproj::TargetFramework=net8.0]
Exception occurred with following context: (TaskId:128)
Compilation: Test1 (TaskId:128)
ISymbol: IsNullOrEmpty (Method) (TaskId:128)
System.InvalidCastException: Unable to cast object of type 'Microsoft.CodeAnalysis.CSharp.Symbols.PublicModel.NonErrorNamedTypeSymbol' to type 'Microsoft.CodeAnalysis.IMethodSymbol'. (TaskId:128)
at ILLink.Shared.TypeSystemProxy.ParameterProxy..ctor(IParameterSymbol parameter) (TaskId:128)
at ILLink.RoslynAnalyzer.TrimAnalysis.TrimAnalysisVisitor.GetParameterTargetValue(IParameterSymbol parameter) (TaskId:128)
at ILLink.RoslynAnalyzer.DataFlow.OperationWalker`2.Visit(IOperation operation, TArgument argument) (TaskId:128)
at ILLink.RoslynAnalyzer.TrimAnalysis.TrimAnalysisVisitor.Visit(IOperation operation, LocalDataFlowState`2 argument) (TaskId:128)
at ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowVisitor`2.ProcessMethodCall(IOperation operation, IMethodSymbol method, IOperation instance, ImmutableArray`1 arguments, LocalDataFlowState`2 state) (TaskId:128)
at ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowVisitor`2.VisitInvocation(IInvocationOperation operation, LocalDataFlowState`2 state) (TaskId:128)
at ILLink.RoslynAnalyzer.DataFlow.OperationWalker`2.Visit(IOperation operation, TArgument argument) (TaskId:128)
at ILLink.RoslynAnalyzer.TrimAnalysis.TrimAnalysisVisitor.Visit(IOperation operation, LocalDataFlowState`2 argument) (TaskId:128)
at ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowVisitor`2.Transfer(BlockProxy block, LocalDataFlowState`2 state) (TaskId:128)
at ILLink.Shared.DataFlow.ForwardDataFlowAnalysis`7.Fixpoint(TControlFlowGraph cfg, TLattice lattice, TTransfer transfer) (TaskId:128)
at ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowAnalysis`3.AnalyzeMethod(MethodBodyValue method, InterproceduralState`2& interproceduralState) (TaskId:128)
at ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowAnalysis`3.InterproceduralAnalyze() (TaskId:128)
at ILLink.RoslynAnalyzer.DynamicallyAccessedMembersAnalyzer.<>c.<Initialize>b__8_1(OperationBlockAnalysisContext context) (TaskId:128)
at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor.ExecuteOperationBlockActions(ImmutableArray`1 startActions, ImmutableArray`1 actions, ImmutableArray`1 endActions, DiagnosticAnalyzer analyzer, SyntaxNode declaredNode, ISymbol declaredSymbol, ImmutableArray`1 operationBlocks, ImmutableArray`1 operations, SemanticModel semanticModel, Nullable`1 filterSpan, Boolean isGeneratedCode, CancellationToken cancellationToken) (TaskId:128)
Regression?
Unlikely
Known Workarounds
No response
Configuration
.NET SDK:
Version: 10.0.100-preview.4.25258.110
Commit: c22dcd0c7a
Workload version: 10.0.100-manifests.e9b6aa6e
MSBuild version: 17.15.0-preview-25258-110+c22dcd0c7
Runtime Environment:
OS Name: Windows
OS Version: 10.0.26100
OS Platform: Windows
RID: win-x64
Base Path: C:\Program Files\dotnet\sdk\10.0.100-preview.4.25258.110\
Other information
Metadata
Metadata
Assignees
Type
Projects
Status
No status