Skip to content

Remove base DAM mismatch warning on types - #119419

Merged
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning
Apr 14, 2026
Merged

Remove base DAM mismatch warning on types#119419
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning

Conversation

@sbomer

@sbomersbomer commented Sep 6, 2025

Copy link
Copy Markdown
Member

Fixes#118713(analyzer only for now)
Fixes#119290

This removes the warning for DAM annotation mismatch in the base types of a type declaration. This doesn't cause holes because we produce warnings on the construction of the derived type. Removing the warning enables the use of static methods on such a type.

While implementing this I ran into an ILLink bug around branch removal. We weren't fixing up IL offsets during branch removal, but we were using the offsets as a dictionary key when tracking known stacks during method body scanning. This includes a change to fix up IL offsets during the IL rewrite when we remove unreachable blocks.

Depends on #119291

@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Sep 6, 2025
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Sep 6, 2025
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/illink
See info in area-owners.md if you want to be subscribed.

Moving this warning is more complicated than that for base types
because we would either need to warn on conversion to interfaces,
or warn on every constructor (for kept interface implementations).
@sbomersbomer changed the title Remove analyzer DAM warning on typesRemove base DAM mismatch warning on typesSep 8, 2025
- Move new constraint processing to generic dataflow
- Take new constraint into account for requires dataflow check
MethodBodyScanner tracks known stacks by IL offset,
so these need to be correct when analyzing IL. We can't just
wait for cecil to update offsets for us when writing to disk.
@sbomer
sbomer requested a review from a teamSeptember 15, 2025 20:08
@sbomer
sbomer marked this pull request as ready for review September 15, 2025 20:08
CopilotAI review requested due to automatic review settings September 15, 2025 20:08

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request fixes issues related to Dynamically Accessed Members (DAM) annotation mismatch warnings on base types of type declarations. The changes remove these warnings for base type mismatches since warnings are already produced at construction of derived types. This enables the use of static methods on such types. Additionally, it includes a fix for an ILLink bug around branch removal that affects IL offset tracking during method body scanning.

Key changes include:

  • Removal of DAM mismatch warnings for base types in type declarations
  • Fix for IL offset handling during unreachable block optimization
  • Updates to test expectations reflecting the warning removal
  • Refactoring of analyzer context to better handle trim analyzer instances

Reviewed Changes

Copilot reviewed 27 out of 28 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/tools/illink/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresOnClass.csRemoves expected warnings for base type DAM mismatches
src/tools/illink/test/Mono.Linker.Tests.Cases/Generics/GenericConstraints.csAdds test case for new constraint on methods
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterWarningLocation.csUpdates warning expectations and adds constructor calls
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlowMarking.csUpdates test expectations and changes class to interface
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlow.csRemoves base type DAM mismatch warnings from tests
src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/GenericsTests.csAdds test method for generic constraints
src/tools/illink/src/linker/Linker.Steps/UnreachableBlocksOptimizer.csFixes IL offset tracking during instruction replacement
src/tools/illink/src/linker/Linker.Steps/MarkStep.csRemoves base type generic argument data flow processing
src/tools/illink/src/linker/Linker.Dataflow/GenericArgumentDataFlow.csAdds new constraint handling and updates parameter processing
src/tools/illink/src/linker/Linker.Dataflow/FlowAnnotations.csAdds methods to check for generic parameter new constraints
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisVisitor.csUpdates analyzer context usage
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisReflectionAccessPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisMethodCallPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisGenericInstantiationPattern.csUpdates analyzer iteration
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisAssignmentPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/RequireDynamicallyAccessedMembersAction.csUpdates constructor to use specific analyzer
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/HandleCallAction.csUpdates constructor parameter
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/GenericArgumentDataFlow.csRefactors to use specific analyzer instances
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/FeatureCheckReturnValuePattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.csAdds generic instantiation processing
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.csAdds generic instantiation processing base functionality
src/tools/illink/src/ILLink.RoslynAnalyzer/DynamicallyAccessedMembersAnalyzer.csRemoves base type processing
src/tools/illink/src/ILLink.RoslynAnalyzer/DataFlowAnalyzerContext.csChanges from boolean flag to specific analyzer instance
src/coreclr/tools/aot/ILCompiler.Trimming.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DataflowAnalyzedTypeDefinitionNode.csRemoves base type generic argument data flow processing
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/Dataflow/GenericArgumentDataFlow.csAdds comments about new constraint handling

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It feels a bit awkward to be passing around the instances of the analyzers, but I don't have a better solution.

- Use interface for generic dataflow
- Remove outdated comment
- Clarify expected warning reason
- Add Kept attributes for clarity
@sbomer
sbomer enabled auto-merge (squash) September 16, 2025 21:19
@jtschuster
jtschuster disabled auto-merge January 9, 2026 21:58
@sbomer
sbomer merged commit a2a8bc0 into dotnet:mainApr 14, 2026
123 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 15, 2026
@sbomer
sbomer deleted the removeBaseDAMWarning branch June 26, 2026 18:08
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ILLink: extra warning for generic parameter with new constraint and annotation Remove DAM warning for base types/interfaces

3 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Remove base DAM mismatch warning on types by sbomer · Pull Request #119419 · dotnet/runtime · GitHub
Skip to content

Remove base DAM mismatch warning on types - #119419

Merged
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning
Apr 14, 2026
Merged

Remove base DAM mismatch warning on types#119419
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning

Conversation

@sbomer

@sbomersbomer commented Sep 6, 2025

Copy link
Copy Markdown
Member

Fixes#118713(analyzer only for now)
Fixes#119290

This removes the warning for DAM annotation mismatch in the base types of a type declaration. This doesn't cause holes because we produce warnings on the construction of the derived type. Removing the warning enables the use of static methods on such a type.

While implementing this I ran into an ILLink bug around branch removal. We weren't fixing up IL offsets during branch removal, but we were using the offsets as a dictionary key when tracking known stacks during method body scanning. This includes a change to fix up IL offsets during the IL rewrite when we remove unreachable blocks.

Depends on #119291

@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Sep 6, 2025
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Sep 6, 2025
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/illink
See info in area-owners.md if you want to be subscribed.

Moving this warning is more complicated than that for base types
because we would either need to warn on conversion to interfaces,
or warn on every constructor (for kept interface implementations).
@sbomersbomer changed the title Remove analyzer DAM warning on typesRemove base DAM mismatch warning on typesSep 8, 2025
- Move new constraint processing to generic dataflow
- Take new constraint into account for requires dataflow check
MethodBodyScanner tracks known stacks by IL offset,
so these need to be correct when analyzing IL. We can't just
wait for cecil to update offsets for us when writing to disk.
@sbomer
sbomer requested a review from a teamSeptember 15, 2025 20:08
@sbomer
sbomer marked this pull request as ready for review September 15, 2025 20:08
CopilotAI review requested due to automatic review settings September 15, 2025 20:08

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request fixes issues related to Dynamically Accessed Members (DAM) annotation mismatch warnings on base types of type declarations. The changes remove these warnings for base type mismatches since warnings are already produced at construction of derived types. This enables the use of static methods on such types. Additionally, it includes a fix for an ILLink bug around branch removal that affects IL offset tracking during method body scanning.

Key changes include:

  • Removal of DAM mismatch warnings for base types in type declarations
  • Fix for IL offset handling during unreachable block optimization
  • Updates to test expectations reflecting the warning removal
  • Refactoring of analyzer context to better handle trim analyzer instances

Reviewed Changes

Copilot reviewed 27 out of 28 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/tools/illink/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresOnClass.csRemoves expected warnings for base type DAM mismatches
src/tools/illink/test/Mono.Linker.Tests.Cases/Generics/GenericConstraints.csAdds test case for new constraint on methods
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterWarningLocation.csUpdates warning expectations and adds constructor calls
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlowMarking.csUpdates test expectations and changes class to interface
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlow.csRemoves base type DAM mismatch warnings from tests
src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/GenericsTests.csAdds test method for generic constraints
src/tools/illink/src/linker/Linker.Steps/UnreachableBlocksOptimizer.csFixes IL offset tracking during instruction replacement
src/tools/illink/src/linker/Linker.Steps/MarkStep.csRemoves base type generic argument data flow processing
src/tools/illink/src/linker/Linker.Dataflow/GenericArgumentDataFlow.csAdds new constraint handling and updates parameter processing
src/tools/illink/src/linker/Linker.Dataflow/FlowAnnotations.csAdds methods to check for generic parameter new constraints
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisVisitor.csUpdates analyzer context usage
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisReflectionAccessPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisMethodCallPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisGenericInstantiationPattern.csUpdates analyzer iteration
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisAssignmentPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/RequireDynamicallyAccessedMembersAction.csUpdates constructor to use specific analyzer
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/HandleCallAction.csUpdates constructor parameter
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/GenericArgumentDataFlow.csRefactors to use specific analyzer instances
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/FeatureCheckReturnValuePattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.csAdds generic instantiation processing
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.csAdds generic instantiation processing base functionality
src/tools/illink/src/ILLink.RoslynAnalyzer/DynamicallyAccessedMembersAnalyzer.csRemoves base type processing
src/tools/illink/src/ILLink.RoslynAnalyzer/DataFlowAnalyzerContext.csChanges from boolean flag to specific analyzer instance
src/coreclr/tools/aot/ILCompiler.Trimming.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DataflowAnalyzedTypeDefinitionNode.csRemoves base type generic argument data flow processing
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/Dataflow/GenericArgumentDataFlow.csAdds comments about new constraint handling

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It feels a bit awkward to be passing around the instances of the analyzers, but I don't have a better solution.

- Use interface for generic dataflow
- Remove outdated comment
- Clarify expected warning reason
- Add Kept attributes for clarity
@sbomer
sbomer enabled auto-merge (squash) September 16, 2025 21:19
@jtschuster
jtschuster disabled auto-merge January 9, 2026 21:58
@sbomer
sbomer merged commit a2a8bc0 into dotnet:mainApr 14, 2026
123 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 15, 2026
@sbomer
sbomer deleted the removeBaseDAMWarning branch June 26, 2026 18:08
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ILLink: extra warning for generic parameter with new constraint and annotation Remove DAM warning for base types/interfaces

3 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Remove base DAM mismatch warning on types by sbomer · Pull Request #119419 · dotnet/runtime · GitHub
Skip to content

Remove base DAM mismatch warning on types - #119419

Merged
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning
Apr 14, 2026
Merged

Remove base DAM mismatch warning on types#119419
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning

Conversation

@sbomer

@sbomersbomer commented Sep 6, 2025

Copy link
Copy Markdown
Member

Fixes#118713(analyzer only for now)
Fixes#119290

This removes the warning for DAM annotation mismatch in the base types of a type declaration. This doesn't cause holes because we produce warnings on the construction of the derived type. Removing the warning enables the use of static methods on such a type.

While implementing this I ran into an ILLink bug around branch removal. We weren't fixing up IL offsets during branch removal, but we were using the offsets as a dictionary key when tracking known stacks during method body scanning. This includes a change to fix up IL offsets during the IL rewrite when we remove unreachable blocks.

Depends on #119291

@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Sep 6, 2025
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Sep 6, 2025
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/illink
See info in area-owners.md if you want to be subscribed.

Moving this warning is more complicated than that for base types
because we would either need to warn on conversion to interfaces,
or warn on every constructor (for kept interface implementations).
@sbomersbomer changed the title Remove analyzer DAM warning on typesRemove base DAM mismatch warning on typesSep 8, 2025
- Move new constraint processing to generic dataflow
- Take new constraint into account for requires dataflow check
MethodBodyScanner tracks known stacks by IL offset,
so these need to be correct when analyzing IL. We can't just
wait for cecil to update offsets for us when writing to disk.
@sbomer
sbomer requested a review from a teamSeptember 15, 2025 20:08
@sbomer
sbomer marked this pull request as ready for review September 15, 2025 20:08
CopilotAI review requested due to automatic review settings September 15, 2025 20:08

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request fixes issues related to Dynamically Accessed Members (DAM) annotation mismatch warnings on base types of type declarations. The changes remove these warnings for base type mismatches since warnings are already produced at construction of derived types. This enables the use of static methods on such types. Additionally, it includes a fix for an ILLink bug around branch removal that affects IL offset tracking during method body scanning.

Key changes include:

  • Removal of DAM mismatch warnings for base types in type declarations
  • Fix for IL offset handling during unreachable block optimization
  • Updates to test expectations reflecting the warning removal
  • Refactoring of analyzer context to better handle trim analyzer instances

Reviewed Changes

Copilot reviewed 27 out of 28 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/tools/illink/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresOnClass.csRemoves expected warnings for base type DAM mismatches
src/tools/illink/test/Mono.Linker.Tests.Cases/Generics/GenericConstraints.csAdds test case for new constraint on methods
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterWarningLocation.csUpdates warning expectations and adds constructor calls
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlowMarking.csUpdates test expectations and changes class to interface
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlow.csRemoves base type DAM mismatch warnings from tests
src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/GenericsTests.csAdds test method for generic constraints
src/tools/illink/src/linker/Linker.Steps/UnreachableBlocksOptimizer.csFixes IL offset tracking during instruction replacement
src/tools/illink/src/linker/Linker.Steps/MarkStep.csRemoves base type generic argument data flow processing
src/tools/illink/src/linker/Linker.Dataflow/GenericArgumentDataFlow.csAdds new constraint handling and updates parameter processing
src/tools/illink/src/linker/Linker.Dataflow/FlowAnnotations.csAdds methods to check for generic parameter new constraints
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisVisitor.csUpdates analyzer context usage
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisReflectionAccessPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisMethodCallPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisGenericInstantiationPattern.csUpdates analyzer iteration
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisAssignmentPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/RequireDynamicallyAccessedMembersAction.csUpdates constructor to use specific analyzer
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/HandleCallAction.csUpdates constructor parameter
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/GenericArgumentDataFlow.csRefactors to use specific analyzer instances
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/FeatureCheckReturnValuePattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.csAdds generic instantiation processing
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.csAdds generic instantiation processing base functionality
src/tools/illink/src/ILLink.RoslynAnalyzer/DynamicallyAccessedMembersAnalyzer.csRemoves base type processing
src/tools/illink/src/ILLink.RoslynAnalyzer/DataFlowAnalyzerContext.csChanges from boolean flag to specific analyzer instance
src/coreclr/tools/aot/ILCompiler.Trimming.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DataflowAnalyzedTypeDefinitionNode.csRemoves base type generic argument data flow processing
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/Dataflow/GenericArgumentDataFlow.csAdds comments about new constraint handling

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It feels a bit awkward to be passing around the instances of the analyzers, but I don't have a better solution.

- Use interface for generic dataflow
- Remove outdated comment
- Clarify expected warning reason
- Add Kept attributes for clarity
@sbomer
sbomer enabled auto-merge (squash) September 16, 2025 21:19
@jtschuster
jtschuster disabled auto-merge January 9, 2026 21:58
@sbomer
sbomer merged commit a2a8bc0 into dotnet:mainApr 14, 2026
123 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 15, 2026
@sbomer
sbomer deleted the removeBaseDAMWarning branch June 26, 2026 18:08
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ILLink: extra warning for generic parameter with new constraint and annotation Remove DAM warning for base types/interfaces

3 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Remove base DAM mismatch warning on types by sbomer · Pull Request #119419 · dotnet/runtime · GitHub
Skip to content

Remove base DAM mismatch warning on types - #119419

Merged
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning
Apr 14, 2026
Merged

Remove base DAM mismatch warning on types#119419
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning

Conversation

@sbomer

@sbomersbomer commented Sep 6, 2025

Copy link
Copy Markdown
Member

Fixes#118713(analyzer only for now)
Fixes#119290

This removes the warning for DAM annotation mismatch in the base types of a type declaration. This doesn't cause holes because we produce warnings on the construction of the derived type. Removing the warning enables the use of static methods on such a type.

While implementing this I ran into an ILLink bug around branch removal. We weren't fixing up IL offsets during branch removal, but we were using the offsets as a dictionary key when tracking known stacks during method body scanning. This includes a change to fix up IL offsets during the IL rewrite when we remove unreachable blocks.

Depends on #119291

@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Sep 6, 2025
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Sep 6, 2025
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/illink
See info in area-owners.md if you want to be subscribed.

Moving this warning is more complicated than that for base types
because we would either need to warn on conversion to interfaces,
or warn on every constructor (for kept interface implementations).
@sbomersbomer changed the title Remove analyzer DAM warning on typesRemove base DAM mismatch warning on typesSep 8, 2025
- Move new constraint processing to generic dataflow
- Take new constraint into account for requires dataflow check
MethodBodyScanner tracks known stacks by IL offset,
so these need to be correct when analyzing IL. We can't just
wait for cecil to update offsets for us when writing to disk.
@sbomer
sbomer requested a review from a teamSeptember 15, 2025 20:08
@sbomer
sbomer marked this pull request as ready for review September 15, 2025 20:08
CopilotAI review requested due to automatic review settings September 15, 2025 20:08

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request fixes issues related to Dynamically Accessed Members (DAM) annotation mismatch warnings on base types of type declarations. The changes remove these warnings for base type mismatches since warnings are already produced at construction of derived types. This enables the use of static methods on such types. Additionally, it includes a fix for an ILLink bug around branch removal that affects IL offset tracking during method body scanning.

Key changes include:

  • Removal of DAM mismatch warnings for base types in type declarations
  • Fix for IL offset handling during unreachable block optimization
  • Updates to test expectations reflecting the warning removal
  • Refactoring of analyzer context to better handle trim analyzer instances

Reviewed Changes

Copilot reviewed 27 out of 28 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/tools/illink/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresOnClass.csRemoves expected warnings for base type DAM mismatches
src/tools/illink/test/Mono.Linker.Tests.Cases/Generics/GenericConstraints.csAdds test case for new constraint on methods
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterWarningLocation.csUpdates warning expectations and adds constructor calls
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlowMarking.csUpdates test expectations and changes class to interface
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlow.csRemoves base type DAM mismatch warnings from tests
src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/GenericsTests.csAdds test method for generic constraints
src/tools/illink/src/linker/Linker.Steps/UnreachableBlocksOptimizer.csFixes IL offset tracking during instruction replacement
src/tools/illink/src/linker/Linker.Steps/MarkStep.csRemoves base type generic argument data flow processing
src/tools/illink/src/linker/Linker.Dataflow/GenericArgumentDataFlow.csAdds new constraint handling and updates parameter processing
src/tools/illink/src/linker/Linker.Dataflow/FlowAnnotations.csAdds methods to check for generic parameter new constraints
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisVisitor.csUpdates analyzer context usage
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisReflectionAccessPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisMethodCallPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisGenericInstantiationPattern.csUpdates analyzer iteration
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisAssignmentPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/RequireDynamicallyAccessedMembersAction.csUpdates constructor to use specific analyzer
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/HandleCallAction.csUpdates constructor parameter
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/GenericArgumentDataFlow.csRefactors to use specific analyzer instances
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/FeatureCheckReturnValuePattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.csAdds generic instantiation processing
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.csAdds generic instantiation processing base functionality
src/tools/illink/src/ILLink.RoslynAnalyzer/DynamicallyAccessedMembersAnalyzer.csRemoves base type processing
src/tools/illink/src/ILLink.RoslynAnalyzer/DataFlowAnalyzerContext.csChanges from boolean flag to specific analyzer instance
src/coreclr/tools/aot/ILCompiler.Trimming.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DataflowAnalyzedTypeDefinitionNode.csRemoves base type generic argument data flow processing
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/Dataflow/GenericArgumentDataFlow.csAdds comments about new constraint handling

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It feels a bit awkward to be passing around the instances of the analyzers, but I don't have a better solution.

- Use interface for generic dataflow
- Remove outdated comment
- Clarify expected warning reason
- Add Kept attributes for clarity
@sbomer
sbomer enabled auto-merge (squash) September 16, 2025 21:19
@jtschuster
jtschuster disabled auto-merge January 9, 2026 21:58
@sbomer
sbomer merged commit a2a8bc0 into dotnet:mainApr 14, 2026
123 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 15, 2026
@sbomer
sbomer deleted the removeBaseDAMWarning branch June 26, 2026 18:08
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ILLink: extra warning for generic parameter with new constraint and annotation Remove DAM warning for base types/interfaces

3 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Remove base DAM mismatch warning on types by sbomer · Pull Request #119419 · dotnet/runtime · GitHub
Skip to content

Remove base DAM mismatch warning on types - #119419

Merged
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning
Apr 14, 2026
Merged

Remove base DAM mismatch warning on types#119419
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning

Conversation

@sbomer

@sbomersbomer commented Sep 6, 2025

Copy link
Copy Markdown
Member

Fixes#118713(analyzer only for now)
Fixes#119290

This removes the warning for DAM annotation mismatch in the base types of a type declaration. This doesn't cause holes because we produce warnings on the construction of the derived type. Removing the warning enables the use of static methods on such a type.

While implementing this I ran into an ILLink bug around branch removal. We weren't fixing up IL offsets during branch removal, but we were using the offsets as a dictionary key when tracking known stacks during method body scanning. This includes a change to fix up IL offsets during the IL rewrite when we remove unreachable blocks.

Depends on #119291

@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Sep 6, 2025
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Sep 6, 2025
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/illink
See info in area-owners.md if you want to be subscribed.

Moving this warning is more complicated than that for base types
because we would either need to warn on conversion to interfaces,
or warn on every constructor (for kept interface implementations).
@sbomersbomer changed the title Remove analyzer DAM warning on typesRemove base DAM mismatch warning on typesSep 8, 2025
- Move new constraint processing to generic dataflow
- Take new constraint into account for requires dataflow check
MethodBodyScanner tracks known stacks by IL offset,
so these need to be correct when analyzing IL. We can't just
wait for cecil to update offsets for us when writing to disk.
@sbomer
sbomer requested a review from a teamSeptember 15, 2025 20:08
@sbomer
sbomer marked this pull request as ready for review September 15, 2025 20:08
CopilotAI review requested due to automatic review settings September 15, 2025 20:08

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request fixes issues related to Dynamically Accessed Members (DAM) annotation mismatch warnings on base types of type declarations. The changes remove these warnings for base type mismatches since warnings are already produced at construction of derived types. This enables the use of static methods on such types. Additionally, it includes a fix for an ILLink bug around branch removal that affects IL offset tracking during method body scanning.

Key changes include:

  • Removal of DAM mismatch warnings for base types in type declarations
  • Fix for IL offset handling during unreachable block optimization
  • Updates to test expectations reflecting the warning removal
  • Refactoring of analyzer context to better handle trim analyzer instances

Reviewed Changes

Copilot reviewed 27 out of 28 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/tools/illink/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresOnClass.csRemoves expected warnings for base type DAM mismatches
src/tools/illink/test/Mono.Linker.Tests.Cases/Generics/GenericConstraints.csAdds test case for new constraint on methods
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterWarningLocation.csUpdates warning expectations and adds constructor calls
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlowMarking.csUpdates test expectations and changes class to interface
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlow.csRemoves base type DAM mismatch warnings from tests
src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/GenericsTests.csAdds test method for generic constraints
src/tools/illink/src/linker/Linker.Steps/UnreachableBlocksOptimizer.csFixes IL offset tracking during instruction replacement
src/tools/illink/src/linker/Linker.Steps/MarkStep.csRemoves base type generic argument data flow processing
src/tools/illink/src/linker/Linker.Dataflow/GenericArgumentDataFlow.csAdds new constraint handling and updates parameter processing
src/tools/illink/src/linker/Linker.Dataflow/FlowAnnotations.csAdds methods to check for generic parameter new constraints
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisVisitor.csUpdates analyzer context usage
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisReflectionAccessPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisMethodCallPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisGenericInstantiationPattern.csUpdates analyzer iteration
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisAssignmentPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/RequireDynamicallyAccessedMembersAction.csUpdates constructor to use specific analyzer
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/HandleCallAction.csUpdates constructor parameter
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/GenericArgumentDataFlow.csRefactors to use specific analyzer instances
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/FeatureCheckReturnValuePattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.csAdds generic instantiation processing
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.csAdds generic instantiation processing base functionality
src/tools/illink/src/ILLink.RoslynAnalyzer/DynamicallyAccessedMembersAnalyzer.csRemoves base type processing
src/tools/illink/src/ILLink.RoslynAnalyzer/DataFlowAnalyzerContext.csChanges from boolean flag to specific analyzer instance
src/coreclr/tools/aot/ILCompiler.Trimming.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DataflowAnalyzedTypeDefinitionNode.csRemoves base type generic argument data flow processing
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/Dataflow/GenericArgumentDataFlow.csAdds comments about new constraint handling

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It feels a bit awkward to be passing around the instances of the analyzers, but I don't have a better solution.

- Use interface for generic dataflow
- Remove outdated comment
- Clarify expected warning reason
- Add Kept attributes for clarity
@sbomer
sbomer enabled auto-merge (squash) September 16, 2025 21:19
@jtschuster
jtschuster disabled auto-merge January 9, 2026 21:58
@sbomer
sbomer merged commit a2a8bc0 into dotnet:mainApr 14, 2026
123 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 15, 2026
@sbomer
sbomer deleted the removeBaseDAMWarning branch June 26, 2026 18:08
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ILLink: extra warning for generic parameter with new constraint and annotation Remove DAM warning for base types/interfaces

3 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Remove base DAM mismatch warning on types by sbomer · Pull Request #119419 · dotnet/runtime · GitHub
Skip to content

Remove base DAM mismatch warning on types - #119419

Merged
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning
Apr 14, 2026
Merged

Remove base DAM mismatch warning on types#119419
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning

Conversation

@sbomer

@sbomersbomer commented Sep 6, 2025

Copy link
Copy Markdown
Member

Fixes#118713(analyzer only for now)
Fixes#119290

This removes the warning for DAM annotation mismatch in the base types of a type declaration. This doesn't cause holes because we produce warnings on the construction of the derived type. Removing the warning enables the use of static methods on such a type.

While implementing this I ran into an ILLink bug around branch removal. We weren't fixing up IL offsets during branch removal, but we were using the offsets as a dictionary key when tracking known stacks during method body scanning. This includes a change to fix up IL offsets during the IL rewrite when we remove unreachable blocks.

Depends on #119291

@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Sep 6, 2025
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Sep 6, 2025
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/illink
See info in area-owners.md if you want to be subscribed.

Moving this warning is more complicated than that for base types
because we would either need to warn on conversion to interfaces,
or warn on every constructor (for kept interface implementations).
@sbomersbomer changed the title Remove analyzer DAM warning on typesRemove base DAM mismatch warning on typesSep 8, 2025
- Move new constraint processing to generic dataflow
- Take new constraint into account for requires dataflow check
MethodBodyScanner tracks known stacks by IL offset,
so these need to be correct when analyzing IL. We can't just
wait for cecil to update offsets for us when writing to disk.
@sbomer
sbomer requested a review from a teamSeptember 15, 2025 20:08
@sbomer
sbomer marked this pull request as ready for review September 15, 2025 20:08
CopilotAI review requested due to automatic review settings September 15, 2025 20:08

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request fixes issues related to Dynamically Accessed Members (DAM) annotation mismatch warnings on base types of type declarations. The changes remove these warnings for base type mismatches since warnings are already produced at construction of derived types. This enables the use of static methods on such types. Additionally, it includes a fix for an ILLink bug around branch removal that affects IL offset tracking during method body scanning.

Key changes include:

  • Removal of DAM mismatch warnings for base types in type declarations
  • Fix for IL offset handling during unreachable block optimization
  • Updates to test expectations reflecting the warning removal
  • Refactoring of analyzer context to better handle trim analyzer instances

Reviewed Changes

Copilot reviewed 27 out of 28 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/tools/illink/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresOnClass.csRemoves expected warnings for base type DAM mismatches
src/tools/illink/test/Mono.Linker.Tests.Cases/Generics/GenericConstraints.csAdds test case for new constraint on methods
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterWarningLocation.csUpdates warning expectations and adds constructor calls
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlowMarking.csUpdates test expectations and changes class to interface
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlow.csRemoves base type DAM mismatch warnings from tests
src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/GenericsTests.csAdds test method for generic constraints
src/tools/illink/src/linker/Linker.Steps/UnreachableBlocksOptimizer.csFixes IL offset tracking during instruction replacement
src/tools/illink/src/linker/Linker.Steps/MarkStep.csRemoves base type generic argument data flow processing
src/tools/illink/src/linker/Linker.Dataflow/GenericArgumentDataFlow.csAdds new constraint handling and updates parameter processing
src/tools/illink/src/linker/Linker.Dataflow/FlowAnnotations.csAdds methods to check for generic parameter new constraints
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisVisitor.csUpdates analyzer context usage
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisReflectionAccessPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisMethodCallPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisGenericInstantiationPattern.csUpdates analyzer iteration
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisAssignmentPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/RequireDynamicallyAccessedMembersAction.csUpdates constructor to use specific analyzer
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/HandleCallAction.csUpdates constructor parameter
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/GenericArgumentDataFlow.csRefactors to use specific analyzer instances
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/FeatureCheckReturnValuePattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.csAdds generic instantiation processing
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.csAdds generic instantiation processing base functionality
src/tools/illink/src/ILLink.RoslynAnalyzer/DynamicallyAccessedMembersAnalyzer.csRemoves base type processing
src/tools/illink/src/ILLink.RoslynAnalyzer/DataFlowAnalyzerContext.csChanges from boolean flag to specific analyzer instance
src/coreclr/tools/aot/ILCompiler.Trimming.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DataflowAnalyzedTypeDefinitionNode.csRemoves base type generic argument data flow processing
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/Dataflow/GenericArgumentDataFlow.csAdds comments about new constraint handling

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It feels a bit awkward to be passing around the instances of the analyzers, but I don't have a better solution.

- Use interface for generic dataflow
- Remove outdated comment
- Clarify expected warning reason
- Add Kept attributes for clarity
@sbomer
sbomer enabled auto-merge (squash) September 16, 2025 21:19
@jtschuster
jtschuster disabled auto-merge January 9, 2026 21:58
@sbomer
sbomer merged commit a2a8bc0 into dotnet:mainApr 14, 2026
123 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 15, 2026
@sbomer
sbomer deleted the removeBaseDAMWarning branch June 26, 2026 18:08
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ILLink: extra warning for generic parameter with new constraint and annotation Remove DAM warning for base types/interfaces

3 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Remove base DAM mismatch warning on types by sbomer · Pull Request #119419 · dotnet/runtime · GitHub
Skip to content

Remove base DAM mismatch warning on types - #119419

Merged
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning
Apr 14, 2026
Merged

Remove base DAM mismatch warning on types#119419
sbomer merged 15 commits into
dotnet:mainfrom
sbomer:removeBaseDAMWarning

Conversation

@sbomer

@sbomersbomer commented Sep 6, 2025

Copy link
Copy Markdown
Member

Fixes#118713(analyzer only for now)
Fixes#119290

This removes the warning for DAM annotation mismatch in the base types of a type declaration. This doesn't cause holes because we produce warnings on the construction of the derived type. Removing the warning enables the use of static methods on such a type.

While implementing this I ran into an ILLink bug around branch removal. We weren't fixing up IL offsets during branch removal, but we were using the offsets as a dictionary key when tracking known stacks during method body scanning. This includes a change to fix up IL offsets during the IL rewrite when we remove unreachable blocks.

Depends on #119291

@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Sep 6, 2025
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Sep 6, 2025
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/illink
See info in area-owners.md if you want to be subscribed.

Moving this warning is more complicated than that for base types
because we would either need to warn on conversion to interfaces,
or warn on every constructor (for kept interface implementations).
@sbomersbomer changed the title Remove analyzer DAM warning on typesRemove base DAM mismatch warning on typesSep 8, 2025
- Move new constraint processing to generic dataflow
- Take new constraint into account for requires dataflow check
MethodBodyScanner tracks known stacks by IL offset,
so these need to be correct when analyzing IL. We can't just
wait for cecil to update offsets for us when writing to disk.
@sbomer
sbomer requested a review from a teamSeptember 15, 2025 20:08
@sbomer
sbomer marked this pull request as ready for review September 15, 2025 20:08
CopilotAI review requested due to automatic review settings September 15, 2025 20:08

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request fixes issues related to Dynamically Accessed Members (DAM) annotation mismatch warnings on base types of type declarations. The changes remove these warnings for base type mismatches since warnings are already produced at construction of derived types. This enables the use of static methods on such types. Additionally, it includes a fix for an ILLink bug around branch removal that affects IL offset tracking during method body scanning.

Key changes include:

  • Removal of DAM mismatch warnings for base types in type declarations
  • Fix for IL offset handling during unreachable block optimization
  • Updates to test expectations reflecting the warning removal
  • Refactoring of analyzer context to better handle trim analyzer instances

Reviewed Changes

Copilot reviewed 27 out of 28 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/tools/illink/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresOnClass.csRemoves expected warnings for base type DAM mismatches
src/tools/illink/test/Mono.Linker.Tests.Cases/Generics/GenericConstraints.csAdds test case for new constraint on methods
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterWarningLocation.csUpdates warning expectations and adds constructor calls
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlowMarking.csUpdates test expectations and changes class to interface
src/tools/illink/test/Mono.Linker.Tests.Cases/DataFlow/GenericParameterDataFlow.csRemoves base type DAM mismatch warnings from tests
src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/GenericsTests.csAdds test method for generic constraints
src/tools/illink/src/linker/Linker.Steps/UnreachableBlocksOptimizer.csFixes IL offset tracking during instruction replacement
src/tools/illink/src/linker/Linker.Steps/MarkStep.csRemoves base type generic argument data flow processing
src/tools/illink/src/linker/Linker.Dataflow/GenericArgumentDataFlow.csAdds new constraint handling and updates parameter processing
src/tools/illink/src/linker/Linker.Dataflow/FlowAnnotations.csAdds methods to check for generic parameter new constraints
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisVisitor.csUpdates analyzer context usage
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisReflectionAccessPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisMethodCallPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisGenericInstantiationPattern.csUpdates analyzer iteration
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/TrimAnalysisAssignmentPattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/RequireDynamicallyAccessedMembersAction.csUpdates constructor to use specific analyzer
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/HandleCallAction.csUpdates constructor parameter
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/GenericArgumentDataFlow.csRefactors to use specific analyzer instances
src/tools/illink/src/ILLink.RoslynAnalyzer/TrimAnalysis/FeatureCheckReturnValuePattern.csUpdates trim analyzer reference
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.csAdds generic instantiation processing
src/tools/illink/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.csAdds generic instantiation processing base functionality
src/tools/illink/src/ILLink.RoslynAnalyzer/DynamicallyAccessedMembersAnalyzer.csRemoves base type processing
src/tools/illink/src/ILLink.RoslynAnalyzer/DataFlowAnalyzerContext.csChanges from boolean flag to specific analyzer instance
src/coreclr/tools/aot/ILCompiler.Trimming.Tests/TestCasesRunner/ResultChecker.csComments out debug logging for test message matching
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DataflowAnalyzedTypeDefinitionNode.csRemoves base type generic argument data flow processing
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/Dataflow/GenericArgumentDataFlow.csAdds comments about new constraint handling

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It feels a bit awkward to be passing around the instances of the analyzers, but I don't have a better solution.

- Use interface for generic dataflow
- Remove outdated comment
- Clarify expected warning reason
- Add Kept attributes for clarity
@sbomer
sbomer enabled auto-merge (squash) September 16, 2025 21:19
@jtschuster
jtschuster disabled auto-merge January 9, 2026 21:58
@sbomer
sbomer merged commit a2a8bc0 into dotnet:mainApr 14, 2026
123 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 15, 2026
@sbomer
sbomer deleted the removeBaseDAMWarning branch June 26, 2026 18:08
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ILLink: extra warning for generic parameter with new constraint and annotation Remove DAM warning for base types/interfaces

3 participants

@sbomer@jtschuster