Commit dbe2eacf authored by Russ Cox's avatar Russ Cox

cmd/cgo: fix line number in an error message

Fixes #6563.

R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/14870046
parent 06ad3b2d
// Copyright 2013 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.
package main package main
/* /*
#cgo LDFLAGS: -c #cgo LDFLAGS: -c
void test() { void test() {
xxx; // This is line 7. xxx; // ERROR HERE
} }
*/ */
import "C" import "C"
......
// Copyright 2013 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.
package main
import "C"
func main() {
s := ""
_ = s
C.malloc(s) // ERROR HERE
}
...@@ -2,18 +2,30 @@ ...@@ -2,18 +2,30 @@
# Use of this source code is governed by a BSD-style # Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file. # license that can be found in the LICENSE file.
if go tool cgo err1.go >errs 2>&1; then check() {
echo 1>&2 misc/cgo/errors/test.bash: BUG: expected cgo to fail but it succeeded file=$1
exit 1 line=$(grep -n 'ERROR HERE' $file | sed 's/:.*//')
fi if [ "$line" = "" ]; then
if ! test -s errs; then echo 1>&2 misc/cgo/errors/test.bash: BUG: cannot find ERROR HERE in $file
echo 1>&2 misc/cgo/errors/test.bash: BUG: expected error output but saw none exit 1
exit 1 fi
fi if go build $file >errs 2>&1; then
if ! fgrep err1.go:7 errs >/dev/null 2>&1; then echo 1>&2 misc/cgo/errors/test.bash: BUG: expected cgo to fail but it succeeded
echo 1>&2 misc/cgo/errors/test.bash: BUG: expected error on line 7 but saw: exit 1
cat 1>&2 errs fi
exit 1 if ! test -s errs; then
fi echo 1>&2 misc/cgo/errors/test.bash: BUG: expected error output but saw none
exit 1
fi
if ! fgrep $file:$line: errs >/dev/null 2>&1; then
echo 1>&2 misc/cgo/errors/test.bash: BUG: expected error on line $line but saw:
cat 1>&2 errs
exit 1
fi
}
check err1.go
check err2.go
rm -rf errs _obj rm -rf errs _obj
exit 0 exit 0
...@@ -654,7 +654,7 @@ func (p *Package) rewriteRef(f *File) { ...@@ -654,7 +654,7 @@ func (p *Package) rewriteRef(f *File) {
// Okay - might be new(T) // Okay - might be new(T)
expr = r.Name.Type.Go expr = r.Name.Type.Go
} else if r.Name.Kind == "var" { } else if r.Name.Kind == "var" {
expr = &ast.StarExpr{X: expr} expr = &ast.StarExpr{Star: (*r.Expr).Pos(), X: expr}
} }
case "type": case "type":
...@@ -683,6 +683,16 @@ func (p *Package) rewriteRef(f *File) { ...@@ -683,6 +683,16 @@ func (p *Package) rewriteRef(f *File) {
} }
} }
} }
// Copy position information from old expr into new expr,
// in case expression being replaced is first on line.
// See golang.org/issue/6563.
pos := (*r.Expr).Pos()
switch x := expr.(type) {
case *ast.Ident:
expr = &ast.Ident{NamePos: pos, Name: x.Name}
}
*r.Expr = expr *r.Expr = expr
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment