summaryrefslogtreecommitdiffstats
path: root/tests/ui/deriving/deriving-all-codegen.stdout
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/deriving/deriving-all-codegen.stdout')
-rw-r--r--tests/ui/deriving/deriving-all-codegen.stdout1074
1 files changed, 1074 insertions, 0 deletions
diff --git a/tests/ui/deriving/deriving-all-codegen.stdout b/tests/ui/deriving/deriving-all-codegen.stdout
new file mode 100644
index 000000000..e6ee11a78
--- /dev/null
+++ b/tests/ui/deriving/deriving-all-codegen.stdout
@@ -0,0 +1,1074 @@
+#![feature(prelude_import)]
+// check-pass
+// compile-flags: -Zunpretty=expanded
+// edition:2021
+//
+// This test checks the code generated for all[*] the builtin derivable traits
+// on a variety of structs and enums. It protects against accidental changes to
+// the generated code, and makes deliberate changes to the generated code
+// easier to review.
+//
+// [*] It excludes `Copy` in some cases, because that changes the code
+// generated for `Clone`.
+//
+// [*] It excludes `RustcEncodable` and `RustDecodable`, which are obsolete and
+// also require the `rustc_serialize` crate.
+
+#![crate_type = "lib"]
+#![allow(dead_code)]
+#![allow(deprecated)]
+#[prelude_import]
+use std::prelude::rust_2021::*;
+#[macro_use]
+extern crate std;
+
+// Empty struct.
+struct Empty;
+#[automatically_derived]
+impl ::core::clone::Clone for Empty {
+ #[inline]
+ fn clone(&self) -> Empty { *self }
+}
+#[automatically_derived]
+impl ::core::marker::Copy for Empty { }
+#[automatically_derived]
+impl ::core::fmt::Debug for Empty {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ ::core::fmt::Formatter::write_str(f, "Empty")
+ }
+}
+#[automatically_derived]
+impl ::core::default::Default for Empty {
+ #[inline]
+ fn default() -> Empty { Empty {} }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Empty {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {}
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Empty { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Empty {
+ #[inline]
+ fn eq(&self, other: &Empty) -> bool { true }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Empty { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Empty {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {}
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Empty {
+ #[inline]
+ fn partial_cmp(&self, other: &Empty)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal)
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Empty {
+ #[inline]
+ fn cmp(&self, other: &Empty) -> ::core::cmp::Ordering {
+ ::core::cmp::Ordering::Equal
+ }
+}
+
+// A basic struct.
+struct Point {
+ x: u32,
+ y: u32,
+}
+#[automatically_derived]
+impl ::core::clone::Clone for Point {
+ #[inline]
+ fn clone(&self) -> Point {
+ let _: ::core::clone::AssertParamIsClone<u32>;
+ *self
+ }
+}
+#[automatically_derived]
+impl ::core::marker::Copy for Point { }
+#[automatically_derived]
+impl ::core::fmt::Debug for Point {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ ::core::fmt::Formatter::debug_struct_field2_finish(f, "Point", "x",
+ &&self.x, "y", &&self.y)
+ }
+}
+#[automatically_derived]
+impl ::core::default::Default for Point {
+ #[inline]
+ fn default() -> Point {
+ Point {
+ x: ::core::default::Default::default(),
+ y: ::core::default::Default::default(),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Point {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ ::core::hash::Hash::hash(&self.x, state);
+ ::core::hash::Hash::hash(&self.y, state)
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Point { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Point {
+ #[inline]
+ fn eq(&self, other: &Point) -> bool {
+ self.x == other.x && self.y == other.y
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Point { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Point {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {
+ let _: ::core::cmp::AssertParamIsEq<u32>;
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Point {
+ #[inline]
+ fn partial_cmp(&self, other: &Point)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ match ::core::cmp::PartialOrd::partial_cmp(&self.x, &other.x) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal) =>
+ ::core::cmp::PartialOrd::partial_cmp(&self.y, &other.y),
+ cmp => cmp,
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Point {
+ #[inline]
+ fn cmp(&self, other: &Point) -> ::core::cmp::Ordering {
+ match ::core::cmp::Ord::cmp(&self.x, &other.x) {
+ ::core::cmp::Ordering::Equal =>
+ ::core::cmp::Ord::cmp(&self.y, &other.y),
+ cmp => cmp,
+ }
+ }
+}
+
+// A large struct.
+struct Big {
+ b1: u32,
+ b2: u32,
+ b3: u32,
+ b4: u32,
+ b5: u32,
+ b6: u32,
+ b7: u32,
+ b8: u32,
+}
+#[automatically_derived]
+impl ::core::clone::Clone for Big {
+ #[inline]
+ fn clone(&self) -> Big {
+ Big {
+ b1: ::core::clone::Clone::clone(&self.b1),
+ b2: ::core::clone::Clone::clone(&self.b2),
+ b3: ::core::clone::Clone::clone(&self.b3),
+ b4: ::core::clone::Clone::clone(&self.b4),
+ b5: ::core::clone::Clone::clone(&self.b5),
+ b6: ::core::clone::Clone::clone(&self.b6),
+ b7: ::core::clone::Clone::clone(&self.b7),
+ b8: ::core::clone::Clone::clone(&self.b8),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::fmt::Debug for Big {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ let names: &'static _ =
+ &["b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8"];
+ let values: &[&dyn ::core::fmt::Debug] =
+ &[&&self.b1, &&self.b2, &&self.b3, &&self.b4, &&self.b5,
+ &&self.b6, &&self.b7, &&self.b8];
+ ::core::fmt::Formatter::debug_struct_fields_finish(f, "Big", names,
+ values)
+ }
+}
+#[automatically_derived]
+impl ::core::default::Default for Big {
+ #[inline]
+ fn default() -> Big {
+ Big {
+ b1: ::core::default::Default::default(),
+ b2: ::core::default::Default::default(),
+ b3: ::core::default::Default::default(),
+ b4: ::core::default::Default::default(),
+ b5: ::core::default::Default::default(),
+ b6: ::core::default::Default::default(),
+ b7: ::core::default::Default::default(),
+ b8: ::core::default::Default::default(),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Big {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ ::core::hash::Hash::hash(&self.b1, state);
+ ::core::hash::Hash::hash(&self.b2, state);
+ ::core::hash::Hash::hash(&self.b3, state);
+ ::core::hash::Hash::hash(&self.b4, state);
+ ::core::hash::Hash::hash(&self.b5, state);
+ ::core::hash::Hash::hash(&self.b6, state);
+ ::core::hash::Hash::hash(&self.b7, state);
+ ::core::hash::Hash::hash(&self.b8, state)
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Big { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Big {
+ #[inline]
+ fn eq(&self, other: &Big) -> bool {
+ self.b1 == other.b1 && self.b2 == other.b2 && self.b3 == other.b3 &&
+ self.b4 == other.b4 && self.b5 == other.b5 &&
+ self.b6 == other.b6 && self.b7 == other.b7 &&
+ self.b8 == other.b8
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Big { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Big {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {
+ let _: ::core::cmp::AssertParamIsEq<u32>;
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Big {
+ #[inline]
+ fn partial_cmp(&self, other: &Big)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ match ::core::cmp::PartialOrd::partial_cmp(&self.b1, &other.b1) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal) =>
+ match ::core::cmp::PartialOrd::partial_cmp(&self.b2,
+ &other.b2) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal)
+ =>
+ match ::core::cmp::PartialOrd::partial_cmp(&self.b3,
+ &other.b3) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal)
+ =>
+ match ::core::cmp::PartialOrd::partial_cmp(&self.b4,
+ &other.b4) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal)
+ =>
+ match ::core::cmp::PartialOrd::partial_cmp(&self.b5,
+ &other.b5) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal)
+ =>
+ match ::core::cmp::PartialOrd::partial_cmp(&self.b6,
+ &other.b6) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal)
+ =>
+ match ::core::cmp::PartialOrd::partial_cmp(&self.b7,
+ &other.b7) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal)
+ =>
+ ::core::cmp::PartialOrd::partial_cmp(&self.b8, &other.b8),
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Big {
+ #[inline]
+ fn cmp(&self, other: &Big) -> ::core::cmp::Ordering {
+ match ::core::cmp::Ord::cmp(&self.b1, &other.b1) {
+ ::core::cmp::Ordering::Equal =>
+ match ::core::cmp::Ord::cmp(&self.b2, &other.b2) {
+ ::core::cmp::Ordering::Equal =>
+ match ::core::cmp::Ord::cmp(&self.b3, &other.b3) {
+ ::core::cmp::Ordering::Equal =>
+ match ::core::cmp::Ord::cmp(&self.b4, &other.b4) {
+ ::core::cmp::Ordering::Equal =>
+ match ::core::cmp::Ord::cmp(&self.b5, &other.b5) {
+ ::core::cmp::Ordering::Equal =>
+ match ::core::cmp::Ord::cmp(&self.b6, &other.b6) {
+ ::core::cmp::Ordering::Equal =>
+ match ::core::cmp::Ord::cmp(&self.b7, &other.b7) {
+ ::core::cmp::Ordering::Equal =>
+ ::core::cmp::Ord::cmp(&self.b8, &other.b8),
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ },
+ cmp => cmp,
+ }
+ }
+}
+
+// A struct with an unsized field. Some derives are not usable in this case.
+struct Unsized([u32]);
+#[automatically_derived]
+impl ::core::fmt::Debug for Unsized {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Unsized",
+ &&self.0)
+ }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Unsized {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ ::core::hash::Hash::hash(&self.0, state)
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Unsized { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Unsized {
+ #[inline]
+ fn eq(&self, other: &Unsized) -> bool { self.0 == other.0 }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Unsized { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Unsized {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {
+ let _: ::core::cmp::AssertParamIsEq<[u32]>;
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Unsized {
+ #[inline]
+ fn partial_cmp(&self, other: &Unsized)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ ::core::cmp::PartialOrd::partial_cmp(&self.0, &other.0)
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Unsized {
+ #[inline]
+ fn cmp(&self, other: &Unsized) -> ::core::cmp::Ordering {
+ ::core::cmp::Ord::cmp(&self.0, &other.0)
+ }
+}
+
+// A packed tuple struct that impls `Copy`.
+#[repr(packed)]
+struct PackedCopy(u32);
+#[automatically_derived]
+impl ::core::clone::Clone for PackedCopy {
+ #[inline]
+ fn clone(&self) -> PackedCopy {
+ let _: ::core::clone::AssertParamIsClone<u32>;
+ *self
+ }
+}
+#[automatically_derived]
+impl ::core::marker::Copy for PackedCopy { }
+#[automatically_derived]
+impl ::core::fmt::Debug for PackedCopy {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ ::core::fmt::Formatter::debug_tuple_field1_finish(f, "PackedCopy",
+ &&{ self.0 })
+ }
+}
+#[automatically_derived]
+impl ::core::default::Default for PackedCopy {
+ #[inline]
+ fn default() -> PackedCopy {
+ PackedCopy(::core::default::Default::default())
+ }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for PackedCopy {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ ::core::hash::Hash::hash(&{ self.0 }, state)
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for PackedCopy { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for PackedCopy {
+ #[inline]
+ fn eq(&self, other: &PackedCopy) -> bool { { self.0 } == { other.0 } }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for PackedCopy { }
+#[automatically_derived]
+impl ::core::cmp::Eq for PackedCopy {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {
+ let _: ::core::cmp::AssertParamIsEq<u32>;
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for PackedCopy {
+ #[inline]
+ fn partial_cmp(&self, other: &PackedCopy)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ ::core::cmp::PartialOrd::partial_cmp(&{ self.0 }, &{ other.0 })
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for PackedCopy {
+ #[inline]
+ fn cmp(&self, other: &PackedCopy) -> ::core::cmp::Ordering {
+ ::core::cmp::Ord::cmp(&{ self.0 }, &{ other.0 })
+ }
+}
+
+// A packed tuple struct that does not impl `Copy`. Note that the alignment of
+// the field must be 1 for this code to be valid. Otherwise it triggers an
+// error "`#[derive]` can't be used on a `#[repr(packed)]` struct that does not
+// derive Copy (error E0133)" at MIR building time. This is a weird case and
+// it's possible that this struct is not supposed to work, but for now it does.
+#[repr(packed)]
+struct PackedNonCopy(u8);
+#[automatically_derived]
+impl ::core::clone::Clone for PackedNonCopy {
+ #[inline]
+ fn clone(&self) -> PackedNonCopy {
+ PackedNonCopy(::core::clone::Clone::clone(&self.0))
+ }
+}
+#[automatically_derived]
+impl ::core::fmt::Debug for PackedNonCopy {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ ::core::fmt::Formatter::debug_tuple_field1_finish(f, "PackedNonCopy",
+ &&self.0)
+ }
+}
+#[automatically_derived]
+impl ::core::default::Default for PackedNonCopy {
+ #[inline]
+ fn default() -> PackedNonCopy {
+ PackedNonCopy(::core::default::Default::default())
+ }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for PackedNonCopy {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ ::core::hash::Hash::hash(&self.0, state)
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for PackedNonCopy { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for PackedNonCopy {
+ #[inline]
+ fn eq(&self, other: &PackedNonCopy) -> bool { self.0 == other.0 }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for PackedNonCopy { }
+#[automatically_derived]
+impl ::core::cmp::Eq for PackedNonCopy {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {
+ let _: ::core::cmp::AssertParamIsEq<u8>;
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for PackedNonCopy {
+ #[inline]
+ fn partial_cmp(&self, other: &PackedNonCopy)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ ::core::cmp::PartialOrd::partial_cmp(&self.0, &other.0)
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for PackedNonCopy {
+ #[inline]
+ fn cmp(&self, other: &PackedNonCopy) -> ::core::cmp::Ordering {
+ ::core::cmp::Ord::cmp(&self.0, &other.0)
+ }
+}
+
+// An empty enum.
+enum Enum0 {}
+#[automatically_derived]
+impl ::core::clone::Clone for Enum0 {
+ #[inline]
+ fn clone(&self) -> Enum0 { *self }
+}
+#[automatically_derived]
+impl ::core::marker::Copy for Enum0 { }
+#[automatically_derived]
+impl ::core::fmt::Debug for Enum0 {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ unsafe { ::core::intrinsics::unreachable() }
+ }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Enum0 {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ unsafe { ::core::intrinsics::unreachable() }
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Enum0 { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Enum0 {
+ #[inline]
+ fn eq(&self, other: &Enum0) -> bool {
+ unsafe { ::core::intrinsics::unreachable() }
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Enum0 { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Enum0 {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {}
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Enum0 {
+ #[inline]
+ fn partial_cmp(&self, other: &Enum0)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ unsafe { ::core::intrinsics::unreachable() }
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Enum0 {
+ #[inline]
+ fn cmp(&self, other: &Enum0) -> ::core::cmp::Ordering {
+ unsafe { ::core::intrinsics::unreachable() }
+ }
+}
+
+// A single-variant enum.
+enum Enum1 {
+ Single {
+ x: u32,
+ },
+}
+#[automatically_derived]
+impl ::core::clone::Clone for Enum1 {
+ #[inline]
+ fn clone(&self) -> Enum1 {
+ match self {
+ Enum1::Single { x: __self_0 } =>
+ Enum1::Single { x: ::core::clone::Clone::clone(__self_0) },
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::fmt::Debug for Enum1 {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ match self {
+ Enum1::Single { x: __self_0 } =>
+ ::core::fmt::Formatter::debug_struct_field1_finish(f,
+ "Single", "x", &__self_0),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Enum1 {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ match self {
+ Enum1::Single { x: __self_0 } =>
+ ::core::hash::Hash::hash(__self_0, state),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Enum1 { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Enum1 {
+ #[inline]
+ fn eq(&self, other: &Enum1) -> bool {
+ match (self, other) {
+ (Enum1::Single { x: __self_0 }, Enum1::Single { x: __arg1_0 }) =>
+ *__self_0 == *__arg1_0,
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Enum1 { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Enum1 {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {
+ let _: ::core::cmp::AssertParamIsEq<u32>;
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Enum1 {
+ #[inline]
+ fn partial_cmp(&self, other: &Enum1)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ match (self, other) {
+ (Enum1::Single { x: __self_0 }, Enum1::Single { x: __arg1_0 }) =>
+ ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Enum1 {
+ #[inline]
+ fn cmp(&self, other: &Enum1) -> ::core::cmp::Ordering {
+ match (self, other) {
+ (Enum1::Single { x: __self_0 }, Enum1::Single { x: __arg1_0 }) =>
+ ::core::cmp::Ord::cmp(__self_0, __arg1_0),
+ }
+ }
+}
+
+// A C-like, fieldless enum with a single variant.
+enum Fieldless1 {
+
+ #[default]
+ A,
+}
+#[automatically_derived]
+impl ::core::clone::Clone for Fieldless1 {
+ #[inline]
+ fn clone(&self) -> Fieldless1 { Fieldless1::A }
+}
+#[automatically_derived]
+impl ::core::fmt::Debug for Fieldless1 {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ ::core::fmt::Formatter::write_str(f, "A")
+ }
+}
+#[automatically_derived]
+impl ::core::default::Default for Fieldless1 {
+ #[inline]
+ fn default() -> Fieldless1 { Self::A }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Fieldless1 {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {}
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Fieldless1 { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Fieldless1 {
+ #[inline]
+ fn eq(&self, other: &Fieldless1) -> bool { true }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Fieldless1 { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Fieldless1 {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {}
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Fieldless1 {
+ #[inline]
+ fn partial_cmp(&self, other: &Fieldless1)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal)
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Fieldless1 {
+ #[inline]
+ fn cmp(&self, other: &Fieldless1) -> ::core::cmp::Ordering {
+ ::core::cmp::Ordering::Equal
+ }
+}
+
+// A C-like, fieldless enum.
+enum Fieldless {
+
+ #[default]
+ A,
+ B,
+ C,
+}
+#[automatically_derived]
+impl ::core::clone::Clone for Fieldless {
+ #[inline]
+ fn clone(&self) -> Fieldless { *self }
+}
+#[automatically_derived]
+impl ::core::marker::Copy for Fieldless { }
+#[automatically_derived]
+impl ::core::fmt::Debug for Fieldless {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ ::core::fmt::Formatter::write_str(f,
+ match self {
+ Fieldless::A => "A",
+ Fieldless::B => "B",
+ Fieldless::C => "C",
+ })
+ }
+}
+#[automatically_derived]
+impl ::core::default::Default for Fieldless {
+ #[inline]
+ fn default() -> Fieldless { Self::A }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Fieldless {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ ::core::hash::Hash::hash(&__self_tag, state)
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Fieldless { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Fieldless {
+ #[inline]
+ fn eq(&self, other: &Fieldless) -> bool {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ let __arg1_tag = ::core::intrinsics::discriminant_value(other);
+ __self_tag == __arg1_tag
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Fieldless { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Fieldless {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {}
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Fieldless {
+ #[inline]
+ fn partial_cmp(&self, other: &Fieldless)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ let __arg1_tag = ::core::intrinsics::discriminant_value(other);
+ ::core::cmp::PartialOrd::partial_cmp(&__self_tag, &__arg1_tag)
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Fieldless {
+ #[inline]
+ fn cmp(&self, other: &Fieldless) -> ::core::cmp::Ordering {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ let __arg1_tag = ::core::intrinsics::discriminant_value(other);
+ ::core::cmp::Ord::cmp(&__self_tag, &__arg1_tag)
+ }
+}
+
+// An enum with multiple fieldless and fielded variants.
+enum Mixed {
+
+ #[default]
+ P,
+ Q,
+ R(u32),
+ S {
+ d1: Option<u32>,
+ d2: Option<i32>,
+ },
+}
+#[automatically_derived]
+impl ::core::clone::Clone for Mixed {
+ #[inline]
+ fn clone(&self) -> Mixed {
+ let _: ::core::clone::AssertParamIsClone<u32>;
+ let _: ::core::clone::AssertParamIsClone<Option<u32>>;
+ let _: ::core::clone::AssertParamIsClone<Option<i32>>;
+ *self
+ }
+}
+#[automatically_derived]
+impl ::core::marker::Copy for Mixed { }
+#[automatically_derived]
+impl ::core::fmt::Debug for Mixed {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ match self {
+ Mixed::P => ::core::fmt::Formatter::write_str(f, "P"),
+ Mixed::Q => ::core::fmt::Formatter::write_str(f, "Q"),
+ Mixed::R(__self_0) =>
+ ::core::fmt::Formatter::debug_tuple_field1_finish(f, "R",
+ &__self_0),
+ Mixed::S { d1: __self_0, d2: __self_1 } =>
+ ::core::fmt::Formatter::debug_struct_field2_finish(f, "S",
+ "d1", &__self_0, "d2", &__self_1),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::default::Default for Mixed {
+ #[inline]
+ fn default() -> Mixed { Self::P }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Mixed {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ ::core::hash::Hash::hash(&__self_tag, state);
+ match self {
+ Mixed::R(__self_0) => ::core::hash::Hash::hash(__self_0, state),
+ Mixed::S { d1: __self_0, d2: __self_1 } => {
+ ::core::hash::Hash::hash(__self_0, state);
+ ::core::hash::Hash::hash(__self_1, state)
+ }
+ _ => {}
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Mixed { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Mixed {
+ #[inline]
+ fn eq(&self, other: &Mixed) -> bool {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ let __arg1_tag = ::core::intrinsics::discriminant_value(other);
+ __self_tag == __arg1_tag &&
+ match (self, other) {
+ (Mixed::R(__self_0), Mixed::R(__arg1_0)) =>
+ *__self_0 == *__arg1_0,
+ (Mixed::S { d1: __self_0, d2: __self_1 }, Mixed::S {
+ d1: __arg1_0, d2: __arg1_1 }) =>
+ *__self_0 == *__arg1_0 && *__self_1 == *__arg1_1,
+ _ => true,
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Mixed { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Mixed {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {
+ let _: ::core::cmp::AssertParamIsEq<u32>;
+ let _: ::core::cmp::AssertParamIsEq<Option<u32>>;
+ let _: ::core::cmp::AssertParamIsEq<Option<i32>>;
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Mixed {
+ #[inline]
+ fn partial_cmp(&self, other: &Mixed)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ let __arg1_tag = ::core::intrinsics::discriminant_value(other);
+ match ::core::cmp::PartialOrd::partial_cmp(&__self_tag, &__arg1_tag) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal) =>
+ match (self, other) {
+ (Mixed::R(__self_0), Mixed::R(__arg1_0)) =>
+ ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0),
+ (Mixed::S { d1: __self_0, d2: __self_1 }, Mixed::S {
+ d1: __arg1_0, d2: __arg1_1 }) =>
+ match ::core::cmp::PartialOrd::partial_cmp(__self_0,
+ __arg1_0) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal)
+ => ::core::cmp::PartialOrd::partial_cmp(__self_1, __arg1_1),
+ cmp => cmp,
+ },
+ _ =>
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal),
+ },
+ cmp => cmp,
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Mixed {
+ #[inline]
+ fn cmp(&self, other: &Mixed) -> ::core::cmp::Ordering {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ let __arg1_tag = ::core::intrinsics::discriminant_value(other);
+ match ::core::cmp::Ord::cmp(&__self_tag, &__arg1_tag) {
+ ::core::cmp::Ordering::Equal =>
+ match (self, other) {
+ (Mixed::R(__self_0), Mixed::R(__arg1_0)) =>
+ ::core::cmp::Ord::cmp(__self_0, __arg1_0),
+ (Mixed::S { d1: __self_0, d2: __self_1 }, Mixed::S {
+ d1: __arg1_0, d2: __arg1_1 }) =>
+ match ::core::cmp::Ord::cmp(__self_0, __arg1_0) {
+ ::core::cmp::Ordering::Equal =>
+ ::core::cmp::Ord::cmp(__self_1, __arg1_1),
+ cmp => cmp,
+ },
+ _ => ::core::cmp::Ordering::Equal,
+ },
+ cmp => cmp,
+ }
+ }
+}
+
+// An enum with no fieldless variants. Note that `Default` cannot be derived
+// for this enum.
+enum Fielded { X(u32), Y(bool), Z(Option<i32>), }
+#[automatically_derived]
+impl ::core::clone::Clone for Fielded {
+ #[inline]
+ fn clone(&self) -> Fielded {
+ match self {
+ Fielded::X(__self_0) =>
+ Fielded::X(::core::clone::Clone::clone(__self_0)),
+ Fielded::Y(__self_0) =>
+ Fielded::Y(::core::clone::Clone::clone(__self_0)),
+ Fielded::Z(__self_0) =>
+ Fielded::Z(::core::clone::Clone::clone(__self_0)),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::fmt::Debug for Fielded {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
+ match self {
+ Fielded::X(__self_0) =>
+ ::core::fmt::Formatter::debug_tuple_field1_finish(f, "X",
+ &__self_0),
+ Fielded::Y(__self_0) =>
+ ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Y",
+ &__self_0),
+ Fielded::Z(__self_0) =>
+ ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Z",
+ &__self_0),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::hash::Hash for Fielded {
+ fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ ::core::hash::Hash::hash(&__self_tag, state);
+ match self {
+ Fielded::X(__self_0) => ::core::hash::Hash::hash(__self_0, state),
+ Fielded::Y(__self_0) => ::core::hash::Hash::hash(__self_0, state),
+ Fielded::Z(__self_0) => ::core::hash::Hash::hash(__self_0, state),
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralPartialEq for Fielded { }
+#[automatically_derived]
+impl ::core::cmp::PartialEq for Fielded {
+ #[inline]
+ fn eq(&self, other: &Fielded) -> bool {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ let __arg1_tag = ::core::intrinsics::discriminant_value(other);
+ __self_tag == __arg1_tag &&
+ match (self, other) {
+ (Fielded::X(__self_0), Fielded::X(__arg1_0)) =>
+ *__self_0 == *__arg1_0,
+ (Fielded::Y(__self_0), Fielded::Y(__arg1_0)) =>
+ *__self_0 == *__arg1_0,
+ (Fielded::Z(__self_0), Fielded::Z(__arg1_0)) =>
+ *__self_0 == *__arg1_0,
+ _ => unsafe { ::core::intrinsics::unreachable() }
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::marker::StructuralEq for Fielded { }
+#[automatically_derived]
+impl ::core::cmp::Eq for Fielded {
+ #[inline]
+ #[doc(hidden)]
+ #[no_coverage]
+ fn assert_receiver_is_total_eq(&self) -> () {
+ let _: ::core::cmp::AssertParamIsEq<u32>;
+ let _: ::core::cmp::AssertParamIsEq<bool>;
+ let _: ::core::cmp::AssertParamIsEq<Option<i32>>;
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::PartialOrd for Fielded {
+ #[inline]
+ fn partial_cmp(&self, other: &Fielded)
+ -> ::core::option::Option<::core::cmp::Ordering> {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ let __arg1_tag = ::core::intrinsics::discriminant_value(other);
+ match ::core::cmp::PartialOrd::partial_cmp(&__self_tag, &__arg1_tag) {
+ ::core::option::Option::Some(::core::cmp::Ordering::Equal) =>
+ match (self, other) {
+ (Fielded::X(__self_0), Fielded::X(__arg1_0)) =>
+ ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0),
+ (Fielded::Y(__self_0), Fielded::Y(__arg1_0)) =>
+ ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0),
+ (Fielded::Z(__self_0), Fielded::Z(__arg1_0)) =>
+ ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0),
+ _ => unsafe { ::core::intrinsics::unreachable() }
+ },
+ cmp => cmp,
+ }
+ }
+}
+#[automatically_derived]
+impl ::core::cmp::Ord for Fielded {
+ #[inline]
+ fn cmp(&self, other: &Fielded) -> ::core::cmp::Ordering {
+ let __self_tag = ::core::intrinsics::discriminant_value(self);
+ let __arg1_tag = ::core::intrinsics::discriminant_value(other);
+ match ::core::cmp::Ord::cmp(&__self_tag, &__arg1_tag) {
+ ::core::cmp::Ordering::Equal =>
+ match (self, other) {
+ (Fielded::X(__self_0), Fielded::X(__arg1_0)) =>
+ ::core::cmp::Ord::cmp(__self_0, __arg1_0),
+ (Fielded::Y(__self_0), Fielded::Y(__arg1_0)) =>
+ ::core::cmp::Ord::cmp(__self_0, __arg1_0),
+ (Fielded::Z(__self_0), Fielded::Z(__arg1_0)) =>
+ ::core::cmp::Ord::cmp(__self_0, __arg1_0),
+ _ => unsafe { ::core::intrinsics::unreachable() }
+ },
+ cmp => cmp,
+ }
+ }
+}
+
+// A union. Most builtin traits are not derivable for unions.
+pub union Union {
+ pub b: bool,
+ pub u: u32,
+ pub i: i32,
+}
+#[automatically_derived]
+impl ::core::clone::Clone for Union {
+ #[inline]
+ fn clone(&self) -> Union {
+ let _: ::core::clone::AssertParamIsCopy<Self>;
+ *self
+ }
+}
+#[automatically_derived]
+impl ::core::marker::Copy for Union { }