From: Luqman Aden Date: Mon, 18 Aug 2014 18:03:20 +0000 (-0400) Subject: librustc: Fix field offsets for packed structs. X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;ds=sidebyside;h=82fa4368ed50db5081504523249222856c34a3aa;p=rust.git librustc: Fix field offsets for packed structs. --- diff --git a/src/librustc/middle/trans/cabi_x86_64.rs b/src/librustc/middle/trans/cabi_x86_64.rs index 32e481dd2d4..2ab4814fa0c 100644 --- a/src/librustc/middle/trans/cabi_x86_64.rs +++ b/src/librustc/middle/trans/cabi_x86_64.rs @@ -176,11 +176,15 @@ fn unify(cls: &mut [RegClass], } fn classify_struct(tys: &[Type], - cls: &mut [RegClass], i: uint, - off: uint) { + cls: &mut [RegClass], + i: uint, + off: uint, + packed: bool) { let mut field_off = off; for ty in tys.iter() { - field_off = align(field_off, *ty); + if !packed { + field_off = align(field_off, *ty); + } classify(*ty, cls, i, field_off); field_off += ty_size(*ty); } @@ -219,7 +223,7 @@ fn classify(ty: Type, unify(cls, ix + off / 8u, SSEDs); } Struct => { - classify_struct(ty.field_types().as_slice(), cls, ix, off); + classify_struct(ty.field_types().as_slice(), cls, ix, off, ty.is_packed()); } Array => { let len = ty.array_length();