mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/cgo: use first error position instead of last one
Just like https://golang.org/cl/34783 Given cgo.go: 1 package main 2 3 /* 4 long double x = 0; 5 */ 6 import "C" 7 8 func main() { 9 _ = C.x 10 _ = C.x 11 } Before: ./cgo.go:10:6: unexpected: 16-byte float type - long double After: ./cgo.go:9:6: unexpected: 16-byte float type - long double The above test case is not portable. So it is tested on only amd64. Change-Id: If0b84cf73d381a22e2ada71c8e9a6e6ec77ffd2e Reviewed-on: https://go-review.googlesource.com/54950 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
5b43bbe63b
commit
b88e532a9e
5 changed files with 23 additions and 16 deletions
|
|
@ -438,14 +438,7 @@ func (p *Package) guessKinds(f *File) []*Name {
|
|||
for i, n := range names {
|
||||
switch sniff[i] &^ notSignedIntConst {
|
||||
default:
|
||||
var tpos token.Pos
|
||||
for _, ref := range f.Ref {
|
||||
if ref.Name == n {
|
||||
tpos = ref.Pos()
|
||||
break
|
||||
}
|
||||
}
|
||||
error_(tpos, "could not determine kind of name for C.%s", fixGo(n.Go))
|
||||
error_(f.NamePos[n], "could not determine kind of name for C.%s", fixGo(n.Go))
|
||||
case notStrLiteral | notType:
|
||||
if sniff[i]¬SignedIntConst != 0 {
|
||||
n.Kind = "uconst"
|
||||
|
|
@ -543,10 +536,6 @@ func (p *Package) loadDWARF(f *File, names []*Name) {
|
|||
|
||||
// Scan DWARF info for top-level TagVariable entries with AttrName __cgo__i.
|
||||
types := make([]dwarf.Type, len(names))
|
||||
nameToRef := make(map[*Name]*Ref)
|
||||
for _, ref := range f.Ref {
|
||||
nameToRef[ref.Name] = ref
|
||||
}
|
||||
r := d.Reader()
|
||||
for {
|
||||
e, err := r.Next()
|
||||
|
|
@ -597,10 +586,7 @@ func (p *Package) loadDWARF(f *File, names []*Name) {
|
|||
if types[i] == nil {
|
||||
continue
|
||||
}
|
||||
pos := token.NoPos
|
||||
if ref, ok := nameToRef[n]; ok {
|
||||
pos = ref.Pos()
|
||||
}
|
||||
pos := f.NamePos[n]
|
||||
f, fok := types[i].(*dwarf.FuncType)
|
||||
if n.Kind != "type" && fok {
|
||||
n.Kind = "func"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue