qbe

Internal scc patchset buffer for QBE
Log | Files | Refs | README | LICENSE

commit fd9c2e045f7cc953bebab2e2e65da9cd73b04f17
parent 09192cdeabeb185e54d60faa2b275a0e8e2a52a6
Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu>
Date:   Tue, 27 Sep 2016 10:23:31 -0400

accept "ret" for functions with a return type

This happens to be needed for C.  The standard mandates that a return
value is used if the caller uses it.  Surprisingly, if the return
"value" is not used, the callee can use "return;".

A better solution is to add an "undef" value and return it, "undef"
would also have other use cases for compiling C.

Diffstat:
Mparse.c | 6++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/parse.c b/parse.c @@ -545,10 +545,12 @@ parseline(PState ps) Jrets, Jretd, Jretc, Jret0 }[rcls]; - if (rcls < 5) { + if (peek() == Tnl) + curb->jmp.type = Jret0; + else if (rcls < 5) { r = parseref(); if (req(r, R)) - err("return value expected"); + err("invalid return value"); curb->jmp.arg = r; } goto Close;