Skip to content

Fix interpreter delegate calls through shuffle thunks - #132141

Merged
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker
Aug 12, 2026
Merged

Fix interpreter delegate calls through shuffle thunks#132141
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker

Conversation

@BrzVlad

@BrzVladBrzVlad commented Aug 11, 2026

Copy link
Copy Markdown
Member

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.

if ((targetMethod = NonVirtualEntry2MethodDesc(targetAddress)) != NULL)

Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines

ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146

Regressed after #131903

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.
Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines
ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146
CopilotAI lite review requested due to automatic review settings August 11, 2026 16:12
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-libraries-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @BrzVlad, @janvorli
See info in area-owners.md if you want to be subscribed.

@BrzVlad
BrzVlad requested a review from jkotasAugust 11, 2026 16:15

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 PR adjusts NonVirtualEntry2MethodDesc to recognize additional non-method stub code block kinds (wrapper stubs and shuffle thunks) and return NULL so callers can take their existing non-method fallback path instead of hitting the debug assertion when given an entrypoint that doesn’t map to a managed method body.

Changes:

  • Cache the StubCodeBlockKind for RangeList sections to avoid repeated GetCodeBlockKind() calls.
  • After JitCodeToMethodInfo fails, query the stub code block kind and return NULL for STUB_CODE_BLOCK_WRAPPER_STUB and STUB_CODE_BLOCK_SHUFFLE_THUNK to avoid the assertion path.

Comment threadsrc/coreclr/vm/method.cpp Outdated
Comment threadsrc/coreclr/vm/method.cpp Outdated
CopilotAI review requested due to automatic review settings August 12, 2026 05:17

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/vm/method.cpp:2427

  • Dropping the debug _ASSERTE entirely removes a useful invariant check for genuinely unexpected fallthroughs. Given the current logic, fixup/stub precodes return early, so reaching the end of the function with a RANGE_SECTION_RANGELIST should now only be expected for wrapper stubs and shuffle thunks (which don’t map to a MethodDesc). Consider restoring a debug-only assert that limits the new “allowed” cases to those stub kinds, so other accidental regressions still trip early in debug builds.

return NULL;

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/ba-g failures unrelated

@BrzVlad
BrzVlad merged commit e8c760f into dotnet:mainAug 12, 2026
97 of 101 checks passed
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@BrzVlad@jkotas@MichalPetryka
, '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" + '
Fix interpreter delegate calls through shuffle thunks by BrzVlad · Pull Request #132141 · dotnet/runtime · GitHub
Skip to content

Fix interpreter delegate calls through shuffle thunks - #132141

Merged
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker
Aug 12, 2026
Merged

Fix interpreter delegate calls through shuffle thunks#132141
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker

Conversation

@BrzVlad

@BrzVladBrzVlad commented Aug 11, 2026

Copy link
Copy Markdown
Member

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.

if ((targetMethod = NonVirtualEntry2MethodDesc(targetAddress)) != NULL)

Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines

ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146

Regressed after #131903

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.
Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines
ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146
CopilotAI lite review requested due to automatic review settings August 11, 2026 16:12
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-libraries-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @BrzVlad, @janvorli
See info in area-owners.md if you want to be subscribed.

@BrzVlad
BrzVlad requested a review from jkotasAugust 11, 2026 16:15

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 PR adjusts NonVirtualEntry2MethodDesc to recognize additional non-method stub code block kinds (wrapper stubs and shuffle thunks) and return NULL so callers can take their existing non-method fallback path instead of hitting the debug assertion when given an entrypoint that doesn’t map to a managed method body.

Changes:

  • Cache the StubCodeBlockKind for RangeList sections to avoid repeated GetCodeBlockKind() calls.
  • After JitCodeToMethodInfo fails, query the stub code block kind and return NULL for STUB_CODE_BLOCK_WRAPPER_STUB and STUB_CODE_BLOCK_SHUFFLE_THUNK to avoid the assertion path.

