From: bjorn3 Date: Sat, 6 Oct 2018 09:21:18 +0000 (+0200) Subject: Fix projection of sized field in unsized type X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=ab57af4e6ac5d307db006a1b1cbd4ab60577eeb2;p=rust.git Fix projection of sized field in unsized type --- diff --git a/example/example.rs b/example/example.rs index 9e247964f32..eebc8c126e9 100644 --- a/example/example.rs +++ b/example/example.rs @@ -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 +} diff --git a/src/common.rs b/src/common.rs index b11ab0445d3..fb030470936 100644 --- a/src/common.rs +++ b/src/common.rs @@ -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) } }