dotnet / dotnet/runtime

Dead code in ClrDataAccess::EnumMemoryRegionsWorkerCustom due to hardcoded eFlavor

Open
#124,471 3 comments 1 reaction 0 assignees View on GitHub
area-Diagnostics-coreclr
Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Description

### Description

In ClrDataAccess::EnumMemoryRegionsWorkerCustom, the dump flavor selection logic is unreachable because the local variable eFlavor is explicitly hardcoded to DUMP_FLAVOR_Default.
The function contains logic for DUMP_FLAVOR_CriticalCLRState and DUMP_FLAVOR_NonHeapCLRState, but these branches can never be executed.

### Reproduction Steps

Source: /src/coreclr/debug/daccess/enummem.cpp

Locate ClrDataAccess::EnumMemoryRegionsWorkerCustom.

Observe eFlavor = DUMP_FLAVOR_Default; at the beginning of the function.

Observe that eFlavor is never reassigned before the if/else if chain.

Code:
```cpp
HRESULT ClrDataAccess::EnumMemoryRegionsWorkerCustom()
{
// ...
ECustomDumpFlavor eFlavor;
eFlavor = DUMP_FLAVOR_Default; // Hardcoded value

m_enumMemFlags = CLRDATA_ENUM_MEM_MINI;
Flush();

if (eFlavor == DUMP_FLAVOR_Mini)
{
// Executed if DUMP_FLAVOR_Default == DUMP_FLAVOR_Mini
}
else if (eFlavor == DUMP_FLAVOR_CriticalCLRState) // ALWAYS UNREACHABLE
{
// ...
}
else if (eFlavor == DUMP_FLAVOR_NonHeapCLRState) // ALWAYS UNREACHABLE
{
// ...
}
// ...
}
```
### Expected behavior

The eFlavor variable should be initialized from a dynamic source (such as the global g_ECustomDumpFlavor mentioned in the comments) or passed as a parameter, allowing the DAC to correctly execute different enumeration paths for different dump flavors.

### Actual behavior

The variable is fixed to a constant value, making the logic for CriticalCLRState and NonHeapCLRState dead code. Static analysis tools (SVACE) flag these blocks as unreachable.

### Regression?

No, this appears to be a long-standing issue or an incomplete implementation of the custom dump feature in the DAC.

### Known Workarounds

None. It is currently impossible to trigger the non-default dump flavor paths through this worker.

### Configuration

Target Framework: .NET / CoreCLR

Component: DAC (Data Access Component)

Architecture: All

### Other information

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.