mention named opaque types
authorRalf Jung <post@ralfj.de>
Tue, 7 Apr 2020 08:08:39 +0000 (10:08 +0200)
committerRalf Jung <post@ralfj.de>
Tue, 7 Apr 2020 08:08:39 +0000 (10:08 +0200)
personal/_posts/2020-04-04-layout-debugging.md

index 181b11bdeaad2a36d257e5f9d25aefecb5f99845..7b8caa68c3ae917b1f1a5030d7f9a4ea17c74642 100644 (file)
@@ -29,7 +29,7 @@ The (permanently) unstable `rustc_layout` attribute [can now be used](https://gi
 In this case, it prints:
 
 ```
-error: layout debugging: Layout {
+error: layout_of((u8, u16)) = Layout {
     fields: Arbitrary {
         offsets: [
             Size {
@@ -83,6 +83,8 @@ the fields are at offsets 0 and 2, the type has alignment 2 (but preferred align
 We can also see that it uses the `ScalarPair` abi which is relevant for Miri and when passing data as arguments to another function.
 To learn more about what all this information means, see [the `Layout` type docs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_target/abi/struct.Layout.html).
 
+**Update:** After a suggestions by @jschievink, this can now also be used to print the [underlying type and layout](https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=4aab680db88d1e3922bfb7e26103a125) of named opaque types, which is particularly useful [for generators](https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=de99ab78a4d77bceee6760021b19de7d). **/Update**
+
 So the next time you work with `Layout` and wonder how exactly the niche gets represented, or whether an `enum` can have `ScalarPair` abi (hint: yes it can), you can easily look at a few examples to see how rustc thinks about this type internally.
 This is basically the type-level equivalent of `--emit mir`.
 I have wanted this since forever, so much that some time ago I wrote an awful hack for this based on rustc debug tracing.