Skip to content

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode - #152462

Closed
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911
Closed

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode#152462
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911

Conversation

@jakubadamw

@jakubadamwjakubadamw commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

When collecting mentioned items during monomorphization, the collect_alloc() routine was recursively walking vtable allocations, which could lead to infinite recursion if a vtable method's body contained a const embedding another vtable. We can skip the recursive walk when we're only gathering mentioned items. Vtable methods are only relevant during actual codegen, so this should be safe.

Closes#141911.

… mode
When collecting mentioned items during monomorphization, the routine was
recursively walking vtable allocations, which could lead to infinite
recursion if a vtable method's body contained a const embedding another vtable.
We can skip the recursive walk when we're only gathering mentioned items.
Vtable methods are only relevant during actual codegen, so this should be safe.
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 11, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @fmease

rustbot has assigned @fmease.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 66 candidates
  • Random selection from 13 candidates

@Mark-Simulacrum

Copy link
Copy Markdown
Member

Vtable methods are only relevant during actual codegen, so this should be safe.

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@@ -0,0 +1,16 @@
//@ run-pass

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.

The problem resurfaces when compiling without optimizations -Zmir-opt-level=0. The motivation behind "mentioned" collection mode is to ensure consistency across optimization levels. In that sense the existing implementation is working as intended (putting aside the glaring issue of ICE itself).

@fmeasefmease assigned Mark-Simulacrum and tmiasko and unassigned fmeaseFeb 11, 2026
@tmiasko

Copy link
Copy Markdown
Contributor

ICE will be turned into an error in #152120. I don't think collection process needs any changes (except perhaps to improve the diagnostic to indicate a source location that gives rise to the error).

@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@Mark-Simulacrum, these are very helpful questions! You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

@tmiasko, thank you for your feedback as well!

@tmiasko

Copy link
Copy Markdown
Contributor

You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

To be clear, the test case you have already included should fail to compile. This is because evaluating const { std::ptr::null::<VirtualWrapper<T>>() as *const dyn MyTrait }; for T = u8 requires constructing vtable for VirtualWrapper<u8> as MyTrait, which in turn requires constructing vtable for VirtualWrapper<VirtualWrapper<u8>> as MyTrait and so on.

The only issue is that this results in an ICE instead of an error.

@Mark-SimulacrumMark-Simulacrum added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 14, 2026
@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

#141911 has been fixed, closing this.

@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Apr 4, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE:failed to build vtable representation:SizeOverflow

5 participants

@jakubadamw@rustbot@Mark-Simulacrum@tmiasko@fmease
, '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" + '
rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation `MentionedItems` mode by jakubadamw · Pull Request #152462 · rust-lang/rust · GitHub
Skip to content

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode - #152462

Closed
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911
Closed

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode#152462
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911

Conversation

@jakubadamw

@jakubadamwjakubadamw commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

When collecting mentioned items during monomorphization, the collect_alloc() routine was recursively walking vtable allocations, which could lead to infinite recursion if a vtable method's body contained a const embedding another vtable. We can skip the recursive walk when we're only gathering mentioned items. Vtable methods are only relevant during actual codegen, so this should be safe.

Closes#141911.

… mode
When collecting mentioned items during monomorphization, the routine was
recursively walking vtable allocations, which could lead to infinite
recursion if a vtable method's body contained a const embedding another vtable.
We can skip the recursive walk when we're only gathering mentioned items.
Vtable methods are only relevant during actual codegen, so this should be safe.
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 11, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @fmease

rustbot has assigned @fmease.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 66 candidates
  • Random selection from 13 candidates

@Mark-Simulacrum

Copy link
Copy Markdown
Member

Vtable methods are only relevant during actual codegen, so this should be safe.

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@@ -0,0 +1,16 @@
//@ run-pass

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.

The problem resurfaces when compiling without optimizations -Zmir-opt-level=0. The motivation behind "mentioned" collection mode is to ensure consistency across optimization levels. In that sense the existing implementation is working as intended (putting aside the glaring issue of ICE itself).

@fmeasefmease assigned Mark-Simulacrum and tmiasko and unassigned fmeaseFeb 11, 2026
@tmiasko

Copy link
Copy Markdown
Contributor

ICE will be turned into an error in #152120. I don't think collection process needs any changes (except perhaps to improve the diagnostic to indicate a source location that gives rise to the error).

@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@Mark-Simulacrum, these are very helpful questions! You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

