On MSVC targets rustc will add symbols prefixed with `_imp_` to LLVM modules to
"emulate" dllexported statics as that workaround is still in place after #27438
hasn't been solved otherwise. These statics, however, were getting gc'd by
ThinLTO accidentally which later would cause linking failures.
This commit updates the location we add such symbols to happen just before
codegen to ensure that (a) they're not eliminated by the optimizer and (b) the
optimizer doesn't even worry about them.
Closes#45347
Add the test for #40003.
I checked that the test failed to compile on an older nightly (I tried 2017-09-29) and that it compiles against master.
Closes#40003.
core: derive Clone for result::IntoIter
It appears to be a simple oversight that `result::IntoIter<T>` doesn't
implement `Clone` (where `T: Clone`). We do already have `Clone` for
`result::Iter`, as well as the similar `option::IntoIter` and `Iter`.
Add more __future__ imports to increase compatibility with Python 3 in bootstrap
The functionality of the `__future__` imports are described [here](https://docs.python.org/3/library/__future__.html).
These will help ensure the bootstrap code stays compatible with Python 3. If changes are made in the future that use absolute imports, division, or the `print` function, this will be ensure that running it under Python 2 will pass or fail the same way as Python 3.
`Option` is made a [new-style class](https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes), so that it behaves the same way in Python 2 and 3.
The `__future__ unicode_literals` import is not used, because that can change the semantics of the code in Python 2 in unwanted ways. For more information see [this article](http://python-future.org/unicode_literals.html).
#44493 add structure for inferred_outlives_of
#44493
- add placeholder for the final implementation of inferred_outlives_of
- add some placeholder tests
rustbuild: Allow setting rls/rustfmt to "broken"
This commit enables configuring the RLS/rustfmt tools to the "broken" state and
actually get it past CI. The main changes here were to update all dist-related
code to handle the situation where the RLS isn't available. This in turn
involved a homegrown preprocessor-like-function to edit the configuration files
we pass to the various combined installer tools.
This commit enables configuring the RLS/rustfmt tools to the "broken" state and
actually get it past CI. The main changes here were to update all dist-related
code to handle the situation where the RLS isn't available. This in turn
involved a homegrown preprocessor-like-function to edit the configuration files
we pass to the various combined installer tools.
rustc: Handle #[inline(always)] at -O0
This commit updates the handling of `#[inline(always)]` functions at -O0 to
ensure that it's always inlined regardless of the number of codegen units used.
Closes#45201
Add "Buidling on *nix" sub-header
Since there is a "Build on Windows" section, a simple sub-header here would help Windows users to know they need to keep reading.
Check namespaces when resolving associated items in typeck
Closes#35600Closes#44247
Fixes a "cannot move a value of type..." error in the same case as #44247 but with the associated items swapped.
rustc: Remove `used_mut_nodes` from `TyCtxt`
This updates the borrowck query to return a result, and this result is then used
to incrementally check for unused mutable nodes given sets of all the used
mutable nodes.
Closes#42384
rustbuild: Support specifying archiver and linker explicitly
With this patch `x.py test` passes without toolchain being in `PATH` if `cc`, `cxx`, `ar`, `linker` and `gdb` are specified in `config.toml` (except for a few `run-make` tests using `nm`).
Fixes https://github.com/rust-lang/rust/issues/41821
r? @Mark-Simulacrum
rustc: Fix some ThinLTO internalization
First the `addPreservedGUID` function forgot to take care of "alias" summaries.
I'm not 100% sure what this is but the current code now matches upstream. Next
the `computeDeadSymbols` return value wasn't actually being used, but it needed
to be used! Together these should...
Closes#45195
some low-hanging rustdoc optimizations
There were a few discussions earlier today in #rust-internals about the syscall usage and overall performance of rustdoc. This PR is intended to pick some low-hanging fruit and try to rein in some of the performance issues of rustdoc.
First the `addPreservedGUID` function forgot to take care of "alias" summaries.
I'm not 100% sure what this is but the current code now matches upstream. Next
the `computeDeadSymbols` return value wasn't actually being used, but it needed
to be used! Together these should...
Closes#45195
incr.comp.: Introduce `ensure` and `ensure` typeck_tables_of
Resolves#45210
In this Pull Request we introduce the `ensure` query/function. `ensure` has the
semantics and type of the function `Q1` below:
```rust
fn Q1::ensure(K){
Q(K);
}
```
Further, `ensure` avoids the need to load the result from disk (or execute the
provider, if we are not storing the results of Q to disk).
@nikomatsakis
Provide the full span of method calls to `check_argument_types`
... so that it includes the span of the passed arguments, not just the name of the called method.
Fixes#44760.
Fix TcpStream::connect_timeout on linux
Linux appears to set POLLOUT when a conection's refused, which is pretty
weird. Invert the check to look for an error explicitly. Also add an
explict test for this case.
Closes#45265.
r? @alexcrichton
Do some cleanups for hashmaps
@mystor noticed some things whilst reading through the hashmap RawTable code.
Firstly, in RawTable we deal with this hash_offset value that is the offset of the list of hashes from the buffer start. This is always zero, and this isn't consistently used (which means that we would have bugs if we set it to something else). We should just remove this since it doesn't help us at all.
Secondly, the probing length tag is not copied when cloning a raw table. This is minor and basically means we do a bit more work than we need on further inserts on a cloned hashmap.
r? @Gankro
compiletest/runtest: format ErrorKind with Display
The strings are nouns for the most part, so we give ErrorKind::Help a
more sensible string. This reduces quote hiccups in failure output.
unexpected "error": '...'
↓
unexpected error: '...'
Moved details of unstable non-ascii identifiers from the Reference
Moved details of unstable non-ascii identifiers from the Reference to the Unstable book
r? @steveklabnik
Add x86_64-unknown-linux-gnux32 target
This adds X32 ABI support for Linux on X86_64. Let's package and dist it so we can star testing libc, libstd, etc.
Fixes https://github.com/rust-lang/rfcs/issues/1339
doc-test: In Markdown tests, Use all of `<h1>` to `<h6>` as the test name
This mainly simplifies debugging error index tests, as the error codes are `<h2>`s in the huge document containing all codes.
Linux appears to set POLLOUT when a conection's refused, which is pretty
weird. Invert the check to look for an error explicitly. Also add an
explict test for this case.
Closes#45265.
Enable building clippy in CI
r? @alexcrichton
As discussed at Rustfest. Measured additional time is 4 minutes on my machine if no dependencies are shared with other tools. In reality most dependencies are shared (especially the slow to compile ones like serde).
cc @Manishearth
Does not run clippy's test suite, since
a) it is nontrivial in the rustc build system
b) it breaks more frequently but the breakage is negligible
If clippy breaks, the procedure to follow is documented under https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#external-dependencies