aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLinus Torvalds <torvalds@home.transmeta.com>2003-04-10 10:59:41 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-07 21:00:28 -0700
commit0b48320cef18ca506b20a4812f6d10fe1a55aaa6 (patch)
tree9f6c866ca5e10971edeb2f109630e1484b44752d
parent53a0adb26d707df1ddd7dc2b24a0b5648cbe5d89 (diff)
downloadsparse-dev-0b48320cef18ca506b20a4812f6d10fe1a55aaa6.tar.gz
Whoops. More "typeof" confusion fixes.
-rw-r--r--symbol.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/symbol.c b/symbol.c
index a1f99c41..7eb9376b 100644
--- a/symbol.c
+++ b/symbol.c
@@ -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;