@tmiasko, thank you for your feedback as well!

@tmiasko

Copy link
Copy Markdown
Contributor

You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

To be clear, the test case you have already included should fail to compile. This is because evaluating const { std::ptr::null::<VirtualWrapper<T>>() as *const dyn MyTrait }; for T = u8 requires constructing vtable for VirtualWrapper<u8> as MyTrait, which in turn requires constructing vtable for VirtualWrapper<VirtualWrapper<u8>> as MyTrait and so on.

The only issue is that this results in an ICE instead of an error.

@Mark-SimulacrumMark-Simulacrum added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 14, 2026
@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

#141911 has been fixed, closing this.

@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Apr 4, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE:failed to build vtable representation:SizeOverflow

5 participants

@jakubadamw@rustbot@Mark-Simulacrum@tmiasko@fmease
, '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('^' + ".*" + ' rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation `MentionedItems` mode by jakubadamw · Pull Request #152462 · rust-lang/rust · GitHub
Skip to content

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode - #152462

Closed
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911
Closed

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode#152462
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911

Conversation

@jakubadamw

@jakubadamwjakubadamw commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

When collecting mentioned items during monomorphization, the collect_alloc() routine was recursively walking vtable allocations, which could lead to infinite recursion if a vtable method's body contained a const embedding another vtable. We can skip the recursive walk when we're only gathering mentioned items. Vtable methods are only relevant during actual codegen, so this should be safe.

Closes#141911.

… mode
When collecting mentioned items during monomorphization, the routine was
recursively walking vtable allocations, which could lead to infinite
recursion if a vtable method's body contained a const embedding another vtable.
We can skip the recursive walk when we're only gathering mentioned items.
Vtable methods are only relevant during actual codegen, so this should be safe.
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 11, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @fmease

rustbot has assigned @fmease.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 66 candidates
  • Random selection from 13 candidates

@Mark-Simulacrum

Copy link
Copy Markdown
Member

Vtable methods are only relevant during actual codegen, so this should be safe.

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@@ -0,0 +1,16 @@
//@ run-pass

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.

The problem resurfaces when compiling without optimizations -Zmir-opt-level=0. The motivation behind "mentioned" collection mode is to ensure consistency across optimization levels. In that sense the existing implementation is working as intended (putting aside the glaring issue of ICE itself).

@fmeasefmease assigned Mark-Simulacrum and tmiasko and unassigned fmeaseFeb 11, 2026
@tmiasko

Copy link
Copy Markdown
Contributor

ICE will be turned into an error in #152120. I don't think collection process needs any changes (except perhaps to improve the diagnostic to indicate a source location that gives rise to the error).

@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@Mark-Simulacrum, these are very helpful questions! You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

@tmiasko, thank you for your feedback as well!

@tmiasko

Copy link
Copy Markdown
Contributor

You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

To be clear, the test case you have already included should fail to compile. This is because evaluating const { std::ptr::null::<VirtualWrapper<T>>() as *const dyn MyTrait }; for T = u8 requires constructing vtable for VirtualWrapper<u8> as MyTrait, which in turn requires constructing vtable for VirtualWrapper<VirtualWrapper<u8>> as MyTrait and so on.

The only issue is that this results in an ICE instead of an error.

@Mark-SimulacrumMark-Simulacrum added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 14, 2026
@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

#141911 has been fixed, closing this.

@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Apr 4, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE:failed to build vtable representation:SizeOverflow

5 participants

@jakubadamw@rustbot@Mark-Simulacrum@tmiasko@fmease
, '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('^' + ".*" + ' rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation `MentionedItems` mode by jakubadamw · Pull Request #152462 · rust-lang/rust · GitHub
Skip to content

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode - #152462

Closed
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911
Closed

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode#152462
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911

Conversation

@jakubadamw

@jakubadamwjakubadamw commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

When collecting mentioned items during monomorphization, the collect_alloc() routine was recursively walking vtable allocations, which could lead to infinite recursion if a vtable method's body contained a const embedding another vtable. We can skip the recursive walk when we're only gathering mentioned items. Vtable methods are only relevant during actual codegen, so this should be safe.

Closes#141911.

… mode
When collecting mentioned items during monomorphization, the routine was
recursively walking vtable allocations, which could lead to infinite
recursion if a vtable method's body contained a const embedding another vtable.
We can skip the recursive walk when we're only gathering mentioned items.
Vtable methods are only relevant during actual codegen, so this should be safe.
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 11, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @fmease

