diff options
-rw-r--r-- | expand.c | 8 | ||||
-rw-r--r-- | validation/expand/constant-union-size.c | 1 |
2 files changed, 4 insertions, 5 deletions
@@ -625,8 +625,6 @@ static int expand_addressof(struct expression *expr) * Look up a trustable initializer value at the requested offset. * * Return NULL if no such value can be found or statically trusted. - * - * FIXME!! We should check that the size is right! */ static struct expression *constant_symbol_value(struct symbol *sym, int offset) { @@ -688,11 +686,13 @@ static int expand_dereference(struct expression *expr) if (unop->type == EXPR_SYMBOL) { struct symbol *sym = unop->symbol; + struct symbol *ctype = expr->ctype; struct expression *value = constant_symbol_value(sym, offset); /* Const symbol with a constant initializer? */ - if (value) { - /* FIXME! We should check that the size is right! */ + if (value && value->ctype) { + if (ctype->bit_size != value->ctype->bit_size) + return UNSAFE; if (value->type == EXPR_VALUE) { if (is_bitfield_type(value->ctype)) return UNSAFE; diff --git a/validation/expand/constant-union-size.c b/validation/expand/constant-union-size.c index b6c3ac75..8a16bf3e 100644 --- a/validation/expand/constant-union-size.c +++ b/validation/expand/constant-union-size.c @@ -13,7 +13,6 @@ static int foo(void) * check-name: constant-union-size * check description: the size of the initializer doesn't match * check-command: test-linearize -fdump-ir $file - * check-known-to-fail * * check-output-ignore * check-output-contains: load\\. |