diff options
| author | Ginger Bill <bill@gingerbill.org> | 2016-09-13 23:09:46 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2016-09-13 23:09:46 +0100 |
| commit | 1147e17c134da1d5bb93d0754888ca1d0271a0f4 (patch) | |
| tree | fe746c89b650ed619222a00d694c67df40c72888 /src/codegen | |
| parent | 817ae643c5a469bf2f237525086288a2632fa500 (diff) | |
Fix addressing modes for selectors
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/ssa.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/codegen/ssa.cpp b/src/codegen/ssa.cpp index f1e992d7b..89443a1dd 100644 --- a/src/codegen/ssa.cpp +++ b/src/codegen/ssa.cpp @@ -2723,6 +2723,13 @@ ssaAddr ssa_build_addr(ssaProcedure *proc, AstNode *expr) { ssaValue *gep = ssa_emit_zero_gep(proc, e); return ssa_make_addr(gep, expr); case_end; + + case_ast_node(ce, CallExpr, expr); + ssaValue *e = ssa_build_expr(proc, expr); + ssaValue *v = ssa_add_local_generated(proc, ssa_type(e)); + ssa_emit_store(proc, v, e); + return ssa_make_addr(v, expr); + case_end; } TokenPos token_pos = ast_node_token(expr).pos; @@ -3506,7 +3513,6 @@ void ssa_insert_code_before_proc(ssaProcedure* proc, ssaProcedure *parent) { } } - void ssa_build_proc(ssaValue *value, ssaProcedure *parent) { ssaProcedure *proc = &value->Proc; |