aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLinus Torvalds <torvalds@penguin.transmeta.com>2003-04-02 16:38:52 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-07 21:00:05 -0700
commitd787344efc7a4b926848041317f8dfcd71e39411 (patch)
treee28193ecd94cba5e71ff3e238199f80c7a306349
parent52c719d062a95db6016a63fae67193f4dcd26974 (diff)
downloadsparse-dev-d787344efc7a4b926848041317f8dfcd71e39411.tar.gz
Make structure size calculations handle the case where
the structure might have been pre-aligned.
-rw-r--r--symbol.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/symbol.c b/symbol.c
index 3aae6970..08297b21 100644
--- a/symbol.c
+++ b/symbol.c
@@ -108,12 +108,12 @@ static void examine_struct_union_type(struct symbol *sym, int advance)
fn = advance ? lay_out_struct : lay_out_union;
symbol_iterate(sym->symbol_list, fn, &info);
+ if (!sym->ctype.alignment)
+ sym->ctype.alignment = info.max_align;
bit_size = info.bit_size;
- bit_align = (info.max_align << 3)-1;
+ bit_align = (sym->ctype.alignment << 3)-1;
bit_size = (bit_size + bit_align) & ~bit_align;
sym->bit_size = bit_size;
- if (info.max_align > sym->ctype.alignment)
- sym->ctype.alignment = info.max_align;
}
static void examine_array_type(struct symbol *sym)