From ef4af112833979c1a8e3cd6eae3e36bdd5f8c654 Mon Sep 17 00:00:00 2001 From: Max Charlamb Date: Tue, 14 Apr 2026 14:54:51 -0400 Subject: [PATCH 1/2] Use Checked runtime for cDAC dump tests Switch dump test builds from Release to Checked runtime configuration (-rc checked) while keeping libs as Release (-lc release). This enables runtime asserts in the CLR, which helps catch issues in the cDAC data descriptors and contract implementations during dump testing. Affects single-leg, xplat dump gen, and xplat dump test stages. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/runtime-diagnostics.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/runtime-diagnostics.yml b/eng/pipelines/runtime-diagnostics.yml index 9574343309c435..013c57cc6bc167 100644 --- a/eng/pipelines/runtime-diagnostics.yml +++ b/eng/pipelines/runtime-diagnostics.yml @@ -213,7 +213,7 @@ extends: shouldContinueOnError: true jobParameters: nameSuffix: CdacDumpTest - buildArgs: -s clr+libs+tools.cdac+tools.cdacdumptests -c $(_BuildConfig) -rc $(_BuildConfig) -lc $(_BuildConfig) /p:SkipDumpVersions=net10.0 + buildArgs: -s clr+libs+tools.cdac+tools.cdacdumptests -c $(_BuildConfig) -rc checked -lc $(_BuildConfig) /p:SkipDumpVersions=net10.0 timeoutInMinutes: 180 postBuildSteps: - template: /eng/pipelines/cdac/prepare-cdac-helix-steps.yml @@ -257,7 +257,7 @@ extends: shouldContinueOnError: true jobParameters: nameSuffix: CdacXPlatDumpGen - buildArgs: -s clr+libs+tools.cdac+tools.cdacdumptests -c $(_BuildConfig) -rc $(_BuildConfig) -lc $(_BuildConfig) /p:SkipDumpVersions=net10.0 + buildArgs: -s clr+libs+tools.cdac+tools.cdacdumptests -c $(_BuildConfig) -rc checked -lc $(_BuildConfig) /p:SkipDumpVersions=net10.0 timeoutInMinutes: 180 postBuildSteps: - template: /eng/pipelines/cdac/prepare-cdac-helix-steps.yml @@ -304,7 +304,7 @@ extends: shouldContinueOnError: true jobParameters: nameSuffix: CdacXPlatDumpTest - buildArgs: -s clr+libs+tools.cdac+tools.cdacdumptests -c $(_BuildConfig) -rc $(_BuildConfig) -lc $(_BuildConfig) /p:SkipDumpVersions=net10.0 + buildArgs: -s clr+libs+tools.cdac+tools.cdacdumptests -c $(_BuildConfig) -rc checked -lc $(_BuildConfig) /p:SkipDumpVersions=net10.0 timeoutInMinutes: 180 postBuildSteps: - template: /eng/pipelines/cdac/prepare-cdac-helix-steps.yml From 9ecb918beb74d7f624b827f17bacca33513c68ec Mon Sep 17 00:00:00 2001 From: Max Charlamb Date: Tue, 14 Apr 2026 16:11:05 -0400 Subject: [PATCH 2/2] Fix data descriptor type mismatches caught by typed field validation - ThreadStore.FirstThreadLink: SLink -> T_POINTER (SLink is a single-pointer struct; managed code reads the pointer directly) - Thread.LastThrownObject: GCHandle -> T_POINTER (OBJECTHANDLE is a pointer type; managed code reads it as a pointer) - Array.m_NumComponents: T_POINTER -> T_UINT32 (native type is DWORD) All three were caught by Debug.Assert in TargetFieldExtensions when running dump tests with a Checked runtime build. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/coreclr/vm/datadescriptor/datadescriptor.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/coreclr/vm/datadescriptor/datadescriptor.inc b/src/coreclr/vm/datadescriptor/datadescriptor.inc index 0ee65734c32da2..ca963706dda8ed 100644 --- a/src/coreclr/vm/datadescriptor/datadescriptor.inc +++ b/src/coreclr/vm/datadescriptor/datadescriptor.inc @@ -49,7 +49,7 @@ CDAC_TYPE_FIELD(Thread, T_POINTER, DebuggerFilterContext, cdac_data::Deb CDAC_TYPE_FIELD(Thread, T_POINTER, ProfilerFilterContext, cdac_data::ProfilerFilterContext) #endif // PROFILING_SUPPORTED CDAC_TYPE_FIELD(Thread, TYPE(GCHandle), GCHandle, cdac_data::ExposedObject) -CDAC_TYPE_FIELD(Thread, TYPE(GCHandle), LastThrownObject, cdac_data::LastThrownObject) +CDAC_TYPE_FIELD(Thread, T_POINTER, LastThrownObject, cdac_data::LastThrownObject) CDAC_TYPE_FIELD(Thread, T_POINTER, LinkNext, cdac_data::Link) CDAC_TYPE_FIELD(Thread, T_POINTER, ThreadLocalDataPtr, cdac_data::ThreadLocalDataPtr) #ifndef TARGET_UNIX @@ -60,7 +60,7 @@ CDAC_TYPE_END(Thread) CDAC_TYPE_BEGIN(ThreadStore) CDAC_TYPE_INDETERMINATE(ThreadStore) -CDAC_TYPE_FIELD(ThreadStore, TYPE(SLink), FirstThreadLink, cdac_data::FirstThreadLink) +CDAC_TYPE_FIELD(ThreadStore, T_POINTER, FirstThreadLink, cdac_data::FirstThreadLink) CDAC_TYPE_FIELD(ThreadStore, T_INT32, ThreadCount, cdac_data::ThreadCount) CDAC_TYPE_FIELD(ThreadStore, T_INT32, UnstartedCount, cdac_data::UnstartedCount) CDAC_TYPE_FIELD(ThreadStore, T_INT32, BackgroundCount, cdac_data::BackgroundCount) @@ -174,7 +174,7 @@ CDAC_TYPE_END(String) CDAC_TYPE_BEGIN(Array) CDAC_TYPE_SIZE(sizeof(ArrayBase)) -CDAC_TYPE_FIELD(Array, T_POINTER, m_NumComponents, cdac_data::m_NumComponents) +CDAC_TYPE_FIELD(Array, T_UINT32, m_NumComponents, cdac_data::m_NumComponents) CDAC_TYPE_END(Array) CDAC_TYPE_BEGIN(InteropSyncBlockInfo)