1. 25 11月, 2019 1 次提交
    • A
      Fix opaque types resulting from projections in function signature · 4b57d222
      Aaron Hill 提交于
      When we normalize the types in a function signature, we may end up
      resolving a projection to an opaque type (e.g. `Self::MyType` when
      we have `type MyType = impl SomeTrait`). When the projection is
      resolved, we will instantiate the generic parameters into fresh
      inference variables.
      
      While we do want to normalize projections to opaque types, we don't want
      to replace the explicit generic parameters (e.g. `T` in `impl
      MyTrait<T>`) with inference variables. We want the opaque type in the
      function signature to be eligible to be a defining use of that opaque
      type - adding inference variables prevents this, since the opaque type
      substs now appears to refer to some specific type, rather than a generic
      type.
      
      To resolve this issue, we inspect the opaque types in the function
      signature after normalization. Any inference variables in the substs are
      replaced with the corresponding generic parameter in the identity substs
      (e.g. `T` in `impl MyTrait<T>`). Note that normalization is the only way
      that we can end up with inference variables in opaque substs in a
      function signature - users have no way of getting inference variables
      into a function signature.
      
      Note that all of this refers to the opaque type (ty::Opaque) and its
      subst - *not* to the underlying type.
      
      Fixes #59342
      4b57d222
  2. 24 11月, 2019 21 次提交
  3. 23 11月, 2019 18 次提交
    • B
      Auto merge of #66653 - ivan:lint-name-fix, r=Centril · 529829a0
      bors 提交于
      docs: fix lint name for `unused_variables`
      529829a0
    • A
      Remove unnecessary clone · 2ba982d0
      Aaron Hill 提交于
      2ba982d0
    • V
      bbbdbb0e
    • B
      Auto merge of #66597 - MaulingMonkey:pr-natvis-std-collections-hash, r=michaelwoerister · 9420ff4c
      bors 提交于
      debuginfo:  Support for std::collections::Hash* in windows debuggers.
      
      Okay, I finally needed to debug code involving a HashMap!  Added support for HashSet s as well.
      
      r? @michaelwoerister
      
      ### Local Testing
      
      Verified these are passing locally:
      ```cmd
      :: cmd.exe
      python x.py test --stage 1 --build x86_64-pc-windows-msvc src/test/debuginfo
      python x.py test --stage 1 --build i686-pc-windows-msvc src/test/debuginfo
      python x.py test --stage 1 src/tools/tidy
      
      :: MinGW MSYS2
      ./x.py test --stage 1 --build x86_64-pc-windows-gnu src/test/debuginfo
      ```
      
      ### Related Issues
      
      * https://github.com/rust-lang/rust/issues/36503
      * https://github.com/rust-lang/rust/issues/40460
      * https://github.com/rust-gamedev/wg/issues/20
      9420ff4c
    • M
      make `./x.py bench` again · 59257e6e
      Mazdak Farrokhzad 提交于
      59257e6e
    • B
      Auto merge of #66656 - Centril:rollup-fivygwz, r=Centril · d9025395
      bors 提交于
      Rollup of 4 pull requests
      
      Successful merges:
      
       - #65961 (add fn type_name_of_val)
       - #66574 (Update tidy check for error codes testing)
       - #66576 (made gdb pretty-printing more robust when printing uninitialized vec)
       - #66583 (Clarify Step Documentation)
      
      Failed merges:
      
      r? @ghost
      d9025395
    • J
      Cleanup code after review fixes · bbd0d9be
      Janusz Marcinkiewicz 提交于
      bbd0d9be
    • J
    • O
      rustdoc: Don't panic when failing to write .lock file · 05ef20f9
      Oliver Middleton 提交于
      It can be treated like any other unexpected IO error.
      05ef20f9
    • M
      Rollup merge of #66583 - Phlosioneer:patch-2, r=Dylan-DPC · 8024e0df
      Mazdak Farrokhzad 提交于
      Clarify Step Documentation
      
      While the redesign is in progress (#62886), clarify the purpose of replace_zero and replace_one.
      
      First, "returning itself" is technically impossible due to the function signature of &mut self -> Self. A clone or copy operation must be used. So this is now explicitly stated in the documentation.
      
      Second, the added docs give some guidance about the actual contract around implementation of replace_zero and replace one. Specifically, the only usage is to create a range with no more steps, by setting start to replace_one and end to replace_zero. So the only property that is actually used is `replace_one > replace_zero`. See https://github.com/rust-lang/rust/issues/42168#issuecomment-489554232
      
      The new documentation does not say that is the *only* contract, and so it should not be considered an api change. It just highlights the most important detail for implementors.
      
      The redesign doesn't seem to be landing any time soon, so this is a stopgap measure to reduce confusion in the meantime.
      8024e0df
    • M
      Rollup merge of #66576 - pnkfelix:more-robust-gdb-vec-printer, r=alexcrichton · e94f066b
      Mazdak Farrokhzad 提交于
      made gdb pretty-printing more robust when printing uninitialized vec
      
      made gdb pretty-printing more robust when printing uninitialized vec
      
      I based this solution on my reading of:
      
      https://rethinkdb.com/blog/make-debugging-easier-with-custom-pretty-printers#what-is-still-to-be-done
      
      That post claims that there is no clean way to check for garbage pointers, and
      so this PR adopts the same solution of tentatively attempting to convert a
      dererence to a string, which throws a clean exception on garbage that we can
      catch and recover from.
      
      I only made the change to vec and not the other pretty printers because I wanted
      to focus my effort on the simplest thing that would resolve issue #64343. In
      particular, I *considered* generalizing this fix to work on the other datatypes
      in the pretty-printing support library, but I don't want to invest effort in
      that until after we resolve our overall debugging support strategy; see also
      issues #60826 and #65564.
      
      Fix #64343
      e94f066b
    • M
      Rollup merge of #66574 - GuillaumeGomez:update-tidy-err-code-check, r=Mark-Simulacrum · 8256e735
      Mazdak Farrokhzad 提交于
      Update tidy check for error codes testing
      
      Now that all the error codes have been grouped into one file, we moved the long error explanations into markdown files, which means that we need to read those markdown file to also count their code blocks as well.
      
      So 2 "big" things happened here:
      * No more need to keep the current error code when reading the `error_codes.rs` file since it's been put into the equivalent markdown file.
      * Need to instead read the markdown file (but it's simpler since I can just look for code blocks directly).
      8256e735
    • M
      Rollup merge of #65961 - lcnr:typename_of, r=Dylan-DPC · 0ae4a19c
      Mazdak Farrokhzad 提交于
      add fn type_name_of_val
      
      This function is often useful during testing and mirrors `align_of_val` and `size_of_val`.
      
      # Example
      
      Showing the default type of integers.
      
      ```rust
      let x = 7;
      println!("per default, integers have the type: {}", std::any::type_name_of_val(&x));
      ```
      
      To my knowledge this can currently not be done without defining a function similar to `type_name_of_val`.
      0ae4a19c
    • B
      Auto merge of #66507 - ecstatic-morse:const-if-match, r=oli-obk · 6d523ee5
      bors 提交于
      Enable `if` and `match` in constants behind a feature flag
      
      This PR is an initial implementation of #49146. It introduces a `const_if_match` feature flag and does the following if it is enabled:
      - Allows `Downcast` projections, `SwitchInt` terminators and `FakeRead`s for matched places through the MIR const-checker.
      - Allows `if` and `match` expressions through the HIR const-checker.
      - Stops converting `&&` to `&` and `||` to `|` in `const` and `static` items.
      
      As a result, the following operations are now allowed in a const context behind the feature flag:
      - `if` and `match`
      - short circuiting logic operators (`&&` and `||`)
      - the `assert` and `debug_assert` macros (if the `const_panic` feature flag is also enabled)
      
      However, the following operations remain forbidden:
      - `while`, `loop` and `for` (see #52000)
      - the `?` operator (calls `From::from` on its error variant)
      - the `assert_eq` and `assert_ne` macros, along with their `debug` variants (calls `fmt::Debug`)
      
      This PR is possible now that we use dataflow for const qualification (see #64470 and #66385).
      
      r? @oli-obk
      cc @rust-lang/wg-const-eval @EddyB
      6d523ee5
    • I
      docs: fix lint name for `unused_variables` · aa40c48c
      Ivan Kozik 提交于
      aa40c48c
    • O
      rustdoc: Mark `--extern-private` as unstable · 4fcb3384
      Oliver Middleton 提交于
      It's not even stable in rustc so it shouldn't be stable in rustdoc.
      4fcb3384
    • B
      Auto merge of #66640 - Centril:rollup-862009l, r=Centril · a449535b
      bors 提交于
      Rollup of 8 pull requests
      
      Successful merges:
      
       - #66183 (*Syntactically* permit visibilities on trait items & enum variants)
       - #66566 (Document pitfall with `impl PartialEq<B> for A`)
       - #66575 (Remove pretty printing of specific nodes in AST)
       - #66587 (Handle statics in MIR as const pointers)
       - #66619 (follow the convention in this file to use third-person singular verbs)
       - #66633 (Error code's long explanation cleanup)
       - #66637 (fix reoccuring typo: dereferencable -> dereferenceable)
       - #66639 (resolve: more declarative `fresh_binding`)
      
      Failed merges:
      
      r? @ghost
      a449535b
    • M
      Rollup merge of #66639 - Centril:simplify-fresh-binding, r=petrochenkov · 56512b9d
      Mazdak Farrokhzad 提交于
      resolve: more declarative `fresh_binding`
      
      Following up on https://github.com/rust-lang/rust/pull/64111, this PR redefines `fresh_binding` wrt. `already_bound_and` and `already_bound_or` in a more declarative and simplified fashion.
      
      cc #54883
      
      r? @petrochenkov
      56512b9d