Arm64: testGCShadow assert fires when using DOTNET_HeapVerify=2

Open
#112,269 6 comments 1 reaction 1 assignee View on GitHub

@dhartglassMSFT is already working on this.

Since Jul 15, 2026.

Assessment

This issue has not been assessed yet.

Description

area-CodeGen-coreclr
Description

When running the ReliabilityFramework with DOTNET_HeapVerify=2, the test exits in a few seconds with:

Assert failure(PID 978145 [0x000eece1], Thread: 979213 [0xef10d]): !"Pointer updated without using write barrier"
    File: /mnt/sda/home/alahay01/dotnet/runtime_table/src/coreclr/gc/gc.cpp:53068
    Image: /mnt/sda/home/alahay01/dotnet/runtime_table/artifacts/tests/coreclr/linux.arm64.Checked/Tests/Core_Root/corerun

This is the assert in testGCShadow().

Looking at the big comment in testGCShadow(), it suggests that there is a known issue but that that issue has been mitigated by the use of INVALIDGCVALUE. So, I think this is a different bug (possibly related).

Reproduction Steps
./src/tests/build.sh Checked
export CORE_ROOT=$(pwd)/artifacts/tests/coreclr/linux.arm64.Checked/Tests/Core_Root
export RunningLongGCTests=1
export DOTNET_HeapVerify=2
cd artifacts/tests/coreclr/linux.arm64.Checked/GC/Stress/Framework/ReliabilityFramework
./ReliabilityFramework.sh
Expected behavior

Test runs to completion.

Actual behavior
❯ time ./ReliabilityFramework.sh
BEGIN EXECUTION
/home/alahay01/dotnet/runtime_base/artifacts/tests/coreclr/linux.arm64.Checked/Tests/Core_Root/corerun -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false -p System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization=true ReliabilityFramework.dll '-unittest'
Using config file: /mnt/sda/home/alahay01/dotnet/runtime_table/artifacts/tests/coreclr/linux.arm64.Checked/GC/Stress/Framework/ReliabilityFramework/testmix_gc_ci.config
NUMBER_OF_PROCESSORS environment variable not supplied, falling back to Environment
test is 573277.dll
test is allocationwithpins.dll
test is b115557.dll
test is bestfit-finalize.dll
test is concurrentspin2.dll
test is doubLinkStay.dll
test is ExpandHeap.dll
test is GCQueue.dll
test is GCSimulator.dll
test is GCVariant.dll
test is LeakGenThrd.dll
test is MulDimJagAry.dll
test is pinstress.dll
test is plug.dll
test is PlugGaps.dll
test is SingLinkStay.dll
test is StressAllocator.dll
test is StressAllocator.dll
test is ThdTreeGrowingObj.dll
Loading all tests: ...................

Assert failure(PID 1461399 [0x00164c97], Thread: 1461558 [0x164d36]): !"Pointer updated without using write barrier"
    File: /mnt/sda/home/alahay01/dotnet/runtime_base/src/coreclr/gc/gc.cpp:53068
    Image: /mnt/sda/home/alahay01/dotnet/runtime_base/artifacts/tests/coreclr/linux.arm64.Checked/Tests/Core_Root/corerun

./ReliabilityFramework.sh: line 454: 1461399 Aborted                 (core dumped) $LAUNCHER $ExePath "${CLRTestExecutionArguments[@]}"
Expected: 100
Actual: 134
END EXECUTION - FAILED
./ReliabilityFramework.sh  1.80s user 0.20s system 104% cpu 1.921 total
Regression?

Unknown.

Known Workarounds

unset DOTNET_HeapVerify

Configuration

Cobalt 100
8 Cores, 32Gb
Ubuntu 24.04.1 LTS

Head: 0e03405bd25 2025-01-09.. Adam Sitnik don't run drawing tests on Mono (#111208)

Other information

No response

Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dotnet/runtime

All issues in dotnet/runtime

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.