diff options
| author | Linus Torvalds <torvalds@home.transmeta.com> | 2003-04-10 10:59:41 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-07 21:00:28 -0700 |
| commit | 0b48320cef18ca506b20a4812f6d10fe1a55aaa6 (patch) | |
| tree | 9f6c866ca5e10971edeb2f109630e1484b44752d | |
| parent | 53a0adb26d707df1ddd7dc2b24a0b5648cbe5d89 (diff) | |
| download | sparse-dev-0b48320cef18ca506b20a4812f6d10fe1a55aaa6.tar.gz | |
Whoops. More "typeof" confusion fixes.
| -rw-r--r-- | symbol.c | 15 |
1 files changed, 8 insertions, 7 deletions
@@ -218,8 +218,8 @@ struct symbol *examine_symbol_type(struct symbol * sym) if (!sym->ctype.alignment) sym->ctype.alignment = POINTER_ALIGNMENT; base_type = sym->ctype.base_type; - examine_symbol_type(base_type); - if (base_type && base_type->type == SYM_TYPEOF) + base_type = examine_symbol_type(base_type); + if (base_type && base_type->type == SYM_NODE) merge_type(sym, base_type); return sym; case SYM_ENUM: @@ -237,10 +237,11 @@ struct symbol *examine_symbol_type(struct symbol * sym) case SYM_TYPEOF: { struct symbol *base = evaluate_expression(sym->initializer); if (base) { - sym->ctype = base->ctype; - sym->bit_size = base->bit_size; - sym->array_size = base->array_size; - return base; + struct symbol *node = alloc_symbol(sym->pos, SYM_NODE); + merge_type(node, base); + node->bit_size = base->bit_size; + node->array_size = base->array_size; + return node; } break; } @@ -254,7 +255,7 @@ struct symbol *examine_symbol_type(struct symbol * sym) if (base_type) { base_type = examine_symbol_type(base_type); - if (base_type && base_type->type == SYM_TYPEOF) + if (base_type && base_type->type == SYM_NODE) merge_type(sym, base_type); bit_size = base_type->bit_size; |
