Skip to content
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

Compiler conversion crash with collectoin exprs. #72898

Closed
CyrusNajmabadi opened this issue Apr 6, 2024 · 0 comments · Fixed by #73047
Closed

Compiler conversion crash with collectoin exprs. #72898

CyrusNajmabadi opened this issue Apr 6, 2024 · 0 comments · Fixed by #73047

Comments

@CyrusNajmabadi
Copy link
Member

Crash stack:

StreamJsonRpc.RemoteInvocationException: Object reference not set to an instance of an object.
   at StreamJsonRpc.JsonRpc.<InvokeCoreAsync>d__154`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 Microsoft.CodeAnalysis.Remote.BrokeredServiceConnection`1.<TryInvokeAsync>d__18`1.MoveNext()
RPC server exception:
System.NullReferenceException: Object reference not set to an instance of an object.
      at Microsoft.CodeAnalysis.CSharp.ConversionsBase.ClassifyImplicitBuiltInConversionSlow(TypeSymbol source, TypeSymbol destination, CompoundUseSiteInfo`1& useSiteInfo)
      at Microsoft.CodeAnalysis.CSharp.ConversionsBase.ClassifyImplicitConversionFromType(TypeSymbol source, TypeSymbol destination, CompoundUseSiteInfo`1& useSiteInfo)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.GenerateConversion(Conversions conversions, BoundExpression sourceExpression, TypeSymbol sourceType, TypeSymbol destinationType, Boolean fromExplicitCast, Boolean extensionMethodThisArgument, Boolean isChecked)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.VisitConversion(BoundConversion conversionOpt, BoundExpression conversionOperand, Conversion conversion, TypeWithAnnotations targetTypeWithNullability, TypeWithState operandType, Boolean checkConversion, Boolean fromExplicitCast, Boolean useLegacyWarnings, AssignmentKind assignmentKind, ParameterSymbol parameterOpt, Boolean reportTopLevelWarnings, Boolean reportRemainingWarnings, Boolean extensionMethodThisArgument, Optional`1 stateForLambda, Boolean trackMembers, Location diagnosticLocation, ArrayBuilder`1 previousArgumentConversionResults)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.<VisitOptionalImplicitConversion>g__visitConversion|262_0(BoundExpression expr, TypeWithAnnotations targetTypeOpt, Boolean useLegacyWarnings, Boolean trackMembers, AssignmentKind assignmentKind, BoundExpression operand, Conversion conversion, TypeWithState operandType, Boolean delayCompletionForTargetType)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.<>c__DisplayClass262_0.<VisitOptionalImplicitConversion>b__2(TypeWithAnnotations targetTypeOpt)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.<>c__DisplayClass167_0.<VisitCollectionExpression>g__convertCollection|1(BoundCollectionExpression node, TypeWithAnnotations targetCollectionType, ArrayBuilder`1 completions)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.<>c__DisplayClass167_0.<VisitCollectionExpression>b__0(TypeWithAnnotations resultTypeWithAnnotations)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.VisitConversion(BoundConversion conversionOpt, BoundExpression conversionOperand, Conversion conversion, TypeWithAnnotations targetTypeWithNullability, TypeWithState operandType, Boolean checkConversion, Boolean fromExplicitCast, Boolean useLegacyWarnings, AssignmentKind assignmentKind, ParameterSymbol parameterOpt, Boolean reportTopLevelWarnings, Boolean reportRemainingWarnings, Boolean extensionMethodThisArgument, Optional`1 stateForLambda, Boolean trackMembers, Location diagnosticLocation, ArrayBuilder`1 previousArgumentConversionResults)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.ConvertConditionalOperandOrSwitchExpressionArmResult(BoundExpression node, BoundExpression operand, Conversion conversion, TypeWithAnnotations targetType, TypeWithState operandType, LocalState state, Boolean isReachable)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.<VisitConditionalOperatorCore>g__convertArms|209_0(BoundExpression node, BoundExpression originalConsequence, BoundExpression originalAlternative, LocalState consequenceState, LocalState alternativeState, TypeWithState consequenceRValue, TypeWithState alternativeRValue, BoundExpression consequence, Conversion consequenceConversion, Boolean consequenceEndReachable, BoundExpression alternative, Conversion alternativeConversion, Boolean alternativeEndReachable, TypeWithAnnotations resultTypeWithAnnotations, Boolean wasTargetTyped)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.VisitConditionalOperatorCore(BoundExpression node, Boolean isRef, BoundExpression condition, BoundExpression originalConsequence, BoundExpression originalAlternative)
      at Microsoft.CodeAnalysis.CSharp.AbstractFlowPass`2.VisitConditionalOperator(BoundConditionalOperator node)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.VisitExpressionWithoutStackGuard(BoundExpression node)
      at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionWithStackGuard(BoundExpression node)
      at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionWithStackGuard(Int32& recursionDepth, BoundExpression node)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.VisitOptionalImplicitConversion(BoundExpression expr, TypeWithAnnotations targetTypeOpt, Boolean useLegacyWarnings, Boolean trackMembers, AssignmentKind assignmentKind, Boolean delayCompletionForTargetType)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.VisitReturnStatement(BoundReturnStatement node)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.VisitStatementsWithLocalFunctions(BoundBlock block)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.VisitBlock(BoundBlock node)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.Visit(BoundNode node)
      at Microsoft.CodeAnalysis.CSharp.AbstractFlowPass`2.VisitMethodBodies(BoundBlock blockBody, BoundBlock expressionBody)
      at Microsoft.CodeAnalysis.CSharp.AbstractFlowPass`2.VisitNonConstructorMethodBody(BoundNonConstructorMethodBody node)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.Scan(Boolean& badRegion)
      at Microsoft.CodeAnalysis.CSharp.AbstractFlowPass`2.Analyze(Boolean& badRegion, Optional`1 initialState)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(NullableWalker walker, Symbol symbol, DiagnosticBag diagnostics, Optional`1 initialState, Builder snapshotBuilderOpt, Boolean requiresAnalysis)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.Analyze(CSharpCompilation compilation, Symbol symbol, BoundNode node, Binder binder, Conversions conversions, DiagnosticBag diagnostics, Boolean useConstructorExitWarnings, Boolean useDelegateInvokeParameterTypes, Boolean useDelegateInvokeReturnType, MethodSymbol delegateInvokeMethodOpt, VariableState initialState, MethodSymbol baseOrThisInitializer, Builder analyzedNullabilityMapOpt, Builder snapshotBuilderOpt, ArrayBuilder`1 returnTypesOpt, Boolean getFinalNullableState, VariableState& finalNullableState, Boolean requiresAnalysis)
      at Microsoft.CodeAnalysis.CSharp.NullableWalker.AnalyzeWithSemanticInfo(CSharpCompilation compilation, Symbol symbol, BoundNode node, Binder binder, VariableState initialState, DiagnosticBag diagnostics, Boolean createSnapshots, Boolean requiresAnalysis)
      at Microsoft.CodeAnalysis.CSharp.MethodCompiler.BindMethodBody(MethodSymbol method, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics, Boolean includeInitializersInBody, BoundNode initializersBody, Boolean reportNullableDiagnostics, ImportChain& importChain, Boolean& originalBodyNested, Boolean& prependedDefaultValueTypeConstructorInitializer, InitialState& forSemanticModel)
      at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileMethod(MethodSymbol methodSymbol, Int32 methodOrdinal, ProcessedFieldInitializers& processedInitializers, SynthesizedSubmissionFields previousSubmissionFields, TypeCompilationState compilationState)
      at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(NamedTypeSymbol containingType)
      at Microsoft.CodeAnalysis.CSharp.MethodCompiler.<>c__DisplayClass25_0.<CompileNamedTypeAsync>b__0()
      at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
   --- End of stack trace from previous location ---

Repro:

Using Version 17.10.0 Preview 2.0

Checkout roslyn main 8213da0

open VS. Go to file src\Analyzers\CSharp\Analyzers\UseCollectionInitializer\CSharpUpdateExpressionSyntaxHelper.cs

Change the following code in that file:

image

to:

image

Basically, replace SpecializedCollections.SingletonEnumerable( with [

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment