From aefa70891cfd489fccb8a9567b5bdafb0f863ede Mon Sep 17 00:00:00 2001 From: Wim Date: Sat, 12 Mar 2022 23:02:04 +0100 Subject: Update vendor (whatsapp) --- vendor/modernc.org/ccgo/v3/lib/ccgo.go | 97 ++++++++++++++++++++++++++++++--- vendor/modernc.org/ccgo/v3/lib/dmesg.go | 3 +- vendor/modernc.org/ccgo/v3/lib/go.go | 10 +++- 3 files changed, 101 insertions(+), 9 deletions(-) (limited to 'vendor/modernc.org/ccgo/v3/lib') diff --git a/vendor/modernc.org/ccgo/v3/lib/ccgo.go b/vendor/modernc.org/ccgo/v3/lib/ccgo.go index a5ed804f..38882b7a 100644 --- a/vendor/modernc.org/ccgo/v3/lib/ccgo.go +++ b/vendor/modernc.org/ccgo/v3/lib/ccgo.go @@ -904,10 +904,10 @@ func (t *Task) Main() (err error) { } abi, err := cc.NewABI(t.goos, t.goarch) - abi.Types[cc.LongDouble] = abi.Types[cc.Double] if err != nil { return err } + abi.Types[cc.LongDouble] = abi.Types[cc.Double] var re *regexp.Regexp if t.ignoredIncludes != "" { @@ -1474,7 +1474,7 @@ func (t *Task) createCompileDB(command []string) (rerr error) { var parser func(s string) ([]string, error) out: switch t.goos { - case "darwin", "freebsd", "netbsd", "openbsd": + case "darwin", "freebsd", "netbsd": switch command[0] { case "make", "gmake": // ok @@ -1490,6 +1490,22 @@ out: command = append([]string{sh, "-c"}, join(" ", command[0], "SHELL='sh -x'", command[1:])) cmd = exec.Command(command[0], command[1:]...) parser = makeXParser + case "openbsd": + switch command[0] { + case "make", "gmake": + // ok + default: + return fmt.Errorf("usupported build command: %s", command[0]) + } + + sh, err := exec.LookPath("sh") + if err != nil { + return err + } + + command = append([]string{sh, "-c"}, join(" ", command[0], "SHELL='sh -x'", command[1:])) + cmd = exec.Command(command[0], command[1:]...) + parser = makeXParser2 case "windows": if command[0] != "make" { return fmt.Errorf("usupported build command: %s", command[0]) @@ -1580,7 +1596,7 @@ func isCreateArchive(s string) bool { b := []byte(s) sort.Slice(b, func(i, j int) bool { return b[i] < b[j] }) switch string(b) { - case "cq", "cr", "crs", "cru": + case "cq", "cr", "crs", "cru", "r": return true } return false @@ -1615,7 +1631,48 @@ func makeXParser(s string) (r []string, err error) { } s = s[1:] + if dmesgs { + dmesg("%v: source line `%s`, caller %v:", origin(1), s, origin(2)) + } + r, err = shellquote.Split(s) + if dmesgs { + dmesg("%v: shellquote.Split -> %v %[2]q, %v", origin(1), r, err) + } + if err != nil { + if strings.Contains(err.Error(), "Unterminated single-quoted string") { + return nil, nil // ignore + } + } + if len(r) != 0 && filepath.Base(r[0]) == "libtool" { + r[0] = "libtool" + } + return r, err +} + +func makeXParser2(s string) (r []string, err error) { + s = strings.TrimSpace(s) + switch { + case strings.HasPrefix(s, "libtool: link: ar "): + s = s[len("libtool: link:"):] + case strings.HasPrefix(s, "libtool: compile: "): + s = s[len("libtool: compile:"):] + for strings.HasPrefix(s, " ") { + s = s[1:] + } + default: + var n int + if n, s = hasPlusPrefix(s); n != 0 { + return nil, nil + } + } + + if dmesgs { + dmesg("%v: source line `%s`, caller %v:", origin(1), s, origin(2)) + } r, err = shellquote.Split(s) + if dmesgs { + dmesg("%v: shellquote.Split -> %v %[2]q, %v", origin(1), r, err) + } if err != nil { if strings.Contains(err.Error(), "Unterminated single-quoted string") { return nil, nil // ignore @@ -1809,26 +1866,29 @@ func (it *cdbItem) sources(cc, ar string) (r []string) { } type cdbMakeWriter struct { - b bytes.Buffer - cc string ar string arBase string + b bytes.Buffer + cc string dir string err error it cdbItem parser func(s string) ([]string, error) + prefix string sc *bufio.Scanner + t *Task w *cdbWriter } func (t *Task) newCdbMakeWriter(w *cdbWriter, dir string, parser func(s string) ([]string, error)) *cdbMakeWriter { const sz = 1 << 16 r := &cdbMakeWriter{ - cc: t.ccLookPath, ar: t.arLookPath, arBase: filepath.Base(t.arLookPath), + cc: t.ccLookPath, dir: dir, parser: parser, + t: t, w: w, } r.sc = bufio.NewScanner(&r.b) @@ -1849,7 +1909,15 @@ func (w *cdbMakeWriter) Write(b []byte) (int, error) { panic(todo("internal error")) } - s := strings.TrimSpace(w.sc.Text()) + s := w.sc.Text() + if strings.HasSuffix(s, "\\") { + w.prefix += s[:len(s)-1] + continue + } + + s = w.prefix + s + w.prefix = "" + s = strings.TrimSpace(s) if edx := strings.Index(s, "Entering directory"); edx >= 0 { s = s[edx+len("Entering directory"):] s = strings.TrimSpace(s) @@ -1882,7 +1950,13 @@ func (w *cdbMakeWriter) Write(b []byte) (int, error) { continue } + if dmesgs { + dmesg("%v: source line `%s`", origin(1), s) + } args, err := w.parser(s) + if dmesgs { + dmesg("%v: parser -> %v %[2]q, %v", origin(1), args, err) + } if err != nil { w.fail(err) continue @@ -1899,16 +1973,25 @@ func (w *cdbMakeWriter) Write(b []byte) (int, error) { err = nil switch args[0] { case w.cc: + if w.t.verboseCompiledb { + fmt.Printf("source line: %q\n", s) + } fmt.Printf("CCGO CC: %q\n", args) err = w.handleGCC(args) case w.ar: fallthrough case w.arBase: if isCreateArchive(args[1]) { + if w.t.verboseCompiledb { + fmt.Printf("source line: %q\n", s) + } fmt.Printf("CCGO AR: %q\n", args) err = w.handleAR(args) } case "libtool": + if w.t.verboseCompiledb { + fmt.Printf("source line: %q\n", s) + } fmt.Printf("CCGO LIBTOOL: %q\n", args) err = w.handleLibtool(args) } diff --git a/vendor/modernc.org/ccgo/v3/lib/dmesg.go b/vendor/modernc.org/ccgo/v3/lib/dmesg.go index c7da87ee..6ab93e56 100644 --- a/vendor/modernc.org/ccgo/v3/lib/dmesg.go +++ b/vendor/modernc.org/ccgo/v3/lib/dmesg.go @@ -32,7 +32,8 @@ func dmesg(s string, args ...interface{}) { if s == "" { s = strings.Repeat("%v ", len(args)) } - s = fmt.Sprintf(pid+s, args...) + s = fmt.Sprintf(s, args...) + s = pid + s switch { case len(s) != 0 && s[len(s)-1] == '\n': fmt.Fprint(logf, s) diff --git a/vendor/modernc.org/ccgo/v3/lib/go.go b/vendor/modernc.org/ccgo/v3/lib/go.go index 8e6bccc7..fc869395 100644 --- a/vendor/modernc.org/ccgo/v3/lib/go.go +++ b/vendor/modernc.org/ccgo/v3/lib/go.go @@ -3117,6 +3117,9 @@ func (p *project) declaratorDecay(n cc.Node, f *function, d *cc.Declarator, t cc return } + if !local.isPinned { + p.err(n, "%v: %v: missed pinning", n.Position(), d.Position(), d.Name()) + } p.w("(%s%s)/* &%s[0] */", f.bpName, nonZeroUintptr(local.off), local.name) return } @@ -8135,6 +8138,11 @@ func (p *project) castExpressionValue(f *function, n *cc.CastExpression, t cc.Ty case cc.CastExpressionUnary: // UnaryExpression p.unaryExpression(f, n.UnaryExpression, t, mode, flags) case cc.CastExpressionCast: // '(' TypeName ')' CastExpression + if f != nil && p.pass1 && n.TypeName.Type().IsIntegerType() && n.CastExpression.Operand.Type().Kind() == cc.Array { + if d := n.CastExpression.Declarator(); d != nil { + f.pin(n, d) + } + } switch k := p.opKind(f, n.CastExpression, n.CastExpression.Operand.Type()); k { case opNormal, opBitfield: p.castExpressionValueNormal(f, n, t, mode, flags) @@ -12561,7 +12569,7 @@ func (p *project) iterationStatement(f *function, n *cc.IterationStatement) { break } - v := "ok" + v := "__ccgo" if !p.pass1 { v = f.scope.take(cc.String(v)) } -- cgit v1.2.3