aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--expand.c8
-rw-r--r--validation/expand/constant-union-size.c1
2 files changed, 4 insertions, 5 deletions
diff --git a/expand.c b/expand.c
index ae764153..04b072c5 100644
--- a/expand.c
+++ b/expand.c
@@ -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\\.