Auto merge of #97224 - matthiaskrgr:rollup-it5nw68, r=matthiaskrgr

Rollup of 7 pull requests

Successful merges:

 - #97109 (Fix misleading `cannot infer type for type parameter` error)
 - #97187 (Reverse condition in Vec::retain_mut doctest)
 - #97201 (Fix typo)
 - #97203 (Minor tweaks to rustc book summary formatting.)
 - #97208 (Do not emit the lint `unused_attributes` for *inherent* `#[doc(hidden)]` associated items)
 - #97215 (Add complexity estimation of iterating over HashSet and HashMap)
 - #97220 (Add regression test for#81827)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
This commit is contained in:
bors 2022-05-20 18:21:26 +00:00
commit 536020c5f9
41 changed files with 312 additions and 40 deletions

View File

@ -866,6 +866,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
}
}
self.report_ambiguous_type_parameter(&mut err, arg);
err.span_label(
span,
arg_data.cannot_infer_msg(use_diag.filter(|d| d.applies_to(span))),
@ -933,6 +934,28 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
}
}
fn report_ambiguous_type_parameter(&self, err: &mut Diagnostic, arg: GenericArg<'tcx>) {
if let GenericArgKind::Type(ty) = arg.unpack()
&& let ty::Infer(ty::TyVar(ty_vid)) = *ty.kind()
{
let mut inner = self.inner.borrow_mut();
let ty_vars = &inner.type_variables();
let var_origin = ty_vars.var_origin(ty_vid);
if let TypeVariableOriginKind::TypeParameterDefinition(_, Some(def_id)) =
var_origin.kind
&& let Some(parent_def_id) = self.tcx.parent(def_id).as_local()
&& let Some(node) = self.tcx.hir().find_by_def_id(parent_def_id)
{
match node {
hir::Node::Item(item) if matches!(item.kind, hir::ItemKind::Impl(_) | hir::ItemKind::Fn(..)) => (),
hir::Node::ImplItem(impl_item) if matches!(impl_item.kind, hir::ImplItemKind::Fn(..)) => (),
_ => return,
}
err.span_help(self.tcx.def_span(def_id), "type parameter declared here");
}
}
}
pub fn need_type_info_err_in_generator(
&self,
kind: hir::GeneratorKind,

View File

@ -832,7 +832,7 @@ impl CheckAttrVisitor<'_> {
let parent_hir_id = self.tcx.hir().get_parent_item(hir_id);
let containing_item = self.tcx.hir().expect_item(parent_hir_id);
if Target::from_item(containing_item) == Target::Impl {
if let hir::ItemKind::Impl(hir::Impl { of_trait: Some(_), .. }) = containing_item.kind {
let meta_items = attr.meta_item_list().unwrap();
let (span, replacement_span) = if meta_items.len() == 1 {

View File

@ -1470,11 +1470,11 @@ impl<T, A: Allocator> Vec<T, A> {
///
/// ```
/// let mut vec = vec![1, 2, 3, 4];
/// vec.retain_mut(|x| if *x > 3 {
/// false
/// } else {
/// vec.retain_mut(|x| if *x <= 3 {
/// *x += 1;
/// true
/// } else {
/// false
/// });
/// assert_eq!(vec, [2, 3, 4]);
/// ```

View File

@ -344,6 +344,11 @@ impl<K, V, S> HashMap<K, V, S> {
/// println!("{key}");
/// }
/// ```
///
/// # Performance
///
/// In the current implementation, iterating over keys takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[stable(feature = "rust1", since = "1.0.0")]
pub fn keys(&self) -> Keys<'_, K, V> {
Keys { inner: self.iter() }
@ -370,6 +375,11 @@ impl<K, V, S> HashMap<K, V, S> {
/// vec.sort_unstable();
/// assert_eq!(vec, ["a", "b", "c"]);
/// ```
///
/// # Performance
///
/// In the current implementation, iterating over keys takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[inline]
#[rustc_lint_query_instability]
#[stable(feature = "map_into_keys_values", since = "1.54.0")]
@ -395,6 +405,11 @@ impl<K, V, S> HashMap<K, V, S> {
/// println!("{val}");
/// }
/// ```
///
/// # Performance
///
/// In the current implementation, iterating over values takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[stable(feature = "rust1", since = "1.0.0")]
pub fn values(&self) -> Values<'_, K, V> {
Values { inner: self.iter() }
@ -422,6 +437,11 @@ impl<K, V, S> HashMap<K, V, S> {
/// println!("{val}");
/// }
/// ```
///
/// # Performance
///
/// In the current implementation, iterating over values takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[stable(feature = "map_values_mut", since = "1.10.0")]
pub fn values_mut(&mut self) -> ValuesMut<'_, K, V> {
ValuesMut { inner: self.iter_mut() }
@ -448,6 +468,11 @@ impl<K, V, S> HashMap<K, V, S> {
/// vec.sort_unstable();
/// assert_eq!(vec, [1, 2, 3]);
/// ```
///
/// # Performance
///
/// In the current implementation, iterating over values takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[inline]
#[rustc_lint_query_instability]
#[stable(feature = "map_into_keys_values", since = "1.54.0")]
@ -473,6 +498,11 @@ impl<K, V, S> HashMap<K, V, S> {
/// println!("key: {key} val: {val}");
/// }
/// ```
///
/// # Performance
///
/// In the current implementation, iterating over map takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[rustc_lint_query_instability]
#[stable(feature = "rust1", since = "1.0.0")]
pub fn iter(&self) -> Iter<'_, K, V> {
@ -503,6 +533,11 @@ impl<K, V, S> HashMap<K, V, S> {
/// println!("key: {key} val: {val}");
/// }
/// ```
///
/// # Performance
///
/// In the current implementation, iterating over map takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[rustc_lint_query_instability]
#[stable(feature = "rust1", since = "1.0.0")]
pub fn iter_mut(&mut self) -> IterMut<'_, K, V> {
@ -633,6 +668,11 @@ impl<K, V, S> HashMap<K, V, S> {
/// map.retain(|&k, _| k % 2 == 0);
/// assert_eq!(map.len(), 4);
/// ```
///
/// # Performance
///
/// In the current implementation, this operation takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[inline]
#[rustc_lint_query_instability]
#[stable(feature = "retain_hash_collection", since = "1.18.0")]

View File

@ -184,6 +184,11 @@ impl<T, S> HashSet<T, S> {
/// println!("{x}");
/// }
/// ```
///
/// # Performance
///
/// In the current implementation, iterating over set takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[inline]
#[rustc_lint_query_instability]
#[stable(feature = "rust1", since = "1.0.0")]
@ -312,6 +317,11 @@ impl<T, S> HashSet<T, S> {
/// set.retain(|&k| k % 2 == 0);
/// assert_eq!(set.len(), 3);
/// ```
///
/// # Performance
///
/// In the current implementation, this operation takes O(capacity) time
/// instead of O(len) because it internally visits empty buckets too.
#[rustc_lint_query_instability]
#[stable(feature = "retain_hash_collection", since = "1.18.0")]
pub fn retain<F>(&mut self, f: F)

View File

@ -1,19 +1,20 @@
# The Rustc Book
- [What is rustc?](what-is-rustc.md)
- [Command-line arguments](command-line-arguments.md)
- [Command-line Arguments](command-line-arguments.md)
- [Codegen Options](codegen-options/index.md)
- [Lints](lints/index.md)
- [Lint levels](lints/levels.md)
- [Lint Levels](lints/levels.md)
- [Lint Groups](lints/groups.md)
- [Lint listing](lints/listing/index.md)
- [Allowed-by-default lints](lints/listing/allowed-by-default.md)
- [Warn-by-default lints](lints/listing/warn-by-default.md)
- [Deny-by-default lints](lints/listing/deny-by-default.md)
- [Codegen options](codegen-options/index.md)
- [Lint Listing](lints/listing/index.md)
- [Allowed-by-default Lints](lints/listing/allowed-by-default.md)
- [Warn-by-default Lints](lints/listing/warn-by-default.md)
- [Deny-by-default Lints](lints/listing/deny-by-default.md)
- [JSON Output](json.md)
- [Tests](tests/index.md)
- [Platform Support](platform-support.md)
- [Template for target-specific documentation](platform-support/TEMPLATE.md)
- [Target Tier Policy](target-tier-policy.md)
- [Template for Target-specific Documentation](platform-support/TEMPLATE.md)
- [aarch64-apple-ios-sim](platform-support/aarch64-apple-ios-sim.md)
- [armv7-unknown-linux-uclibceabi](platform-support/armv7-unknown-linux-uclibceabi.md)
- [armv7-unknown-linux-uclibceabihf](platform-support/armv7-unknown-linux-uclibceabihf.md)
@ -25,13 +26,12 @@
- [*-unknown-openbsd](platform-support/openbsd.md)
- [wasm64-unknown-unknown](platform-support/wasm64-unknown-unknown.md)
- [x86_64-unknown-none](platform-support/x86_64-unknown-none.md)
- [Target Tier Policy](target-tier-policy.md)
- [Targets](targets/index.md)
- [Built-in Targets](targets/built-in.md)
- [Custom Targets](targets/custom.md)
- [Known Issues](targets/known-issues.md)
- [Profile-guided Optimization](profile-guided-optimization.md)
- [Instrumentation-based Code Coverage](instrument-coverage.md)
- [Linker-plugin based LTO](linker-plugin-lto.md)
- [Linker-plugin-based LTO](linker-plugin-lto.md)
- [Exploit Mitigations](exploit-mitigations.md)
- [Contributing to `rustc`](contributing.md)

View File

@ -1,4 +1,4 @@
# Codegen options
# Codegen Options
All of these options are passed to `rustc` via the `-C` flag, short for "codegen." You can see
a version of this list for your exact compiler by running `rustc -C help`.

View File

@ -1,4 +1,4 @@
# Command-line arguments
# Command-line Arguments
Here's a list of command-line arguments to `rustc` and what they do.

View File

@ -1,4 +1,4 @@
# `instrument-coverage`
# Instrumentation-based Code Coverage
## Introduction

View File

@ -1,4 +1,4 @@
# Linker-plugin-LTO
# Linker-plugin-based LTO
The `-C linker-plugin-lto` flag allows for deferring the LTO optimization
to the actual linking step, which in turn allows for performing

View File

@ -1,4 +1,4 @@
# Lint levels
# Lint Levels
In `rustc`, lints are divided into five *levels*:

View File

@ -1,3 +1,3 @@
# Allowed-by-default lints
# Allowed-by-default Lints
This file is auto-generated by the lint-docs script.

View File

@ -1,3 +1,3 @@
# Deny-by-default lints
# Deny-by-default Lints
This file is auto-generated by the lint-docs script.

View File

@ -1,4 +1,4 @@
# Lint listing
# Lint Listing
This section lists out all of the lints, grouped by their default lint levels.

View File

@ -1,3 +1,3 @@
# Warn-by-default lints
# Warn-by-default Lints
This file is auto-generated by the lint-docs script.

View File

@ -4,7 +4,7 @@
Windows targets similar to `*-pc-windows-gnu` but using UCRT as the runtime and various LLVM tools/libraries instead of GCC/Binutils.
Target triples avaiable so far:
Target triples available so far:
- `aarch64-pc-windows-gnullvm`
- `x86_64-pc-windows-gnullvm`
@ -26,7 +26,7 @@ Like with any other Windows target created binaries are in PE format.
## Building the target
For cross-compilation I recommend using [llvm-mingw](https://github.com/mstorsjo/llvm-mingw) toolchain, one change that seems necessary beside configuring corss compilers is disabling experimental `m86k` target. Otherwise LLVM build fails with `multiple definition ...` errors.
Native bootstrapping builds require rather fragile hacks until host artifacts are avaiable so I won't describe them here.
Native bootstrapping builds require rather fragile hacks until host artifacts are available so I won't describe them here.
## Building Rust programs

View File

@ -1,4 +1,4 @@
# Profile Guided Optimization
# Profile-guided Optimization
`rustc` supports doing profile-guided optimization (PGO).
This chapter describes what PGO is, what it is good for, and how it can be used.

View File

@ -5,6 +5,12 @@ LL | let _ = foo([0; 1]);
| - ^^^ cannot infer type for type parameter `T` declared on the function `foo`
| |
| consider giving this pattern a type
|
help: type parameter declared here
--> $DIR/issue-83249.rs:12:8
|
LL | fn foo<T: Foo>(_: [u8; T::N]) -> T {
| ^
error: aborting due to previous error

View File

@ -3,12 +3,24 @@ error[E0282]: type annotations needed
|
LL | A = foo(),
| ^^^ cannot infer type for type parameter `T` declared on the function `foo`
|
help: type parameter declared here
--> $DIR/issue-64662.rs:6:14
|
LL | const fn foo<T>() -> isize {
| ^
error[E0282]: type annotations needed
--> $DIR/issue-64662.rs:3:9
|
LL | B = foo(),
| ^^^ cannot infer type for type parameter `T` declared on the function `foo`
|
help: type parameter declared here
--> $DIR/issue-64662.rs:6:14
|
LL | const fn foo<T>() -> isize {
| ^
error: aborting due to 2 previous errors

View File

@ -37,6 +37,12 @@ error[E0282]: type annotations needed
|
LL | bfnr(x);
| ^^^^ cannot infer type for type parameter `U` declared on the function `bfnr`
|
help: type parameter declared here
--> $DIR/E0401.rs:4:13
|
LL | fn bfnr<U, V: Baz<U>, W: Fn()>(y: T) {
| ^
error: aborting due to 4 previous errors

View File

@ -0,0 +1,17 @@
use std::collections::HashMap;
trait Store<K, V> {
fn get_raw(&self, key: &K) -> Option<()>;
}
struct InMemoryStore;
impl<K> Store<String, HashMap<K, String>> for InMemoryStore {
fn get_raw(&self, key: &String) -> Option<()> {
None
}
}
fn main() {
InMemoryStore.get_raw(&String::default()); //~ ERROR type annotations needed
}

View File

@ -0,0 +1,15 @@
error[E0282]: type annotations needed
--> $DIR/ambiguous_type_parameter.rs:16:19
|
LL | InMemoryStore.get_raw(&String::default());
| ^^^^^^^ cannot infer type for type parameter `K`
|
help: type parameter declared here
--> $DIR/ambiguous_type_parameter.rs:9:6
|
LL | impl<K> Store<String, HashMap<K, String>> for InMemoryStore {
| ^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0282`.

View File

@ -6,6 +6,11 @@ LL | let foo = foo(1, "");
| |
| consider giving `foo` the explicit type `Foo<_, _, W, Z>`, where the type parameter `W` is specified
|
help: type parameter declared here
--> $DIR/erase-type-params-in-label.rs:25:14
|
LL | fn foo<T, K, W: Default, Z: Default>(t: T, k: K) -> Foo<T, K, W, Z> {
| ^
= note: cannot satisfy `_: Default`
note: required by a bound in `foo`
--> $DIR/erase-type-params-in-label.rs:25:17
@ -25,6 +30,11 @@ LL | let bar = bar(1, "");
| |
| consider giving `bar` the explicit type `Bar<_, _, Z>`, where the type parameter `Z` is specified
|
help: type parameter declared here
--> $DIR/erase-type-params-in-label.rs:14:14
|
LL | fn bar<T, K, Z: Default>(t: T, k: K) -> Bar<T, K, Z> {
| ^
= note: cannot satisfy `_: Default`
note: required by a bound in `bar`
--> $DIR/erase-type-params-in-label.rs:14:17

View File

@ -4,6 +4,11 @@ error[E0283]: type annotations needed
LL | foo(gen()); //<- Do not suggest `foo::<impl Clone>()`!
| ^^^ cannot infer type for type parameter `impl Clone` declared on the function `foo`
|
help: type parameter declared here
--> $DIR/issue-86162-1.rs:3:11
|
LL | fn foo(x: impl Clone) {}
| ^^^^^^^^^^
= note: cannot satisfy `_: Clone`
note: required by a bound in `foo`
--> $DIR/issue-86162-1.rs:3:16

View File

@ -4,6 +4,11 @@ error[E0283]: type annotations needed
LL | Foo::bar(gen()); //<- Do not suggest `Foo::bar::<impl Clone>()`!
| ^^^^^^^^ cannot infer type for type parameter `impl Clone` declared on the associated function `bar`
|
help: type parameter declared here
--> $DIR/issue-86162-2.rs:8:15
|
LL | fn bar(x: impl Clone) {}
| ^^^^^^^^^^
= note: cannot satisfy `_: Clone`
note: required by a bound in `Foo::bar`
--> $DIR/issue-86162-2.rs:8:20

View File

@ -3,6 +3,12 @@ error[E0282]: type annotations needed
|
LL | foo(TypeWithState(marker::PhantomData));
| ^^^ cannot infer type for type parameter `State` declared on the function `foo`
|
help: type parameter declared here
--> $DIR/issue-6458.rs:6:12
|
LL | pub fn foo<State>(_: TypeWithState<State>) {}
| ^^^^^
error: aborting due to previous error

View File

@ -1,5 +1,7 @@
#![deny(unused_attributes)]
#![feature(inherent_associated_types)]
#![allow(dead_code, incomplete_features)]
#![crate_type = "lib"]
#![deny(unused_attributes)]
// run-rustfix
pub trait Trait {
@ -12,6 +14,17 @@ pub trait Trait {
pub struct Implementor;
impl Implementor {
#[doc(hidden)] // no error
type Inh = ();
#[doc(hidden)] // no error
const INH: () = ();
#[doc(hidden)] // no error
fn inh() {}
}
impl Trait for Implementor {
type It = ();

View File

@ -1,5 +1,7 @@
#![deny(unused_attributes)]
#![feature(inherent_associated_types)]
#![allow(dead_code, incomplete_features)]
#![crate_type = "lib"]
#![deny(unused_attributes)]
// run-rustfix
pub trait Trait {
@ -12,6 +14,17 @@ pub trait Trait {
pub struct Implementor;
impl Implementor {
#[doc(hidden)] // no error
type Inh = ();
#[doc(hidden)] // no error
const INH: () = ();
#[doc(hidden)] // no error
fn inh() {}
}
impl Trait for Implementor {
#[doc(hidden)]
type It = ();

View File

@ -1,11 +1,11 @@
error: `#[doc(hidden)]` is ignored on trait impl items
--> $DIR/unused-attr-doc-hidden.rs:16:5
--> $DIR/unused-attr-doc-hidden.rs:29:5
|
LL | #[doc(hidden)]
| ^^^^^^^^^^^^^^ help: remove this attribute
|
note: the lint level is defined here
--> $DIR/unused-attr-doc-hidden.rs:1:9
--> $DIR/unused-attr-doc-hidden.rs:4:9
|
LL | #![deny(unused_attributes)]
| ^^^^^^^^^^^^^^^^^
@ -13,7 +13,7 @@ LL | #![deny(unused_attributes)]
= note: whether the impl item is `doc(hidden)` or not entirely depends on the corresponding trait item
error: `#[doc(hidden)]` is ignored on trait impl items
--> $DIR/unused-attr-doc-hidden.rs:21:5
--> $DIR/unused-attr-doc-hidden.rs:34:5
|
LL | #[doc(hidden)]
| ^^^^^^^^^^^^^^ help: remove this attribute
@ -22,7 +22,7 @@ LL | #[doc(hidden)]
= note: whether the impl item is `doc(hidden)` or not entirely depends on the corresponding trait item
error: `#[doc(hidden)]` is ignored on trait impl items
--> $DIR/unused-attr-doc-hidden.rs:26:11
--> $DIR/unused-attr-doc-hidden.rs:39:11
|
LL | #[doc(hidden, alias = "aka")]
| ^^^^^^--
@ -33,7 +33,7 @@ LL | #[doc(hidden, alias = "aka")]
= note: whether the impl item is `doc(hidden)` or not entirely depends on the corresponding trait item
error: `#[doc(hidden)]` is ignored on trait impl items
--> $DIR/unused-attr-doc-hidden.rs:31:27
--> $DIR/unused-attr-doc-hidden.rs:44:27
|
LL | #[doc(alias = "this", hidden,)]
| ^^^^^^-
@ -44,7 +44,7 @@ LL | #[doc(alias = "this", hidden,)]
= note: whether the impl item is `doc(hidden)` or not entirely depends on the corresponding trait item
error: `#[doc(hidden)]` is ignored on trait impl items
--> $DIR/unused-attr-doc-hidden.rs:36:11
--> $DIR/unused-attr-doc-hidden.rs:49:11
|
LL | #[doc(hidden, hidden)]
| ^^^^^^--
@ -55,7 +55,7 @@ LL | #[doc(hidden, hidden)]
= note: whether the impl item is `doc(hidden)` or not entirely depends on the corresponding trait item
error: `#[doc(hidden)]` is ignored on trait impl items
--> $DIR/unused-attr-doc-hidden.rs:36:19
--> $DIR/unused-attr-doc-hidden.rs:49:19
|
LL | #[doc(hidden, hidden)]
| ^^^^^^ help: remove this attribute

View File

@ -3,6 +3,12 @@ error[E0282]: type annotations needed
|
LL | foo();
| ^^^ cannot infer type for type parameter `X` declared on the function `foo`
|
help: type parameter declared here
--> $DIR/missing-type-parameter.rs:1:8
|
LL | fn foo<X>() { }
| ^
error: aborting due to previous error

View File

@ -0,0 +1,11 @@
// error-pattern: this file contains an unclosed delimiter
// error-pattern: mismatched closing delimiter: `]`
// error-pattern: expected one of `)` or `,`, found `{`
#![crate_name="0"]
fn main() {}
fn r()->i{0|{#[cfg(r(0{]0

View File

@ -0,0 +1,35 @@
error: this file contains an unclosed delimiter
--> $DIR/issue-81827.rs:11:27
|
LL | fn r()->i{0|{#[cfg(r(0{]0
| - - ^
| | |
| | unclosed delimiter
| unclosed delimiter
error: this file contains an unclosed delimiter
--> $DIR/issue-81827.rs:11:27
|
LL | fn r()->i{0|{#[cfg(r(0{]0
| - - ^
| | |
| | unclosed delimiter
| unclosed delimiter
error: mismatched closing delimiter: `]`
--> $DIR/issue-81827.rs:11:23
|
LL | fn r()->i{0|{#[cfg(r(0{]0
| - ^^ mismatched closing delimiter
| | |
| | unclosed delimiter
| closing delimiter possibly meant for this
error: expected one of `)` or `,`, found `{`
--> $DIR/issue-81827.rs:11:23
|
LL | fn r()->i{0|{#[cfg(r(0{]0
| ^ expected one of `)` or `,`
error: aborting due to 4 previous errors

View File

@ -5,6 +5,12 @@ LL | let _ = f;
| - ^ cannot infer type for type parameter `A` declared on the function `f`
| |
| consider giving this pattern the explicit type `fn() -> A`, where the type parameter `A` is specified
|
help: type parameter declared here
--> $DIR/fn-needing-specified-return-type-param.rs:1:6
|
LL | fn f<A>() -> A { unimplemented!() }
| ^
error: aborting due to previous error

View File

@ -3,6 +3,12 @@ error[E0282]: type annotations needed
|
LL | test(22, std::default::Default::default());
| ^^^^ cannot infer type for type parameter `U` declared on the function `test`
|
help: type parameter declared here
--> $DIR/multidispatch-convert-ambig-dest.rs:20:11
|
LL | fn test<T,U>(_: T, _: U)
| ^
error[E0283]: type annotations needed
--> $DIR/multidispatch-convert-ambig-dest.rs:26:5
@ -10,6 +16,11 @@ error[E0283]: type annotations needed
LL | test(22, std::default::Default::default());
| ^^^^ cannot infer type for type parameter `U` declared on the function `test`
|
help: type parameter declared here
--> $DIR/multidispatch-convert-ambig-dest.rs:20:11
|
LL | fn test<T,U>(_: T, _: U)
| ^
note: multiple `impl`s satisfying `i32: Convert<_>` found
--> $DIR/multidispatch-convert-ambig-dest.rs:8:1
|

View File

@ -16,6 +16,11 @@ LL | a.method();
| | cannot infer type for type parameter `U`
| this method call resolves to `U`
|
help: type parameter declared here
--> $DIR/not-suggest-non-existing-fully-qualified-path.rs:12:9
|
LL | impl<T, U> V<U> for A<T>
| ^
note: multiple `impl`s satisfying `B: I<_>` found
--> $DIR/not-suggest-non-existing-fully-qualified-path.rs:5:1
|

View File

@ -3,6 +3,12 @@ error[E0282]: type annotations needed
|
LL | foo();
| ^^^ cannot infer type for type parameter `T` declared on the function `foo`
|
help: type parameter declared here
--> $DIR/unbounded-type-param-in-fn-with-assoc-type.rs:3:8
|
LL | fn foo<T, U = u64>() -> (T, U) {
| ^
error: aborting due to previous error

View File

@ -3,6 +3,12 @@ error[E0282]: type annotations needed
|
LL | foo();
| ^^^ cannot infer type for type parameter `T` declared on the function `foo`
|
help: type parameter declared here
--> $DIR/unbounded-type-param-in-fn.rs:1:8
|
LL | fn foo<T>() -> T {
| ^
error: aborting due to previous error

View File

@ -4,6 +4,11 @@ error[E0283]: type annotations needed
LL | foo(42);
| ^^^ cannot infer type for type parameter `T` declared on the function `foo`
|
help: type parameter declared here
--> $DIR/type-annotation-needed.rs:1:8
|
LL | fn foo<T: Into<String>>(x: i32) {}
| ^
= note: cannot satisfy `_: Into<String>`
note: required by a bound in `foo`
--> $DIR/type-annotation-needed.rs:1:11

View File

@ -482,20 +482,20 @@ fn lint_name(line: &str) -> Result<String, &'static str> {
}
}
static ALLOWED_MD: &str = r#"# Allowed-by-default lints
static ALLOWED_MD: &str = r#"# Allowed-by-default Lints
These lints are all set to the 'allow' level by default. As such, they won't show up
unless you set them to a higher lint level with a flag or attribute.
"#;
static WARN_MD: &str = r#"# Warn-by-default lints
static WARN_MD: &str = r#"# Warn-by-default Lints
These lints are all set to the 'warn' level by default.
"#;
static DENY_MD: &str = r#"# Deny-by-default lints
static DENY_MD: &str = r#"# Deny-by-default Lints
These lints are all set to the 'deny' level by default.

View File

@ -3,7 +3,7 @@
//! The features are detected using the `detect_features` function below.
//! This function uses the CPUID instruction to read the feature flags from the
//! CPU and encodes them in a `usize` where each bit position represents
//! whether a feature is available (bit is set) or unavaiable (bit is cleared).
//! whether a feature is available (bit is set) or unavailable (bit is cleared).
//!
//! The enum `Feature` is used to map bit positions to feature names, and the
//! the `__crate::detect::check_for!` macro is used to map string literals (e.g.,

View File

@ -3,7 +3,7 @@
//! The features are detected using the `detect_features` function below.
//! This function uses the CPUID instruction to read the feature flags from the
//! CPU and encodes them in a `usize` where each bit position represents
//! whether a feature is available (bit is set) or unavaiable (bit is cleared).
//! whether a feature is available (bit is set) or unavailable (bit is cleared).
//!
//! The enum `Feature` is used to map bit positions to feature names, and the
//! the `__crate::detect::check_for!` macro is used to map string literals (e.g.,