Comment threadsrc/coreclr/vm/method.cpp Outdated
Comment threadsrc/coreclr/vm/method.cpp Outdated
CopilotAI review requested due to automatic review settings August 12, 2026 05:17

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/vm/method.cpp:2427

  • Dropping the debug _ASSERTE entirely removes a useful invariant check for genuinely unexpected fallthroughs. Given the current logic, fixup/stub precodes return early, so reaching the end of the function with a RANGE_SECTION_RANGELIST should now only be expected for wrapper stubs and shuffle thunks (which don’t map to a MethodDesc). Consider restoring a debug-only assert that limits the new “allowed” cases to those stub kinds, so other accidental regressions still trip early in debug builds.

return NULL;

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/ba-g failures unrelated

@BrzVlad
BrzVlad merged commit e8c760f into dotnet:mainAug 12, 2026
97 of 101 checks passed
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@BrzVlad@jkotas@MichalPetryka
, '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('^' + ".*" + ' Fix interpreter delegate calls through shuffle thunks by BrzVlad · Pull Request #132141 · dotnet/runtime · GitHub
Skip to content

Fix interpreter delegate calls through shuffle thunks - #132141

Merged
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker
Aug 12, 2026
Merged

Fix interpreter delegate calls through shuffle thunks#132141
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker

Conversation

@BrzVlad

@BrzVladBrzVlad commented Aug 11, 2026

Copy link
Copy Markdown
Member

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.

if ((targetMethod = NonVirtualEntry2MethodDesc(targetAddress)) != NULL)

Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines

ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146

Regressed after #131903

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.
Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines
ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146
CopilotAI lite review requested due to automatic review settings August 11, 2026 16:12
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-libraries-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @BrzVlad, @janvorli
See info in area-owners.md if you want to be subscribed.

@BrzVlad
BrzVlad requested a review from jkotasAugust 11, 2026 16:15

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 PR adjusts NonVirtualEntry2MethodDesc to recognize additional non-method stub code block kinds (wrapper stubs and shuffle thunks) and return NULL so callers can take their existing non-method fallback path instead of hitting the debug assertion when given an entrypoint that doesn’t map to a managed method body.

Changes:

  • Cache the StubCodeBlockKind for RangeList sections to avoid repeated GetCodeBlockKind() calls.
  • After JitCodeToMethodInfo fails, query the stub code block kind and return NULL for STUB_CODE_BLOCK_WRAPPER_STUB and STUB_CODE_BLOCK_SHUFFLE_THUNK to avoid the assertion path.

Comment threadsrc/coreclr/vm/method.cpp Outdated
Comment threadsrc/coreclr/vm/method.cpp Outdated
CopilotAI review requested due to automatic review settings August 12, 2026 05:17

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/vm/method.cpp:2427

  • Dropping the debug _ASSERTE entirely removes a useful invariant check for genuinely unexpected fallthroughs. Given the current logic, fixup/stub precodes return early, so reaching the end of the function with a RANGE_SECTION_RANGELIST should now only be expected for wrapper stubs and shuffle thunks (which don’t map to a MethodDesc). Consider restoring a debug-only assert that limits the new “allowed” cases to those stub kinds, so other accidental regressions still trip early in debug builds.

return NULL;

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/ba-g failures unrelated

@BrzVlad
BrzVlad merged commit e8c760f into dotnet:mainAug 12, 2026
97 of 101 checks passed
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@BrzVlad@jkotas@MichalPetryka
, '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('^' + ".*" + ' Fix interpreter delegate calls through shuffle thunks by BrzVlad · Pull Request #132141 · dotnet/runtime · GitHub
Skip to content

Fix interpreter delegate calls through shuffle thunks - #132141

Merged
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker
Aug 12, 2026
Merged

Fix interpreter delegate calls through shuffle thunks#132141
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker

Conversation

@BrzVlad

@BrzVladBrzVlad commented Aug 11, 2026

Copy link
Copy Markdown
Member

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.

if ((targetMethod = NonVirtualEntry2MethodDesc(targetAddress)) != NULL)

Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines

ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146

Regressed after #131903

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.
Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines
ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146
CopilotAI lite review requested due to automatic review settings August 11, 2026 16:12
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-libraries-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @BrzVlad, @janvorli
See info in area-owners.md if you want to be subscribed.

