1. 25 Jul, 2020 7 commits
  2. 24 Jul, 2020 33 commits
    • bors's avatar
      Auto merge of #73645 - poliorcetics:ref-keyword, r=jyn514 · 1e55f584
      bors authored
      Document the ref keyword
      
      Partial fix for #34601.
      
      This documents the `ref` keyword with two examples, one failing to compile because the `ref` keyword is missing, and the same example fixed with the keyword inserted in the correct place.
      
      It also explains (very *very* rapidly) the differences between `&` and `ref`.
      
      I put a link to the best place I could find in the Reference but there may be something better that I didn't find.
      1e55f584
    • bors's avatar
      Auto merge of #74681 - RalfJung:miri-extern-fn, r=oli-obk · 5ef299eb
      bors authored
       Miri: use extern fn to expose interpreter operations to program; fix leak checker on Windows
      
      This PR realizes an idea that @oli-obk has been suggesting for a while: to use Miri-specific `extern` functions to provide some extra capabilities to the program. Initially, we have two of these methods, which libstd itself needs:
      * `miri_start_panic`, which replaces the intrinsic of the same name (mostly for consistency, to avoid having multiple mechanisms for Miri-specific functionality).
      * `miri_static_root`, which adds an allocation to a list of static "roots" that Miri considers as not having leaked (including all memory reachable through them). This is needed for https://github.com/rust-lang/miri/issues/1302.
      
      We use `extern` functions instead of intrinsics for this so that user code can more easily call these Miri hoolks -- e.g. `miri_static_root` should be useful for https://github.com/rust-lang/miri/issues/1318.
      
      The Miri side of this is at https://github.com/rust-lang/miri/pull/1485.
      
      r? @oli-obk
      5ef299eb
    • bors's avatar
      Auto merge of #74507 - lcnr:const-prop-into-op, r=oli-obk · d8cf7495
      bors authored
      add `visit_operand` to const prop
      
      r? @oli-obk
      d8cf7495
    • bors's avatar
      Auto merge of #74724 - Manishearth:rollup-plbt8fe, r=Manishearth · fe07ece9
      bors authored
      Rollup of 8 pull requests
      
      Successful merges:
      
       - #72954 (revise RwLock for HermitCore)
       - #74367 (Rearrange the pipeline of `pow` to gain efficiency)
       - #74491 (Optimize away BitAnd and BitOr when possible)
       - #74639 (Downgrade glibc to 2.11.1 for ppc, ppc64 and s390x)
       - #74661 (Refactor `region_name`: add `RegionNameHighlight`)
       - #74692 (delay_span_bug instead of silent ignore)
       - #74698 (fixed error reporting for mismatched traits)
       - #74715 (Add a system for creating diffs across multiple mir optimizations.)
      
      Failed merges:
      
      r? @ghost
      fe07ece9
    • Alexis Bourget's avatar
      Apply suggestion from review · 654c180d
      Alexis Bourget authored
      654c180d
    • Alexis Bourget's avatar
    • Alexis Bourget's avatar
      Fix nits · 79f052bd
      Alexis Bourget authored
      79f052bd
    • Manish Goregaokar's avatar
      Rollup merge of #74715 - oli-obk:mir_pass_diff, r=wesleywiser · 5d1d94e7
      Manish Goregaokar authored
      Add a system for creating diffs across multiple mir optimizations.
      
      r? @wesleywiser
      5d1d94e7
    • Manish Goregaokar's avatar
      Rollup merge of #74698 - ayrtonm:handle-traitref-mismatch, r=estebank · 7f24c7d3
      Manish Goregaokar authored
      fixed error reporting for mismatched traits
      
      mismatched traits were previously referred to as types
      
      closes #72217
      7f24c7d3
    • Manish Goregaokar's avatar
      Rollup merge of #74692 - Mark-Simulacrum:delay-bug, r=pnkfelix · db83a21d
      Manish Goregaokar authored
      delay_span_bug instead of silent ignore
      
      This is a follow-up to #74557.
      
      r? @pnkfelix
      db83a21d
    • Manish Goregaokar's avatar
      Rollup merge of #74661 - SNCPlay42:lifetime-names-refactor, r=estebank · ceaef731
      Manish Goregaokar authored
      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. :)
      ceaef731
    • Manish Goregaokar's avatar
      Rollup merge of #74639 - msirringhaus:master, r=cuviper · a4024ba4
      Manish Goregaokar authored
      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.
      a4024ba4
    • Manish Goregaokar's avatar
      Rollup merge of #74491 - xldenis:constant-binop-opt, r=oli-obk · e59effed
      Manish Goregaokar authored
      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
      e59effed
    • Manish Goregaokar's avatar
      Rollup merge of #74367 - Neutron3529:patch-1, r=nagisa · 3226d723
      Manish Goregaokar authored
      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
      ```
      3226d723
    • Manish Goregaokar's avatar
      Rollup merge of #72954 - hermitcore:rwlock, r=dtolnay · dfedb844
      Manish Goregaokar authored
      revise RwLock for HermitCore
      
      - current version is derived from the wasm implementation
      - increasing the readability of `Condvar`
      - simplify the interface to the libos
      dfedb844
    • bors's avatar
      Auto merge of #74676 - lcnr:generics-no-sort, r=varkor · cfb6114b
      bors authored
      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
      cfb6114b
    • Oliver Scherer's avatar
    • bors's avatar
      Auto merge of #74710 - JohnTitor:rollup-bdz4oee, r=JohnTitor · 90086937
      bors authored
      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
      90086937
    • Yuki Okushi's avatar
      Rollup merge of #74703 - tmandry:issue-74047, r=oli-obk · 01b069db
      Yuki Okushi authored
      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.
      01b069db
    • Yuki Okushi's avatar
      Rollup merge of #74694 - GuillaumeGomez:cleanup-e0727, r=Dylan-DPC · 2406c932
      Yuki Okushi authored
      Clean up E0727 explanation
      
      r? @Dylan-DPC
      2406c932
    • Yuki Okushi's avatar
      Rollup merge of #74680 - JohnTitor:missing-backticks, r=lcnr · 90f28162
      Yuki Okushi authored
      Add missing backticks in diagnostics note
      90f28162
    • Yuki Okushi's avatar
      Rollup merge of #74677 - ssomers:btree_cleanup_2, r=Amanieu · fab9b1d4
      Yuki Okushi authored
      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
      fab9b1d4
    • Yuki Okushi's avatar
      Rollup merge of #74669 - Homarechan:fix_typo, r=lcnr · 7f2bb299
      Yuki Okushi authored
      Fix typo
      7f2bb299
    • Yuki Okushi's avatar
      Rollup merge of #74666 - ssomers:btree_cleanup_1, r=Mark-Simulacrum · cff59532
      Yuki Okushi authored
      More BTreeMap test cases, some exposing undefined behaviour
      
      Gathered from other ongoing PRs and all either blessed or ignored by Miri
      
      r? @Mark-Simulacrum
      cff59532
    • Yuki Okushi's avatar
      Rollup merge of #74665 - smmalis37:issue-62200, r=davidtwco · 1f6d5ce4
      Yuki Okushi authored
      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.
      1f6d5ce4
    • Yuki Okushi's avatar
      Rollup merge of #74623 - lcnr:polymorphize-functions, r=eddyb · a02aecba
      Yuki Okushi authored
      polymorphize GlobalAlloc::Function
      
      this sadly does not change #74614
      
      r? @eddyb
      a02aecba
    • Yuki Okushi's avatar
      Rollup merge of #74601 - GuillaumeGomez:cleanup-e0724, r=jyn514 · a8163455
      Yuki Okushi authored
      Clean up E0724 explanation
      
      r? @Dylan-DPC
      a8163455
    • Yuki Okushi's avatar
      Rollup merge of #74572 - Mark-Simulacrum:unify-rustc-depr, r=petrochenkov · 0651dd4a
      Yuki Okushi authored
      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.
      0651dd4a
    • Yuki Okushi's avatar
    • Yuki Okushi's avatar
      Rollup merge of #74361 - GuillaumeGomez:theme-logo, r=Manishearth · 38b29569
      Yuki Okushi authored
      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
      38b29569
    • lzutao's avatar
      Add right border bar to Dark and Light theme · 7005ddb5
      lzutao authored
      Ayu has it. Adding similar rule to other themes makes users less
      surprised and makes GUI more consistent.
      7005ddb5
    • lzutao's avatar
      ayu: Change to less luminous color · ccbb024d
      lzutao authored
      Co-authored-by: default avatarCldfire <cldfire@3grid.net>
      ccbb024d
    • Tyler Mandry's avatar
      Fix ICE while building MIR with type errors · 62e75a1f
      Tyler Mandry authored
      Fixes #74047.
      62e75a1f