rustbot has assigned @fmease.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 66 candidates
  • Random selection from 13 candidates

@Mark-Simulacrum

Copy link
Copy Markdown
Member

Vtable methods are only relevant during actual codegen, so this should be safe.

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@@ -0,0 +1,16 @@
//@ run-pass

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.

The problem resurfaces when compiling without optimizations -Zmir-opt-level=0. The motivation behind "mentioned" collection mode is to ensure consistency across optimization levels. In that sense the existing implementation is working as intended (putting aside the glaring issue of ICE itself).

@fmeasefmease assigned Mark-Simulacrum and tmiasko and unassigned fmeaseFeb 11, 2026
@tmiasko

Copy link
Copy Markdown
Contributor

ICE will be turned into an error in #152120. I don't think collection process needs any changes (except perhaps to improve the diagnostic to indicate a source location that gives rise to the error).

@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@Mark-Simulacrum, these are very helpful questions! You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

@tmiasko, thank you for your feedback as well!

@tmiasko

Copy link
Copy Markdown
Contributor

You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

To be clear, the test case you have already included should fail to compile. This is because evaluating const { std::ptr::null::<VirtualWrapper<T>>() as *const dyn MyTrait }; for T = u8 requires constructing vtable for VirtualWrapper<u8> as MyTrait, which in turn requires constructing vtable for VirtualWrapper<VirtualWrapper<u8>> as MyTrait and so on.

The only issue is that this results in an ICE instead of an error.

@Mark-SimulacrumMark-Simulacrum added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 14, 2026
@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

#141911 has been fixed, closing this.

@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Apr 4, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE:failed to build vtable representation:SizeOverflow

5 participants

@jakubadamw@rustbot@Mark-Simulacrum@tmiasko@fmease
, '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" + ' rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation `MentionedItems` mode by jakubadamw · Pull Request #152462 · rust-lang/rust · GitHub
Skip to content

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode - #152462

Closed
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911
Closed

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode#152462
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911

Conversation

@jakubadamw

@jakubadamwjakubadamw commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

When collecting mentioned items during monomorphization, the collect_alloc() routine was recursively walking vtable allocations, which could lead to infinite recursion if a vtable method's body contained a const embedding another vtable. We can skip the recursive walk when we're only gathering mentioned items. Vtable methods are only relevant during actual codegen, so this should be safe.

Closes#141911.

… mode
When collecting mentioned items during monomorphization, the routine was
recursively walking vtable allocations, which could lead to infinite
recursion if a vtable method's body contained a const embedding another vtable.
We can skip the recursive walk when we're only gathering mentioned items.
Vtable methods are only relevant during actual codegen, so this should be safe.
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 11, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @fmease

rustbot has assigned @fmease.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 66 candidates
  • Random selection from 13 candidates

@Mark-Simulacrum

Copy link
Copy Markdown
Member

Vtable methods are only relevant during actual codegen, so this should be safe.

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@@ -0,0 +1,16 @@
//@ run-pass

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.

The problem resurfaces when compiling without optimizations -Zmir-opt-level=0. The motivation behind "mentioned" collection mode is to ensure consistency across optimization levels. In that sense the existing implementation is working as intended (putting aside the glaring issue of ICE itself).

@fmeasefmease assigned Mark-Simulacrum and tmiasko and unassigned fmeaseFeb 11, 2026
@tmiasko

Copy link
Copy Markdown
Contributor

ICE will be turned into an error in #152120. I don't think collection process needs any changes (except perhaps to improve the diagnostic to indicate a source location that gives rise to the error).

@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@Mark-Simulacrum, these are very helpful questions! You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

@tmiasko, thank you for your feedback as well!

@tmiasko

Copy link
Copy Markdown
Contributor

You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

To be clear, the test case you have already included should fail to compile. This is because evaluating const { std::ptr::null::<VirtualWrapper<T>>() as *const dyn MyTrait }; for T = u8 requires constructing vtable for VirtualWrapper<u8> as MyTrait, which in turn requires constructing vtable for VirtualWrapper<VirtualWrapper<u8>> as MyTrait and so on.

The only issue is that this results in an ICE instead of an error.

@Mark-SimulacrumMark-Simulacrum added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 14, 2026
@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

#141911 has been fixed, closing this.

@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Apr 4, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE:failed to build vtable representation:SizeOverflow

5 participants

@jakubadamw@rustbot@Mark-Simulacrum@tmiasko@fmease
, '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('^' + ".*" + ' rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation `MentionedItems` mode by jakubadamw · Pull Request #152462 · rust-lang/rust · GitHub
Skip to content

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode - #152462

Closed
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911
Closed

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode#152462
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911

Conversation

@jakubadamw

@jakubadamwjakubadamw commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

When collecting mentioned items during monomorphization, the collect_alloc() routine was recursively walking vtable allocations, which could lead to infinite recursion if a vtable method's body contained a const embedding another vtable. We can skip the recursive walk when we're only gathering mentioned items. Vtable methods are only relevant during actual codegen, so this should be safe.

Closes#141911.

… mode
When collecting mentioned items during monomorphization, the routine was
recursively walking vtable allocations, which could lead to infinite
recursion if a vtable method's body contained a const embedding another vtable.
We can skip the recursive walk when we're only gathering mentioned items.
Vtable methods are only relevant during actual codegen, so this should be safe.
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 11, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @fmease

rustbot has assigned @fmease.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 66 candidates
  • Random selection from 13 candidates

@Mark-Simulacrum

Copy link
Copy Markdown
Member

Vtable methods are only relevant during actual codegen, so this should be safe.

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@@ -0,0 +1,16 @@
//@ run-pass

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.

The problem resurfaces when compiling without optimizations -Zmir-opt-level=0. The motivation behind "mentioned" collection mode is to ensure consistency across optimization levels. In that sense the existing implementation is working as intended (putting aside the glaring issue of ICE itself).

@fmeasefmease assigned Mark-Simulacrum and tmiasko and unassigned fmeaseFeb 11, 2026
@tmiasko

Copy link
Copy Markdown
Contributor

ICE will be turned into an error in #152120. I don't think collection process needs any changes (except perhaps to improve the diagnostic to indicate a source location that gives rise to the error).

@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@Mark-Simulacrum, these are very helpful questions! You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

@tmiasko, thank you for your feedback as well!

@tmiasko

Copy link
Copy Markdown
Contributor

You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

To be clear, the test case you have already included should fail to compile. This is because evaluating const { std::ptr::null::<VirtualWrapper<T>>() as *const dyn MyTrait }; for T = u8 requires constructing vtable for VirtualWrapper<u8> as MyTrait, which in turn requires constructing vtable for VirtualWrapper<VirtualWrapper<u8>> as MyTrait and so on.

The only issue is that this results in an ICE instead of an error.

@Mark-SimulacrumMark-Simulacrum added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 14, 2026
@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

#141911 has been fixed, closing this.

@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Apr 4, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE:failed to build vtable representation:SizeOverflow

5 participants

@jakubadamw@rustbot@Mark-Simulacrum@tmiasko@fmease
, '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('^' + ".*" + ' rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation `MentionedItems` mode by jakubadamw · Pull Request #152462 · rust-lang/rust · GitHub
Skip to content

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode - #152462

Closed
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911
Closed

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode#152462
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911

Conversation

@jakubadamw

@jakubadamwjakubadamw commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

When collecting mentioned items during monomorphization, the collect_alloc() routine was recursively walking vtable allocations, which could lead to infinite recursion if a vtable method's body contained a const embedding another vtable. We can skip the recursive walk when we're only gathering mentioned items. Vtable methods are only relevant during actual codegen, so this should be safe.

Closes#141911.

… mode
When collecting mentioned items during monomorphization, the routine was
recursively walking vtable allocations, which could lead to infinite
recursion if a vtable method's body contained a const embedding another vtable.
We can skip the recursive walk when we're only gathering mentioned items.
Vtable methods are only relevant during actual codegen, so this should be safe.
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 11, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @fmease

rustbot has assigned @fmease.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 66 candidates
  • Random selection from 13 candidates

@Mark-Simulacrum

Copy link
Copy Markdown
Member

Vtable methods are only relevant during actual codegen, so this should be safe.

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@@ -0,0 +1,16 @@
//@ run-pass

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.

The problem resurfaces when compiling without optimizations -Zmir-opt-level=0. The motivation behind "mentioned" collection mode is to ensure consistency across optimization levels. In that sense the existing implementation is working as intended (putting aside the glaring issue of ICE itself).

@fmeasefmease assigned Mark-Simulacrum and tmiasko and unassigned fmeaseFeb 11, 2026
@tmiasko

Copy link
Copy Markdown
Contributor

ICE will be turned into an error in #152120. I don't think collection process needs any changes (except perhaps to improve the diagnostic to indicate a source location that gives rise to the error).

@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@Mark-Simulacrum, these are very helpful questions! You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

@tmiasko, thank you for your feedback as well!

@tmiasko

Copy link
Copy Markdown
Contributor

You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

To be clear, the test case you have already included should fail to compile. This is because evaluating const { std::ptr::null::<VirtualWrapper<T>>() as *const dyn MyTrait }; for T = u8 requires constructing vtable for VirtualWrapper<u8> as MyTrait, which in turn requires constructing vtable for VirtualWrapper<VirtualWrapper<u8>> as MyTrait and so on.

The only issue is that this results in an ICE instead of an error.

@Mark-SimulacrumMark-Simulacrum added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 14, 2026
@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

#141911 has been fixed, closing this.

@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Apr 4, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE:failed to build vtable representation:SizeOverflow

5 participants

@jakubadamw@rustbot@Mark-Simulacrum@tmiasko@fmease
, '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); } })(); })(); rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation `MentionedItems` mode by jakubadamw · Pull Request #152462 · rust-lang/rust · GitHub
Skip to content

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode - #152462

Closed
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911
Closed

rustc_monomorphize: Skip vtable alloc collection in the pre-optimisation MentionedItems mode#152462
jakubadamw wants to merge 2 commits into
rust-lang:mainfrom
jakubadamw:issue-141911

Conversation

@jakubadamw

@jakubadamwjakubadamw commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

When collecting mentioned items during monomorphization, the collect_alloc() routine was recursively walking vtable allocations, which could lead to infinite recursion if a vtable method's body contained a const embedding another vtable. We can skip the recursive walk when we're only gathering mentioned items. Vtable methods are only relevant during actual codegen, so this should be safe.

Closes#141911.

… mode
When collecting mentioned items during monomorphization, the routine was
recursively walking vtable allocations, which could lead to infinite
recursion if a vtable method's body contained a const embedding another vtable.
We can skip the recursive walk when we're only gathering mentioned items.
Vtable methods are only relevant during actual codegen, so this should be safe.
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 11, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @fmease

rustbot has assigned @fmease.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 66 candidates
  • Random selection from 13 candidates

@Mark-Simulacrum

Copy link
Copy Markdown
Member

Vtable methods are only relevant during actual codegen, so this should be safe.

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@@ -0,0 +1,16 @@
//@ run-pass

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.

The problem resurfaces when compiling without optimizations -Zmir-opt-level=0. The motivation behind "mentioned" collection mode is to ensure consistency across optimization levels. In that sense the existing implementation is working as intended (putting aside the glaring issue of ICE itself).

@fmeasefmease assigned Mark-Simulacrum and tmiasko and unassigned fmeaseFeb 11, 2026
@tmiasko

Copy link
Copy Markdown
Contributor

ICE will be turned into an error in #152120. I don't think collection process needs any changes (except perhaps to improve the diagnostic to indicate a source location that gives rise to the error).

@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

Can you elaborate on "safe"? Are we reaching the mentioned items only brought in via vtables in some other way already? Can this change behavior of existing programs (e.g., make more things compile in check mode)?

@Mark-Simulacrum, these are very helpful questions! You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

@tmiasko, thank you for your feedback as well!

@tmiasko

Copy link
Copy Markdown
Contributor

You're right that this attempt may be preventing some invalid programs from being rejected, and I'll try to come up with a test case that demonstrates it.

To be clear, the test case you have already included should fail to compile. This is because evaluating const { std::ptr::null::<VirtualWrapper<T>>() as *const dyn MyTrait }; for T = u8 requires constructing vtable for VirtualWrapper<u8> as MyTrait, which in turn requires constructing vtable for VirtualWrapper<VirtualWrapper<u8>> as MyTrait and so on.

The only issue is that this results in an ICE instead of an error.

@Mark-SimulacrumMark-Simulacrum added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 14, 2026
@jakubadamw

Copy link
Copy Markdown
ContributorAuthor

#141911 has been fixed, closing this.

@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Apr 4, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE:failed to build vtable representation:SizeOverflow

5 participants

@jakubadamw@rustbot@Mark-Simulacrum@tmiasko@fmease