std: Spin for a global malloc lock on wasm32
There's lots of comments in the code, but the main gist of this commit
is that the acquisition of the global malloc lock on the
`wasm32-unknown-unknown` target when threads are enabled will not spin
on contention rather than block.
appveyor: Use VS2017 for all our images
Originally added in #55935 to test build times, this was reverted
in #56201 due to a belief that it caused the exit code 259 spurious
errors. We've since learned, however, that the 259 exit code is likely
not related to this image update as we're getting it in a number of
locations now.
VS2017 looks like it may be required to compile LLVm in the near future,
notably discovered by #58408 where we attempted to update LLVM.
- Makes the warning part of the `intra_doc_link_resolution_failure`
lint.
- Tightens the span to just the ambiguous link.
- Reports ambiguities across all three namespaces.
- Uses structured suggestions for disambiguation.
- Adds a test for the warnings.
Refactor ppaux out of existence.
A long-time coming, this PR reorganizes and rewrites the pretty-printing architecture of rustc, specifically the parts that involve the typesystem (which used to be in `rustc::util::ppaux`).
*Note: these commits used to be in #57967 before being split off.*
The new API (i.e. the `Printer` and `PrettyPrint` traits) is in `rustc::ty::print`.
Design points, roughly:
* using associated types in `Printer` to allow building e.g. an AST, not just printing as a side-effect
* several overloading points for implementers of `PrettyPrinter`, e.g. how `<...>` is printed
* for `fmt::Display` impls, the value to print is lifted to the `ty::tls` `tcx`, and everything after that stays within the `ty::print` API, which requires `'tcx` to match between values and the printer's `tcx`, without going through `fmt::Display` again
Most of the behavior is unchanged, except for a few details, which should be clear from the test changes.
r? @nikomatsakis
Fixes https://github.com/rust-lang/rust/issues/55464
As discussed in #55078, there's no known reason for this restriction.
It's unlikely that repr(simd) will be stabilized in its current form, but
might as well remove some restrictions on it.
This removes the branch in `is_machine` which returns false for these types.
`is_machine` is only used for the repr(simd) type validation check.