From 58e19aa4cb8656cdb757172647dfcb028029185e Mon Sep 17 00:00:00 2001
From: Russ Cox
-IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" Statement ] . +IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" ( IfStmt | Block ) ] .
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y index 01a4e822fb..d3e363d370 100644 --- a/src/cmd/gc/go.y +++ b/src/cmd/gc/go.y @@ -1462,6 +1462,9 @@ non_dcl_stmt: } | if_stmt LELSE stmt { + if($3->op != OIF && $3->op != OBLOCK) + yyerror("missing { } after else"); + popdcl(); $$ = $1; $$->nelse = list1($3); diff --git a/test/if.go b/test/if.go index c1bb69d277..18a6715d7e 100644 --- a/test/if.go +++ b/test/if.go @@ -53,25 +53,28 @@ func main() { count = 0 if true { count = count + 1 - } else + } else { count = count - 1 + } assertequal(count, 1, "if else true") count = 0 if false { count = count + 1 - } else + } else { count = count - 1 + } assertequal(count, -1, "if else false") count = 0 - if t:=1; false { + if t := 1; false { count = count + 1 _ = t t := 7 _ = t - } else + } else { count = count - t + } assertequal(count, -1, "if else false var") count = 0 @@ -80,8 +83,9 @@ func main() { count = count + 1 t := 7 _ = t - } else + } else { count = count - t + } _ = t assertequal(count, -1, "if else false var outside") }