1. 23 6月, 2020 6 次提交
  2. 22 6月, 2020 1 次提交
  3. 20 6月, 2020 2 次提交
  4. 19 6月, 2020 31 次提交
    • B
      Auto merge of #73504 - RalfJung:rollup-iy8hsvl, r=RalfJung · 72417d84
      bors 提交于
      Rollup of 10 pull requests
      
      Successful merges:
      
       - #72280 (Fix up autoderef when reborrowing)
       - #72785 (linker: MSVC supports linking static libraries as a whole archive)
       - #73011 (first stage of implementing LLVM code coverage)
       - #73044 (compiletest: Add directives to detect sanitizer support)
       - #73054 (memory access sanity checks: abort instead of panic)
       - #73136 (Change how compiler-builtins gets many CGUs)
       - #73280 (Add E0763)
       - #73317 (bootstrap: read config from $RUST_BOOTSTRAP_CONFIG)
       - #73350 (bootstrap/install.rs: support a nonexistent `prefix` in `x.py install`)
       - #73352 (Speed up bootstrap a little.)
      
      Failed merges:
      
      r? @ghost
      72417d84
    • R
      Rollup merge of #73352 - ehuss:bootstrap-metadata, r=Mark-Simulacrum · 61c89253
      Ralf Jung 提交于
      Speed up bootstrap a little.
      
      The bootstrap script was calling `cargo metadata` 3 times (or 6 with `-v`). This is a very expensive operation, and this attempts to avoid the extra calls. On my system, a simple command like `./x.py test -h -v` goes from about 3 seconds to 0.4.
      
      An overview of the changes:
      
      - Call `cargo metadata` only once with `--no-deps`. Optional dependencies are filtered in `in_tree_crates` (handling `profiler_builtins` and `rustc_codegen_llvm` which are driven by the config).
      - Remove a duplicate call to `metadata::build` when using `-v`. I'm not sure why it was there, it looks like a mistake or vestigial from previous behavior.
      - Remove check for `_shim`, I believe all the `_shim` crates are now gone.
      - Remove check for `rustc_` and `*san` for `test::Crate::should_run`, these are no longer dependencies in the `test` tree.
      - Use relative paths in `./x.py test -h -v` output.
      - Some code cleanup (remove unnecessary `find_compiler_crates`, etc.).
      - Show suite paths (`src/test/ui/...`) in `./x.py test -h -v` output.
      - Some doc comments.
      61c89253
    • R
      Rollup merge of #73350 - nodakai:install-rs-support-nonexistent-prefix, r=Mark-Simulacrum · a59d1644
      Ralf Jung 提交于
      bootstrap/install.rs: support a nonexistent `prefix` in `x.py install`
      
      PR #49778 introduced fs::canonicalize() which fails for a nonexistent path.
      This is a surprise for someone used to GNU Autotools' configure which can create any necessary intermediate directories in prefix.
      
      This change makes it run fs::create_dir_all() before canonicalize().
      a59d1644
    • R
      Rollup merge of #73317 - davidtwco:bootstrap-config-env-var, r=Mark-Simulacrum · 04047881
      Ralf Jung 提交于
      bootstrap: read config from $RUST_BOOTSTRAP_CONFIG
      
      This PR modifies bootstrap so that `config.toml` is read first from `RUST_BOOTSTRAP_CONFIG`, then `--config` and finally `config.toml` in the current directory.
      
      This is a subjective change, intended to improve the ergnomics when using "development shells" for rustc development (for example, using tools such as Nix) which set environment variables to ensure a reproducible environment (these development shells can then be version controlled, e.g. [my rustc shell](https://github.com/davidtwco/veritas/blob/6b74a5c170b6efb2c7b094352932f9158f97eec0/nix/shells/rustc.nix)). By optionally reading `config.toml` from an environment variable, a `config.toml` can be defined in the development shell and a path to it exposed in the `RUST_BOOTSTRAP_CONFIG` environment variable - avoiding the need to manually symlink the contents of this file to `config.toml` in the working directory.
      04047881
    • R
      Rollup merge of #73280 - GuillaumeGomez:add-e0763, r=petrochenkov · 45aa36ba
      Ralf Jung 提交于
      Add E0763
      45aa36ba
    • R
      Rollup merge of #73136 - alexcrichton:thinlto-compiler-builtins, r=Mark-Simulacrum · 1e31a7c1
      Ralf Jung 提交于
      Change how compiler-builtins gets many CGUs
      
      This commit intends to fix an accidental regression from #70846. The
      goal of #70846 was to build compiler-builtins with a maximal number of
      CGUs to ensure that each module in the source corresponds to an object
      file. This high degree of control for compiler-builtins is desirable to
      ensure that there's at most one exported symbol per CGU, ideally
      enabling compiler-builtins to not conflict with the system libgcc as
      often.
      
      In #70846, however, only part of the compiler understands that
      compiler-builtins is built with many CGUs. The rest of the compiler
      thinks it's building with `sess.codegen_units()`. Notably the
      calculation of `sess.lto()` consults `sess.codegen_units()`, which when
      there's only one CGU it disables ThinLTO. This means that
      compiler-builtins is built without ThinLTO, which is quite harmful to
      performance! This is the root of the cause from #73135 where intrinsics
      were found to not be inlining trivial functions.
      
      The fix applied in this commit is to remove the special-casing of
      compiler-builtins in the compiler. Instead the build system is now
      responsible for special-casing compiler-builtins. It doesn't know
      exactly how many CGUs will be needed but it passes a large number that
      is assumed to be much greater than the number of source-level modules
      needed. After reading the various locations in the compiler source, this
      seemed like the best solution rather than adding more and more special
      casing in the compiler for compiler-builtins.
      
      Closes #73135
      1e31a7c1
    • R
      Rollup merge of #73054 - RalfJung:dont-panic, r=Mark-Simulacrum · 125c196b
      Ralf Jung 提交于
      memory access sanity checks: abort instead of panic
      
      Suggested by @Mark-Simulacrum, this should help reduce the performance impact of these checks.
      125c196b
    • R
      Rollup merge of #73044 - tmiasko:compiletest-san, r=nikomatsakis · 0851036a
      Ralf Jung 提交于
      compiletest: Add directives to detect sanitizer support
      
      Add needs-sanitizer-{address,leak,memory,thread} directive indicating
      that test requires target with support for specific sanitizer.
      
      This is an addition to the existing needs-sanitizer-support directive
      indicating that test requires a sanitizer runtime library.
      
      The existing needs-sanitizer-support directive could be incorporated into the
      new ones, but I decided to retain it, since it enables running sanitizer
      codegen tests even when building of sanitizer runtime libraries is disabled.
      0851036a
    • R
      Rollup merge of #73011 - richkadel:llvm-count-from-mir-pass, r=tmandry · 1dc6c3c4
      Ralf Jung 提交于
      first stage of implementing LLVM code coverage
      
      This PR replaces #70680 (WIP toward LLVM Code Coverage for Rust) since I am re-implementing the Rust LLVM code coverage feature in a different part of the compiler (in MIR pass(es) vs AST).
      
      This PR updates rustc with `-Zinstrument-coverage` option that injects the llvm intrinsic `instrprof.increment()` for code generation.
      
      This initial version only injects counters at the top of each function, and does not yet implement the required coverage map.
      
      Upcoming PRs will add the coverage map, and add more counters and/or counter expressions for each conditional code branch.
      
      Rust compiler MCP https://github.com/rust-lang/compiler-team/issues/278
      Relevant issue: #34701 - Implement support for LLVMs code coverage instrumentation
      
      ***[I put together some development notes here, under a separate branch.](https://github.com/richkadel/rust/blob/cfa0b21d34ee64e4ebee226101bd2ef0c6757865/src/test/codegen/coverage-experiments/README-THIS-IS-TEMPORARY.md)***
      1dc6c3c4
    • R
      Rollup merge of #72785 - petrochenkov:wholemsvc, r=matthewjasper · 7cc45183
      Ralf Jung 提交于
      linker: MSVC supports linking static libraries as a whole archive
      7cc45183
    • R
      Rollup merge of #72280 - nbdd0121:typeck, r=nikomatsakis · 70622db4
      Ralf Jung 提交于
      Fix up autoderef when reborrowing
      
      Currently `(f)()` and `f.call_mut()` behaves differently if expression `f` contains autoderef in it. This causes a weird error in #72225.
      
      When `f` is type checked, `Deref` is used (this is expected as we can't yet determine if we should use `Fn` or `FnMut`). When subsequently we determine the actual trait to be used, when using the `f.call_mut()` syntax the `Deref` is patched to `DerefMut`, while for the `(f)()` syntax case it is not.
      
      This PR replicates the fixup for the first case.
      
      Fixes #72225
      Fixes #68590
      70622db4
    • B
      Auto merge of #73498 - RalfJung:rollup-1mfjcju, r=RalfJung · 63b441aa
      bors 提交于
      Rollup of 13 pull requests
      
      Successful merges:
      
       - #70740 (Enabling static-pie for musl)
       - #72331 (Report error when casting an C-like enum implementing Drop)
       - #72486 (Fix asinh of negative values)
       - #72497 (tag/niche terminology cleanup)
       - #72999 (Create self-contained directory and move there some of external binaries/libs)
       - #73130 (Remove const prop for indirects)
       - #73142 (Ensure std benchmarks get tested.)
       - #73305 (Disallow loading crates with non-ascii identifier name.)
       - #73346 (Add rust specific features to print target features)
       - #73362 (Test that bounds checks are elided when slice len is checked up-front)
       - #73459 (Reduce pointer casts in Box::into_boxed_slice)
       - #73464 (Document format correction)
       - #73479 (Minor tweaks to liballoc)
      
      Failed merges:
      
      r? @ghost
      63b441aa
    • R
      Rollup merge of #73479 - pickfire:liballoc-spell, r=dtolnay · 028c9089
      Ralf Jung 提交于
      Minor tweaks to liballoc
      028c9089
    • R
      Rollup merge of #73464 - qy3u:fs-document-format-correction, r=jonas-schievink · f7d833e8
      Ralf Jung 提交于
      Document format correction
      
      Minor amendments to the document.
      
      r? @steveklabnik
      f7d833e8
    • R
      Rollup merge of #73459 - cuviper:into_boxed_slice-unicast, r=dtolnay · fc2ce7cf
      Ralf Jung 提交于
      Reduce pointer casts in Box::into_boxed_slice
      
      We only need to cast the pointer once to change `Box<T>` to an array
      `Box<[T; 1]>`, then we can let unsized coercion return `Box<[T]>`.
      fc2ce7cf
    • R
      Rollup merge of #73362 - erikdesjardins:bounds, r=nikomatsakis · 7d3238f9
      Ralf Jung 提交于
      Test that bounds checks are elided when slice len is checked up-front
      
      Closes #69101
      7d3238f9
    • R
      Rollup merge of #73346 - aszenz:patch-1, r=cuviper · 8d79ebd0
      Ralf Jung 提交于
      Add rust specific features to print target features
      
      Fixes #71583
      
      `crt-static` is a rust specific target feature that's absent from llvm feature table, adding it there so that it shows under `rustc --print target-features`.
      
      Probably the most native implementation I could think of, would love to get feedback.
      8d79ebd0
    • R
      Rollup merge of #73305 - crlf0710:disallow_loading_monsters, r=petrochenkov · 3b4bec24
      Ralf Jung 提交于
      Disallow loading crates with non-ascii identifier name.
      
      This turns off external crate loading with non-ascii identifier names.
      
      cc #55467.
      3b4bec24
    • R
      Rollup merge of #73142 - ehuss:std-benches, r=dtolnay · 78f3e9c3
      Ralf Jung 提交于
      Ensure std benchmarks get tested.
      
      This ensures that the std benchmarks don't break in the future. Currently they aren't compiled or tested on CI, so they can easily bitrot.  Testing a benchmark runs it with one iteration. Adding these should only add a few seconds to CI.
      
      Closes #54176
      Closes #61913
      78f3e9c3
    • R
      Rollup merge of #73130 - wesleywiser:remove_const_prop_for_indirects, r=oli-obk · 098949b5
      Ralf Jung 提交于
      Remove const prop for indirects
      
      This was only used by one mir-opt test and since it causes buggy behavior under `-Zmir-opt-level=2`, it seems like we should remove it.
      
      This was split out from #71946.
      
      Closes #72679
      Closes #72372
      Closes #72285
      098949b5
    • R
      Rollup merge of #72999 - mati865:separate-self-contained-dir, r=Mark-Simulacrum · ea3c3097
      Ralf Jung 提交于
      Create self-contained directory and move there some of external binaries/libs
      
      One of the steps to reach design described in https://github.com/rust-lang/rust/issues/68887#issuecomment-633048380
      This PR moves things around and allows link code to handle the new directory structure.
      ea3c3097
    • R
      Rollup merge of #72497 - RalfJung:tag-term, r=oli-obk · 5e7eec2e
      Ralf Jung 提交于
      tag/niche terminology cleanup
      
      The term "discriminant" was used in two ways throughout the compiler:
      * every enum variant has a corresponding discriminant, that can be given explicitly with `Variant = N`.
      * that discriminant is then encoded in memory to store which variant is active -- but this encoded form of the discriminant was also often called "discriminant", even though it is conceptually quite different (e.g., it can be smaller in size, or even use niche-filling).
      
      After discussion with @EddyB, this renames the second term to "tag". The way the tag is encoded can be either `TagEncoding::Direct` (formerly `DiscriminantKind::Tag`) or `TagEncoding::Niche` (formerly `DiscrimianntKind::Niche`).
      
      This finally resolves some long-standing confusion I had about the handling of variant indices and discriminants, which surfaced in https://github.com/rust-lang/rust/pull/72419.
      
      (There is also a `DiscriminantKind` type in libcore, it remains unaffected. I think this corresponds to the discriminant, not the tag, so that seems all right.)
      
      r? @EddyB
      5e7eec2e
    • R
      Rollup merge of #72486 - Ralith:asinh-fix, r=dtolnay · 99be102a
      Ralf Jung 提交于
      Fix asinh of negative values
      
      Rust's current implementation of asinh has [large errors](https://www.wolframalpha.com/input/?i=arcsinh%28x%29%2C+ln%28x%2B%28x%5E2%2B1%29%5E0.5%29%2C+x+from+-67452095.07139316+to+0) in its negative range. ~These are (mostly) not numerical, but rather seem due to an incorrect implementation.~ This appears to be due to avoidable catastrophic cancellation.
      [Playground before/after](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=bd04ae6d86d06612e4e389a8b95d19ab).
      [glibc uses](https://github.com/bminor/glibc/blob/81dca813cc35f91414731fdd0ff6b756d5e1827f/sysdeps/ieee754/dbl-64/s_asinh.c#L56) abs here.
      
      Many thanks to @danieldeankon for finding this weird behavior, @jebrosen for diagnosing it, and @toasteater for identifying the probable implementation error!
      99be102a
    • R
      Rollup merge of #72331 - oddg:forbid-cast-of-cenum-implementing-drop, r=matthewjasper,nikomatsakis · 9c54c65c
      Ralf Jung 提交于
      Report error when casting an C-like enum implementing Drop
      
      Following approach described in https://github.com/rust-lang/rust/issues/35941
      9c54c65c
    • R
      Rollup merge of #70740 - haraldh:static-pie, r=petrochenkov · 27d4737e
      Ralf Jung 提交于
      Enabling static-pie for musl
      
      and make it the default for the x86_64-unknown-linux-musl target
      
      This is a quick implementation for https://github.com/rust-lang/rust/issues/70693
      
      Opening it as a draft PR to gather some feedback, before I put more work in it.
      
      ```console
      ❯ cat hello.rs
      fn main() {
          println!("main = {:#x}", &main as *const _ as usize);
      }
      
      ❯  /tmp/rust-musl/bin/rustc  --target x86_64-unknown-linux-musl  ~/hello.rs
      
      ❯ ldd hello
      	statically linked
      
      ❯ file hello
      hello: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=fec5cdc170f503a712a63a6958691ce5ce433654, with debug_info, not stripped
      
      ❯ ./hello
      main = 0x7f233ca30008
      
      ❯ ./hello
      main = 0x7f9ddc529008
      
      ❯ ./hello
      main = 0x7f1e5a224008
      
      ❯ ./hello
      main = 0x7f4485c7c008
      
      ❯ /tmp/rust-musl/bin/rustc  --target x86_64-unknown-linux-musl  -Z print-link-args  ~/hello.rs
      "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-Wl,--eh-frame-hdr" "-m64" "-nostdlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/rcrt1.o" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/crti.o" "-L" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib" "hello.hello.7rcbfp3g-cgu.0.rcgu.o" "hello.hello.7rcbfp3g-cgu.1.rcgu.o" "hello.hello.7rcbfp3g-cgu.2.rcgu.o" "hello.hello.7rcbfp3g-cgu.3.rcgu.o" "hello.hello.7rcbfp3g-cgu.4.rcgu.o" "hello.hello.7rcbfp3g-cgu.5.rcgu.o" "-o" "hello" "hello.1nxjf9so94czdgcz.rcgu.o" "-Wl,--gc-sections" "-static-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libstd-0f9cb7646f9e2c34.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libpanic_unwind-ba857f2f2e4e7187.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libhashbrown-58ba5e25bbdf9d29.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_std_workspace_alloc-886bfe43afa847dc.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libbacktrace-fbfb8fe99f19a67b.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libbacktrace_sys-85fa859e7d364cc9.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_demangle-07ab026cd3ec0d82.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libunwind-a8ec5932d92ea864.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libcfg_if-0ba4cc2f38a198d5.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/liblibc-c1bb2b3ce4f78b7c.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/liballoc-0ff673c1cf0d451a.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_std_workspace_core-c8ff2001db856926.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libcore-2ae14177140eeca2.rlib" "-Wl,--end-group" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libcompiler_builtins-4fd81b5ce1b08a9c.rlib" "-static" "-Wl,-Bdynamic" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/crtn.o"
      ```
      
      Closes https://github.com/rust-lang/rust/issues/70693
      Closes https://github.com/rust-lang/rust/issues/53968
      27d4737e
    • B
      Remove now-redundant branch · 35a2915b
      Benjamin Saunders 提交于
      35a2915b
    • B
      Auto merge of #73486 - Manishearth:rollup-11iyqpc, r=Manishearth · a39c7787
      bors 提交于
      Rollup of 17 pull requests
      
      Successful merges:
      
       - #70551 (Make all uses of ty::Error delay a span bug)
       - #71338 (Expand "recursive opaque type" diagnostic)
       - #71976 (Improve diagnostics for `let x += 1`)
       - #72279 (add raw_ref macros)
       - #72628 (Add tests for 'impl Default for [T; N]')
       - #72804 (Further tweak lifetime errors involving `dyn Trait` and `impl Trait` in return position)
       - #72814 (remove visit_terminator_kind from MIR visitor)
       - #72836 (Complete the std::time documentation to warn about the inconsistencies between OS)
       - #72968 (Only highlight doc search results via mouseover if mouse has moved)
       - #73034 (Export `#[inline]` fns with extern indicators)
       - #73315 (Clean up some weird command strings)
       - #73320 (Make new type param suggestion more targetted)
       - #73361 (Tweak "non-primitive cast" error)
       - #73425 (Mention functions pointers in the documentation)
       - #73428 (Fix typo in librustc_ast docs)
       - #73447 (Improve document for `Result::as_deref(_mut)` methods)
       - #73476 (Added tooltip for should_panic code examples)
      
      Failed merges:
      
      r? @ghost
      a39c7787
    • R
      Merge pull request #4 from rust-lang/master · 7ef9eb32
      Rich Kadel 提交于
      update from origin 2020-06-18
      7ef9eb32
    • M
      Rollup merge of #73476 - JakobDegen:should_panic_rustdoc, r=GuillaumeGomez · 6c53a0c2
      Manish Goregaokar 提交于
      Added tooltip for should_panic code examples
      
      This change adds a tooltip to the documentation for `should_panic` examples. It currently displays identically to `compile_fail` examples, save for the changed text. It may be helpful to change the color that this displays in to make it visually more clear what is going on, but I'm unsure if additional colors wouldn't just be distracting.
      
      I brought this [up on internals](https://internals.rust-lang.org/t/indicating-that-an-example-is-should-panic-in-docs/12544) a few days ago, and there seemed to be a mild positive response to it.
      6c53a0c2
    • M
      Rollup merge of #73447 - lzutao:stabilize-result_as_deref, r=dtolnay · f15b346f
      Manish Goregaokar 提交于
      Improve document for `Result::as_deref(_mut)` methods
      
      cc #50264
      f15b346f
    • M
      Rollup merge of #73428 - pierwill:patch-1, r=jonas-schievink · 1db7dc47
      Manish Goregaokar 提交于
      Fix typo in librustc_ast docs
      
      Fixed sentence by removing a word.
      1db7dc47