@BrzVlad
BrzVlad requested a review from jkotasAugust 11, 2026 16:15

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 PR adjusts NonVirtualEntry2MethodDesc to recognize additional non-method stub code block kinds (wrapper stubs and shuffle thunks) and return NULL so callers can take their existing non-method fallback path instead of hitting the debug assertion when given an entrypoint that doesn’t map to a managed method body.

Changes:

  • Cache the StubCodeBlockKind for RangeList sections to avoid repeated GetCodeBlockKind() calls.
  • After JitCodeToMethodInfo fails, query the stub code block kind and return NULL for STUB_CODE_BLOCK_WRAPPER_STUB and STUB_CODE_BLOCK_SHUFFLE_THUNK to avoid the assertion path.

Comment threadsrc/coreclr/vm/method.cpp Outdated
Comment threadsrc/coreclr/vm/method.cpp Outdated
CopilotAI review requested due to automatic review settings August 12, 2026 05:17

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/vm/method.cpp:2427

  • Dropping the debug _ASSERTE entirely removes a useful invariant check for genuinely unexpected fallthroughs. Given the current logic, fixup/stub precodes return early, so reaching the end of the function with a RANGE_SECTION_RANGELIST should now only be expected for wrapper stubs and shuffle thunks (which don’t map to a MethodDesc). Consider restoring a debug-only assert that limits the new “allowed” cases to those stub kinds, so other accidental regressions still trip early in debug builds.

return NULL;

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/ba-g failures unrelated

@BrzVlad
BrzVlad merged commit e8c760f into dotnet:mainAug 12, 2026
97 of 101 checks passed
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@BrzVlad@jkotas@MichalPetryka
, '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" + ' Fix interpreter delegate calls through shuffle thunks by BrzVlad · Pull Request #132141 · dotnet/runtime · GitHub
Skip to content

Fix interpreter delegate calls through shuffle thunks - #132141

Merged
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker
Aug 12, 2026
Merged

Fix interpreter delegate calls through shuffle thunks#132141
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker

Conversation

@BrzVlad

@BrzVladBrzVlad commented Aug 11, 2026

Copy link
Copy Markdown
Member

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.

if ((targetMethod = NonVirtualEntry2MethodDesc(targetAddress)) != NULL)

Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines

ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146

Regressed after #131903

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.
Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines
ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146
CopilotAI lite review requested due to automatic review settings August 11, 2026 16:12
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-libraries-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @BrzVlad, @janvorli
See info in area-owners.md if you want to be subscribed.

@BrzVlad
BrzVlad requested a review from jkotasAugust 11, 2026 16:15

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 PR adjusts NonVirtualEntry2MethodDesc to recognize additional non-method stub code block kinds (wrapper stubs and shuffle thunks) and return NULL so callers can take their existing non-method fallback path instead of hitting the debug assertion when given an entrypoint that doesn’t map to a managed method body.

Changes:

  • Cache the StubCodeBlockKind for RangeList sections to avoid repeated GetCodeBlockKind() calls.
  • After JitCodeToMethodInfo fails, query the stub code block kind and return NULL for STUB_CODE_BLOCK_WRAPPER_STUB and STUB_CODE_BLOCK_SHUFFLE_THUNK to avoid the assertion path.

Comment threadsrc/coreclr/vm/method.cpp Outdated
Comment threadsrc/coreclr/vm/method.cpp Outdated
CopilotAI review requested due to automatic review settings August 12, 2026 05:17

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/vm/method.cpp:2427

  • Dropping the debug _ASSERTE entirely removes a useful invariant check for genuinely unexpected fallthroughs. Given the current logic, fixup/stub precodes return early, so reaching the end of the function with a RANGE_SECTION_RANGELIST should now only be expected for wrapper stubs and shuffle thunks (which don’t map to a MethodDesc). Consider restoring a debug-only assert that limits the new “allowed” cases to those stub kinds, so other accidental regressions still trip early in debug builds.

return NULL;

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/ba-g failures unrelated

@BrzVlad
BrzVlad merged commit e8c760f into dotnet:mainAug 12, 2026
97 of 101 checks passed
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@BrzVlad@jkotas@MichalPetryka
, '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('^' + ".*" + ' Fix interpreter delegate calls through shuffle thunks by BrzVlad · Pull Request #132141 · dotnet/runtime · GitHub
Skip to content

