mirror of
https://github.com/golang/go
synced 2024-11-13 17:20:22 -07:00
cmd/cgo: remove -O options when generating compiler errors
The cgo tool generates compiler errors to find out what kind of name it is using. Turning on optimization can confuse that process by producing new unexpected messages. Fixes #14669. Change-Id: Idc8e35fd259711ecc9638566b691c11d17140325 Reviewed-on: https://go-review.googlesource.com/23231 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
9369f22b84
commit
b5d18b50ac
23
misc/cgo/errors/issue14669.go
Normal file
23
misc/cgo/errors/issue14669.go
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright 2016 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.
|
||||
|
||||
// Issue 14669: test that fails when build with CGO_CFLAGS selecting
|
||||
// optimization.
|
||||
|
||||
package p
|
||||
|
||||
/*
|
||||
const int E = 1;
|
||||
|
||||
typedef struct s {
|
||||
int c;
|
||||
} s;
|
||||
*/
|
||||
import "C"
|
||||
|
||||
func F() {
|
||||
_ = C.s{
|
||||
c: C.E,
|
||||
}
|
||||
}
|
@ -45,6 +45,13 @@ expect issue13129.go C.ushort
|
||||
check issue13423.go
|
||||
expect issue13635.go C.uchar C.schar C.ushort C.uint C.ulong C.longlong C.ulonglong C.complexfloat C.complexdouble
|
||||
|
||||
if ! go build issue14669.go; then
|
||||
exit 1
|
||||
fi
|
||||
if ! CGO_CFLAGS="-O" go build issue14669.go; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! go run ptr.go; then
|
||||
exit 1
|
||||
fi
|
||||
|
@ -1243,12 +1243,20 @@ func (p *Package) gccErrors(stdin []byte) string {
|
||||
// TODO(rsc): require failure
|
||||
args := p.gccCmd()
|
||||
|
||||
// Optimization options can confuse the error messages; remove them.
|
||||
nargs := make([]string, 0, len(args))
|
||||
for _, arg := range args {
|
||||
if !strings.HasPrefix(arg, "-O") {
|
||||
nargs = append(nargs, arg)
|
||||
}
|
||||
}
|
||||
|
||||
if *debugGcc {
|
||||
fmt.Fprintf(os.Stderr, "$ %s <<EOF\n", strings.Join(args, " "))
|
||||
fmt.Fprintf(os.Stderr, "$ %s <<EOF\n", strings.Join(nargs, " "))
|
||||
os.Stderr.Write(stdin)
|
||||
fmt.Fprint(os.Stderr, "EOF\n")
|
||||
}
|
||||
stdout, stderr, _ := run(stdin, args)
|
||||
stdout, stderr, _ := run(stdin, nargs)
|
||||
if *debugGcc {
|
||||
os.Stderr.Write(stdout)
|
||||
os.Stderr.Write(stderr)
|
||||
|
Loading…
Reference in New Issue
Block a user