diff options
Diffstat (limited to 'src/cmd/gc/typecheck.c')
| -rw-r--r-- | src/cmd/gc/typecheck.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c index c219ad8c53..65c2384778 100644 --- a/src/cmd/gc/typecheck.c +++ b/src/cmd/gc/typecheck.c @@ -1012,13 +1012,31 @@ reswitch: n->type = ptrto(t); goto ret; - case OPANIC: case OPRINT: case OPRINTN: ok |= Etop; typechecklist(n->list, Erv); goto ret; + case OPANIC: + ok |= Etop; + if(onearg(n) < 0) + goto error; + typecheck(&n->left, Erv); + defaultlit(&n->left, types[TINTER]); + if(n->left->type == T) + goto error; + goto ret; + + case ORECOVER: + ok |= Erv|Etop; + if(n->list != nil) { + yyerror("too many arguments to recover"); + goto error; + } + n->type = types[TINTER]; + goto ret; + case OCLOSURE: ok |= Erv; typecheckclosure(n); |
