mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/cgo, cmd/dist, cmd/go: cgo with clang fixes
1. Workaround the smart clang diagnostics with -Qunused-arguments: clang: error: argument unused during compilation: '-XXX' 2. if "clang -print-libgcc-file-name" returns non-absolute path, don't provide that on linker command line. 3. Fix dwarf.PtrType.Size() in cmd/cgo as clang doesn't generate DW_AT_byte_size for pointer types. 4. Workaround warnings for -Wno-unneeded-internal-declaration with -Wno-unknown-warning-option. 5. Add -Wno-unused-function. 6. enable race detector test on darwin with clang (at least Apple clang version 1.7 (tags/Apple/clang-77) works). Requires CL 7354043. Update #4829 This should fix most parts of the problem, but one glitch still remains. DWARF generated by newer clang doesn't differentiate these two function types: void *malloc(size_t); void *malloc(unsigned long int); so you might need to do this to make make.bash pass: sed -i -e 's/C.malloc(C.size_t/C.malloc(C.ulong/' pkg/os/user/lookup_unix.go R=golang-dev, dave, iant, rsc CC=golang-dev https://golang.org/cl/7351044
This commit is contained in:
parent
1e957b6245
commit
eec961470f
4 changed files with 43 additions and 22 deletions
|
|
@ -783,7 +783,13 @@ func (p *Package) gccCmd() []string {
|
|||
if strings.Contains(p.gccName(), "clang") {
|
||||
c = append(c,
|
||||
"-ferror-limit=0",
|
||||
// Apple clang version 1.7 (tags/Apple/clang-77) (based on LLVM 2.9svn)
|
||||
// doesn't have -Wno-unneeded-internal-declaration, so we need yet another
|
||||
// flag to disable the warning. Yes, really good diagnostics, clang.
|
||||
"-Wno-unknown-warning-option",
|
||||
"-Wno-unneeded-internal-declaration",
|
||||
"-Wno-unused-function",
|
||||
"-Qunused-arguments",
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -1049,6 +1055,12 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type {
|
|||
return t
|
||||
}
|
||||
|
||||
// clang won't generate DW_AT_byte_size for pointer types,
|
||||
// so we have to fix it here.
|
||||
if dt, ok := base(dtype).(*dwarf.PtrType); ok && dt.ByteSize == -1 {
|
||||
dt.ByteSize = c.ptrSize
|
||||
}
|
||||
|
||||
t := new(Type)
|
||||
t.Size = dtype.Size()
|
||||
t.Align = -1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue