Commit graph

124750 commits

Author SHA1 Message Date
bors 3f091baba4 Auto merge of #75260 - davidtwco:polymorphization-promoted-substs, r=lcnr
polymorphize: unevaluated constants

This PR makes polymorphization visit the promoted MIR of unevaluated constants with available promoted MIR instead of visiting the substitutions of that constant - which will mark all of the generic parameters as used; in addition polymorphization will now visit non-promoted unevaluated constants rather than visit their substs.

r? @lcnr
2020-08-08 15:57:12 +00:00
bors 2bac92bba1 Auto merge of #74533 - nikic:issue-74425, r=eddyb
Emit == null instead of <= null for niche check

When the niche maximum is zero, emit a "== zero" check instead of a "<= zero" check. In particular, this avoids the awkward case of "<= null". While LLVM does canonicalize this to "== null", this apparently doesn't happen for constant expressions, leading to the issue in #74425. While that can be addressed on the LLVM side, it still seems prudent to emit sensible IR here, because this will allow null checks to be optimized earlier in the pipeline.

Fixes #74425.
2020-08-08 13:33:53 +00:00
bors c989ac132a Auto merge of #74289 - lzutao:unroll, r=LukasKalbertodt
Remove some redundant parts from `unrolled_find_u16s`

See each commit message for details.

r? @wesleywiser from old PR #67705 .
2020-08-08 11:34:18 +00:00
bors c92fc8db8b Auto merge of #75282 - RalfJung:miri-black-box, r=oli-obk
do not call black_box on Miri

Helps with https://github.com/rust-lang/rust/issues/75274 (but https://github.com/rust-lang/rust/pull/74932 introduced unrelated breakage that will need a separate fix)
Cc @eggyal r? @Mark-Simulacrum
2020-08-08 09:46:16 +00:00
Ralf Jung 8385146ffa make black_box a NOP in Miri 2020-08-08 10:50:30 +02:00
Nikita Popov 7e5c7cf8e3 Emit == null instead of <= null
When the niche maximum is zero, emit a "== zero" check instead of
a "<= zero" check. In particular, this avoid the awkward case of
"<= null". While LLVM does canonicalize this to "!= null", this
appently doesn't happen for constant expressions, leading to the
issue in #74425. While that can be addressed on the LLVM side, it
still seems prudent to emit sensible IR here, because this will
allow null checks to be optimized earlier in the pipeline.

Fixes #74425.
2020-08-08 10:45:15 +02:00
bors d19d7e2755 Auto merge of #75257 - ssomers:btree_74762_again, r=Mark-Simulacrum
BTreeMap: better way to postpone root access in DrainFilter

A slightly more elegant (in my opinion) adaptation of #74762. Benchmarks seem irrationally pleased to:
```
benchcmp old new --threshold 5
 name                                           old ns/iter  new ns/iter  diff ns/iter   diff %  speedup
 btree::map::clone_fat_100_and_remove_all       215,182      185,052           -30,130  -14.00%   x 1.16
 btree::map::clone_fat_100_and_remove_half      139,667      127,945           -11,722   -8.39%   x 1.09
 btree::map::clone_fat_val_100_and_remove_all   96,755       81,279            -15,476  -16.00%   x 1.19
 btree::map::clone_fat_val_100_and_remove_half  64,678       56,911             -7,767  -12.01%   x 1.14
 btree::map::find_rand_100                      18           17                     -1   -5.56%   x 1.06
 btree::map::first_and_last_0                   33           35                      2    6.06%   x 0.94
 btree::map::first_and_last_100                 40           54                     14   35.00%   x 0.74
 btree::map::insert_rand_100                    45           42                     -3   -6.67%   x 1.07
 btree::map::insert_rand_10_000                 45           41                     -4   -8.89%   x 1.10
 btree::map::iter_0                             2,010        1,759                -251  -12.49%   x 1.14
 btree::map::iter_100                           3,514        2,764                -750  -21.34%   x 1.27
 btree::map::iter_10k                           4,018        3,768                -250   -6.22%   x 1.07
 btree::map::range_unbounded_unbounded          37,269       28,929             -8,340  -22.38%   x 1.29
 btree::map::range_unbounded_vs_iter            31,518       28,814             -2,704   -8.58%   x 1.09
```

r? @Mark-Simulacrum
2020-08-08 07:46:04 +00:00
bors e61621c307 Auto merge of #74932 - nnethercote:rm-ast-session-globals, r=petrochenkov
Remove `librustc_ast` session globals

By moving the data onto `Session`.

r? @petrochenkov
2020-08-08 05:58:57 +00:00
bors 1d100ba26c Auto merge of #75276 - JohnTitor:rollup-rz4hs0w, r=JohnTitor
Rollup of 7 pull requests

Successful merges:

 - #75224 (Don't call a function in function-arguments-naked.rs)
 - #75237 (Display elided lifetime for non-reference type in doc)
 - #75250 (make MaybeUninit::as_(mut_)ptr const)
 - #75253 (clean up const-hacks in int endianess conversion functions)
 - #75259 (Add missing backtick)
 - #75267 (Small cleanup)
 - #75270 (fix a couple of clippy findings)

Failed merges:

r? @ghost
2020-08-08 03:54:33 +00:00
Yuki Okushi 21bfe529c7
Rollup merge of #75270 - matthiaskrgr:clippy_aug_1, r=Dylan-DPC
fix a couple of clippy findings
2020-08-08 11:36:12 +09:00
Yuki Okushi 81546de429
Rollup merge of #75267 - estebank:cleanup, r=Dylan-DPC
Small cleanup

* Add docstring to `Parser` field
* Remove unnecessary `unwrap`
* Remove unnecessary borrow
* Fix indentation of some `teach`text output
2020-08-08 11:36:10 +09:00
Yuki Okushi 2c1fe50362
Rollup merge of #75259 - giraffate:add_missing_backtick, r=lcnr
Add missing backtick
2020-08-08 11:36:09 +09:00
Yuki Okushi 02bf036c6c
Rollup merge of #75253 - RalfJung:cleanup-const-hack, r=oli-obk
clean up const-hacks in int endianess conversion functions

Cleans up the const hacks added in https://github.com/rust-lang/rust/pull/69373.

r? @oli-obk
2020-08-08 11:36:07 +09:00
Yuki Okushi b032a15fa8
Rollup merge of #75250 - RalfJung:uninit-const-ptr, r=oli-obk
make MaybeUninit::as_(mut_)ptr const

I think it was just an oversight that they are not const yet.

I also changed their implementation as the old one created references to uninitialized memory.^^
2020-08-08 11:36:05 +09:00
Yuki Okushi 255434d83c
Rollup merge of #75237 - nbdd0121:rustdoc, r=jyn514
Display elided lifetime for non-reference type in doc

In edition 2018 we encourage writing `<'_>` explicitly, so rustdoc should display like such as well.

Fixes #75225

~~Somehow when I run the compiled rustdoc using `cargo +stage2 doc` on other crates, it correctly produces `<'_>`, but I couldn't get the std doc to do the same with `./x.py doc --stage 2`. Might this be related to the recent change to x.py about how the doc is built?~~
2020-08-08 11:36:03 +09:00
Yuki Okushi f5d2ffd7fb
Rollup merge of #75224 - Aaron1011:fix/function-arguments-naked, r=Amanieu
Don't call a function in function-arguments-naked.rs

Fixes #75096

It's U.B. to use anything other than inline assmebling in a naked
function. Fortunately, the `#break` directive works fine without
anything in the function body.
2020-08-08 11:36:02 +09:00
Nicholas Nethercote 96dd044827 Increase recursion_limit in librustc_plugin_impl.
To avoid rustdoc problems.
2020-08-08 12:05:10 +10:00
Nicholas Nethercote 3dc8a36958 Eliminate librustc_hir's dependency on librustc_session. 2020-08-08 12:03:44 +10:00
Nicholas Nethercote e539dd65f8 Eliminate the SessionGlobals from librustc_ast.
By moving `{known,used}_attrs` from `SessionGlobals` to `Session`. This
means they are accessed via the `Session`, rather than via TLS. A few
`Attr` methods and `librustc_ast` functions are now methods of
`Session`.

All of this required passing a `Session` to lots of functions that didn't
already have one. Some of these functions also had arguments removed, because
those arguments could be accessed directly via the `Session` argument.

`contains_feature_attr()` was dead, and is removed.

Some functions were moved from `librustc_ast` elsewhere because they now need
to access `Session`, which isn't available in that crate.
- `entry_point_type()` --> `librustc_builtin_macros`
- `global_allocator_spans()` --> `librustc_metadata`
- `is_proc_macro_attr()` --> `Session`
2020-08-08 12:03:42 +10:00
Nicholas Nethercote d6fa011f62 Remove some unnecessary uses of Option.
These arguments are never `None`.
2020-08-08 12:02:45 +10:00
bors f9c2177ddc Auto merge of #74877 - lcnr:min_const_generics, r=oli-obk
Implement the `min_const_generics` feature gate

Implements both https://github.com/rust-lang/lang-team/issues/37 and https://github.com/rust-lang/compiler-team/issues/332.

Adds the new feature gate `#![feature(min_const_generics)]`.
This feature gate adds the following limitations to using const generics:
- generic parameters must only be used in types if they are trivial. (either `N` or `{ N }`)
- generic parameters must be either integers, `bool` or `char`.

We do allow arbitrary expressions in associated consts though, meaning that the following is allowed,
even if `<[u8; 0] as Foo>::ASSOC` is not const evaluatable.
```rust
trait Foo {
    const ASSOC: usize;
}

impl<const N: usize> Foo for [u8; N] {
    const ASSOC: usize = 64 / N;
}
```

r? @varkor cc @eddyb @withoutboats
2020-08-08 01:48:35 +00:00
Gary Guo 541fbbb6fa Cross-crate doc inlining test case for elided lifetime 2020-08-08 01:07:43 +01:00
bors f3a9de9b08 Auto merge of #75048 - eggyal:force-no-tco-start-backtrace-frame, r=Mark-Simulacrum
Prevent `__rust_begin_short_backtrace` frames from being tail-call optimised away

I've stumbled across some situations where there (unexpectedly) was no `__rust_begin_short_backtrace` frame on the stack during unwinding.

On closer examination, it appeared that the calls to that function had been tail-call optimised away.

This PR follows [@bjorn3's suggestion on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/Disabling.20tail.20call.20optimisation.3F/near/205699133), by adding calls to `black_box` that hint to rustc not to perform TCO.

Fixes #47429
2020-08-08 00:00:52 +00:00
Matthias Krüger a605e51056 fix clippy::needless_return: remove unneeded return statements 2020-08-08 00:57:37 +02:00
Matthias Krüger ff692ab14f fix clippy::clone_on_copy: don't clone types that are copy 2020-08-08 00:57:30 +02:00
Matthias Krüger 15dcda36e6 fix clippy::map_clone: use .cloned() instead of .map(|x| x.clone()) 2020-08-08 00:57:21 +02:00
Matthias Krüger 4ba1a19463 fix clippy::into_iter_on_ref: use .iter() instead of into_iter() on references. 2020-08-08 00:57:15 +02:00
Matthias Krüger ea9ccfa42c fix clippy::while_let_loop: use while let{} instead of loop { if ... break; } 2020-08-08 00:57:09 +02:00
Matthias Krüger f95cfe573a fix clippy::redundant_closure: remove redundant closures and call functions directly 2020-08-08 00:57:03 +02:00
Gary Guo 505d157814 Display elided lifetime for external paths 2020-08-07 23:41:07 +01:00
Gary Guo 63c0d9ca51 Display elided lifetime for non-reference type in doc 2020-08-07 23:35:07 +01:00
bors c2d1b0d980 Auto merge of #75071 - ssomers:btree_cleanup_5, r=Mark-Simulacrum
BTreeMap: enforce the panic rule imposed by `replace`

Also, reveal the unsafe parts in the closures fed to it.

r? @Mark-Simulacrum
2020-08-07 21:48:32 +00:00
Matthias Krüger 057730c4b1 fix clippy::len_zero: use is_empty() instead of comparing .len() to zero 2020-08-07 22:47:32 +02:00
Matthias Krüger eccc2fe503 fix clippy::unneeded_wildcard_pattern: remove redundant wildcard pattern 2020-08-07 22:47:32 +02:00
Matthias Krüger f6b1857353 fix clippy::unnecessary_mut_passed: function arg is not required to be mutable 2020-08-07 22:47:32 +02:00
Matthias Krüger a1c22122da fix clippy::unit_arg: make it explicit that Ok(()) is being returned 2020-08-07 22:47:32 +02:00
Matthias Krüger f3ec5be849 fix clippy::single_char_pattern: use char instead of string single-char pattern 2020-08-07 22:47:32 +02:00
Matthias Krüger 09e29e7e43 fix clippy::redundant_pattern_matching: use .is_some() instead of if let Some(_) = .. 2020-08-07 22:47:32 +02:00
Matthias Krüger 27bb68927d fix clippy::redundant_clone: remove redundant clones 2020-08-07 22:47:32 +02:00
Matthias Krüger fb975cd6fb fix clippy::map_identity: remove redundant .map(|x| x) call 2020-08-07 22:47:32 +02:00
Matthias Krüger fca81fa3cd fix clippy::iter_next_slice: use .get(0) instead of .iter().next() 2020-08-07 22:47:32 +02:00
Matthias Krüger 8bc1f91822 fix clippy::filter_next: use .find(..) instead of .filter(..).next() 2020-08-07 22:47:32 +02:00
Matthias Krüger 3ef8c72577 fix clippy::expect_fun_call: use unwrap_or_else to prevent panic message from always being evaluated 2020-08-07 22:47:31 +02:00
Esteban Küber 7e9a8483f4 Small cleanup
* Add docstring to `Parser` field
* Remove unnecessary `unwrap`
* Remove unnecessary borrow
* Fix indentation of some `teach`text output
2020-08-07 11:52:02 -07:00
Alan Egerton 5792840bf5 Prevent __rust_begin_short_backtrace frames from being tail-call optimised away 2020-08-07 19:31:25 +01:00
bors 09f4c9f508 Auto merge of #75255 - davidtwco:polymorphisation-symbol-mangling-v0-upvar-closures, r=lcnr
instance: polymorphize upvar closures/generators

This PR modifies how instances are polymorphized so that closures and generators have any closures or generators captured within their upvars also polymorphized.

With the new symbol mangling, a fully polymorphised closure will produce the same symbol regardless of what it was instantiated with. However, when that polymorphised closure captures another closure as an upvar, then the type of that other closure in the upvar substitution wouldn't have been polymorphised. The other closure will still refer to the initial substitutions. Therefore, the polymorphised closure will end up hashing differently but producing the same symbol - triggering `assert_symbols_are_distinct` in MIR partitioning. The old mangling scheme had a hash at the end that meant this didn't happen (this would still have been an issue, we just didn't have a way to notice).

See [this Zulip discussion for further elaboration](https://rust-lang.zulipchat.com/#narrow/stream/216091-t-compiler.2Fwg-polymorphization/topic/symbol.20mangling.20v0.20.E2.9C.95.20polymorphisation/near/206152008).

r? @eddyb
cc @lcnr
2020-08-07 17:57:30 +00:00
Stein Somers 734fc0477c BTreeMap: enforce the panic rule imposed by replace 2020-08-07 19:51:26 +02:00
David Wood ac50d61785
instance: polymorphize FnDef substs
This commit extends previous polymorphization of substs to polymorphize
`FnDef`.

Signed-off-by: David Wood <david@davidtw.co>
2020-08-07 18:41:45 +01:00
David Wood 4ccaf6f38c
instance: avoid unnecessary mk_ calls
This commit avoids unnecessary calls to `mk_closure` and `mk_generator`
by checking if the polymorphized substs match the original substs.

Signed-off-by: David Wood <david@davidtw.co>
2020-08-07 18:41:43 +01:00
David Wood 5827b5a4bd
ty: add MAY_POLYMORPHIZE flag
This commit adds a `MAY_POLYMORPHIZE` which checks for closures and
generators so that polymorphization of substs does not need to traverse
every substs.

Signed-off-by: David Wood <david@davidtw.co>
2020-08-07 18:41:42 +01:00