Rollup of 10 pull requests
Successful merges:
- #63919 (Use hygiene for AST passes)
- #63927 (Filter linkcheck spurious failure)
- #64149 (rustc_codegen_llvm: give names to non-alloca variable values.)
- #64192 (Bail out when encountering likely missing turbofish in parser)
- #64231 (Move the HIR CFG to `rustc_ast_borrowck`)
- #64233 (Correct pluralisation of various diagnostic messages)
- #64236 (reduce visibility)
- #64240 (Include compiler-rt in the source tarball)
- #64241 ([doc] Added more prereqs and note about default directory)
- #64243 (Move injection of attributes from command line to `libsyntax_ext`)
Failed merges:
r? @ghost
Move injection of attributes from command line to `libsyntax_ext`
Just a tiny bit of code generation that wasn't moved into `libsyntax_ext` in https://github.com/rust-lang/rust/pull/62771.
Include compiler-rt in the source tarball
In #60981 we switched to using src/llvm-project/compiler-rt inside
compiler-builtins rather than a separate copy of it.
In order to have the "c" feature turn on in builds from the source
tarball, we need to include that path in its creation.
fixes#64239
Bail out when encountering likely missing turbofish in parser
When encountering a likely intended turbofish without `::`, bubble
up the diagnostic instead of emitting it to allow the parser to recover
more gracefully and avoid uneccessary type errors that are likely to be
wrong.
Fix#61329.
rustc_codegen_llvm: give names to non-alloca variable values.
These names only matter when looking at LLVM IR, but they can help.
When one value is used for multiple variables, I decided to combine the names.
I chose `,` as a separator but maybe `=` or ` ` (space) are more appropriate.
(LLVM names can contain any characters - if necessary they end up having quotes)
As an example, this function:
```rust
#[no_mangle]
pub fn test(a: u32, b: u32) -> u32 {
let c = a + b;
let d = c;
let e = d * a;
e
}
```
Used to produce this LLVM IR:
```llvm
define i32 @test(i32 %a, i32 %b) unnamed_addr #0 {
start:
%0 = add i32 %a, %b
%1 = mul i32 %0, %a
ret i32 %1
}
```
But after this PR you get this:
```llvm
define i32 @test(i32 %a, i32 %b) unnamed_addr #0 {
start:
%"c,d" = add i32 %a, %b
%e = mul i32 %"c,d", %a
ret i32 %e
}
```
cc @nagisa @rkruppe
Filter linkcheck spurious failure
r? @ehuss
cc @spastorino
Basically, we filter errors with messages containing "timed out"... a bit of a hack, but hopefully this will be functionality built into linkcheck soon.
Use hygiene for AST passes
AST passes are now able to have resolve consider their expansions as if they were opaque macros defined either in some module in the current crate, or a fake empty module with `#[no_implicit_prelude]`.
* Add an ExpnKind for AST passes.
* Remove gensyms in AST passes.
* Remove gensyms in`#[test]`, `#[bench]` and `#[test_case]`.
* Allow opaque macros to define tests.
* Move tests for unit tests to their own directory.
* Remove `Ident::{gensym, is_gensymed}` - `Ident::gensym_if_underscore` still exists.
cc #60869, #61019
r? @petrochenkov
Support both static and dynamic linking mode in testing for vxWorks
1. Support both static and dynamic linking mode in testing for vxWorks
2. Ignore unsupported test cases: net:tcp:tests:timeouts and net:ucp:tests:timeouts
r? @alexcrichton
In #60981 we switched to using src/llvm-project/compiler-rt inside
compiler-builtins rather than a separate copy of it.
In order to have the "c" feature turn on in builds from the source
tarball, we need to include that path in its creation.
fixes#64239
Rollup of 8 pull requests
Successful merges:
- #63565 (Rust 2018: NLL migrate mode => hard error)
- #63969 (Add missing examples for Option type)
- #64067 (Remove no-prefer-dynamic from valgrind tests)
- #64166 (Better way of conditioning the sanitizer builds)
- #64189 (annotate-snippet emitter: Deal with multispans from macros, too)
- #64202 (Fixed grammar/style in some error messages)
- #64206 (annotate-snippet emitter: Update an issue number)
- #64208 (it's more pythonic to use 'is not None' in python files)
Failed merges:
r? @ghost
annotate-snippet emitter: Deal with multispans from macros, too
This moves the two methods from the `EmitterWriter` impl to trait
default methods in the `Emitter` trait so that they can be re-used by
the `AnnotateSnippetEmitterWriter`.
r? @estebank
Closes#61810
Better way of conditioning the sanitizer builds
Previously the build would take the presence of the LLVM_CONFIG envvar to
mean that the sanitizers should be built, but this is a common envvar that
could be set for reasons unrelated to the rustc sanitizers.
This commit adds a new envvar RUSTC_BUILD_SANITIZERS and uses it instead.
This PR or similar will be necessary in order to work correctly with https://github.com/rust-lang-nursery/compiler-builtins/pull/296
Rust 2018: NLL migrate mode => hard error
As per decision on a language team meeting as described in https://github.com/rust-lang/rust/pull/63565#issuecomment-528563744, we refuse to downgrade NLL errors, that AST borrowck accepts, into warnings and keep them as hard errors.
cc @rust-lang/lang
cc @rust-lang/wg-compiler-nll
std: Improve downstream codegen in `Command::env`
This commit rejiggers the generics used in the implementation of
`Command::env` with the purpose of reducing the amount of codegen that
needs to happen in consumer crates, instead preferring to generate code
into libstd.
This was found when profiling the compile times of the `cc` crate where
the binary rlib produced had a lot of `BTreeMap` code compiled into it
but the crate doesn't actually use `BTreeMap`. It turns out that
`Command::env` is generic enough to codegen the entire implementation in
calling crates, but in this case there's no performance concern so it's
fine to compile the code into the standard library.
This change is done by removing the generic on the `CommandEnv` map
which is intended to handle case-insensitive variables on Windows.
Instead now a generic isn't used but rather a `use` statement defined
per-platform is used.
With this commit a debug build of `Command::new("foo").env("a", "b")`
drops from 21k lines of LLVM IR to 10k.
Fix invalid span generation when it should be div
Fixes#64146.
It changes basically nothing in the display... Can be checked with:
```rust
pub enum X {
/// Some doc?
///
/// with lines!
Foo {
/// a
///
/// b
x: u32,
/// Doc!
///
/// ```
/// yolo
/// ```
y: String,
},
/// Doc!
///
/// ```
/// yolo
/// ```
Bar(String),
}
```
r? @Mark-Simulacrum