mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/cgo: fix line number in an error message
Fixes #6563. R=golang-dev, iant CC=golang-dev https://golang.org/cl/14870046
This commit is contained in:
parent
06ad3b2de1
commit
dbe2eacf04
4 changed files with 54 additions and 15 deletions
|
|
@ -1,10 +1,14 @@
|
||||||
|
// 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"
|
||||||
|
|
|
||||||
13
misc/cgo/errors/err2.go
Normal file
13
misc/cgo/errors/err2.go
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
// 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,7 +2,14 @@
|
||||||
# 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() {
|
||||||
|
file=$1
|
||||||
|
line=$(grep -n 'ERROR HERE' $file | sed 's/:.*//')
|
||||||
|
if [ "$line" = "" ]; then
|
||||||
|
echo 1>&2 misc/cgo/errors/test.bash: BUG: cannot find ERROR HERE in $file
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if go build $file >errs 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 cgo to fail but it succeeded
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
@ -10,10 +17,15 @@ if ! test -s errs; then
|
||||||
echo 1>&2 misc/cgo/errors/test.bash: BUG: expected error output but saw none
|
echo 1>&2 misc/cgo/errors/test.bash: BUG: expected error output but saw none
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if ! fgrep err1.go:7 errs >/dev/null 2>&1; then
|
if ! fgrep $file:$line: errs >/dev/null 2>&1; then
|
||||||
echo 1>&2 misc/cgo/errors/test.bash: BUG: expected error on line 7 but saw:
|
echo 1>&2 misc/cgo/errors/test.bash: BUG: expected error on line $line but saw:
|
||||||
cat 1>&2 errs
|
cat 1>&2 errs
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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) {
|
||||||
// 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) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue