mGCA: Add associated const type check - #152146

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck
Feb 12, 2026
Merged

mGCA: Add associated const type check#152146
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck

Conversation

@zedddie

@zedddiezedddie commented Feb 5, 2026

Copy link
Copy Markdown
Contributor

#151642

r? BoxyUwU

I didn't bless tests just yet as it only fixes the dyn arm

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 5, 2026
@rust-log-analyzer

This comment has been minimized.


for projection in data.projection_bounds() {
let pred_binder = projection
.with_self_ty(tcx, tcx.types.trait_object_dummy_self)

@BoxyUwUBoxyUwUFeb 5, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.with_self_ty(tcx,tcx.types.trait_object_dummy_self)
.with_self_ty(tcx,t)

I expect using trait_object_dummy_self might lead to code on the error-path crashing so we should use the "actual" self type. It also might just lead to weird diagnostics, such as Infer(FreshTy(0)) appearing in user facing text which we don't want.

Though eventually we'll also support assocaited constants such as const ASSOC: <Self as Other>::Assoc at which point Self will need to be a real type that implements Trait so that we can figure out the type of Assoc.

What's going on here is that we have the type dyn Trait<T, ASSOC = 10> (for example), and we want to construct [dyn Trait<T, ASSOC = 10>, T] as a list of generic arguments to <T as Trait<U>>::ASSOC for when we look at the type of ASSOC.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Oh I really missed we have the type in scope and can use it -_-, then it will be perfect here


trait Trait { #[type_const] const CT: bool; }

// FIXME: this should yield a type mismatch (`bool` v `i32`)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This will get fixed once you add wf checks for T: Trait<ASSOC = N> where clauses.

You can do this by adding fairly similar logic to what you've already done, but in rustc_hir_analysis/src/check/wfcheck.rs in the check_where_clause function

You should be able to similarly iterate over all of the predicates and filter to only those that are associated const bindings

@BoxyUwU

Copy link
Copy Markdown
Member

very nice :)

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from 93d0247 to b2f6570CompareFebruary 7, 2026 06:28
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from b2f6570 to c290611CompareFebruary 7, 2026 22:40
@rust-log-analyzer

This comment has been minimized.

Comment on lines +1577 to +1578
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause().map(|proj| (proj, sp)))?;

does this work?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yes, and i simplified it a bit further now

}

for projection in data.projection_bounds() {
if !t.has_escaping_bound_vars() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can you move this out of the for loop? I think it'd read nicer as we don't care about anything to do with wf of the trait object if it has bound vars, whereas currently it sort of reads like this check is dependent on information about each project (which is not true)

})
.transpose();
pred_binder.map(|pred_binder| {
let pred: ty::Predicate<'tcx> = pred_binder.upcast(tcx);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Obligation::new accepts arbitrary T that implements Upcast you might be able to just do Obligation::new(... pred_binder) but I don't know for sure :)

@BoxyUwU

Copy link
Copy Markdown
Member

Looks correct to me :) Just waiting on you to sort out the tests now I think

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from c290611 to f5d85b4CompareFebruary 9, 2026 10:11
.copied()
.zip(predicates.spans.iter().copied())
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause()?;

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

in previous variant I didn't really use sp, just passed to the next filter_map, so can be simplified to this

@@ -0,0 +1,11 @@
//! Check associated const binding with escaping bound vars doesn't cause ICE

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

was not sure on adding this, but i guess this works as regression test for the check logic :"

@BoxyUwU

Copy link
Copy Markdown
Member

I think this looks good to me, you can undraft and I'll approve this after #152324 has landed (though you'll have to rebase after that to handle the merge conflicts)

@rust-bors

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f5d85b4 to f670e0aCompareFebruary 10, 2026 03:04
@zedddie
zedddie marked this pull request as ready for review February 10, 2026 03:05
@rustbot

Copy link
Copy Markdown
Collaborator

changes to the core type system

cc @lcnr

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 10, 2026
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f670e0a to ec03e39CompareFebruary 10, 2026 05:28
@BoxyUwU

Copy link
Copy Markdown
Member

@bors r+ rollup

thanks for working on this :3

@rust-bors

rust-borsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

📌 Commit ec03e39 has been approved by BoxyUwU

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 10, 2026
…uwer
Rollup of 13 pull requests
Successful merges:
- #149937 (try enabling `linker-messages` by default again)
- #151733 (Use function shims to make sure EII works on apple targets)
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #151142 (Support ADT types in type info reflection)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 10 pull requests
Successful merges:
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
This was referenced Feb 11, 2026
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 9 pull requests
Successful merges:
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
@rust-bors
rust-borsBot merged commit 9a4ce0b into rust-lang:mainFeb 12, 2026
11 checks passed
@rustbotrustbot added this to the 1.95.0 milestone Feb 12, 2026
rust-timer added a commit that referenced this pull request Feb 12, 2026
Rollup merge of #152146 - zedddie:mgca-improve-const-bindings-wfck, r=BoxyUwU
mGCA: Add associated const type check
#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.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.

4 participants

@zedddie@rust-log-analyzer@BoxyUwU@rustbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

mGCA: Add associated const type check - #152146

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck
Feb 12, 2026
Merged

mGCA: Add associated const type check#152146
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck

Conversation

