* The rule `display: block` had no noticeable effect. Technically, because
markdown tables have a tbody and thead, they get wrapped in an [anonymous
table box] in the CSS tree, nested within the `<table>` element's block
layout box.
This rule was added in #87230 to make the table side-scrolling, but
this same issue was doubly fixed in #88742 by wrapping it in an explicit
`<div>` tag. Since accessibility advocates recommend the wrapper div over
marking the table as `display: block`, we'll stick with that.
https://adrianroselli.com/2020/11/under-engineered-responsive-tables.html
* The rule `width: calc(100% - 2px)` had no visible effect, because the
anonymous table box was not affected.
* The style is tweaked to basically be the same style GitHub uses.
In particular, it adds zebra stripes, and removes dotted borders.
[anonymous table box]: https://www.w3.org/TR/CSS2/tables.html#anonymous-boxes
Rollup of 9 pull requests
Successful merges:
- #104898 (Put all cached values into a central struct instead of just the stable hash)
- #105004 (Fix `emit_unused_delims_expr` ICE)
- #105174 (Suggest removing struct field from destructive binding only in shorthand scenario)
- #105250 (Replace usage of `ResumeTy` in async lowering with `Context`)
- #105286 (Add -Z maximal-hir-to-mir-coverage flag)
- #105320 (rustdoc: simplify CSS selectors on top-doc and non-exhaustive toggles)
- #105349 (Point at args in associated const fn pointers)
- #105362 (Cleanup macro-expanded code in `rustc_type_ir`)
- #105370 (Remove outdated syntax from trait alias pretty printing)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
Remove outdated syntax from trait alias pretty printing
Given the following program:
```rust
#![feature(trait_alias)]
trait A = ?Sized;
fn main() {}
```
Old output of `rustc +nightly ./t.rs -Zunpretty=normal`:
```rust
#![feature(trait_alias)]
trait A for ? Sized ;
fn main() {}
```
New output of `rustc +a ./t.rs -Zunpretty=normal`:
```rust
#![feature(trait_alias)]
trait A = ?Sized;
fn main() {}
```
cc `@durka` (you've written the `FIXME` in #45047, see https://github.com/rust-lang/rust/pull/45047#discussion_r144960751)
Cleanup macro-expanded code in `rustc_type_ir`
We could of course just leave this as-is, but every time I go-to-def to this file it's painful to see all this `(&A(ref __self_1_0),)` stuff.
Point at args in associated const fn pointers
Tiny follow-up to #105201, not so sure it's worth it but 🤷
The UI test example is a bit more compelling when it's `GlUniformScalar::FACTORY`
r? `@cjgillot`
Add -Z maximal-hir-to-mir-coverage flag
This PR adds a new unstable flag `-Z maximal-hir-to-mir-coverage` that changes the behavior of `maybe_lint_level_root_bounded`, pursuant to [a discussion on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/Mapping.20MIR.20to.20HIR). When enabled, this function will not search upwards for a lint root, but rather immediately return the provided HIR node ID. This change increases the granularity of the mapping between MIR locations and HIR nodes inside the `SourceScopeLocalData` data structures. This increase in granularity is useful for rustc consumers like [Flowistry](https://github.com/willcrichton/flowistry) that rely on getting source-mapping information about the MIR CFG that is as precise as possible.
A test `maximal_mir_to_hir_coverage.rs` has been added to verify that this flag does not break anything.
r? `@cjgillot`
cc `@gavinleroy`
Replace usage of `ResumeTy` in async lowering with `Context`
Replaces using `ResumeTy` / `get_context` in favor of using `&'static mut Context<'_>`.
Usage of the `'static` lifetime here is technically "cheating", and replaces the raw pointer in `ResumeTy` and the `get_context` fn that pulls the correct lifetimes out of thin air.
fixes https://github.com/rust-lang/rust/issues/104828 and https://github.com/rust-lang/rust/pull/104321#issuecomment-1336363077
r? `@oli-obk`
Put all cached values into a central struct instead of just the stable hash
cc `@nnethercote`
this allows re-use of the type for Predicate without duplicating all the logic for the non-hash cached fields
Re-enable removal of ZST writes to unions
This was previously disabled because Miri was lazily allocating unsized locals. But we aren't doing that anymore since https://github.com/rust-lang/rust/pull/98831, so we can have this optimization back.
Rollup of 11 pull requests
Successful merges:
- #104439 (Add prototype to generate `COPYRIGHT` from REUSE metadata)
- #105005 (On E0195 point at where clause lifetime bounds)
- #105098 (propagate the error from parsing enum variant to the parser and emit out)
- #105243 (remove no-op 'let _ = ')
- #105254 (Recurse into nested impl-trait when computing variance.)
- #105287 (Synthesize substitutions for bad auto traits in dyn types)
- #105310 (Be more careful about unresolved exprs in suggestion)
- #105318 (Make `get_impl_future_output_ty` work with AFIT)
- #105339 (support `ConstKind::Expr` in `is_const_evaluatable` and `WfPredicates::compute`)
- #105340 (Avoid ICE by accounting for missing type)
- #105342 (Make `note_obligation_cause_code` take a `impl ToPredicate` for predicate)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
Make `note_obligation_cause_code` take a `impl ToPredicate` for predicate
The only usecase that wasn't `impl ToPredicate` was noting overflow errors while revealing opaque types, which passed in an `Obligation<'tcx, Ty<'tcx>>`... Since this only happens in a `RevealAll` environment, which is after typeck (and probably primarily within `normalize_erasing_regions`) we're unlikely to display anything useful while noting this code, evidenced by the lack of UI test changes.
support `ConstKind::Expr` in `is_const_evaluatable` and `WfPredicates::compute`
Fixes#105205
Currently we haven't implemented a way to evaluate `ConstKind::Expr(Expr::Binop(Add, 1, 2))` so I just left that with a `FIXME` and a `delay_span_bug` since I have no idea how to do that and it would make this a much larger (and more complicated) PR :P
Synthesize substitutions for bad auto traits in dyn types
Auto traits are stored as just `DefId`s inside a `dyn Trait`'s existential predicates list. This is usually fine, since auto traits are forbidden to have generics -- but this becomes a problem for an ill-formed auto trait.
But since this will always result in an error, just synthesize some dummy (error) substitutions which are used at least to keep trait selection code happy about the number of substs in a trait ref.
Fixes#104808
remove no-op 'let _ = '
Also see the discussion at https://github.com/rust-lang/rust/pull/93563#discussion_r1034057555.
I don't know why these `Drop` implementations exist to begin with, given that their body does literally nothing, but did not want to change that. (It might affect dropck.)
Cc `````@ibraheemdev````` `````@Amanieu`````
propagate the error from parsing enum variant to the parser and emit out
While parsing enum variant, the error message always disappear
Because the error message that emit out is from main error of parser
The information of enum variant disappears while parsing enum variant with error
We only check the syntax of expecting token, i.e, in case https://github.com/rust-lang/rust/issues/103869
It will error it without telling the message that this error is from pasring enum variant.
Propagate the sub-error from parsing enum variant to the main error of parser by chaining it with map_err
Check the sub-error before emitting the main error of parser and attach it.
Fix https://github.com/rust-lang/rust/issues/103869
Add prototype to generate `COPYRIGHT` from REUSE metadata
This PR adds a prototype to generate the `COPYRIGHT` file from the metadata gathered with REUSE. There are two new tools:
* `src/tools/collect-license-metadata` invokes REUSE, parses its output and stores a concise JSON representation of the metadata in `src/etc/license-metadata.json`.
* `src/tools/generate-copyright` parses the metadata generated above, (in the future will) gather crate dependencies metadata, and renders the `COPYRIGHT.md` file.
Note that since the contents of those files are currently incorrect, rather than outputting in the paths above, the files will be stored in `build/` and not committed. This will be changed once we're confident about the metadata.
Eventually, `src/etc/license-metadata.json` will be committed into the repository and verified to be up to date by CI (similar to our GitHub Actions configuration), to avoid having people install REUSE on their local machine in most cases.
You can see the (incorrect) generated files in https://gist.github.com/pietroalbini/3f3f22b6f9cc8533abf7494b6a50cf97.
r? `@pnkfelix`
Add StableOrd trait as proposed in MCP 533.
The `StableOrd` trait can be used to mark types as having a stable sort order across compilation sessions. Collections that sort their items in a stable way can safely implement HashStable by hashing items in sort order.
See https://github.com/rust-lang/compiler-team/issues/533 for more information.
Replaces using `ResumeTy` / `get_context` in favor of using `&'static mut Context<'_>`.
Usage of the `'static` lifetime here is technically "cheating", and replaces
the raw pointer in `ResumeTy` and the `get_context` fn that pulls the
correct lifetimes out of thin air.
Tweak "the following other types implement trait"
When *any* of the suggested impls is an exact match, *only* show the exact matches. This is particularly relevant for integer types.
r? `@compiler-errors`
Update books
## rust-lang/book
1 commits in 3f64052c048c6def93b94a2b514ee88bba918744..a60f4316ec923a5ac2ed6a2eba6960edb832d855
2022-11-16 15:07:18 UTC to 2022-11-16 15:07:18 UTC
- Fix Install MdBook command (rust-lang/book#3424)
## rust-embedded/book
4 commits in c533348edd69f11a8f4225d633a05d7093fddbf3..19f798d448835a4888e3b3eae7fe69f1d61d8681
2022-11-17 15:08:11 UTC to 2022-11-08 23:27:57 UTC
- start/hardware.md: Fix typo (rust-embedded/book#336)
- doc: Fix `arm-none-eabi-gdb` installation instruction for Fedora 27 or newer to just use `gdb` (rust-embedded/book#335)
- Update singletons.md (rust-embedded/book#334)
- Remove incorrect claim HashMap is avail in no_std (rust-embedded/book#333)
## rust-lang/nomicon
2 commits in 05532356e7a4dbea2330aabb77611f5179493bb8..ae406aa5287a9e025abb72343aaceec98458c117
2022-11-21 22:48:20 UTC to 2022-11-15 00:29:20 UTC
- Improve chapter about `Vec<T>` (rust-lang/nomicon#381)
- Grammar change for 3.4: Limits of Lifetimes (lifetime-mismatch.md) (rust-lang/nomicon#386)
## rust-lang/reference
9 commits in 9f0cc13ffcd27c1fbe1ab766a9491e15ddcf4d19..3ae62681ff236d5528ef7c8c28ba7c6b2ecc6731
2022-12-05 00:51:50 UTC to 2022-11-15 20:43:30 UTC
- Document that type parameter `Self` is unsized by default (rust-lang/reference#1285)
- replace `crateid` term with `crate_name` (rust-lang/reference#1310)
- Document native library modifier `verbatim` (rust-lang/reference#1299)
- Update literal suffix docs for rust-lang/rust#102944 (rust-lang/reference#1305)
- update aliasing rules section of the reference (rust-lang/reference#1290)
- Document RFC 2867: instruction_set attribute (rust-lang/reference#1253)
- Fix a minor typo in the "Higher-ranked trait bounds" section (rust-lang/reference#1288)
- Disallow newline directly following `//` (rust-lang/reference#1294)
- Add an anchor to the "forwarding macro fragments" paragraph (rust-lang/reference#1300)
## rust-lang/rust-by-example
5 commits in 2b15c0abf2bada6e00553814336bc3e2d8399097..a9869b4a3c4cac3bc6099b41f088679e268400b8
2022-11-27 19:03:05 UTC to 2022-11-11 18:54:53 UTC
- Migrate from highfive to triagebot (rust-lang/rust-by-example#1647)
- Simpler version of the read_lines script. (rust-lang/rust-by-example#1641)
- Fix comment in "Formatted print" example code (rust-lang/rust-by-example#1638)
- Added a missing backtick in a comment in chapter 15.4. (rust-lang/rust-by-example#1642)
- Clarify the confusing closure example #1611 (rust-lang/rust-by-example#1643)
## rust-lang/rustc-dev-guide
13 commits in d0dc6c97a6486f68bac782fff135086eae6d77ec..e269950a57fa6fcda356426545fb5aa3691a7ced
2022-12-03 23:09:24 UTC to 2022-11-08 21:35:38 UTC
- Remove duplicate paragraph (rust-lang/rustc-dev-guide#1523)
- clarify subtree tool policy (rust-lang/rustc-dev-guide#1518)
- Typo (rust-lang/rustc-dev-guide#1520)
- Link directly to the section on `--keep-stage` (rust-lang/rustc-dev-guide#1515)
- do an actual link to detect if it breaks in future (rust-lang/rustc-dev-guide#1517)
- Triage some date-check items (rust-lang/rustc-dev-guide#1513)
- Update path for `try_mark_green` implementation (rust-lang/rustc-dev-guide#1512)
- Fix a broken design docs link about unused substs bug (rust-lang/rustc-dev-guide#1511)
- updating-llvm: keep a calm tone (rust-lang/rustc-dev-guide#1449)
- date-check: updating-llvm (rust-lang/rustc-dev-guide#1424)
- rewrite the section about regions in the trait solver (rust-lang/rustc-dev-guide#1508)
- Consistent ordered list indexing (rust-lang/rustc-dev-guide#1509)
- Document multiple alternative suggestions on diagnostic structs (rust-lang/rustc-dev-guide#1486)
rustdoc: remove no-op mobile CSS `.sidebar { margin: 0; padding: 0 }`
This isn't overriding anything, because the sidebar never has a margin or padding on it.
Fix --pass in compiletest
This makes `x test src/test/mir-opt --pass run` actually do the thing it says it does. The resulting tests do not pass, I'll fix that in a follow up.
interpret: clobber return place when calling function
Makes sure the callee cannot observe the previous contents of the return place, and the caller cannot read any of the old return place contents even if the function unwinds.
I don't think we can test for this though, that would require some strange hand-written MIR.
r? `````@oli-obk`````
Fix UI issues with Rustdoc scrape-examples feature.
A few regressions have been introduced into scrape-examples in the last few months. This commit fixes those regressions:
* Help file was being loaded from the wrong place (introduced in f9e1f6ffdf).
* CSS selector in JS has a typo (introduced in 14897180ae).
* Line numbers in scraped example code snippets are overflowing (not sure if this was ever fixed). Changing from flexbox to grid display fixed this issue.
feed resolver_for_lowering instead of storing it in a field
r? `@cjgillot`
opening this as
* a discussion for `no_hash` + `feedable` queries. I think we'll want those, but I don't quite understand why they are rejected beyond a double check of the stable hashes for situations where the query is fed but also read from incremental caches.
* and a discussion on removing all untracked fields from TyCtxt and setting it up so that they are fed queries instead
Disable top down MIR inlining
The current MIR inliner has exponential behavior in some cases: <https://godbolt.org/z/7jnWah4fE>. The cause of this is top-down inlining, where we repeatedly do inlining like `call_a() => { call_b(); call_b(); }`. Each decision on its own seems to make sense, but the result is exponential.
Disabling top-down inlining fundamentally prevents this. Each call site in the original, unoptimized source code is now considered for inlining exactly one time, which means that the total growth in MIR size is limited to number of call sites * inlining threshold.
Top down inlining may be worth re-introducing at some point, but it needs to be accompanied with a principled way to prevent this kind of behavior.