mirror of
https://github.com/golang/go
synced 2024-11-17 22:44:41 -07:00
6d43587053
CL 122575 and its successors introduced a loop calling loadDWARF, whereas before we only called it once. Pass a single typeConv to each call, rather than creating a new one in loadDWARF itself. Change the maps from dwarf.Type to use string keys rather than dwarf.Type keys, since when the DWARF is reloaded the dwarf.Type pointers will be different. These changes permit typeConv.Type to return a consistent value for a given DWARF type, avoiding spurious type conversion errors due to typedefs loaded after the first loop iteration. Fixes #27340 Change-Id: Ic33467bbfca4c54e95909621b35ba2a58216d96e Reviewed-on: https://go-review.googlesource.com/c/152762 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
// Copyright 2018 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.
|
|
|
|
// Failed to resolve typedefs consistently.
|
|
// No runtime test; just make sure it compiles.
|
|
// In separate directory to isolate #pragma GCC diagnostic.
|
|
|
|
package issue27340
|
|
|
|
// We use the #pragma to avoid a compiler warning about incompatible
|
|
// pointer types, because we generate code passing a struct ptr rather
|
|
// than using the typedef. This warning is expected and does not break
|
|
// a normal build.
|
|
// We can only disable -Wincompatible-pointer-types starting with GCC 5.
|
|
|
|
// #if __GNU_MAJOR__ >= 5
|
|
//
|
|
// #pragma GCC diagnostic ignored "-Wincompatible-pointer-types"
|
|
//
|
|
// typedef struct {
|
|
// int a;
|
|
// } issue27340Struct, *issue27340Ptr;
|
|
//
|
|
// static void issue27340CFunc(issue27340Ptr p) {}
|
|
//
|
|
// #else /* _GNU_MAJOR_ < 5 */
|
|
//
|
|
// typedef struct {
|
|
// int a;
|
|
// } issue27340Struct;
|
|
//
|
|
// static issue27340Struct* issue27340Ptr(issue27340Struct* p) { return p; }
|
|
//
|
|
// static void issue27340CFunc(issue27340Struct *p) {}
|
|
// #endif /* _GNU_MAJOR_ < 5 */
|
|
import "C"
|
|
|
|
func Issue27340GoFunc() {
|
|
var s C.issue27340Struct
|
|
C.issue27340CFunc(C.issue27340Ptr(&s))
|
|
}
|