Skip to content

System.NullReferenceException is thrown when a static field from a ValueTuple type is referenced. #41207

@AlekseyTs

Description

@AlekseyTs
        [Fact]
        public void CustomFields_01()
        {
            var source0 = @"
namespace System
{
    // struct with two values
    public struct ValueTuple<T1, T2>
    {
        public static int F1 = 123;
        public T1 Item1;
        public T2 Item2;

        public ValueTuple(T1 item1, T2 item2)
        {
            this.Item1 = item1;
            this.Item2 = item2;
        }

        public override string ToString()
        {
            return F1.ToString();
        }
    }
}
";

            var source1 = @"
class Program
{
    public static void Main()
    {
        System.Console.WriteLine((1,2).ToString());
    }
}
";

            var comp1 = CreateCompilation(source0 + source1, targetFramework: TargetFramework.Mscorlib46, options: TestOptions.DebugExe);
            CompileAndVerify(comp1, expectedOutput: "123");
        }

Observed:

Microsoft.CodeAnalysis.CSharp.UnitTests.CodeGen.CodeGenTupleTests.CustomFields_01 [FAIL]
  System.NullReferenceException : Object reference not set to an instance of an object.
  Stack Trace:
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter_Field.cs(68,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.MakeTupleFieldAccess(SyntaxNode syntax, FieldSymbol tupleField, BoundExpression rewrittenReceiver, ConstantValue constantValueOpt, LookupResultKind resultKind)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter_Field.cs(28,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.MakeFieldAccess(SyntaxNode syntax, BoundExpression rewrittenReceiver, FieldSymbol fieldSymbol, ConstantValue constantValueOpt, LookupResultKind resultKind, TypeSymbol type, BoundFieldAccess oldNodeOpt)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter_Field.cs(14,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.VisitFieldAccess(BoundFieldAccess node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Generated\BoundNodes.xml.Generated.cs(6330,0): at Microsoft.CodeAnalysis.CSharp.BoundFieldAccess.Accept(BoundTreeVisitor visitor)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\BoundTreeVisitors.cs(149,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\BoundTreeRewriter.cs(94,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.VisitExpressionWithoutStackGuard(BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\BoundTreeVisitors.cs(205,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionWithStackGuard(Int32& recursionDepth, BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\BoundTreeRewriter.cs(89,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.VisitExpressionWithStackGuard(BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter.cs(196,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.VisitExpressionImpl(BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter.cs(170,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.VisitExpression(BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter_Call.cs(139,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.VisitCall(BoundCall node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Generated\BoundNodes.xml.Generated.cs(5374,0): at Microsoft.CodeAnalysis.CSharp.BoundCall.Accept(BoundTreeVisitor visitor)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\BoundTreeVisitors.cs(149,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.Visit(BoundNode node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\BoundTreeRewriter.cs(94,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.VisitExpressionWithoutStackGuard(BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\BoundTreeVisitors.cs(229,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionWithStackGuard(BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\BoundTreeVisitors.cs(209,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeVisitor.VisitExpressionWithStackGuard(Int32& recursionDepth, BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\BoundTreeRewriter.cs(89,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriterWithStackGuard.VisitExpressionWithStackGuard(BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter.cs(196,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.VisitExpressionImpl(BoundExpression node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter.cs(156,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.Visit(BoundNode node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Generated\BoundNodes.xml.Generated.cs(9426,0): at Microsoft.CodeAnalysis.CSharp.BoundTreeRewriter.VisitReturnStatement(BoundReturnStatement node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter_ReturnStatement.cs(15,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.VisitReturnStatement(BoundReturnStatement node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Generated\BoundNodes.xml.Generated.cs(2839,0): at Microsoft.CodeAnalysis.CSharp.BoundReturnStatement.Accept(BoundTreeVisitor visitor)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter.cs(159,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.Visit(BoundNode node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter_Block.cs(97,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.VisitPossibleUsingDeclaration(BoundStatement node, ImmutableArray`1 statements, Int32 statementIndex, Boolean& replacedLocalDeclarations)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter_Block.cs(55,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.VisitStatementSubList(ArrayBuilder`1 builder, ImmutableArray`1 statements, Int32 startIndex)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter_Block.cs(20,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.VisitBlock(BoundBlock node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Generated\BoundNodes.xml.Generated.cs(2571,0): at Microsoft.CodeAnalysis.CSharp.BoundBlock.Accept(BoundTreeVisitor visitor)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter.cs(159,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.Visit(BoundNode node)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Lowering\LocalRewriter\LocalRewriter.cs(101,0): at Microsoft.CodeAnalysis.CSharp.LocalRewriter.Rewrite(CSharpCompilation compilation, MethodSymbol method, Int32 methodOrdinal, NamedTypeSymbol containingType, BoundStatement statement, TypeCompilationState compilationState, SynthesizedSubmissionFields previousSubmissionFields, Boolean allowOmissionOfConditionalCalls, Boolean instrumentForDynamicAnalysis, ImmutableArray`1& dynamicAnalysisSpans, DebugDocumentProvider debugDocumentProvider, DiagnosticBag diagnostics, Boolean& sawLambdas, Boolean& sawLocalFunctions, Boolean& sawAwaitInExceptionHandler)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs(1297,0): at Microsoft.CodeAnalysis.CSharp.MethodCompiler.LowerBodyOrInitializer(MethodSymbol method, Int32 methodOrdinal, BoundStatement body, SynthesizedSubmissionFields previousSubmissionFields, TypeCompilationState compilationState, Boolean instrumentForDynamicAnalysis, DebugDocumentProvider debugDocumentProvider, ImmutableArray`1& dynamicAnalysisSpans, DiagnosticBag diagnostics, VariableSlotAllocator& lazyVariableSlotAllocator, ArrayBuilder`1 lambdaDebugInfoBuilder, ArrayBuilder`1 closureDebugInfoBuilder, StateMachineTypeSymbol& stateMachineTypeOpt)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs(1128,0): at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileMethod(MethodSymbol methodSymbol, Int32 methodOrdinal, ProcessedFieldInitializers& processedInitializers, SynthesizedSubmissionFields previousSubmissionFields, TypeCompilationState compilationState)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs(511,0): at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileNamedType(NamedTypeSymbol containingType)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs(401,0): at Microsoft.CodeAnalysis.CSharp.MethodCompiler.<>c__DisplayClass22_0.<CompileNamedTypeAsTask>b__0()
    F:\GitHub\roslyn\src\Compilers\Core\Portable\InternalUtilities\UICultureUtilities.cs(141,0): at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass5_0.<WithCurrentUICulture>b__0()
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
    --- End of stack trace from previous location where exception was thrown ---
       at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
    --- End of stack trace from previous location where exception was thrown ---
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs(316,0): at Microsoft.CodeAnalysis.CSharp.MethodCompiler.WaitForWorkers()
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Compiler\MethodCompiler.cs(155,0): at Microsoft.CodeAnalysis.CSharp.MethodCompiler.CompileMethodBodies(CSharpCompilation compilation, PEModuleBuilder moduleBeingBuiltOpt, Boolean emittingPdb, Boolean emitTestCoverageData, Boolean hasDeclarationErrors, DiagnosticBag diagnostics, Predicate`1 filterOpt, CancellationToken cancellationToken)
    F:\GitHub\roslyn\src\Compilers\CSharp\Portable\Compilation\CSharpCompilation.cs(2783,0): at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CompileMethods(CommonPEModuleBuilder moduleBuilder, Boolean emittingPdb, Boolean emitMetadataOnly, Boolean emitTestCoverageData, DiagnosticBag diagnostics, Predicate`1 filterOpt, CancellationToken cancellationToken)
    F:\GitHub\roslyn\src\Compilers\Core\Portable\Compilation\Compilation.cs(2489,0): 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, CompilationTestData testData, CancellationToken cancellationToken)
    F:\GitHub\roslyn\src\Test\Utilities\Portable\Compilation\IRuntimeEnvironment.cs(252,0): at Roslyn.Test.Utilities.RuntimeEnvironmentUtilities.EmitCompilationCore(Compilation compilation, IEnumerable`1 manifestResources, DiagnosticBag diagnostics, CompilationTestData testData, EmitOptions emitOptions)
    F:\GitHub\roslyn\src\Test\Utilities\Portable\Compilation\IRuntimeEnvironment.cs(225,0): at Roslyn.Test.Utilities.RuntimeEnvironmentUtilities.EmitCompilation(Compilation compilation, IEnumerable`1 manifestResources, List`1 dependencies, DiagnosticBag diagnostics, CompilationTestData testData, EmitOptions emitOptions)
    F:\GitHub\roslyn\src\Test\Utilities\Portable\Platform\CoreClr\CoreCLRRuntimeEnvironment.cs(43,0): at Roslyn.Test.Utilities.CoreClr.CoreCLRRuntimeEnvironment.Emit(Compilation mainCompilation, IEnumerable`1 manifestResources, EmitOptions emitOptions, Boolean usePdbForDebugging)
    F:\GitHub\roslyn\src\Test\Utilities\Portable\CompilationVerifier.cs(235,0): at Microsoft.CodeAnalysis.Test.Utilities.CompilationVerifier.Emit(IRuntimeEnvironment testEnvironment, IEnumerable`1 manifestResources, EmitOptions emitOptions)
    F:\GitHub\roslyn\src\Test\Utilities\Portable\CompilationVerifier.cs(201,0): at Microsoft.CodeAnalysis.Test.Utilities.CompilationVerifier.Emit(String expectedOutput, Nullable`1 expectedReturnCode, String[] args, IEnumerable`1 manifestResources, EmitOptions emitOptions, Verification peVerify, SignatureDescription[] expectedSignatures)
    F:\GitHub\roslyn\src\Test\Utilities\Portable\CommonTestBase.cs(156,0): at Microsoft.CodeAnalysis.Test.Utilities.CommonTestBase.Emit(Compilation compilation, IEnumerable`1 dependencies, IEnumerable`1 manifestResources, SignatureDescription[] expectedSignatures, String expectedOutput, Nullable`1 expectedReturnCode, String[] args, Action`1 assemblyValidator, Action`1 symbolValidator, EmitOptions emitOptions, Verification verify)
    F:\GitHub\roslyn\src\Test\Utilities\Portable\CommonTestBase.cs(70,0): at Microsoft.CodeAnalysis.Test.Utilities.CommonTestBase.CompileAndVerifyCommon(Compilation compilation, IEnumerable`1 manifestResources, IEnumerable`1 dependencies, Action`1 sourceSymbolValidator, Action`1 assemblyValidator, Action`1 symbolValidator, SignatureDescription[] expectedSignatures, String expectedOutput, Nullable`1 expectedReturnCode, String[] args, EmitOptions emitOptions, Verification verify)
    F:\GitHub\roslyn\src\Compilers\Test\Utilities\CSharp\CSharpTestBase.cs(764,0): at Microsoft.CodeAnalysis.CSharp.Test.Utilities.CSharpTestBase.CompileAndVerify(Compilation compilation, IEnumerable`1 manifestResources, IEnumerable`1 dependencies, Action`1 sourceSymbolValidator, Action`1 validator, Action`1 symbolValidator, SignatureDescription[] expectedSignatures, String expectedOutput, Nullable`1 expectedReturnCode, String[] args, EmitOptions emitOptions, Verification verify)
    F:\GitHub\roslyn\src\Compilers\CSharp\Test\Emit\CodeGen\CodeGenTupleTest.cs(26460,0): at Microsoft.CodeAnalysis.CSharp.UnitTests.CodeGen.CodeGenTupleTests.CustomFields_01()

Metadata

Metadata

Assignees

Labels

BugFeature - TuplesTuplesTenet-ReliabilityCustomer telemetry indicates that the product is failing in a crash/hang/dataloss manner.

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions