]> git.lizzy.rs Git - rust.git/commitdiff
Fix projection of sized field in unsized type
authorbjorn3 <bjorn3@users.noreply.github.com>
Sat, 6 Oct 2018 09:21:18 +0000 (11:21 +0200)
committerbjorn3 <bjorn3@users.noreply.github.com>
Sat, 6 Oct 2018 09:21:18 +0000 (11:21 +0200)
example/example.rs
src/common.rs

index 9e247964f32b66f2ba01029cb83522b7ddafa2f9..eebc8c126e9b6a9d640a6cd1a2696b28bf3c8630 100644 (file)
@@ -196,3 +196,13 @@ fn str_wrapper_get(w: &StrWrapper) -> &str {
 fn i16_as_i8(a: i16) -> i8 {
     a as i8
 }
+
+struct Unsized(u8, str);
+
+fn get_sized_field_ref_from_unsized_type(u: &Unsized) -> &u8 {
+    &u.0
+}
+
+fn get_unsized_field_ref_from_unsized_type(u: &Unsized) -> &str {
+    &u.1
+}
index b11ab0445d3f3d3da3c98bb9c3c23cddbb91d39b..fb030470936a4786bd18970dd72ae176c042bd83 100644 (file)
@@ -460,6 +460,12 @@ pub fn place_field(
             }
             CPlace::Addr(base, extra, layout) => {
                 let (field_ptr, field_layout) = codegen_field(fx, base, layout, field);
+                let extra = if field_layout.is_unsized() {
+                    assert!(extra.is_some());
+                    extra
+                } else {
+                    None
+                };
                 CPlace::Addr(field_ptr, extra, field_layout)
             }
         }