diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-04-21 03:46:21 +0200 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-05-21 17:27:45 +0200 |
commit | 154278d4e26d9d48fbb5f2668533a4c4e598b564 (patch) | |
tree | a4eb234ac76e0c0ee817edbb5c2d5fe4dec97870 | |
parent | 62596fe4efb13a41cdc05b931792122f9d855d14 (diff) | |
download | sparse-154278d4e26d9d48fbb5f2668533a4c4e598b564.tar.gz |
misc: always use the node for current_fn
At evaluation time and at expansion time, current_fn is set
to the function's base type (SYM_FN) but at parse time it's
set to its parent type (SYM_NODE).
Since current_fn is used to access the corresponding ident,
it should be set to the node type, not the base.
So, always set current_fn to the node type.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r-- | evaluate.c | 4 | ||||
-rw-r--r-- | expand.c | 2 |
2 files changed, 3 insertions, 3 deletions
@@ -3422,7 +3422,7 @@ static struct symbol *evaluate_symbol(struct symbol *sym) if (sym->definition && sym->definition != sym) return evaluate_symbol(sym->definition); - current_fn = base_type; + current_fn = sym; examine_fn_arguments(base_type); if (!base_type->stmt && base_type->inline_stmt) @@ -3453,7 +3453,7 @@ static struct symbol *evaluate_return_expression(struct statement *stmt) struct symbol *fntype, *rettype; evaluate_expression(expr); - fntype = current_fn; + fntype = current_fn->ctype.base_type; rettype = fntype->ctype.base_type; if (!rettype || rettype == &void_ctype) { if (expr && expr->ctype != &void_ctype) @@ -918,7 +918,7 @@ static int expand_symbol_call(struct expression *expr, int cost) struct symbol *fn = def->ctype.base_type; struct symbol *curr = current_fn; - current_fn = fn; + current_fn = def; evaluate_statement(expr->statement); current_fn = curr; |