@zedddie

@zedddiezedddie commented Feb 5, 2026

Copy link
Copy Markdown
Contributor

#151642

r? BoxyUwU

I didn't bless tests just yet as it only fixes the dyn arm

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 5, 2026
@rust-log-analyzer

This comment has been minimized.


for projection in data.projection_bounds() {
let pred_binder = projection
.with_self_ty(tcx, tcx.types.trait_object_dummy_self)

@BoxyUwUBoxyUwUFeb 5, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.with_self_ty(tcx,tcx.types.trait_object_dummy_self)
.with_self_ty(tcx,t)

I expect using trait_object_dummy_self might lead to code on the error-path crashing so we should use the "actual" self type. It also might just lead to weird diagnostics, such as Infer(FreshTy(0)) appearing in user facing text which we don't want.

Though eventually we'll also support assocaited constants such as const ASSOC: <Self as Other>::Assoc at which point Self will need to be a real type that implements Trait so that we can figure out the type of Assoc.

What's going on here is that we have the type dyn Trait<T, ASSOC = 10> (for example), and we want to construct [dyn Trait<T, ASSOC = 10>, T] as a list of generic arguments to <T as Trait<U>>::ASSOC for when we look at the type of ASSOC.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Oh I really missed we have the type in scope and can use it -_-, then it will be perfect here


trait Trait { #[type_const] const CT: bool; }

// FIXME: this should yield a type mismatch (`bool` v `i32`)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This will get fixed once you add wf checks for T: Trait<ASSOC = N> where clauses.

You can do this by adding fairly similar logic to what you've already done, but in rustc_hir_analysis/src/check/wfcheck.rs in the check_where_clause function

You should be able to similarly iterate over all of the predicates and filter to only those that are associated const bindings

@BoxyUwU

Copy link
Copy Markdown
Member

very nice :)

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from 93d0247 to b2f6570CompareFebruary 7, 2026 06:28
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from b2f6570 to c290611CompareFebruary 7, 2026 22:40
@rust-log-analyzer

This comment has been minimized.

Comment on lines +1577 to +1578
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause().map(|proj| (proj, sp)))?;

does this work?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yes, and i simplified it a bit further now

}

for projection in data.projection_bounds() {
if !t.has_escaping_bound_vars() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can you move this out of the for loop? I think it'd read nicer as we don't care about anything to do with wf of the trait object if it has bound vars, whereas currently it sort of reads like this check is dependent on information about each project (which is not true)

})
.transpose();
pred_binder.map(|pred_binder| {
let pred: ty::Predicate<'tcx> = pred_binder.upcast(tcx);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Obligation::new accepts arbitrary T that implements Upcast you might be able to just do Obligation::new(... pred_binder) but I don't know for sure :)

@BoxyUwU

Copy link
Copy Markdown
Member

Looks correct to me :) Just waiting on you to sort out the tests now I think

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from c290611 to f5d85b4CompareFebruary 9, 2026 10:11
.copied()
.zip(predicates.spans.iter().copied())
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause()?;

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

in previous variant I didn't really use sp, just passed to the next filter_map, so can be simplified to this

@@ -0,0 +1,11 @@
//! Check associated const binding with escaping bound vars doesn't cause ICE

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

was not sure on adding this, but i guess this works as regression test for the check logic :"

@BoxyUwU

Copy link
Copy Markdown
Member

I think this looks good to me, you can undraft and I'll approve this after #152324 has landed (though you'll have to rebase after that to handle the merge conflicts)

@rust-bors

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f5d85b4 to f670e0aCompareFebruary 10, 2026 03:04
@zedddie
zedddie marked this pull request as ready for review February 10, 2026 03:05
@rustbot

Copy link
Copy Markdown
Collaborator

changes to the core type system

cc @lcnr

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 10, 2026
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f670e0a to ec03e39CompareFebruary 10, 2026 05:28
@BoxyUwU

Copy link
Copy Markdown
Member

@bors r+ rollup

thanks for working on this :3

@rust-bors

rust-borsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

📌 Commit ec03e39 has been approved by BoxyUwU

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 10, 2026
…uwer
Rollup of 13 pull requests
Successful merges:
- #149937 (try enabling `linker-messages` by default again)
- #151733 (Use function shims to make sure EII works on apple targets)
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #151142 (Support ADT types in type info reflection)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 10 pull requests
Successful merges:
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
This was referenced Feb 11, 2026
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 9 pull requests
Successful merges:
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
@rust-bors
rust-borsBot merged commit 9a4ce0b into rust-lang:mainFeb 12, 2026
11 checks passed
@rustbotrustbot added this to the 1.95.0 milestone Feb 12, 2026
rust-timer added a commit that referenced this pull request Feb 12, 2026
Rollup merge of #152146 - zedddie:mgca-improve-const-bindings-wfck, r=BoxyUwU
mGCA: Add associated const type check
#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.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.

4 participants

@zedddie@rust-log-analyzer@BoxyUwU@rustbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

mGCA: Add associated const type check - #152146

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck
Feb 12, 2026
Merged

mGCA: Add associated const type check#152146
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck

Conversation

@zedddie

@zedddiezedddie commented Feb 5, 2026

Copy link
Copy Markdown
Contributor

#151642

r? BoxyUwU

I didn't bless tests just yet as it only fixes the dyn arm

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 5, 2026
@rust-log-analyzer

This comment has been minimized.


for projection in data.projection_bounds() {
let pred_binder = projection
.with_self_ty(tcx, tcx.types.trait_object_dummy_self)

@BoxyUwUBoxyUwUFeb 5, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.with_self_ty(tcx,tcx.types.trait_object_dummy_self)
.with_self_ty(tcx,t)

I expect using trait_object_dummy_self might lead to code on the error-path crashing so we should use the "actual" self type. It also might just lead to weird diagnostics, such as Infer(FreshTy(0)) appearing in user facing text which we don't want.

Though eventually we'll also support assocaited constants such as const ASSOC: <Self as Other>::Assoc at which point Self will need to be a real type that implements Trait so that we can figure out the type of Assoc.

What's going on here is that we have the type dyn Trait<T, ASSOC = 10> (for example), and we want to construct [dyn Trait<T, ASSOC = 10>, T] as a list of generic arguments to <T as Trait<U>>::ASSOC for when we look at the type of ASSOC.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Oh I really missed we have the type in scope and can use it -_-, then it will be perfect here


trait Trait { #[type_const] const CT: bool; }

// FIXME: this should yield a type mismatch (`bool` v `i32`)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This will get fixed once you add wf checks for T: Trait<ASSOC = N> where clauses.

You can do this by adding fairly similar logic to what you've already done, but in rustc_hir_analysis/src/check/wfcheck.rs in the check_where_clause function

You should be able to similarly iterate over all of the predicates and filter to only those that are associated const bindings

@BoxyUwU

Copy link
Copy Markdown
Member

very nice :)

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from 93d0247 to b2f6570CompareFebruary 7, 2026 06:28
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from b2f6570 to c290611CompareFebruary 7, 2026 22:40
@rust-log-analyzer

This comment has been minimized.

Comment on lines +1577 to +1578
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause().map(|proj| (proj, sp)))?;

does this work?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yes, and i simplified it a bit further now

}

for projection in data.projection_bounds() {
if !t.has_escaping_bound_vars() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can you move this out of the for loop? I think it'd read nicer as we don't care about anything to do with wf of the trait object if it has bound vars, whereas currently it sort of reads like this check is dependent on information about each project (which is not true)

})
.transpose();
pred_binder.map(|pred_binder| {
let pred: ty::Predicate<'tcx> = pred_binder.upcast(tcx);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Obligation::new accepts arbitrary T that implements Upcast you might be able to just do Obligation::new(... pred_binder) but I don't know for sure :)

@BoxyUwU

Copy link
Copy Markdown
Member

Looks correct to me :) Just waiting on you to sort out the tests now I think

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from c290611 to f5d85b4CompareFebruary 9, 2026 10:11
.copied()
.zip(predicates.spans.iter().copied())
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause()?;

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

in previous variant I didn't really use sp, just passed to the next filter_map, so can be simplified to this

@@ -0,0 +1,11 @@
//! Check associated const binding with escaping bound vars doesn't cause ICE

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

was not sure on adding this, but i guess this works as regression test for the check logic :"

@BoxyUwU

Copy link
Copy Markdown
Member

I think this looks good to me, you can undraft and I'll approve this after #152324 has landed (though you'll have to rebase after that to handle the merge conflicts)

@rust-bors

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f5d85b4 to f670e0aCompareFebruary 10, 2026 03:04
@zedddie
zedddie marked this pull request as ready for review February 10, 2026 03:05
@rustbot

Copy link
Copy Markdown
Collaborator

changes to the core type system

cc @lcnr

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 10, 2026
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f670e0a to ec03e39CompareFebruary 10, 2026 05:28
@BoxyUwU

Copy link
Copy Markdown
Member

@bors r+ rollup

thanks for working on this :3

@rust-bors

rust-borsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

📌 Commit ec03e39 has been approved by BoxyUwU

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 10, 2026
…uwer
Rollup of 13 pull requests
Successful merges:
- #149937 (try enabling `linker-messages` by default again)
- #151733 (Use function shims to make sure EII works on apple targets)
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #151142 (Support ADT types in type info reflection)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 10 pull requests
Successful merges:
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
This was referenced Feb 11, 2026
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 9 pull requests
Successful merges:
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
@rust-bors
rust-borsBot merged commit 9a4ce0b into rust-lang:mainFeb 12, 2026
11 checks passed
@rustbotrustbot added this to the 1.95.0 milestone Feb 12, 2026
rust-timer added a commit that referenced this pull request Feb 12, 2026
Rollup merge of #152146 - zedddie:mgca-improve-const-bindings-wfck, r=BoxyUwU
mGCA: Add associated const type check
#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.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.

4 participants

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

mGCA: Add associated const type check - #152146

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck
Feb 12, 2026
Merged

mGCA: Add associated const type check#152146
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck

Conversation

@zedddie

@zedddiezedddie commented Feb 5, 2026

Copy link
Copy Markdown
Contributor

#151642

r? BoxyUwU

I didn't bless tests just yet as it only fixes the dyn arm

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 5, 2026
@rust-log-analyzer

This comment has been minimized.


for projection in data.projection_bounds() {
let pred_binder = projection
.with_self_ty(tcx, tcx.types.trait_object_dummy_self)

@BoxyUwUBoxyUwUFeb 5, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.with_self_ty(tcx,tcx.types.trait_object_dummy_self)
.with_self_ty(tcx,t)

I expect using trait_object_dummy_self might lead to code on the error-path crashing so we should use the "actual" self type. It also might just lead to weird diagnostics, such as Infer(FreshTy(0)) appearing in user facing text which we don't want.

Though eventually we'll also support assocaited constants such as const ASSOC: <Self as Other>::Assoc at which point Self will need to be a real type that implements Trait so that we can figure out the type of Assoc.

What's going on here is that we have the type dyn Trait<T, ASSOC = 10> (for example), and we want to construct [dyn Trait<T, ASSOC = 10>, T] as a list of generic arguments to <T as Trait<U>>::ASSOC for when we look at the type of ASSOC.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Oh I really missed we have the type in scope and can use it -_-, then it will be perfect here


trait Trait { #[type_const] const CT: bool; }

// FIXME: this should yield a type mismatch (`bool` v `i32`)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This will get fixed once you add wf checks for T: Trait<ASSOC = N> where clauses.

You can do this by adding fairly similar logic to what you've already done, but in rustc_hir_analysis/src/check/wfcheck.rs in the check_where_clause function

You should be able to similarly iterate over all of the predicates and filter to only those that are associated const bindings

@BoxyUwU

Copy link
Copy Markdown
Member

very nice :)

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from 93d0247 to b2f6570CompareFebruary 7, 2026 06:28
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from b2f6570 to c290611CompareFebruary 7, 2026 22:40
@rust-log-analyzer

This comment has been minimized.

Comment on lines +1577 to +1578
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause().map(|proj| (proj, sp)))?;

does this work?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yes, and i simplified it a bit further now

}

for projection in data.projection_bounds() {
if !t.has_escaping_bound_vars() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can you move this out of the for loop? I think it'd read nicer as we don't care about anything to do with wf of the trait object if it has bound vars, whereas currently it sort of reads like this check is dependent on information about each project (which is not true)

})
.transpose();
pred_binder.map(|pred_binder| {
let pred: ty::Predicate<'tcx> = pred_binder.upcast(tcx);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Obligation::new accepts arbitrary T that implements Upcast you might be able to just do Obligation::new(... pred_binder) but I don't know for sure :)

@BoxyUwU

Copy link
Copy Markdown
Member

Looks correct to me :) Just waiting on you to sort out the tests now I think

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from c290611 to f5d85b4CompareFebruary 9, 2026 10:11
.copied()
.zip(predicates.spans.iter().copied())
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause()?;

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

in previous variant I didn't really use sp, just passed to the next filter_map, so can be simplified to this

@@ -0,0 +1,11 @@
//! Check associated const binding with escaping bound vars doesn't cause ICE

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

was not sure on adding this, but i guess this works as regression test for the check logic :"

@BoxyUwU

Copy link
Copy Markdown
Member

I think this looks good to me, you can undraft and I'll approve this after #152324 has landed (though you'll have to rebase after that to handle the merge conflicts)

@rust-bors

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f5d85b4 to f670e0aCompareFebruary 10, 2026 03:04
@zedddie
zedddie marked this pull request as ready for review February 10, 2026 03:05
@rustbot

Copy link
Copy Markdown
Collaborator

changes to the core type system

cc @lcnr

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 10, 2026
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f670e0a to ec03e39CompareFebruary 10, 2026 05:28
@BoxyUwU

Copy link
Copy Markdown
Member

@bors r+ rollup

thanks for working on this :3

@rust-bors

rust-borsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

📌 Commit ec03e39 has been approved by BoxyUwU

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 10, 2026
…uwer
Rollup of 13 pull requests
Successful merges:
- #149937 (try enabling `linker-messages` by default again)
- #151733 (Use function shims to make sure EII works on apple targets)
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #151142 (Support ADT types in type info reflection)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 10 pull requests
Successful merges:
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
This was referenced Feb 11, 2026
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 9 pull requests
Successful merges:
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
@rust-bors
rust-borsBot merged commit 9a4ce0b into rust-lang:mainFeb 12, 2026
11 checks passed
@rustbotrustbot added this to the 1.95.0 milestone Feb 12, 2026
rust-timer added a commit that referenced this pull request Feb 12, 2026
Rollup merge of #152146 - zedddie:mgca-improve-const-bindings-wfck, r=BoxyUwU
mGCA: Add associated const type check
#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.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.

4 participants

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

mGCA: Add associated const type check - #152146

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck
Feb 12, 2026
Merged

mGCA: Add associated const type check#152146
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck

Conversation

@zedddie

@zedddiezedddie commented Feb 5, 2026

Copy link
Copy Markdown
Contributor

#151642

r? BoxyUwU

I didn't bless tests just yet as it only fixes the dyn arm

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 5, 2026
@rust-log-analyzer

This comment has been minimized.


for projection in data.projection_bounds() {
let pred_binder = projection
.with_self_ty(tcx, tcx.types.trait_object_dummy_self)

@BoxyUwUBoxyUwUFeb 5, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.with_self_ty(tcx,tcx.types.trait_object_dummy_self)
.with_self_ty(tcx,t)

I expect using trait_object_dummy_self might lead to code on the error-path crashing so we should use the "actual" self type. It also might just lead to weird diagnostics, such as Infer(FreshTy(0)) appearing in user facing text which we don't want.

Though eventually we'll also support assocaited constants such as const ASSOC: <Self as Other>::Assoc at which point Self will need to be a real type that implements Trait so that we can figure out the type of Assoc.

What's going on here is that we have the type dyn Trait<T, ASSOC = 10> (for example), and we want to construct [dyn Trait<T, ASSOC = 10>, T] as a list of generic arguments to <T as Trait<U>>::ASSOC for when we look at the type of ASSOC.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Oh I really missed we have the type in scope and can use it -_-, then it will be perfect here


trait Trait { #[type_const] const CT: bool; }

// FIXME: this should yield a type mismatch (`bool` v `i32`)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This will get fixed once you add wf checks for T: Trait<ASSOC = N> where clauses.

You can do this by adding fairly similar logic to what you've already done, but in rustc_hir_analysis/src/check/wfcheck.rs in the check_where_clause function

You should be able to similarly iterate over all of the predicates and filter to only those that are associated const bindings

@BoxyUwU

Copy link
Copy Markdown
Member

very nice :)

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from 93d0247 to b2f6570CompareFebruary 7, 2026 06:28
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from b2f6570 to c290611CompareFebruary 7, 2026 22:40
@rust-log-analyzer

This comment has been minimized.

Comment on lines +1577 to +1578
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause().map(|proj| (proj, sp)))?;

does this work?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yes, and i simplified it a bit further now

}

for projection in data.projection_bounds() {
if !t.has_escaping_bound_vars() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can you move this out of the for loop? I think it'd read nicer as we don't care about anything to do with wf of the trait object if it has bound vars, whereas currently it sort of reads like this check is dependent on information about each project (which is not true)

})
.transpose();
pred_binder.map(|pred_binder| {
let pred: ty::Predicate<'tcx> = pred_binder.upcast(tcx);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Obligation::new accepts arbitrary T that implements Upcast you might be able to just do Obligation::new(... pred_binder) but I don't know for sure :)

@BoxyUwU

Copy link
Copy Markdown
Member

Looks correct to me :) Just waiting on you to sort out the tests now I think

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from c290611 to f5d85b4CompareFebruary 9, 2026 10:11
.copied()
.zip(predicates.spans.iter().copied())
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause()?;

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

in previous variant I didn't really use sp, just passed to the next filter_map, so can be simplified to this

@@ -0,0 +1,11 @@
//! Check associated const binding with escaping bound vars doesn't cause ICE

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

was not sure on adding this, but i guess this works as regression test for the check logic :"

@BoxyUwU

Copy link
Copy Markdown
Member

I think this looks good to me, you can undraft and I'll approve this after #152324 has landed (though you'll have to rebase after that to handle the merge conflicts)

@rust-bors

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f5d85b4 to f670e0aCompareFebruary 10, 2026 03:04
@zedddie
zedddie marked this pull request as ready for review February 10, 2026 03:05
@rustbot

Copy link
Copy Markdown
Collaborator

changes to the core type system

cc @lcnr

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 10, 2026
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f670e0a to ec03e39CompareFebruary 10, 2026 05:28
@BoxyUwU

Copy link
Copy Markdown
Member

@bors r+ rollup

thanks for working on this :3

@rust-bors

rust-borsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

📌 Commit ec03e39 has been approved by BoxyUwU

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 10, 2026
…uwer
Rollup of 13 pull requests
Successful merges:
- #149937 (try enabling `linker-messages` by default again)
- #151733 (Use function shims to make sure EII works on apple targets)
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #151142 (Support ADT types in type info reflection)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 10 pull requests
Successful merges:
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
This was referenced Feb 11, 2026
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 9 pull requests
Successful merges:
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
@rust-bors
rust-borsBot merged commit 9a4ce0b into rust-lang:mainFeb 12, 2026
11 checks passed
@rustbotrustbot added this to the 1.95.0 milestone Feb 12, 2026
rust-timer added a commit that referenced this pull request Feb 12, 2026
Rollup merge of #152146 - zedddie:mgca-improve-const-bindings-wfck, r=BoxyUwU
mGCA: Add associated const type check
#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.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.

4 participants

@zedddie@rust-log-analyzer@BoxyUwU@rustbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

mGCA: Add associated const type check - #152146

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck
Feb 12, 2026
Merged

mGCA: Add associated const type check#152146
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck

Conversation

@zedddie

@zedddiezedddie commented Feb 5, 2026

Copy link
Copy Markdown
Contributor

#151642

r? BoxyUwU

I didn't bless tests just yet as it only fixes the dyn arm

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 5, 2026
@rust-log-analyzer

This comment has been minimized.


