1. 15 6月, 2020 5 次提交
    • R
      Rollup merge of #72598 - Aaron1011:feature/fnmut-capture-span, r=nikomatsakis · 5193c5d6
      Ralf Jung 提交于
      Display information about captured variable in `FnMut` error
      
      Fixes #69446
      
      When we encounter a region error involving an `FnMut` closure, we
      display a specialized error message. However, we currently do not
      tell the user which upvar was captured. This makes it difficult to
      determine the cause of the error, especially when the closure is large.
      
      This commit records marks constraints involving closure upvars
      with `ConstraintCategory::ClosureUpvar`. When we decide to 'blame'
      a `ConstraintCategory::Return`, we additionall store
      the captured upvar if we found a `ConstraintCategory::ClosureUpvar` in
      the path.
      
      When generating an error message, we point to relevant spans if we have
      closure upvar information available. We further customize the message if
      an `async` closure is being returned, to make it clear that the captured
      variable is being returned indirectly.
      5193c5d6
    • R
      Rollup merge of #72584 - CAD97:stabilize-58957, r=dtolnay · e6510bab
      Ralf Jung 提交于
      Stabilize vec::Drain::as_slice
      
      and add `AsRef<[T]> for Drain<'_, T>`.
      
      Tracking issue: #58957. Does not stabilize `slice::IterMut::as_slice` yet. cc @cuviper
      This PR proposes stabilizing just the `vec::Drain::as_slice` part of that tracking issue.
      
      My ultimate goal here: being able to use `for<T, I: Iterator<Item=T> + AsRef<[T]>> I` to refer to `vec::IntoIter`, `vec::Drain`, and eventually `array::IntoIter`, as an approximation of the set of by-value iterators that can be "previewed" as by-ref iterators. (Actually expressing that as a trait requires GAT.)
      e6510bab
    • R
      Rollup merge of #72556 - matthew-mcallister:trait-alias-inherent-impl, r=estebank · 3d41252f
      Ralf Jung 提交于
      Fix trait alias inherent impl resolution
      
      Fixes #60021 and fixes #72415.
      
      Obviously, the fix was very easy, but getting started with the testing and debugging rust compiler was an interesting experience. Now I can cross it off my bucket list!
      3d41252f
    • R
      Rollup merge of #72389 - Aaron1011:feature/move-fn-self-msg, r=nikomatsakis · 372cb9b6
      Ralf Jung 提交于
      Explain move errors that occur due to method calls involving `self`
      
      When calling a method that takes `self` (e.g. `vec.into_iter()`), the method receiver is moved out of. If the method receiver is used again, a move error will be emitted::
      
      ```rust
      fn main() {
          let a = vec![true];
          a.into_iter();
          a;
      }
      ```
      
      emits
      
      ```
      error[E0382]: use of moved value: `a`
       --> src/main.rs:4:5
        |
      2 |     let a = vec![true];
        |         - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
      3 |     a.into_iter();
        |     - value moved here
      4 |     a;
        |     ^ value used here after move
      ```
      
      However, the error message doesn't make it clear that the move is caused by the call to `into_iter`.
      
      This PR adds additional messages to move errors when the move is caused by using a value as the receiver of a `self` method::
      
      ```
      error[E0382]: use of moved value: `a`
         --> vec.rs:4:5
          |
      2   |     let a = vec![true];
          |         - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
      3   |     a.into_iter();
          |     ------------- value moved due to this method call
      4   |     a;
          |     ^ value used here after move
          |
      note: this function takes `self`, which moves the receiver
         --> /home/aaron/repos/rust/src/libcore/iter/traits/collect.rs:239:5
          |
      239 |     fn into_iter(self) -> Self::IntoIter;
      ```
      
      TODO:
      
      - [x] Add special handling for `FnOnce/FnMut/Fn` - we probably don't want to point at the unstable trait methods
      - [x] Consider adding additional context for operations (e.g. `Shr::shr`) when the call was generated using the operator syntax (e.g. `a >> b`)
      - [x] Consider pointing to the method parent (impl or trait block) in addition to the method itself.
      372cb9b6
    • R
      Rollup merge of #71824 - ecstatic-morse:const-check-post-drop-elab, r=oli-obk · 5c61a8dc
      Ralf Jung 提交于
      Check for live drops in constants after drop elaboration
      
      Resolves #66753.
      
      This PR splits the MIR "optimization" pass series in two and introduces a query–`mir_drops_elaborated_and_const_checked`–that holds the result of the `post_borrowck_cleanup` analyses and checks for live drops. This query is invoked in `rustc_interface` for all items requiring const-checking, which means we now do `post_borrowck_cleanup` for items even if they are unused in the crate.
      
      As a result, we are now more precise about when drops are live. This is because drop elaboration can e.g. eliminate drops of a local when all its fields are moved from. This does not mean we are doing value-based analysis on move paths, however; Storing a `Some(CustomDropImpl)` into a field of a local will still set the qualifs for that entire local.
      
      r? @oli-obk
      5c61a8dc
  2. 14 6月, 2020 11 次提交
    • B
      Auto merge of #73089 - tmiasko:musl-1.1.24, r=kennytm · 4fb54ed4
      bors 提交于
      Update musl to 1.1.24
      
      Release notes since previous version 1.1.22:
      
      ## 1.1.23 release notes
      
      ### new features:
      - riscv64 port
      - configure now allows customizing AR and RANLIB vars
      - header-level support for new linux features in 5.1
      
      ### major internal changes:
      - removed extern __syscall; syscall header code is now fully self-contained
      
      ### performance:
      - new math library implementation for log/exp/pow
      - aarch64 dynamic tlsdesc function is streamlined
      
      ### compatibility & conformance:
      - O_TTY_INIT is now defined
      - sys/types.h no longer pollutes namespace with sys/sysmacros.h in any profile
      - powerpc asm is now compatible with clang internal assembler
      
      ### changes for new POSIX interpretations:
      - fgetwc now sets stream error indicator on encoding errors
      - fmemopen no longer rejects 0 size
      
      ### bugs fixed:
      - static TLS for shared libraries was allocated wrong on "Variant I" archs
      - crash in dladdr reading through uninitialized pointer on non-match
      - sigaltstack wrongly errored out on invalid ss_size when doing SS_DISABLE
      - getdents function misbehaved with buffer length larger than INT_MAX
      - set*id could deadlock after fork from multithreaded process
      
      ### arch-specfic bugs fixed:
      - s390x SO_PEERSEC definition was wrong
      - passing of 64-bit syscall arguments was broken on microblaze
      - posix_fadvise was broken on mips due to missing 7-arg syscall support
      - vrregset_t layout and member naming was wrong on powerpc64
      
      ## 1.1.24 release notes
      
      ### new features:
      - GLOB_TILDE extension to glob
      - non-stub catgets localization API, using netbsd binary catalog format
      - posix_spawn file actions for [f]chdir (extension, pending future standard)
      - secure_getenv function (extension)
      - copy_file_range syscall wrapper (Linux extension)
      - header-level support for new linux features in 5.2
      
      ### performance:
      - new fast path for lrint (generic C version) on 32-bit archs
      
      ### major internal changes:
      - functions involving time are overhauled to be time64-ready in 32-bit archs
      - x32 uses the new time64 code paths to replace nasty hacks in syscall glue
      
      ### compatibility & conformance:
      - support for powerpc[64] unaligned relocation types
      - powerpc[64] and sh sys/user.h no longer clash with kernel asm/ptrace.h
      - select no longer modifies timeout on failure (or at all)
      - mips64 stat results are no longer limited to 32-bit time range
      - optreset (BSD extension) now has a public declaration
      - support for clang inconsistencies in wchar_t type vs some 32-bit archs
      - mips r6 syscall asm no longer has invalid lo/hi register clobbers
      - vestigial asm declarations of __tls_get_new are removed (broke some tooling)
      - riscv64 mcontext_t mismatch glibc's member naming is corrected
      
      ### bugs fixed:
      - glob failed to match broken symlinks consistently
      - invalid use of interposed calloc to allocate initial TLS
      - various dlsym symbol resolution logic errors
      - semctl with SEM_STAT_ANY didn't work
      - pthread_create with explicit scheduling was subject to priority inversion
      - pthread_create failure path had data race for thread count
      - timer_create with SIGEV_THREAD notification had data race getting timer id
      - wide printf family failed to support l modifier for float formats
      
      ### arch-specific bugs fixed:
      - x87 floating point stack imbalance in math asm (i386-only CVE-2019-14697)
      - x32 clock_adjtime, getrusage, wait3, wait4 produced junk (struct mismatches)
      - lseek broken on x32 and mipsn32 with large file offsets
      - riscv64 atomics weren't compiler barriers
      - riscv64 atomics had broken asm constraints (missing earlyclobber flag)
      - arm clone() was broken when compiled as thumb if start function returned
      - mipsr6 setjmp/longjmp did not preserve fpu register state correctly
      
      Fixes #71099.
      4fb54ed4
    • B
      Auto merge of #73232 - RalfJung:miri-no-default, r=Mark-Simulacrum · 10326d80
      bors 提交于
      x.py: do not build Miri by default on stable/beta
      
      Fixes https://github.com/rust-lang/rust/issues/73117
      
      Do I need to do anything to make sure Miri is still built by the tools CI builder? Are there other tools that should be off-by-default?
      
      Also, unfortunately the `DEFAULT` associated const has no doc comment, so I have no idea what it does, or why there are semmingly two places where the default build of tools is controlled.
      10326d80
    • B
      d3d3a14f
    • D
      Add tests for `const_precise_live_drops` · 2dcf7dbb
      Dylan MacKenzie 提交于
      2dcf7dbb
    • D
      Update incorrect error code docs · 9e2ee322
      Dylan MacKenzie 提交于
      9e2ee322
    • D
    • D
      Add MIR phase and query for drop elaboration · a43e486e
      Dylan MacKenzie 提交于
      a43e486e
    • D
      Add `CheckLiveDrops` pass · f5370faa
      Dylan MacKenzie 提交于
      f5370faa
    • D
      Add feature gate for precise live drop checking · a77f046c
      Dylan MacKenzie 提交于
      a77f046c
    • D
      Make `Qualifs` getters public · d73674e1
      Dylan MacKenzie 提交于
      d73674e1
    • D
      Move `check_op` logic to `ops` module · cecfa43f
      Dylan MacKenzie 提交于
      cecfa43f
  3. 13 6月, 2020 16 次提交
  4. 12 6月, 2020 8 次提交