Rollup merge of #132799 - zachs18:str-primitive-symbol, r=compiler-errors
Make `Ty::primitive_symbol` recognize `str` Make `Ty::primitive_symbol` recognize `str`, which makes `str` eligible for the "expected primitive, found local type" (and vice versa) [diagnostic](https://github.com/rust-lang/rust/blob/master/compiler/rustc_trait_selection/src/error_reporting/infer/mod.rs#L1430-L1437) that already exists for other primitives. <details><summary> diagnostic difference</summary> ```rs #[allow(non_camel_case_types)] struct str; fn foo() { let _: &str = "hello"; let _: &core::primitive::str = &str; } ``` `rustc --crate-type lib --edition 2021 a.rs` Current nightly: ```rs error[E0308]: mismatched types --> a.rs:5:19 | 5 | let _: &str = "hello"; | ---- ^^^^^^^ expected `str`, found a different `str` | | | expected due to this | = note: expected reference `&str` found reference `&'static str` error[E0308]: mismatched types --> a.rs:6:36 | 6 | let _: &core::primitive::str = &str; | --------------------- ^^^^ expected `str`, found a different `str` | | | expected due to this | = note: expected reference `&str` (`str`) found reference `&str` (`str`) error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0308`. ``` With this patch: ```rs error[E0308]: mismatched types --> a.rs:5:19 | 5 | let _: &str = "hello"; | ---- ^^^^^^^ expected `str`, found a different `str` | | | expected due to this | = note: str and `str` have similar names, but are actually distinct types = note: str is a primitive defined by the language note: `str` is defined in the current crate --> a.rs:2:1 | 2 | struct str; | ^^^^^^^^^^ error[E0308]: mismatched types --> a.rs:6:36 | 6 | let _: &core::primitive::str = &str; | --------------------- ^^^^ expected `str`, found a different `str` | | | expected due to this | = note: str and `str` have similar names, but are actually distinct types = note: str is a primitive defined by the language note: `str` is defined in the current crate --> a.rs:2:1 | 2 | struct str; | ^^^^^^^^^^ error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0308`. ``` </details>
This commit is contained in:
commit
3aa1a24799
@ -1933,6 +1933,7 @@ pub fn primitive_symbol(self) -> Option<Symbol> {
|
||||
ty::UintTy::U64 => Some(sym::u64),
|
||||
ty::UintTy::U128 => Some(sym::u128),
|
||||
},
|
||||
ty::Str => Some(sym::str),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,14 @@
|
||||
#![allow(non_camel_case_types)]
|
||||
|
||||
struct bool;
|
||||
struct str;
|
||||
|
||||
fn foo(_: bool) {}
|
||||
fn bar(_: &str) {}
|
||||
|
||||
fn main() {
|
||||
foo(true);
|
||||
//~^ ERROR mismatched types [E0308]
|
||||
bar("hello");
|
||||
//~^ ERROR mismatched types [E0308]
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/similar_paths_primitive.rs:8:9
|
||||
--> $DIR/similar_paths_primitive.rs:10:9
|
||||
|
|
||||
LL | foo(true);
|
||||
| --- ^^^^ expected `bool`, found a different `bool`
|
||||
@ -14,11 +14,32 @@ note: `bool` is defined in the current crate
|
||||
LL | struct bool;
|
||||
| ^^^^^^^^^^^
|
||||
note: function defined here
|
||||
--> $DIR/similar_paths_primitive.rs:5:4
|
||||
--> $DIR/similar_paths_primitive.rs:6:4
|
||||
|
|
||||
LL | fn foo(_: bool) {}
|
||||
| ^^^ -------
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/similar_paths_primitive.rs:12:9
|
||||
|
|
||||
LL | bar("hello");
|
||||
| --- ^^^^^^^ expected `str`, found a different `str`
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: str and `str` have similar names, but are actually distinct types
|
||||
= note: str is a primitive defined by the language
|
||||
note: `str` is defined in the current crate
|
||||
--> $DIR/similar_paths_primitive.rs:4:1
|
||||
|
|
||||
LL | struct str;
|
||||
| ^^^^^^^^^^
|
||||
note: function defined here
|
||||
--> $DIR/similar_paths_primitive.rs:7:4
|
||||
|
|
||||
LL | fn bar(_: &str) {}
|
||||
| ^^^ -------
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
Loading…
Reference in New Issue
Block a user