From 429f91c9e68d6c15f7a6cedb3c8e9e300fa71da1 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 19 Oct 2019 11:21:52 +0200 Subject: [PATCH 1/3] Add long error explanation for E0588 --- src/librustc_typeck/error_codes.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/librustc_typeck/error_codes.rs b/src/librustc_typeck/error_codes.rs index ef08e8d4f0b7a..892919cbf2073 100644 --- a/src/librustc_typeck/error_codes.rs +++ b/src/librustc_typeck/error_codes.rs @@ -3891,6 +3891,33 @@ details. [issue #33685]: https://github.com/rust-lang/rust/issues/33685 "##, +E0588: r##" +A type with `packed` representation hint has a field with `align` +representation hint. + +Erroneous code example: + +```compile_fail,E0588 +#[repr(align(16))] +struct Aligned(i32); + +#[repr(packed)] // error! +struct Packed(Aligned); +``` + +Just like you can't have both `align` and `packed` representation hints on a +same type, a `packed` type can't contain another type with the `align` +representation hint. However, you can do the opposite: + +``` +#[repr(packed)] +struct Packed(i32); + +#[repr(align(16))] // ok! +struct Aligned(Packed); +``` +"##, + E0592: r##" This error occurs when you defined methods or associated functions with same name. @@ -5043,7 +5070,6 @@ the future, [RFC 2091] prohibits their implementation without a follow-up RFC. // E0564, // only named lifetimes are allowed in `impl Trait`, // but `{}` was found in the type `{}` E0587, // type has conflicting packed and align representation hints - E0588, // packed type cannot transitively contain a `[repr(align)]` type // E0611, // merged into E0616 // E0612, // merged into E0609 // E0613, // Removed (merged with E0609) From 2541d49601ad4fd311d28d9ae7a7ce947879d839 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 19 Oct 2019 11:22:17 +0200 Subject: [PATCH 2/3] Update ui tests --- src/test/ui/repr/repr-packed-contains-align.stderr | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/ui/repr/repr-packed-contains-align.stderr b/src/test/ui/repr/repr-packed-contains-align.stderr index 219516d8abc48..df001d6b5f2a4 100644 --- a/src/test/ui/repr/repr-packed-contains-align.stderr +++ b/src/test/ui/repr/repr-packed-contains-align.stderr @@ -56,3 +56,4 @@ LL | | } error: aborting due to 8 previous errors +For more information about this error, try `rustc --explain E0588`. From 07f2f054ec5395536a0daddcb442c4a135fd8927 Mon Sep 17 00:00:00 2001 From: Dylan DPC Date: Tue, 22 Oct 2019 12:07:07 +0200 Subject: [PATCH 3/3] Update error_codes.rs --- src/librustc_typeck/error_codes.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/librustc_typeck/error_codes.rs b/src/librustc_typeck/error_codes.rs index 892919cbf2073..9e32356365344 100644 --- a/src/librustc_typeck/error_codes.rs +++ b/src/librustc_typeck/error_codes.rs @@ -194,7 +194,7 @@ a guard. ```compile_fail,E0029 let string = "salutations !"; -// The ordering relation for strings can't be evaluated at compile time, +// The ordering relation for strings cannot be evaluated at compile time, // so this doesn't work: match string { "hello" ..= "world" => {} @@ -348,7 +348,7 @@ fn main() { "##, E0044: r##" -You can't use type or const parameters on foreign items. +You cannot use type or const parameters on foreign items. Example of erroneous code: ```compile_fail,E0044 @@ -788,7 +788,7 @@ fn some_other_func() {} fn some_function() { SOME_CONST = 14; // error : a constant value cannot be changed! 1 = 3; // error : 1 isn't a valid place! - some_other_func() = 4; // error : we can't assign value to a function! + some_other_func() = 4; // error : we cannot assign value to a function! SomeStruct.x = 12; // error : SomeStruct a structure name but it is used // like a variable! } @@ -3905,8 +3905,8 @@ struct Aligned(i32); struct Packed(Aligned); ``` -Just like you can't have both `align` and `packed` representation hints on a -same type, a `packed` type can't contain another type with the `align` +Just like you cannot have both `align` and `packed` representation hints on a +same type, a `packed` type cannot contain another type with the `align` representation hint. However, you can do the opposite: ``` @@ -4326,7 +4326,7 @@ extern { unsafe { printf(::std::ptr::null(), 0f32); - // error: can't pass an `f32` to variadic function, cast to `c_double` + // error: cannot pass an `f32` to variadic function, cast to `c_double` } ``` @@ -5023,7 +5023,7 @@ the future, [RFC 2091] prohibits their implementation without a follow-up RFC. // E0174, // E0182, // merged into E0229 E0183, -// E0187, // can't infer the kind of the closure +// E0187, // cannot infer the kind of the closure // E0188, // can not cast an immutable reference to a mutable pointer // E0189, // deprecated: can only cast a boxed pointer to a boxed object // E0190, // deprecated: can only cast a &-pointer to an &-object