Skip to content

Commit

Permalink
gc: use correct line number for EOF syntax error
Browse files Browse the repository at this point in the history
I also added some debugging code that's turned
on with -xx.

Fixes #3392.

R=rsc, lvd
CC=golang-dev
https://golang.org/cl/5909058
  • Loading branch information
ality committed Apr 26, 2012
1 parent 4d3db77 commit 42aa9ab
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
5 changes: 2 additions & 3 deletions src/cmd/gc/lex.c
Expand Up @@ -1531,9 +1531,7 @@ getc(void)
if(c != 0) {
curio.peekc = curio.peekc1;
curio.peekc1 = 0;
if(c == '\n' && pushedio.bin == nil)
lexlineno++;
return c;
goto check;
}

if(curio.bin == nil) {
Expand All @@ -1543,6 +1541,7 @@ getc(void)
} else
c = Bgetc(curio.bin);

check:
switch(c) {
case 0:
if(curio.bin != nil) {
Expand Down
5 changes: 5 additions & 0 deletions src/cmd/gc/subr.c
Expand Up @@ -142,6 +142,11 @@ yyerror(char *fmt, ...)
if(debug['x'])
print("yyerror: yystate=%d yychar=%d\n", yystate, yychar);

// An unexpected EOF caused a syntax error. Use the previous
// line number since getc generated a fake newline character.
if(curio.eofnl)
lexlineno = prevlineno;

// only one syntax error per line
if(lastsyntax == lexlineno)
return;
Expand Down
15 changes: 15 additions & 0 deletions test/fixedbugs/bug435.go
@@ -0,0 +1,15 @@
// errorcheck

// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test that a syntax error caused by an unexpected EOF
// gives an error message with the correct line number.
//
// https://code.google.com/p/go/issues/detail?id=3392

package main

func foo() {
bar(1, // ERROR "unexpected"

0 comments on commit 42aa9ab

Please sign in to comment.