for projection in data.projection_bounds() {
let pred_binder = projection
.with_self_ty(tcx, tcx.types.trait_object_dummy_self)

@BoxyUwUBoxyUwUFeb 5, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.with_self_ty(tcx,tcx.types.trait_object_dummy_self)
.with_self_ty(tcx,t)

I expect using trait_object_dummy_self might lead to code on the error-path crashing so we should use the "actual" self type. It also might just lead to weird diagnostics, such as Infer(FreshTy(0)) appearing in user facing text which we don't want.

Though eventually we'll also support assocaited constants such as const ASSOC: <Self as Other>::Assoc at which point Self will need to be a real type that implements Trait so that we can figure out the type of Assoc.

What's going on here is that we have the type dyn Trait<T, ASSOC = 10> (for example), and we want to construct [dyn Trait<T, ASSOC = 10>, T] as a list of generic arguments to <T as Trait<U>>::ASSOC for when we look at the type of ASSOC.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Oh I really missed we have the type in scope and can use it -_-, then it will be perfect here


trait Trait { #[type_const] const CT: bool; }

// FIXME: this should yield a type mismatch (`bool` v `i32`)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This will get fixed once you add wf checks for T: Trait<ASSOC = N> where clauses.

You can do this by adding fairly similar logic to what you've already done, but in rustc_hir_analysis/src/check/wfcheck.rs in the check_where_clause function

You should be able to similarly iterate over all of the predicates and filter to only those that are associated const bindings

@BoxyUwU

Copy link
Copy Markdown
Member

very nice :)

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from 93d0247 to b2f6570CompareFebruary 7, 2026 06:28
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from b2f6570 to c290611CompareFebruary 7, 2026 22:40
@rust-log-analyzer

This comment has been minimized.

Comment on lines +1577 to +1578
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause().map(|proj| (proj, sp)))?;

does this work?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yes, and i simplified it a bit further now

}

for projection in data.projection_bounds() {
if !t.has_escaping_bound_vars() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can you move this out of the for loop? I think it'd read nicer as we don't care about anything to do with wf of the trait object if it has bound vars, whereas currently it sort of reads like this check is dependent on information about each project (which is not true)

})
.transpose();
pred_binder.map(|pred_binder| {
let pred: ty::Predicate<'tcx> = pred_binder.upcast(tcx);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Obligation::new accepts arbitrary T that implements Upcast you might be able to just do Obligation::new(... pred_binder) but I don't know for sure :)

@BoxyUwU

Copy link
Copy Markdown
Member

Looks correct to me :) Just waiting on you to sort out the tests now I think

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from c290611 to f5d85b4CompareFebruary 9, 2026 10:11
.copied()
.zip(predicates.spans.iter().copied())
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause()?;

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

in previous variant I didn't really use sp, just passed to the next filter_map, so can be simplified to this

@@ -0,0 +1,11 @@
//! Check associated const binding with escaping bound vars doesn't cause ICE

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

was not sure on adding this, but i guess this works as regression test for the check logic :"

@BoxyUwU

Copy link
Copy Markdown
Member

I think this looks good to me, you can undraft and I'll approve this after #152324 has landed (though you'll have to rebase after that to handle the merge conflicts)

@rust-bors

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f5d85b4 to f670e0aCompareFebruary 10, 2026 03:04
@zedddie
zedddie marked this pull request as ready for review February 10, 2026 03:05
@rustbot

Copy link
Copy Markdown
Collaborator

changes to the core type system

cc @lcnr

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 10, 2026
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f670e0a to ec03e39CompareFebruary 10, 2026 05:28
@BoxyUwU

Copy link
Copy Markdown
Member

@bors r+ rollup

thanks for working on this :3

@rust-bors

rust-borsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

📌 Commit ec03e39 has been approved by BoxyUwU

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 10, 2026
…uwer
Rollup of 13 pull requests
Successful merges:
- #149937 (try enabling `linker-messages` by default again)
- #151733 (Use function shims to make sure EII works on apple targets)
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #151142 (Support ADT types in type info reflection)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 10 pull requests
Successful merges:
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
This was referenced Feb 11, 2026
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 9 pull requests
Successful merges:
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
@rust-bors
rust-borsBot merged commit 9a4ce0b into rust-lang:mainFeb 12, 2026
11 checks passed
@rustbotrustbot added this to the 1.95.0 milestone Feb 12, 2026
rust-timer added a commit that referenced this pull request Feb 12, 2026
Rollup merge of #152146 - zedddie:mgca-improve-const-bindings-wfck, r=BoxyUwU
mGCA: Add associated const type check
#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.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.

4 participants

@zedddie@rust-log-analyzer@BoxyUwU@rustbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

mGCA: Add associated const type check - #152146

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck
Feb 12, 2026
Merged

mGCA: Add associated const type check#152146
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck

Conversation

@zedddie

@zedddiezedddie commented Feb 5, 2026

Copy link
Copy Markdown
Contributor

#151642

r? BoxyUwU

I didn't bless tests just yet as it only fixes the dyn arm

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 5, 2026
@rust-log-analyzer

This comment has been minimized.


for projection in data.projection_bounds() {
let pred_binder = projection
.with_self_ty(tcx, tcx.types.trait_object_dummy_self)

@BoxyUwUBoxyUwUFeb 5, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.with_self_ty(tcx,tcx.types.trait_object_dummy_self)
.with_self_ty(tcx,t)

I expect using trait_object_dummy_self might lead to code on the error-path crashing so we should use the "actual" self type. It also might just lead to weird diagnostics, such as Infer(FreshTy(0)) appearing in user facing text which we don't want.

Though eventually we'll also support assocaited constants such as const ASSOC: <Self as Other>::Assoc at which point Self will need to be a real type that implements Trait so that we can figure out the type of Assoc.

What's going on here is that we have the type dyn Trait<T, ASSOC = 10> (for example), and we want to construct [dyn Trait<T, ASSOC = 10>, T] as a list of generic arguments to <T as Trait<U>>::ASSOC for when we look at the type of ASSOC.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Oh I really missed we have the type in scope and can use it -_-, then it will be perfect here


trait Trait { #[type_const] const CT: bool; }

// FIXME: this should yield a type mismatch (`bool` v `i32`)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This will get fixed once you add wf checks for T: Trait<ASSOC = N> where clauses.

You can do this by adding fairly similar logic to what you've already done, but in rustc_hir_analysis/src/check/wfcheck.rs in the check_where_clause function

You should be able to similarly iterate over all of the predicates and filter to only those that are associated const bindings

@BoxyUwU

Copy link
Copy Markdown
Member

very nice :)

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from 93d0247 to b2f6570CompareFebruary 7, 2026 06:28
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from b2f6570 to c290611CompareFebruary 7, 2026 22:40
@rust-log-analyzer

This comment has been minimized.

Comment on lines +1577 to +1578
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause().map(|proj| (proj, sp)))?;

does this work?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yes, and i simplified it a bit further now

}

for projection in data.projection_bounds() {
if !t.has_escaping_bound_vars() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can you move this out of the for loop? I think it'd read nicer as we don't care about anything to do with wf of the trait object if it has bound vars, whereas currently it sort of reads like this check is dependent on information about each project (which is not true)

})
.transpose();
pred_binder.map(|pred_binder| {
let pred: ty::Predicate<'tcx> = pred_binder.upcast(tcx);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Obligation::new accepts arbitrary T that implements Upcast you might be able to just do Obligation::new(... pred_binder) but I don't know for sure :)

@BoxyUwU

Copy link
Copy Markdown
Member

Looks correct to me :) Just waiting on you to sort out the tests now I think

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from c290611 to f5d85b4CompareFebruary 9, 2026 10:11
.copied()
.zip(predicates.spans.iter().copied())
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause()?;

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

in previous variant I didn't really use sp, just passed to the next filter_map, so can be simplified to this

@@ -0,0 +1,11 @@
//! Check associated const binding with escaping bound vars doesn't cause ICE

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

was not sure on adding this, but i guess this works as regression test for the check logic :"

@BoxyUwU

Copy link
Copy Markdown
Member

I think this looks good to me, you can undraft and I'll approve this after #152324 has landed (though you'll have to rebase after that to handle the merge conflicts)

@rust-bors

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f5d85b4 to f670e0aCompareFebruary 10, 2026 03:04
@zedddie
zedddie marked this pull request as ready for review February 10, 2026 03:05
@rustbot

Copy link
Copy Markdown
Collaborator

changes to the core type system

cc @lcnr

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 10, 2026
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f670e0a to ec03e39CompareFebruary 10, 2026 05:28
@BoxyUwU

Copy link
Copy Markdown
Member

@bors r+ rollup

thanks for working on this :3

@rust-bors

rust-borsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

📌 Commit ec03e39 has been approved by BoxyUwU

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 10, 2026
…uwer
Rollup of 13 pull requests
Successful merges:
- #149937 (try enabling `linker-messages` by default again)
- #151733 (Use function shims to make sure EII works on apple targets)
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #151142 (Support ADT types in type info reflection)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 10 pull requests
Successful merges:
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
This was referenced Feb 11, 2026
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 9 pull requests
Successful merges:
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
@rust-bors
rust-borsBot merged commit 9a4ce0b into rust-lang:mainFeb 12, 2026
11 checks passed
@rustbotrustbot added this to the 1.95.0 milestone Feb 12, 2026
rust-timer added a commit that referenced this pull request Feb 12, 2026
Rollup merge of #152146 - zedddie:mgca-improve-const-bindings-wfck, r=BoxyUwU
mGCA: Add associated const type check
#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.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.

4 participants

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

mGCA: Add associated const type check - #152146

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck
Feb 12, 2026
Merged

mGCA: Add associated const type check#152146
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
zedddie:mgca-improve-const-bindings-wfck

Conversation

@zedddie

@zedddiezedddie commented Feb 5, 2026

Copy link
Copy Markdown
Contributor

#151642

r? BoxyUwU

I didn't bless tests just yet as it only fixes the dyn arm

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 5, 2026
@rust-log-analyzer

This comment has been minimized.


for projection in data.projection_bounds() {
let pred_binder = projection
.with_self_ty(tcx, tcx.types.trait_object_dummy_self)

@BoxyUwUBoxyUwUFeb 5, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.with_self_ty(tcx,tcx.types.trait_object_dummy_self)
.with_self_ty(tcx,t)

I expect using trait_object_dummy_self might lead to code on the error-path crashing so we should use the "actual" self type. It also might just lead to weird diagnostics, such as Infer(FreshTy(0)) appearing in user facing text which we don't want.

Though eventually we'll also support assocaited constants such as const ASSOC: <Self as Other>::Assoc at which point Self will need to be a real type that implements Trait so that we can figure out the type of Assoc.

What's going on here is that we have the type dyn Trait<T, ASSOC = 10> (for example), and we want to construct [dyn Trait<T, ASSOC = 10>, T] as a list of generic arguments to <T as Trait<U>>::ASSOC for when we look at the type of ASSOC.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Oh I really missed we have the type in scope and can use it -_-, then it will be perfect here


trait Trait { #[type_const] const CT: bool; }

// FIXME: this should yield a type mismatch (`bool` v `i32`)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This will get fixed once you add wf checks for T: Trait<ASSOC = N> where clauses.

You can do this by adding fairly similar logic to what you've already done, but in rustc_hir_analysis/src/check/wfcheck.rs in the check_where_clause function

You should be able to similarly iterate over all of the predicates and filter to only those that are associated const bindings

@BoxyUwU

Copy link
Copy Markdown
Member

very nice :)

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from 93d0247 to b2f6570CompareFebruary 7, 2026 06:28
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from b2f6570 to c290611CompareFebruary 7, 2026 22:40
@rust-log-analyzer

This comment has been minimized.

Comment on lines +1577 to +1578
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
.filter_map(|(clause, sp)| clause.as_projection_clause().map(|proj| (proj, sp)))
.filter_map(|(proj, sp)| {
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause().map(|proj| (proj, sp)))?;

does this work?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

yes, and i simplified it a bit further now

}

for projection in data.projection_bounds() {
if !t.has_escaping_bound_vars() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

can you move this out of the for loop? I think it'd read nicer as we don't care about anything to do with wf of the trait object if it has bound vars, whereas currently it sort of reads like this check is dependent on information about each project (which is not true)

})
.transpose();
pred_binder.map(|pred_binder| {
let pred: ty::Predicate<'tcx> = pred_binder.upcast(tcx);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Obligation::new accepts arbitrary T that implements Upcast you might be able to just do Obligation::new(... pred_binder) but I don't know for sure :)

@BoxyUwU

Copy link
Copy Markdown
Member

Looks correct to me :) Just waiting on you to sort out the tests now I think

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from c290611 to f5d85b4CompareFebruary 9, 2026 10:11
.copied()
.zip(predicates.spans.iter().copied())
.filter_map(|(clause, sp)| {
let proj = clause.as_projection_clause()?;

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

in previous variant I didn't really use sp, just passed to the next filter_map, so can be simplified to this

@@ -0,0 +1,11 @@
//! Check associated const binding with escaping bound vars doesn't cause ICE

@zedddiezedddieFeb 9, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

was not sure on adding this, but i guess this works as regression test for the check logic :"

@BoxyUwU

Copy link
Copy Markdown
Member

I think this looks good to me, you can undraft and I'll approve this after #152324 has landed (though you'll have to rebase after that to handle the merge conflicts)

@rust-bors

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f5d85b4 to f670e0aCompareFebruary 10, 2026 03:04
@zedddie
zedddie marked this pull request as ready for review February 10, 2026 03:05
@rustbot

Copy link
Copy Markdown
Collaborator

changes to the core type system

cc @lcnr

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 10, 2026
@rust-log-analyzer

This comment has been minimized.

@zedddie
zedddieforce-pushed the mgca-improve-const-bindings-wfck branch from f670e0a to ec03e39CompareFebruary 10, 2026 05:28
@BoxyUwU

Copy link
Copy Markdown
Member

@bors r+ rollup

thanks for working on this :3

@rust-bors

rust-borsBot commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

📌 Commit ec03e39 has been approved by BoxyUwU

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 10, 2026
…uwer
Rollup of 13 pull requests
Successful merges:
- #149937 (try enabling `linker-messages` by default again)
- #151733 (Use function shims to make sure EII works on apple targets)
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #151142 (Support ADT types in type info reflection)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 10, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 10 pull requests
Successful merges:
- #152120 (Don't ICE on layout error in vtable computation)
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 11, 2026
…s-wfck, r=BoxyUwU
mGCA: Add associated const type check
rust-lang#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
This was referenced Feb 11, 2026
rust-borsBot pushed a commit that referenced this pull request Feb 11, 2026
Rollup of 9 pull requests
Successful merges:
- #152419 (Move more query system code)
- #152431 (Restrict the set of things that const stability can be applied to)
- #152436 (Reenable a GCI+mGCA+GCPT test case)
- #152021 (Bump tvOS, visionOS and watchOS Aarch64 targets to tier 2)
- #152146 (mGCA: Add associated const type check)
- #152372 (style: remove unneeded trailing commas)
- #152383 (BikeshedGuaranteedNoDrop trait: add comments indicating that it can be observed on stable)
- #152397 (Update books)
- #152441 (Fix typos and grammar in top-level and src/doc documentation)
@rust-bors
rust-borsBot merged commit 9a4ce0b into rust-lang:mainFeb 12, 2026
11 checks passed
@rustbotrustbot added this to the 1.95.0 milestone Feb 12, 2026
rust-timer added a commit that referenced this pull request Feb 12, 2026
Rollup merge of #152146 - zedddie:mgca-improve-const-bindings-wfck, r=BoxyUwU
mGCA: Add associated const type check
#151642
r? BoxyUwU
I didn't bless tests just yet as it only fixes the dyn arm
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.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.

4 participants

@zedddie@rust-log-analyzer@BoxyUwU@rustbot