diff options
Diffstat (limited to 'src/cmd/gc/pgen.c')
-rw-r--r-- | src/cmd/gc/pgen.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/cmd/gc/pgen.c b/src/cmd/gc/pgen.c index f9ff41c1b..583e77e4c 100644 --- a/src/cmd/gc/pgen.c +++ b/src/cmd/gc/pgen.c @@ -171,6 +171,7 @@ compile(Node *fn) if(!debug['N'] || debug['R'] || debug['P']) { regopt(ptxt); } + expandchecks(ptxt); oldstksize = stksize; allocauto(ptxt); @@ -504,3 +505,22 @@ movelargefn(Node *fn) addrescapes(n); } } + +void +cgen_checknil(Node *n) +{ + Node reg; + + if(disable_checknil) + return; + while(n->op == ODOT || (n->op == OINDEX && isfixedarray(n->left->type->type))) // NOTE: not ODOTPTR + n = n->left; + if(thechar == '5' && n->op != OREGISTER) { + regalloc(®, types[tptr], N); + cgen(n, ®); + gins(ACHECKNIL, ®, N); + regfree(®); + return; + } + gins(ACHECKNIL, n, N); +} |