From 4f45ec5963a4b72e0c4ddbdfa84f9cb374692eea Mon Sep 17 00:00:00 2001 From: qmuntal Date: Thu, 20 Jan 2022 12:46:38 +0100 Subject: [PATCH] cmd/go: prepend builtin prolog when checking for preamble errors Fixes #50710 Change-Id: I62feddbe3eaae9605d196bec60d378614436603a Reviewed-on: https://go-review.googlesource.com/c/go/+/379754 Auto-Submit: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov TryBot-Result: Gopher Robot Run-TryBot: Ian Lance Taylor Reviewed-by: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov --- misc/cgo/errors/errors_test.go | 1 + misc/cgo/errors/testdata/issue50710.go | 14 ++++++++++++++ src/cmd/cgo/gcc.go | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 misc/cgo/errors/testdata/issue50710.go diff --git a/misc/cgo/errors/errors_test.go b/misc/cgo/errors/errors_test.go index e90ed1e058d..9718b7f9fb4 100644 --- a/misc/cgo/errors/errors_test.go +++ b/misc/cgo/errors/errors_test.go @@ -112,6 +112,7 @@ func TestReportsTypeErrors(t *testing.T) { "issue18889.go", "issue28721.go", "issue33061.go", + "issue50710.go", } { check(t, file) } diff --git a/misc/cgo/errors/testdata/issue50710.go b/misc/cgo/errors/testdata/issue50710.go new file mode 100644 index 00000000000..dffea229031 --- /dev/null +++ b/misc/cgo/errors/testdata/issue50710.go @@ -0,0 +1,14 @@ +// Copyright 2022 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 + +// size_t StrLen(_GoString_ s) { +// return _GoStringLen(s); +// } +import "C" + +func main() { + C.StrLen1() // ERROR HERE +} diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go index 3cb01ba382f..d89bff287b3 100644 --- a/src/cmd/cgo/gcc.go +++ b/src/cmd/cgo/gcc.go @@ -488,7 +488,7 @@ func (p *Package) guessKinds(f *File) []*Name { // Check if compiling the preamble by itself causes any errors, // because the messages we've printed out so far aren't helpful // to users debugging preamble mistakes. See issue 8442. - preambleErrors := p.gccErrors([]byte(f.Preamble)) + preambleErrors := p.gccErrors([]byte(builtinProlog + f.Preamble)) if len(preambleErrors) > 0 { error_(token.NoPos, "\n%s errors for preamble:\n%s", gccBaseCmd[0], preambleErrors) }