- 25 11月, 2019 1 次提交
-
-
由 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
-
- 24 11月, 2019 21 次提交
-
-
由 bors 提交于
Rework raw ident suggestions Use heuristics to determine whethersuggesting raw identifiers is appropriate. Account for raw identifiers when printing a path in a `use` suggestion. Fix #66126.
-
由 bors 提交于
introduce benchmarks of HashSet operations To avoid goofs such as corrected by #66280, I added benchmarks of binary HashSet operations. Due to the fact x.py keeps recompiling the whole shebang (or at least a big part of it) whenever you touch the test code, and because piling up all tests in one file does not strike me as future proof, I tried moving the hash benches to the separate place they are for liballoc/collections/btree. But it turns out that, in a cleaned checkout, x.py still recompiles the whole shebang whenever you touch the test code (PS or when you add or delete any irrelevant file). So I'm not going to add more tests, and I doubt others will, and these tests have proven their point already, so this PR is kind of pointless
-
由 bors 提交于
Stabilize Result::map_or_else Stabilized this API: ```rust impl<T, E> Result<T, E> { pub fn map_or_else<U, D: FnOnce(E) -> U, F: FnOnce(T) -> U>(self, default: D, f: F) -> U { match self { Ok(t) => f(t), Err(e) => default(e), } } } ``` Closes #53268 r? @SimonSapin
-
由 bors 提交于
Rollup of 5 pull requests Successful merges: - #64856 (Scope format! temporaries) - #66411 (mem::forget docs: mention ManuallyDrop) - #66594 (Fix cycle when debug-printing opaque types) - #66641 (parser: recover on nested ADTs as enum variants) - #66659 (make `./x.py bench` again) Failed merges: r? @ghost
-
由 Mazdak Farrokhzad 提交于
make `./x.py bench` again Fixes #54016
-
由 Mazdak Farrokhzad 提交于
parser: recover on nested ADTs as enum variants Closes: https://github.com/rust-lang/rust/issues/66127
-
由 Mazdak Farrokhzad 提交于
Fix cycle when debug-printing opaque types Fixes #61577 When printing an opaque type in non-verbose mode, we use the `tcx.predicates_of` query to retrieve the opaque type's bounds for pretty-printing. However, the pervasiveness of logging within librustc means that we may already be executing `tcx.predicates_of` for the opaque type we're trying to print, leading to a cycle error. This commit adds a new 'no queries' thread-local flag to the pretty printer. This flag is enabled during the computation of `predicates_of` for opaque types, and causes us to print the opaque type in 'verbose' mode (which does not require computing any additinal queries). This should only affect debug logging for highly nested log messages, not any user-visible output.
-
由 Mazdak Farrokhzad 提交于
mem::forget docs: mention ManuallyDrop Cc @SimonSapin @Centril
-
由 Mazdak Farrokhzad 提交于
Scope format! temporaries This places the temporaries that `format!` generates to refer to its arguments (through `&dyn Trait`) in a short-lived scope surrounding just the invocation of `format!`. This enables `format!` to be used in generators without the temporaries preventing the generator from being `Send` (due to `dyn Trait` not being `Sync`). See rust-lang/rust#64477 for details.
-
由 Esteban Küber 提交于
-
由 Esteban Küber 提交于
Use heuristics to determine whethersuggesting raw identifiers is appropriate. Account for raw identifiers when printing a path in a `use` suggestion.
-
由 Janusz Marcinkiewicz 提交于
-
由 bors 提交于
Rollup of 5 pull requests Successful merges: - #61351 (Stabilize cfg(doc)) - #66539 (Point at type in `let` assignment on type errors) - #66655 (rustdoc: Mark `--extern-private` as unstable) - #66657 (rustdoc: Don't panic when failing to write .lock file) - #66673 (Move def collector from `rustc` to `rustc_resolve`) Failed merges: r? @ghost
-
由 Mazdak Farrokhzad 提交于
Move def collector from `rustc` to `rustc_resolve` It's used only from `rustc_resolve`, so we can move it there, thus reducing the size of `rustc` (https://github.com/rust-lang/rust/issues/65031). It's quite possible that we can merge the def collector pass into the "build reduced graph" pass (they are always run together and do similar things), but it's some larger work. r? @EddyB
-
由 Mazdak Farrokhzad 提交于
rustdoc: Don't panic when failing to write .lock file It can be treated like any other unexpected IO error. I couldn't think of a good way to add a test for this unfortunately. r? @GuillaumeGomez
-
由 Mazdak Farrokhzad 提交于
rustdoc: Mark `--extern-private` as unstable It's not even stable in rustc so it shouldn't be stable in rustdoc. r? @kinnison
-
由 Mazdak Farrokhzad 提交于
Point at type in `let` assignment on type errors Fix #61067.
-
由 Mazdak Farrokhzad 提交于
Stabilize cfg(doc) cc #43781.
-
由 bors 提交于
Update Clippy r? @Manishearth @oli-obk
-
由 flip1995 提交于
-
由 flip1995 提交于
-
- 23 11月, 2019 18 次提交
-
-
由 bors 提交于
docs: fix lint name for `unused_variables`
-
由 Aaron Hill 提交于
-
由 Vadim Petrochenkov 提交于
-
由 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
-
由 Mazdak Farrokhzad 提交于
-
由 Janusz Marcinkiewicz 提交于
-
由 Janusz Marcinkiewicz 提交于
-
由 Oliver Middleton 提交于
It can be treated like any other unexpected IO error.
-
由 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.
-
由 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
-
由 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).
-
由 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`.
-
由 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
-
由 Ivan Kozik 提交于
-
由 Oliver Middleton 提交于
It's not even stable in rustc so it shouldn't be stable in rustdoc.
-
由 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
-
由 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
-