Skip to content

Make bottom type fallback lazy - #22010

Closed
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot
Closed

Make bottom type fallback lazy#22010
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot

Conversation

@edwardw

Copy link
Copy Markdown
Contributor

PR #17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that typeck can run
its cause and detect as many type errors as possible with regard to
diverging types.

Closes#21878

PR rust-lang#17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that `typeck` can run
its cause and detect as many type errors as possible with regard to
diverging types.
Closesrust-lang#21878
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @Aatch

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton

Copy link
Copy Markdown
Member

cc @nikomatsakis

@edwardw

Copy link
Copy Markdown
ContributorAuthor

r? @nikomatsakis

@nikomatsakis

Copy link
Copy Markdown
Contributor

Hmm, I'm not sure how I feel about this. This introduces a "second kind" of fallback. I was planning to start work soon on RFC rust-lang/rfcs#213, which would generalize fallback for integer literals to other type parameters, and part of the reason I felt ok with ! falling back to () was that it would fit into this general framework. But then again perhaps it is best to make it special -- I agree that the examples from #21878 are unfortunate. And this change seems pretty reasonable overall. (Have you done any experiments to see how much code breaks if we just remove ! fallback?)

@edwardw

Copy link
Copy Markdown
ContributorAuthor

I just did a quick experiment of removing ! fallback altogether. It failed right away at libcore/num/mod.rs with an error saying "cannot determine a type for this expression: unconstrained type".

@edwardw

Copy link
Copy Markdown
ContributorAuthor

And of course, feel free to close this PR if you have something more general in the making.

@nikomatsakis

Copy link
Copy Markdown
Contributor

@edwardw well what I had in mind is kind of orthogonal to what you've done here. I'm still tossing it about in my mind.

@steveklabnik

Copy link
Copy Markdown
Contributor

@nikomatsakis what's your thoughts on this today?

@bors

bors commented Jun 12, 2015

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #26232) made this pull request unmergeable. Please resolve the merge conflicts.

@edwardwedwardw closed this Jun 13, 2015
lnicola pushed a commit to lnicola/rust that referenced this pull request Apr 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Type ambiguity not reported when it may exist?

7 participants

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

Make bottom type fallback lazy - #22010

Closed
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot
Closed

Make bottom type fallback lazy#22010
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot

Conversation

@edwardw

Copy link
Copy Markdown
Contributor

PR #17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that typeck can run
its cause and detect as many type errors as possible with regard to
diverging types.

Closes#21878

PR rust-lang#17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that `typeck` can run
its cause and detect as many type errors as possible with regard to
diverging types.
Closesrust-lang#21878
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @Aatch

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton

Copy link
Copy Markdown
Member

cc @nikomatsakis

@edwardw

Copy link
Copy Markdown
ContributorAuthor

r? @nikomatsakis

@nikomatsakis

Copy link
Copy Markdown
Contributor

Hmm, I'm not sure how I feel about this. This introduces a "second kind" of fallback. I was planning to start work soon on RFC rust-lang/rfcs#213, which would generalize fallback for integer literals to other type parameters, and part of the reason I felt ok with ! falling back to () was that it would fit into this general framework. But then again perhaps it is best to make it special -- I agree that the examples from #21878 are unfortunate. And this change seems pretty reasonable overall. (Have you done any experiments to see how much code breaks if we just remove ! fallback?)

@edwardw

Copy link
Copy Markdown
ContributorAuthor

I just did a quick experiment of removing ! fallback altogether. It failed right away at libcore/num/mod.rs with an error saying "cannot determine a type for this expression: unconstrained type".

@edwardw

Copy link
Copy Markdown
ContributorAuthor

And of course, feel free to close this PR if you have something more general in the making.

@nikomatsakis

Copy link
Copy Markdown
Contributor

@edwardw well what I had in mind is kind of orthogonal to what you've done here. I'm still tossing it about in my mind.

@steveklabnik

Copy link
Copy Markdown
Contributor

@nikomatsakis what's your thoughts on this today?

@bors

bors commented Jun 12, 2015

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #26232) made this pull request unmergeable. Please resolve the merge conflicts.

@edwardwedwardw closed this Jun 13, 2015
lnicola pushed a commit to lnicola/rust that referenced this pull request Apr 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Type ambiguity not reported when it may exist?

7 participants

@edwardw@rust-highfive@alexcrichton@nikomatsakis@steveklabnik@bors@Aatch
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Make bottom type fallback lazy by edwardw · Pull Request #22010 · rust-lang/rust · GitHub
Skip to content

Make bottom type fallback lazy - #22010

Closed
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot
Closed

Make bottom type fallback lazy#22010
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot

Conversation

@edwardw

Copy link
Copy Markdown
Contributor

PR #17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that typeck can run
its cause and detect as many type errors as possible with regard to
diverging types.

Closes#21878

PR rust-lang#17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that `typeck` can run
its cause and detect as many type errors as possible with regard to
diverging types.
Closesrust-lang#21878
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @Aatch

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton

Copy link
Copy Markdown
Member

cc @nikomatsakis

@edwardw

Copy link
Copy Markdown
ContributorAuthor

r? @nikomatsakis

@nikomatsakis

Copy link
Copy Markdown
Contributor

Hmm, I'm not sure how I feel about this. This introduces a "second kind" of fallback. I was planning to start work soon on RFC rust-lang/rfcs#213, which would generalize fallback for integer literals to other type parameters, and part of the reason I felt ok with ! falling back to () was that it would fit into this general framework. But then again perhaps it is best to make it special -- I agree that the examples from #21878 are unfortunate. And this change seems pretty reasonable overall. (Have you done any experiments to see how much code breaks if we just remove ! fallback?)

@edwardw

Copy link
Copy Markdown
ContributorAuthor

I just did a quick experiment of removing ! fallback altogether. It failed right away at libcore/num/mod.rs with an error saying "cannot determine a type for this expression: unconstrained type".

@edwardw

Copy link
Copy Markdown
ContributorAuthor

And of course, feel free to close this PR if you have something more general in the making.

@nikomatsakis

Copy link
Copy Markdown
Contributor

@edwardw well what I had in mind is kind of orthogonal to what you've done here. I'm still tossing it about in my mind.

@steveklabnik

Copy link
Copy Markdown
Contributor

@nikomatsakis what's your thoughts on this today?

@bors

bors commented Jun 12, 2015

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #26232) made this pull request unmergeable. Please resolve the merge conflicts.

@edwardwedwardw closed this Jun 13, 2015
lnicola pushed a commit to lnicola/rust that referenced this pull request Apr 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Type ambiguity not reported when it may exist?

7 participants

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

Make bottom type fallback lazy - #22010

Closed
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot
Closed

Make bottom type fallback lazy#22010
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot

Conversation

@edwardw

Copy link
Copy Markdown
Contributor

PR #17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that typeck can run
its cause and detect as many type errors as possible with regard to
diverging types.

Closes#21878

PR rust-lang#17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that `typeck` can run
its cause and detect as many type errors as possible with regard to
diverging types.
Closesrust-lang#21878
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @Aatch

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton

Copy link
Copy Markdown
Member

cc @nikomatsakis

@edwardw

Copy link
Copy Markdown
ContributorAuthor

r? @nikomatsakis

@nikomatsakis

Copy link
Copy Markdown
Contributor

Hmm, I'm not sure how I feel about this. This introduces a "second kind" of fallback. I was planning to start work soon on RFC rust-lang/rfcs#213, which would generalize fallback for integer literals to other type parameters, and part of the reason I felt ok with ! falling back to () was that it would fit into this general framework. But then again perhaps it is best to make it special -- I agree that the examples from #21878 are unfortunate. And this change seems pretty reasonable overall. (Have you done any experiments to see how much code breaks if we just remove ! fallback?)

@edwardw

Copy link
Copy Markdown
ContributorAuthor

I just did a quick experiment of removing ! fallback altogether. It failed right away at libcore/num/mod.rs with an error saying "cannot determine a type for this expression: unconstrained type".

@edwardw

Copy link
Copy Markdown
ContributorAuthor

And of course, feel free to close this PR if you have something more general in the making.

@nikomatsakis

Copy link
Copy Markdown
Contributor

@edwardw well what I had in mind is kind of orthogonal to what you've done here. I'm still tossing it about in my mind.

@steveklabnik

Copy link
Copy Markdown
Contributor

@nikomatsakis what's your thoughts on this today?

@bors

bors commented Jun 12, 2015

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #26232) made this pull request unmergeable. Please resolve the merge conflicts.

@edwardwedwardw closed this Jun 13, 2015
lnicola pushed a commit to lnicola/rust that referenced this pull request Apr 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Type ambiguity not reported when it may exist?

7 participants

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

Make bottom type fallback lazy - #22010

Closed
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot
Closed

Make bottom type fallback lazy#22010
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot

Conversation

@edwardw

Copy link
Copy Markdown
Contributor

PR #17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that typeck can run
its cause and detect as many type errors as possible with regard to
diverging types.

Closes#21878

PR rust-lang#17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that `typeck` can run
its cause and detect as many type errors as possible with regard to
diverging types.
Closesrust-lang#21878
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @Aatch

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton

Copy link
Copy Markdown
Member

cc @nikomatsakis

@edwardw

Copy link
Copy Markdown
ContributorAuthor

r? @nikomatsakis

@nikomatsakis

Copy link
Copy Markdown
Contributor

Hmm, I'm not sure how I feel about this. This introduces a "second kind" of fallback. I was planning to start work soon on RFC rust-lang/rfcs#213, which would generalize fallback for integer literals to other type parameters, and part of the reason I felt ok with ! falling back to () was that it would fit into this general framework. But then again perhaps it is best to make it special -- I agree that the examples from #21878 are unfortunate. And this change seems pretty reasonable overall. (Have you done any experiments to see how much code breaks if we just remove ! fallback?)

@edwardw

Copy link
Copy Markdown
ContributorAuthor

I just did a quick experiment of removing ! fallback altogether. It failed right away at libcore/num/mod.rs with an error saying "cannot determine a type for this expression: unconstrained type".

@edwardw

Copy link
Copy Markdown
ContributorAuthor

And of course, feel free to close this PR if you have something more general in the making.

@nikomatsakis

Copy link
Copy Markdown
Contributor

@edwardw well what I had in mind is kind of orthogonal to what you've done here. I'm still tossing it about in my mind.

@steveklabnik

Copy link
Copy Markdown
Contributor

@nikomatsakis what's your thoughts on this today?

@bors

bors commented Jun 12, 2015

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #26232) made this pull request unmergeable. Please resolve the merge conflicts.

@edwardwedwardw closed this Jun 13, 2015
lnicola pushed a commit to lnicola/rust that referenced this pull request Apr 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Type ambiguity not reported when it may exist?

7 participants

@edwardw@rust-highfive@alexcrichton@nikomatsakis@steveklabnik@bors@Aatch
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Make bottom type fallback lazy by edwardw · Pull Request #22010 · rust-lang/rust · GitHub
Skip to content

Make bottom type fallback lazy - #22010

Closed
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot
Closed

Make bottom type fallback lazy#22010
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot

Conversation

@edwardw

Copy link
Copy Markdown
Contributor

PR #17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that typeck can run
its cause and detect as many type errors as possible with regard to
diverging types.

Closes#21878

PR rust-lang#17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that `typeck` can run
its cause and detect as many type errors as possible with regard to
diverging types.
Closesrust-lang#21878
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @Aatch

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton

Copy link
Copy Markdown
Member

cc @nikomatsakis

@edwardw

Copy link
Copy Markdown
ContributorAuthor

r? @nikomatsakis

@nikomatsakis

Copy link
Copy Markdown
Contributor

Hmm, I'm not sure how I feel about this. This introduces a "second kind" of fallback. I was planning to start work soon on RFC rust-lang/rfcs#213, which would generalize fallback for integer literals to other type parameters, and part of the reason I felt ok with ! falling back to () was that it would fit into this general framework. But then again perhaps it is best to make it special -- I agree that the examples from #21878 are unfortunate. And this change seems pretty reasonable overall. (Have you done any experiments to see how much code breaks if we just remove ! fallback?)

@edwardw

Copy link
Copy Markdown
ContributorAuthor

I just did a quick experiment of removing ! fallback altogether. It failed right away at libcore/num/mod.rs with an error saying "cannot determine a type for this expression: unconstrained type".

@edwardw

Copy link
Copy Markdown
ContributorAuthor

And of course, feel free to close this PR if you have something more general in the making.

@nikomatsakis

Copy link
Copy Markdown
Contributor

@edwardw well what I had in mind is kind of orthogonal to what you've done here. I'm still tossing it about in my mind.

@steveklabnik

Copy link
Copy Markdown
Contributor

@nikomatsakis what's your thoughts on this today?

@bors

bors commented Jun 12, 2015

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #26232) made this pull request unmergeable. Please resolve the merge conflicts.

@edwardwedwardw closed this Jun 13, 2015
lnicola pushed a commit to lnicola/rust that referenced this pull request Apr 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Type ambiguity not reported when it may exist?

7 participants

@edwardw@rust-highfive@alexcrichton@nikomatsakis@steveklabnik@bors@Aatch
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Make bottom type fallback lazy by edwardw · Pull Request #22010 · rust-lang/rust · GitHub
Skip to content

Make bottom type fallback lazy - #22010

Closed
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot
Closed

Make bottom type fallback lazy#22010
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot

Conversation

@edwardw

Copy link
Copy Markdown
Contributor

PR #17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that typeck can run
its cause and detect as many type errors as possible with regard to
diverging types.

Closes#21878

PR rust-lang#17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that `typeck` can run
its cause and detect as many type errors as possible with regard to
diverging types.
Closesrust-lang#21878
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @Aatch

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton

Copy link
Copy Markdown
Member

cc @nikomatsakis

@edwardw

Copy link
Copy Markdown
ContributorAuthor

r? @nikomatsakis

@nikomatsakis

Copy link
Copy Markdown
Contributor

Hmm, I'm not sure how I feel about this. This introduces a "second kind" of fallback. I was planning to start work soon on RFC rust-lang/rfcs#213, which would generalize fallback for integer literals to other type parameters, and part of the reason I felt ok with ! falling back to () was that it would fit into this general framework. But then again perhaps it is best to make it special -- I agree that the examples from #21878 are unfortunate. And this change seems pretty reasonable overall. (Have you done any experiments to see how much code breaks if we just remove ! fallback?)

@edwardw

Copy link
Copy Markdown
ContributorAuthor

I just did a quick experiment of removing ! fallback altogether. It failed right away at libcore/num/mod.rs with an error saying "cannot determine a type for this expression: unconstrained type".

@edwardw

Copy link
Copy Markdown
ContributorAuthor

And of course, feel free to close this PR if you have something more general in the making.

@nikomatsakis

Copy link
Copy Markdown
Contributor

@edwardw well what I had in mind is kind of orthogonal to what you've done here. I'm still tossing it about in my mind.

@steveklabnik

Copy link
Copy Markdown
Contributor

@nikomatsakis what's your thoughts on this today?

@bors

bors commented Jun 12, 2015

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #26232) made this pull request unmergeable. Please resolve the merge conflicts.

@edwardwedwardw closed this Jun 13, 2015
lnicola pushed a commit to lnicola/rust that referenced this pull request Apr 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Type ambiguity not reported when it may exist?

7 participants

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

Make bottom type fallback lazy - #22010

Closed
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot
Closed

Make bottom type fallback lazy#22010
edwardw wants to merge 1 commit into
rust-lang:masterfrom
edwardw:lazy-bot

Conversation

@edwardw

Copy link
Copy Markdown
Contributor

PR #17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that typeck can run
its cause and detect as many type errors as possible with regard to
diverging types.

Closes#21878

PR rust-lang#17603 introduced bottom type fallback but did it a bit too
eagerly. This patch makes the fallback lazy so that `typeck` can run
its cause and detect as many type errors as possible with regard to
diverging types.
Closesrust-lang#21878
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @Aatch

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton

Copy link
Copy Markdown
Member

cc @nikomatsakis

@edwardw

Copy link
Copy Markdown
ContributorAuthor

r? @nikomatsakis

@nikomatsakis

Copy link
Copy Markdown
Contributor

Hmm, I'm not sure how I feel about this. This introduces a "second kind" of fallback. I was planning to start work soon on RFC rust-lang/rfcs#213, which would generalize fallback for integer literals to other type parameters, and part of the reason I felt ok with ! falling back to () was that it would fit into this general framework. But then again perhaps it is best to make it special -- I agree that the examples from #21878 are unfortunate. And this change seems pretty reasonable overall. (Have you done any experiments to see how much code breaks if we just remove ! fallback?)

@edwardw

Copy link
Copy Markdown
ContributorAuthor

I just did a quick experiment of removing ! fallback altogether. It failed right away at libcore/num/mod.rs with an error saying "cannot determine a type for this expression: unconstrained type".

@edwardw

Copy link
Copy Markdown
ContributorAuthor

And of course, feel free to close this PR if you have something more general in the making.

@nikomatsakis

Copy link
Copy Markdown
Contributor

@edwardw well what I had in mind is kind of orthogonal to what you've done here. I'm still tossing it about in my mind.

@steveklabnik

Copy link
Copy Markdown
Contributor

@nikomatsakis what's your thoughts on this today?

@bors

bors commented Jun 12, 2015

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #26232) made this pull request unmergeable. Please resolve the merge conflicts.

@edwardwedwardw closed this Jun 13, 2015
lnicola pushed a commit to lnicola/rust that referenced this pull request Apr 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Type ambiguity not reported when it may exist?

7 participants

@edwardw@rust-highfive@alexcrichton@nikomatsakis@steveklabnik@bors@Aatch