summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd/5g/ggen.c2
-rw-r--r--src/cmd/6g/ggen.c2
-rw-r--r--src/cmd/6g/list.c5
-rw-r--r--src/cmd/8g/ggen.c2
4 files changed, 10 insertions, 1 deletions
diff --git a/src/cmd/5g/ggen.c b/src/cmd/5g/ggen.c
index 9014cb407..04fe16ce1 100644
--- a/src/cmd/5g/ggen.c
+++ b/src/cmd/5g/ggen.c
@@ -68,6 +68,8 @@ compile(Node *fn)
genlist(curfn->enter);
genlist(curfn->nbody);
checklabels();
+ if(nerrors != 0)
+ goto ret;
if(curfn->type->outtuple != 0)
ginscall(throwreturn, 0);
diff --git a/src/cmd/6g/ggen.c b/src/cmd/6g/ggen.c
index ea932e782..d0f9ab3f9 100644
--- a/src/cmd/6g/ggen.c
+++ b/src/cmd/6g/ggen.c
@@ -70,6 +70,8 @@ compile(Node *fn)
genlist(curfn->nbody);
gclean();
checklabels();
+ if(nerrors != 0)
+ goto ret;
if(curfn->type->outtuple != 0)
ginscall(throwreturn, 0);
diff --git a/src/cmd/6g/list.c b/src/cmd/6g/list.c
index 799bacf9a..5f71813c5 100644
--- a/src/cmd/6g/list.c
+++ b/src/cmd/6g/list.c
@@ -101,7 +101,10 @@ Dconv(Fmt *fp)
break;
case D_BRANCH:
- snprint(str, sizeof(str), "%ld", a->branch->loc);
+ if(a->branch == nil)
+ snprint(str, sizeof(str), "<nil>");
+ else
+ snprint(str, sizeof(str), "%ld", a->branch->loc);
break;
case D_EXTERN:
diff --git a/src/cmd/8g/ggen.c b/src/cmd/8g/ggen.c
index 3a44d64f0..ee26a6110 100644
--- a/src/cmd/8g/ggen.c
+++ b/src/cmd/8g/ggen.c
@@ -68,6 +68,8 @@ compile(Node *fn)
genlist(curfn->nbody);
gclean();
checklabels();
+ if(nerrors != 0)
+ goto ret;
if(curfn->type->outtuple != 0)
ginscall(throwreturn, 0);