Fix interpreter delegate calls through shuffle thunks - #132141

Merged
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker
Aug 12, 2026
Merged

Fix interpreter delegate calls through shuffle thunks#132141
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker

Conversation

@BrzVlad

@BrzVladBrzVlad commented Aug 11, 2026

Copy link
Copy Markdown
Member

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.

if ((targetMethod = NonVirtualEntry2MethodDesc(targetAddress)) != NULL)

Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines

ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146

Regressed after #131903

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.
Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines
ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146
CopilotAI lite review requested due to automatic review settings August 11, 2026 16:12
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-libraries-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @BrzVlad, @janvorli
See info in area-owners.md if you want to be subscribed.

@BrzVlad
BrzVlad requested a review from jkotasAugust 11, 2026 16:15

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 PR adjusts NonVirtualEntry2MethodDesc to recognize additional non-method stub code block kinds (wrapper stubs and shuffle thunks) and return NULL so callers can take their existing non-method fallback path instead of hitting the debug assertion when given an entrypoint that doesn’t map to a managed method body.

Changes:

  • Cache the StubCodeBlockKind for RangeList sections to avoid repeated GetCodeBlockKind() calls.
  • After JitCodeToMethodInfo fails, query the stub code block kind and return NULL for STUB_CODE_BLOCK_WRAPPER_STUB and STUB_CODE_BLOCK_SHUFFLE_THUNK to avoid the assertion path.

Comment threadsrc/coreclr/vm/method.cpp Outdated
Comment threadsrc/coreclr/vm/method.cpp Outdated
CopilotAI review requested due to automatic review settings August 12, 2026 05:17

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/vm/method.cpp:2427

  • Dropping the debug _ASSERTE entirely removes a useful invariant check for genuinely unexpected fallthroughs. Given the current logic, fixup/stub precodes return early, so reaching the end of the function with a RANGE_SECTION_RANGELIST should now only be expected for wrapper stubs and shuffle thunks (which don’t map to a MethodDesc). Consider restoring a debug-only assert that limits the new “allowed” cases to those stub kinds, so other accidental regressions still trip early in debug builds.

return NULL;

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/ba-g failures unrelated

@BrzVlad
BrzVlad merged commit e8c760f into dotnet:mainAug 12, 2026
97 of 101 checks passed
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@BrzVlad@jkotas@MichalPetryka
, '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); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix interpreter delegate calls through shuffle thunks by BrzVlad · Pull Request #132141 · dotnet/runtime · GitHub
Skip to content

Fix interpreter delegate calls through shuffle thunks - #132141

Merged
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker
Aug 12, 2026
Merged

Fix interpreter delegate calls through shuffle thunks#132141
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker

Conversation

@BrzVlad

@BrzVladBrzVlad commented Aug 11, 2026

Copy link
Copy Markdown
Member

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.

if ((targetMethod = NonVirtualEntry2MethodDesc(targetAddress)) != NULL)

Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines

ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146

Regressed after #131903

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.
Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines
ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146
CopilotAI lite review requested due to automatic review settings August 11, 2026 16:12
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-libraries-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @BrzVlad, @janvorli
See info in area-owners.md if you want to be subscribed.

@BrzVlad
BrzVlad requested a review from jkotasAugust 11, 2026 16:15

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 PR adjusts NonVirtualEntry2MethodDesc to recognize additional non-method stub code block kinds (wrapper stubs and shuffle thunks) and return NULL so callers can take their existing non-method fallback path instead of hitting the debug assertion when given an entrypoint that doesn’t map to a managed method body.

Changes:

  • Cache the StubCodeBlockKind for RangeList sections to avoid repeated GetCodeBlockKind() calls.
  • After JitCodeToMethodInfo fails, query the stub code block kind and return NULL for STUB_CODE_BLOCK_WRAPPER_STUB and STUB_CODE_BLOCK_SHUFFLE_THUNK to avoid the assertion path.

Comment threadsrc/coreclr/vm/method.cpp Outdated
Comment threadsrc/coreclr/vm/method.cpp Outdated
CopilotAI review requested due to automatic review settings August 12, 2026 05:17

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/vm/method.cpp:2427

  • Dropping the debug _ASSERTE entirely removes a useful invariant check for genuinely unexpected fallthroughs. Given the current logic, fixup/stub precodes return early, so reaching the end of the function with a RANGE_SECTION_RANGELIST should now only be expected for wrapper stubs and shuffle thunks (which don’t map to a MethodDesc). Consider restoring a debug-only assert that limits the new “allowed” cases to those stub kinds, so other accidental regressions still trip early in debug builds.

return NULL;

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/ba-g failures unrelated

@BrzVlad
BrzVlad merged commit e8c760f into dotnet:mainAug 12, 2026
97 of 101 checks passed
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@BrzVlad@jkotas@MichalPetryka
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Fix interpreter delegate calls through shuffle thunks by BrzVlad · Pull Request #132141 · dotnet/runtime · GitHub
Skip to content

Fix interpreter delegate calls through shuffle thunks - #132141

Merged
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker
Aug 12, 2026
Merged

Fix interpreter delegate calls through shuffle thunks#132141
BrzVlad merged 2 commits into
dotnet:mainfrom
BrzVlad:fix-interp-stub-linker

Conversation

@BrzVlad

@BrzVladBrzVlad commented Aug 11, 2026

Copy link
Copy Markdown
Member

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.

if ((targetMethod = NonVirtualEntry2MethodDesc(targetAddress)) != NULL)

Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines

ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146

Regressed after #131903

StubLinker-generated wrapper and shuffle stubs are now tracked by the JIT code manager. NonVirtualEntry2MethodDesc can therefore find their code ranges even though they do not map directly to managed method bodies. The assertion path was hit from the interpreter delegate dispatch, passing an address to a shuffle thunk.
Recognize these stub block kinds and return null so callers use their existing non-method fallback path. Fixes assertions on the interpreter pipelines
ASSERT FAILED
Expression: !"NonVirtualEntry2MethodDesc failed"
Location: /__w/1/s/src/coreclr/vm/method.cpp:2428
Function: NonVirtualEntry2MethodDesc
Process: 90146
CopilotAI lite review requested due to automatic review settings August 11, 2026 16:12
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-libraries-interpreter

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @BrzVlad, @janvorli
See info in area-owners.md if you want to be subscribed.

@BrzVlad
BrzVlad requested a review from jkotasAugust 11, 2026 16:15

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 PR adjusts NonVirtualEntry2MethodDesc to recognize additional non-method stub code block kinds (wrapper stubs and shuffle thunks) and return NULL so callers can take their existing non-method fallback path instead of hitting the debug assertion when given an entrypoint that doesn’t map to a managed method body.

Changes:

  • Cache the StubCodeBlockKind for RangeList sections to avoid repeated GetCodeBlockKind() calls.
  • After JitCodeToMethodInfo fails, query the stub code block kind and return NULL for STUB_CODE_BLOCK_WRAPPER_STUB and STUB_CODE_BLOCK_SHUFFLE_THUNK to avoid the assertion path.

Comment threadsrc/coreclr/vm/method.cpp Outdated
Comment threadsrc/coreclr/vm/method.cpp Outdated
CopilotAI review requested due to automatic review settings August 12, 2026 05:17

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/vm/method.cpp:2427

  • Dropping the debug _ASSERTE entirely removes a useful invariant check for genuinely unexpected fallthroughs. Given the current logic, fixup/stub precodes return early, so reaching the end of the function with a RANGE_SECTION_RANGELIST should now only be expected for wrapper stubs and shuffle thunks (which don’t map to a MethodDesc). Consider restoring a debug-only assert that limits the new “allowed” cases to those stub kinds, so other accidental regressions still trip early in debug builds.

return NULL;

@BrzVlad

Copy link
Copy Markdown
MemberAuthor

/ba-g failures unrelated

@BrzVlad
BrzVlad merged commit e8c760f into dotnet:mainAug 12, 2026
97 of 101 checks passed
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@BrzVlad@jkotas@MichalPetryka