Skip to content

Assertion failed in Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamedTypeSymbol.AfterMembersCompletedChecks #78188

@tmat

Description

@tmat
StreamJsonRpc.RemoteInvocationException: Assertion failed
   at StreamJsonRpc.JsonRpc.<InvokeCoreAsync>d__156`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult()
   at Microsoft.CodeAnalysis.Remote.BrokeredServiceConnection`1.<TryInvokeAsync>d__22`1.MoveNext() in C:\R0\src\Workspaces\Remote\Core\BrokeredServiceConnection.cs:line 257
RPC server exception:
System.InvalidOperationException: Assertion failed
      at Microsoft.CodeAnalysis.Remote.ThrowingTraceListener.Fail(String message, String detailMessage) in C:\R0\src\Workspaces\Remote\ServiceHub\Host\ThrowingTraceListener.cs:line 14
      at System.Diagnostics.TraceInternal.Fail(String message, String detailMessage)
      at System.Diagnostics.Debug.Fail(String message, String detailMessage)
      at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamedTypeSymbol.AfterMembersCompletedChecks(BindingDiagnosticBag diagnostics) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Source\SourceNamedTypeSymbol.cs:line 1841
      at Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol.ForceComplete(SourceLocation locationOpt, Predicate`1 filter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Source\SourceMemberContainerSymbol.cs:line 677
      at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberConditionally(SourceLocation locationOpt, Predicate`1 filter, Symbol member, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Symbol.cs:line 965
      at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, Predicate`1 filter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Source\SourceNamespaceSymbol_Completion.cs:line 80
      at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberConditionally(SourceLocation locationOpt, Predicate`1 filter, Symbol member, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Symbol.cs:line 965
      at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, Predicate`1 filter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Source\SourceNamespaceSymbol_Completion.cs:line 80
      at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberConditionally(SourceLocation locationOpt, Predicate`1 filter, Symbol member, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Symbol.cs:line 965
      at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, Predicate`1 filter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Source\SourceNamespaceSymbol_Completion.cs:line 80
      at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberConditionally(SourceLocation locationOpt, Predicate`1 filter, Symbol member, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Symbol.cs:line 965
      at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, Predicate`1 filter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Source\SourceNamespaceSymbol_Completion.cs:line 80
      at Microsoft.CodeAnalysis.CSharp.Symbols.SourceModuleSymbol.ForceComplete(SourceLocation locationOpt, Predicate`1 filter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Source\SourceModuleSymbol.cs:line 272
      at Microsoft.CodeAnalysis.CSharp.Symbols.SourceAssemblySymbol.ForceComplete(SourceLocation locationOpt, Predicate`1 filter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Symbols\Source\SourceAssemblySymbol.cs:line 929
      at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetSourceDeclarationDiagnostics(SyntaxTree syntaxTree, Nullable`1 filterSpanWithinTree, Func`4 locationFilterOpt, Predicate`1 symbolFilter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Compilation\CSharpCompilation.cs:line 3232
      at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetDiagnosticsWithoutSeverityFiltering(CompilationStage stage, Boolean includeEarlierStages, BindingDiagnosticBag builder, Predicate`1 symbolFilter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Compilation\CSharpCompilation.cs:line 3006
      at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetDiagnostics(CompilationStage stage, Boolean includeEarlierStages, DiagnosticBag diagnostics, Predicate`1 symbolFilter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Compilation\CSharpCompilation.cs:line 2931
      at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetDiagnostics(CompilationStage stage, Boolean includeEarlierStages, Predicate`1 symbolFilter, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Compilation\CSharpCompilation.cs:line 2919
      at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CompileMethods(CommonPEModuleBuilder moduleBuilder, Boolean emittingPdb, DiagnosticBag diagnostics, Predicate`1 filterOpt, CancellationToken cancellationToken) in C:\R0\src\Compilers\CSharp\Portable\Compilation\CSharpCompilation.cs:line 3481
      at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream metadataPEStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, RebuildData rebuildData, CompilationTestData testData, CancellationToken cancellationToken) in C:\R0\src\Compilers\Core\Portable\Compilation\Compilation.cs:line 2970
      at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, Stream metadataPEStream, RebuildData rebuildData, CancellationToken cancellationToken) in C:\R0\src\Compilers\Core\Portable\Compilation\Compilation.cs:line 2911
      at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, Stream metadataPEStream, CancellationToken cancellationToken) in C:\R0\src\Compilers\Core\Portable\Compilation\Compilation.cs:line 2799
      at Microsoft.CodeAnalysis.SolutionCompilationState.SkeletonReferenceCache.<CreateSkeletonSet>g__TryCreateMetadataAndHandle|10_0(<>c__DisplayClass10_0&) in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.SkeletonReferenceCache.cs:line 247
      at Microsoft.CodeAnalysis.SolutionCompilationState.SkeletonReferenceCache.CreateSkeletonSet(SolutionServices services, Compilation compilation, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.SkeletonReferenceCache.cs:line 221
      at Microsoft.CodeAnalysis.SolutionCompilationState.SkeletonReferenceCache.<>c.<CreateSkeletonReferenceSetAsync>b__9_1(ValueTuple`2 arg, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.SkeletonReferenceCache.cs:line 212
      at Roslyn.Utilities.AsyncLazy`1.AsyncLazyImpl`1.StartAsynchronousComputation(AsynchronousComputationToStart computationToStart, Request requestToCompleteSynchronously, CancellationToken callerCancellationToken) in C:\R0\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Utilities\AsyncLazy`1.cs:line 409
      at Roslyn.Utilities.AsyncLazy`1.AsyncLazyImpl`1.GetValueAsync(CancellationToken cancellationToken) in C:\R0\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Utilities\AsyncLazy`1.cs:line 369
      at Microsoft.CodeAnalysis.SolutionCompilationState.SkeletonReferenceCache.CreateSkeletonReferenceSetAsync(ICompilationTracker compilationTracker, SolutionCompilationState compilationState, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.SkeletonReferenceCache.cs:line 215
      at Microsoft.CodeAnalysis.SolutionCompilationState.SkeletonReferenceCache.TryGetOrCreateReferenceSetAsync(ICompilationTracker compilationTracker, SolutionCompilationState compilationState, VersionStamp version, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.SkeletonReferenceCache.cs:line 178
      at Microsoft.CodeAnalysis.SolutionCompilationState.SkeletonReferenceCache.GetOrBuildReferenceAsync(ICompilationTracker compilationTracker, SolutionCompilationState compilationState, MetadataReferenceProperties properties, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.SkeletonReferenceCache.cs:line 150
      at Microsoft.CodeAnalysis.SolutionCompilationState.GetMetadataReferenceAsync(ICompilationTracker tracker, ProjectState fromProject, ProjectReference projectReference, Boolean includeCrossLanguage, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.cs:line 1313
      at Microsoft.CodeAnalysis.SolutionCompilationState.RegularCompilationTracker.<>c__DisplayClass25_0.<<GetOrBuildFinalStateAsync>g__FinalizeCompilationWorkerAsync|4>d.MoveNext() in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.RegularCompilationTracker.cs:line 537
   --- End of stack trace from previous location ---
      at Microsoft.CodeAnalysis.SolutionCompilationState.RegularCompilationTracker.<>c__DisplayClass25_0.<<GetOrBuildFinalStateAsync>g__FinalizeCompilationAsync|3>d.MoveNext() in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.RegularCompilationTracker.cs:line 455
   --- End of stack trace from previous location ---
      at Microsoft.CodeAnalysis.SolutionCompilationState.RegularCompilationTracker.<>c__DisplayClass25_0.<<GetOrBuildFinalStateAsync>g__BuildFinalStateAsync|0>d.MoveNext() in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.RegularCompilationTracker.cs:line 305
   --- End of stack trace from previous location ---
      at Microsoft.CodeAnalysis.SolutionCompilationState.RegularCompilationTracker.GetOrBuildFinalStateAsync(SolutionCompilationState compilationState, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.RegularCompilationTracker.cs:line 267
      at Microsoft.CodeAnalysis.SolutionCompilationState.RegularCompilationTracker.GetCompilationSlowAsync(SolutionCompilationState compilationState, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Core\Portable\Workspace\Solution\SolutionCompilationState.RegularCompilationTracker.cs:line 238
      at Microsoft.CodeAnalysis.SemanticSearch.QueryExecutionContext.<>c__DisplayClass18_0.<<InvokeAsync>b__0>d.MoveNext() in C:\R0\src\Features\Core\Portable\SemanticSearch\QueryExecutionContext.cs:line 58
   --- End of stack trace from previous location ---
      at Microsoft.CodeAnalysis.SemanticSearch.QueryExecutionContext.<>c__DisplayClass18_0.<<InvokeAsync>b__0>d.MoveNext() in C:\R0\src\Features\Core\Portable\SemanticSearch\QueryExecutionContext.cs:line 113
   --- End of stack trace from previous location ---
      at System.Threading.Tasks.Parallel.<>c__53`1.<<ForEachAsync>b__53_0>d.MoveNext()
   --- End of stack trace from previous location ---
      at Microsoft.CodeAnalysis.SemanticSearch.QueryExecutionContext.InvokeAsync(Solution solution, QueryKind queryKind, CancellationToken cancellationToken) in C:\R0\src\Features\Core\Portable\SemanticSearch\QueryExecutionContext.cs:line 54
      at Microsoft.CodeAnalysis.SemanticSearch.AbstractSemanticSearchService.ExecuteQueryAsync(Solution solution, CompiledQueryId queryId, ISemanticSearchResultsObserver observer, OptionsProvider`1 classificationOptions, TraceSource traceSource, CancellationToken cancellationToken) in C:\R0\src\Features\Core\Portable\SemanticSearch\AbstractSemanticSearchService.cs:line 185
      at Microsoft.CodeAnalysis.SemanticSearch.AbstractSemanticSearchService.ExecuteQueryAsync(Solution solution, CompiledQueryId queryId, ISemanticSearchResultsObserver observer, OptionsProvider`1 classificationOptions, TraceSource traceSource, CancellationToken cancellationToken) in C:\R0\src\Features\Core\Portable\SemanticSearch\AbstractSemanticSearchService.cs:line 207
      at Microsoft.CodeAnalysis.Remote.RemoteSemanticSearchService.<>c__DisplayClass6_0.<<ExecuteQueryAsync>b__0>d.MoveNext() in C:\R0\src\Workspaces\Remote\ServiceHub\Services\SemanticSearch\RemoteSemanticSearchService.cs:line 101
   --- End of stack trace from previous location ---
      at Microsoft.CodeAnalysis.Remote.RemoteWorkspace.<>c__DisplayClass7_0`1.<<RunWithSolutionAsync>g__ProcessSolutionAsync|1>d.MoveNext() in C:\R0\src\Workspaces\Remote\ServiceHub\Host\RemoteWorkspace.cs:line 162
   --- End of stack trace from previous location ---
      at Microsoft.CodeAnalysis.Remote.RemoteWorkspace.RunWithSolutionAsync[T](AssetProvider assetProvider, Checksum solutionChecksum, Boolean updatePrimaryBranch, Func`2 implementation, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Remote\ServiceHub\Host\RemoteWorkspace.cs:line 102
      at Microsoft.CodeAnalysis.Remote.RemoteWorkspace.RunWithSolutionAsync[T](AssetProvider assetProvider, Checksum solutionChecksum, Boolean updatePrimaryBranch, Func`2 implementation, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Remote\ServiceHub\Host\RemoteWorkspace.cs:line 113
      at Microsoft.CodeAnalysis.Remote.BrokeredServiceBase.RunWithSolutionAsync[T](Checksum solutionChecksum, Func`2 implementation, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Remote\ServiceHub\Services\BrokeredServiceBase.cs:line 91
      at Microsoft.CodeAnalysis.Remote.BrokeredServiceBase.RunServiceImplAsync[T](Func`2 implementation, CancellationToken cancellationToken) in C:\R0\src\Workspaces\Remote\ServiceHub\Services\BrokeredServiceBase.cs:line 116

Repro:

  1. Open Roslyn.sln
  2. Run the following query in Semantic Search:
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

static async IAsyncEnumerable<ISymbol> Find(IMethodSymbol method)
{
    foreach (var syntaxReference in method.DeclaringSyntaxReferences)
    {
        var syntaxNode = await syntaxReference.GetSyntaxAsync();
        if (syntaxNode is MethodDeclarationSyntax methodDeclaration)
        {
            var semanticModel = await methodDeclaration.SyntaxTree.GetSemanticModelAsync();
            if (semanticModel == null)
            {
                continue;
            }

            var invocations = methodDeclaration.DescendantNodes()
                .OfType<InvocationExpressionSyntax>();

            bool callsKeysToList = invocations.Any(invocation =>
            {
                var symbol = semanticModel.GetSymbolInfo(invocation).Symbol as IMethodSymbol;
                return symbol?.Name == "ToList" &&
                       symbol.ContainingType?.Name == "Enumerable" &&
                       invocation.Expression is MemberAccessExpressionSyntax memberAccess &&
                       memberAccess.Expression is MemberAccessExpressionSyntax innerMemberAccess &&
                       innerMemberAccess.Name.Identifier.Text == "Keys" &&
                       semanticModel.GetTypeInfo(innerMemberAccess.Expression).Type?.Name == "Dictionary";
            });

            bool callsRemove = invocations.Any(invocation =>
            {
                var symbol = semanticModel.GetSymbolInfo(invocation).Symbol as IMethodSymbol;
                return symbol?.Name == "Remove" &&
                       symbol.ContainingType?.Name == "Dictionary";
            });

            if (callsKeysToList && callsRemove)
            {
                yield return method;
            }
        }
    }
}

Metadata

Metadata

Assignees

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions