about summary refs log tree commit diff
AgeCommit message (Collapse)AuthorLines
2020-07-24Fix nitsAlexis Bourget-3/+3
2020-07-24Rollup merge of #74715 - oli-obk:mir_pass_diff, r=wesleywiserManish Goregaokar-493/+357
Add a system for creating diffs across multiple mir optimizations. r? @wesleywiser
2020-07-24Rollup merge of #74698 - ayrtonm:handle-traitref-mismatch, r=estebankManish Goregaokar-5/+54
fixed error reporting for mismatched traits mismatched traits were previously referred to as types closes #72217
2020-07-24Rollup merge of #74692 - Mark-Simulacrum:delay-bug, r=pnkfelixManish Goregaokar-12/+18
delay_span_bug instead of silent ignore This is a follow-up to #74557. r? @pnkfelix
2020-07-24Rollup merge of #74661 - SNCPlay42:lifetime-names-refactor, r=estebankManish Goregaokar-89/+92
Refactor `region_name`: add `RegionNameHighlight` This PR does not change any diagnostics itself, rather it enables further code changes, but I would like to get approval for the refactoring first before making use of it. In `rustc_mir::borrow_check::diagnostics::region_name`, there is code that allows for, when giving a synthesized name like `'1` to an anonymous lifetime, pointing at e.g. the exact '`&`' that introduces the lifetime. This PR decouples that code from the specific case of arguments, adding a new enum `RegionNameHighlight`, enabling future changes to use it in other places. This allows: * We could change the other `AnonRegionFrom*` variants to use `RegionNameHighlight` to precisely point at where lifetimes are introduced in other locations when they have type annotations, e.g. a closure return `|...| -> &i32`. * Because of how async functions are lowered this affects async functions as well, see #74072 * for #74597, we could add a second, optional `RegionNameHighlight` to the `AnonRegionFromArgument` variant that highlights a lifetime in the return type of a function when, due to elision, this is the same as the argument lifetime. * in https://github.com/rust-lang/rust/issues/74497#issuecomment-6606229707 I noticed that a diagnostic was trying to introduce a lifetime `'2` in the opaque type `impl std::future::Future`. The code for the case of arguments has [code to handle cases like this](https://github.com/rust-lang/rust/blob/bbebe7351fcd29af1eb9a35e315369b15887ea09/src/librustc_mir/borrow_check/diagnostics/region_name.rs#L365) but not the others. This refactoring would allow the same code path to handle this. * It might be appropriate to add another variant of `RegionNameHighlight` to say something like `lifetime '1 appears in the opaque type impl std::future::Future`. These are quite a few changes so I thought I would make sure the refactoring is OK before I start making changes that rely on it. :)
2020-07-24Rollup merge of #74639 - msirringhaus:master, r=cuviperManish Goregaokar-12/+12
Downgrade glibc to 2.11.1 for ppc, ppc64 and s390x As discussed in #73782 I've tested these changes on rust 1.43.0 for all the specified archs and used the resulting binaries to bootstrap building rust 1.43.1. I've also shortly tested these changes on master on ppc64.
2020-07-24Rollup merge of #74491 - xldenis:constant-binop-opt, r=oli-obkManish Goregaokar-24/+187
Optimize away BitAnd and BitOr when possible This PR lets `const_prop` optimize away `a | true == true` , `a & false == false` and `a * 0 = 0`. While I was writing this I've realized that constant propagation misses a lot of opportunities. For example: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2a4b45e772f214210a36749b27223bb0 Constant propagation doesn't seem to... propagate constants, additionally the way constant propagation is currently setup makes it tricky to add cases like `a | false == a`. I tried to organize `eval_rvalue_with_identities` to make the pattern of the optimizations easier to see but it still obscurs what should be a simple peephole optmization. cc @oli-obk
2020-07-24Rollup merge of #74367 - Neutron3529:patch-1, r=nagisaManish Goregaokar-44/+101
Rearrange the pipeline of `pow` to gain efficiency The check of the `exp` parameter seems useless if we execute the while-loop more than once. The original implementation of `pow` function using one more comparison if the `exp==0` and may break the pipeline of the cpu, which may generate a slower code. The performance gap between the old and the new implementation may be small, but IMO, at least the newer one looks more beautiful. --- bench prog: ``` #![feature(test)] extern crate test; #[macro_export]macro_rules! timing{ ($a:expr)=>{let time=std::time::Instant::now();{$a;}print!("{:?} ",time.elapsed())}; ($a:expr,$b:literal)=>{let time=std::time::Instant::now();let mut a=0;for _ in 0..$b{a^=$a;}print!("{:?} {} ",time.elapsed(),a)} } #[inline] pub fn pow_rust(x:i64, mut exp: u32) -> i64 { let mut base = x; let mut acc = 1; while exp > 1 { if (exp & 1) == 1 { acc = acc * base; } exp /= 2; base = base * base; } if exp == 1 { acc = acc * base; } acc } #[inline] pub fn pow_new(x:i64, mut exp: u32) -> i64 { if exp==0{ 1 }else{ let mut base = x; let mut acc = 1; while exp > 1 { if (exp & 1) == 1 { acc = acc * base; } exp >>= 1; base = base * base; } acc * base } } fn main(){ let a=2i64; let b=1_u32; println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); timing!(test::black_box(a).pow(test::black_box(b)),100000000); timing!(pow_new(test::black_box(a),test::black_box(b)),100000000); timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000); println!(); } ``` bench in my laptop: ``` neutron@Neutron:/me/rust$ rc commit.rs rustc commit.rs && ./commit 3.978419716s 0 4.079765171s 0 3.964630622s 0 3.997127013s 0 4.260304804s 0 3.997638211s 0 3.963195544s 0 4.11657718s 0 4.176054164s 0 3.830128579s 0 3.980396122s 0 3.937258567s 0 3.986055948s 0 4.127804162s 0 4.018943411s 0 4.185568857s 0 4.217512517s 0 3.98313603s 0 3.863018225s 0 4.030447988s 0 3.694878237s 0 4.206987927s 0 4.137608047s 0 4.115564664s 0 neutron@Neutron:/me/rust$ rc commit.rs -O rustc commit.rs -O && ./commit 162.111993ms 0 165.107125ms 0 166.26924ms 0 175.20479ms 0 205.062565ms 0 176.278791ms 0 174.408975ms 0 166.526899ms 0 201.857604ms 0 146.190062ms 0 168.592821ms 0 154.61411ms 0 199.678912ms 0 168.411598ms 0 162.129996ms 0 147.420765ms 0 209.759326ms 0 154.807907ms 0 165.507134ms 0 188.476239ms 0 157.351524ms 0 121.320123ms 0 126.401229ms 0 114.86428ms 0 ```
2020-07-24Rollup merge of #72954 - hermitcore:rwlock, r=dtolnayManish Goregaokar-43/+142
revise RwLock for HermitCore - current version is derived from the wasm implementation - increasing the readability of `Condvar` - simplify the interface to the libos
2020-07-24Clean up E0728 explanationGuillaume Gomez-3/+3
2020-07-24Auto merge of #74676 - lcnr:generics-no-sort, r=varkorbors-41/+62
correctly deal with unsorted generic parameters We now stop sorting generic params and instead correctly handle unsorted params in the rest of the compiler. We still restrict const params to come after type params though, so this PR does not change anything which is visible to users. This might slightly influence perf, so let's prevent any unintentional rollups. @bors rollup=never r? @varkor
2020-07-24Add a system for creating diffs across multiple mir optimizations.Oliver Scherer-493/+357
2020-07-24Auto merge of #74710 - JohnTitor:rollup-bdz4oee, r=JohnTitorbors-302/+443
Rollup of 12 pull requests Successful merges: - #74361 (Improve doc theme logo display) - #74504 (Add right border bar to Dark and Light theme) - #74572 (Internally unify rustc_deprecated and deprecated) - #74601 (Clean up E0724 explanation) - #74623 (polymorphize GlobalAlloc::Function) - #74665 (Don't ICE on unconstrained anonymous lifetimes inside associated types.) - #74666 (More BTreeMap test cases, some exposing undefined behaviour) - #74669 (Fix typo) - #74677 (Remove needless unsafety from BTreeMap::drain_filter) - #74680 (Add missing backticks in diagnostics note) - #74694 (Clean up E0727 explanation) - #74703 (Fix ICE while building MIR with type errors) Failed merges: r? @ghost
2020-07-24Rollup merge of #74703 - tmandry:issue-74047, r=oli-obkYuki Okushi-5/+29
Fix ICE while building MIR with type errors See https://github.com/rust-lang/rust/issues/74047#issuecomment-663290913 for background. Replacing a binding with `PatKind::Wild` (introduced in #51789 and later refactored in #67439) caused an ICE downstream while building MIR. I noticed that taking this code out no longer triggers the ICEs it was added to prevent. I'm not sure what else changed, or if this change is _correct_, but it does seem to be passing ui tests at least. r? @oli-obk cc @estebank Fixes #74047.
2020-07-24Rollup merge of #74694 - GuillaumeGomez:cleanup-e0727, r=Dylan-DPCYuki Okushi-1/+1
Clean up E0727 explanation r? @Dylan-DPC
2020-07-24Rollup merge of #74680 - JohnTitor:missing-backticks, r=lcnrYuki Okushi-16/+16
Add missing backticks in diagnostics note
2020-07-24Rollup merge of #74677 - ssomers:btree_cleanup_2, r=AmanieuYuki Okushi-20/+47
Remove needless unsafety from BTreeMap::drain_filter Remove one piece of unsafe code in the iteration over the iterator returned by BTreeMap::drain_filter. - Changes an explicitly unspecified part of the API: when the user-supplied predicate (or some of BTreeMap's code) panicked, and the caller tries to use the iterator again, we no longer offer the same key/value pair to the predicate again but pretend the iterator has finished. Note that Miri does not find UB in the test case added here with the unsafe code (or without). - Makes the code a little easier on the eyes. - Makes the code a little harder on the CPU: ``` benchcmp c0 c2 --threshold 3 name c0 ns/iter c2 ns/iter diff ns/iter diff % speedup btree::set::clone_100_and_drain_all 2,794 2,900 106 3.79% x 0.96 btree::set::clone_100_and_drain_half 2,604 2,964 360 13.82% x 0.88 btree::set::clone_10k_and_drain_half 287,770 322,755 34,985 12.16% x 0.89 ``` r? @Amanieu
2020-07-24Rollup merge of #74669 - Homarechan:fix_typo, r=lcnrYuki Okushi-1/+1
Fix typo
2020-07-24Rollup merge of #74666 - ssomers:btree_cleanup_1, r=Mark-SimulacrumYuki Okushi-0/+80
More BTreeMap test cases, some exposing undefined behaviour Gathered from other ongoing PRs and all either blessed or ignored by Miri r? @Mark-Simulacrum
2020-07-24Rollup merge of #74665 - smmalis37:issue-62200, r=davidtwcoYuki Okushi-12/+43
Don't ICE on unconstrained anonymous lifetimes inside associated types. Fixes #62200. The change here is inspired (copied) by how this case is handled on bare fns at https://github.com/rust-lang/rust/blob/e8b55a4ad230ebec762fdfc4f241ba98a98560af/src/librustc_typeck/astconv.rs#L3083-L3106.
2020-07-24Rollup merge of #74623 - lcnr:polymorphize-functions, r=eddybYuki Okushi-1/+14
polymorphize GlobalAlloc::Function this sadly does not change #74614 r? @eddyb
2020-07-24Rollup merge of #74601 - GuillaumeGomez:cleanup-e0724, r=jyn514Yuki Okushi-1/+2
Clean up E0724 explanation r? @Dylan-DPC
2020-07-24Rollup merge of #74572 - Mark-Simulacrum:unify-rustc-depr, r=petrochenkovYuki Okushi-244/+195
Internally unify rustc_deprecated and deprecated This PR intentionally tries to be "featureless" in that the behavior is not altered for either attribute, though it more clearly exposes cases where that is the case in the code.
2020-07-24Rollup merge of #74504 - lzutao:ayu-border-selected-fn, r=GuillaumeGomezYuki Okushi-1/+3
Add right border bar to Dark and Light theme Demo: Light theme: https://github.com/rust-lang/rust/pull/74504#issuecomment-662491120 Dark theme: https://github.com/rust-lang/rust/pull/74504#issuecomment-662522446 Ayu theme: https://github.com/rust-lang/rust/pull/74504#issuecomment-662625685
2020-07-24Rollup merge of #74361 - GuillaumeGomez:theme-logo, r=ManishearthYuki Okushi-0/+12
Improve doc theme logo display Fixes #74350. The first commit cleans up the whitespaces and converts them to tabs. We should definitely write a tidy check for this (will do it in another PR). Screenshots: ![Screenshot from 2020-07-15 14-08-25](https://user-images.githubusercontent.com/3050060/87543748-8581c800-c6a5-11ea-8417-cbf98ebbfd10.png) ![Screenshot from 2020-07-15 14-11-59](https://user-images.githubusercontent.com/3050060/87543747-84e93180-c6a5-11ea-8cea-976b1470e809.png) ![Screenshot from 2020-07-15 14-12-12](https://user-images.githubusercontent.com/3050060/87543745-84509b00-c6a5-11ea-8324-c3c46ab2d9ef.png) r? @lzutao cc @Cldfire
2020-07-24Add right border bar to Dark and Light themeLzu Tao-0/+2
Ayu has it. Adding similar rule to other themes makes users less surprised and makes GUI more consistent.
2020-07-24ayu: Change to less luminous colorLzu Tao-1/+1
Co-authored-by: Cldfire <cldfire@3grid.net>
2020-07-23Fix ICE while building MIR with type errorsTyler Mandry-5/+29
Fixes #74047.
2020-07-23added a test case for reporting mismatched traitsAyrton-0/+30
2020-07-23Account for trailing closing angle bracketsEsteban Küber-23/+75
2020-07-23Fix nitAlexis Bourget-1/+2
2020-07-23Fix nit and add link for CowAlexis Bourget-32/+8
2020-07-23fixed error reporting for mismatched traitsAyrton-5/+24
mismatched traits were previously referred to as types
2020-07-23Remove unecessary linkAlexis Bourget-2/+0
2020-07-23Auto merge of #74685 - ehuss:update-cargo, r=ehussbors-1/+1
Update cargo 21 commits in 43cf77395cad5b79887b20b7cf19d418bbd703a9..aa6872140ab0fa10f641ab0b981d5330d419e927 2020-07-13 17:35:42 +0000 to 2020-07-23 13:46:27 +0000 - Update features set in CI. (rust-lang/cargo#8530) - Stabilize -Z crate-versions (rust-lang/cargo#8509) - Fix typo in docs (rust-lang/cargo#8529) - Remove unused CompileMode::all_modes (rust-lang/cargo#8526) - Mask out system core.autocrlf settings before resetting git repos (rust-lang/cargo#8523) - Flag git zlib errors as spurious errors (rust-lang/cargo#8520) - Fix the help display for the target-triple option (rust-lang/cargo#8515) - Check workspace member existence as dir. (rust-lang/cargo#8511) - Bump to 0.48.0, update changelog (rust-lang/cargo#8508) - Apply workspace.exclude to workspace.default-members. (rust-lang/cargo#8485) - Fix nightly tests for intra-doc links. (rust-lang/cargo#8528) - doc: Replace "regenerate" with "revoke" for API tokens (rust-lang/cargo#8510) - Add back Manifest::targets_mut (rust-lang/cargo#8494) - Build host dependencies with opt-level 0 by default (rust-lang/cargo#8500) - Fix freshness checks for build scripts on renamed dirs (rust-lang/cargo#8497) - Add a `-Zbuild-std-features` flag (rust-lang/cargo#8490) - clippy cleanups (rust-lang/cargo#8495) - Fix self-publish script. (rust-lang/cargo#8492) - Ensure `unstable.build-std` works like `-Zbuild-std` (rust-lang/cargo#8491) - Make `cargo metadata` output deterministic (rust-lang/cargo#8489) - Switch to github actions (rust-lang/cargo#8467)
2020-07-23Clean up E0724 explanationGuillaume Gomez-1/+2
2020-07-23Clean up E0727 explanationGuillaume Gomez-1/+1
2020-07-23delay_span_bug instead of silent ignoreMark Rousskov-12/+18
2020-07-23Auto merge of #5829 - JohnTitor:epsilon, r=flip1995bors-3/+7
Use `(std::)f64::EPSILON` in the examples as suggested in the lints `float_cmp(_const)` suggests using `{f32|f64}::EPSILON` and it'd be great if the docs mentioned it. changelog: none
2020-07-23Auto merge of #5832 - rust-lang:update_usage_instr, r=Manishearthbors-4/+2
Update Usage section of README.md Fixes #5826 changelog: none
2020-07-23Detect turbofish missing surrounding angle bracketsEsteban Küber-3/+61
2020-07-23BTreeMap::drain_filter: replace needless unsafety and testStein Somers-20/+47
2020-07-23slightly adapt const propBastian Kauschke-7/+7
2020-07-23Update cargoEric Huss-1/+1
2020-07-23avoid implicitly returning ()Ralf Jung-1/+2
2020-07-23on Windows, use miri_static_root for TLS dtorsRalf Jung-2/+20
2020-07-23Auto merge of #74509 - matthewjasper:empty-verify, r=nikomatsakisbors-10/+102
Use `ReEmpty(U0)` as the implicit region bound in typeck Fixes #74429 r? @nikomatsakis
2020-07-23Add missing backticks in diagnostics noteYuki Okushi-16/+16
2020-07-23test usageBastian Kauschke-2/+15
2020-07-23add more complex param order testBastian Kauschke-1/+20