[go] cmd/cgo: rewrite C.type composite literals to use keywords

16 views
Skip to first unread message

David Chase (Gerrit)

unread,
Feb 6, 2025, 5:03:36 PMFeb 6
to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

David Chase has uploaded the change for review

Commit message

cmd/cgo: rewrite C.type composite literals to use keywords

This deals with the problem of cgo-inserted padding/signal fields
invalidating such literals.
Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6

Change diff

diff --git a/src/cmd/cgo/ast.go b/src/cmd/cgo/ast.go
index 861479d..dac7151f 100644
--- a/src/cmd/cgo/ast.go
+++ b/src/cmd/cgo/ast.go
@@ -217,6 +217,8 @@
}
case *ast.CallExpr:
f.saveCall(x, context)
+ case *ast.CompositeLit:
+ f.saveLiteral(x, context)
}
}

@@ -277,6 +279,38 @@
f.Calls = append(f.Calls, c)
}

+// Save composite literals for later processing.
+func (f *File) saveLiteral(lit *ast.CompositeLit, context astContext) {
+ sel, ok := lit.Type.(*ast.SelectorExpr)
+ if !ok {
+ return
+ }
+ if l, ok := sel.X.(*ast.Ident); !ok || l.Name != "C" || len(lit.Elts) == 0 {
+ return
+ }
+ // if it's already in field:value form, no need to edit
+ for _, e := range lit.Elts {
+ if _, ok := e.(*ast.KeyValueExpr); ok {
+ return
+ }
+ }
+ c := &Lit{Lit: lit}
+ f.Lits = append(f.Lits, c)
+ f.LitMap[lit] = c
+}
+
+// doneLiteral marks composite literals in an AST (fragment) as done.
+// This is used when a call has been rewritten, which will also cause
+// the literal to be processed (and it has to be processed as part of the
+// call, otherwise it will cause an "overlapping rewrite" error).
+func (f *File) doneLiteral(x interface{}, context astContext) {
+ if lit, ok := x.(*ast.CompositeLit); ok {
+ if c := f.LitMap[lit]; c != nil {
+ c.Done = true
+ }
+ }
+}
+
// If a function should be exported add it to ExpFunc.
func (f *File) saveExport(x interface{}, context astContext) {
n, ok := x.(*ast.FuncDecl)
diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go
index 02c22ab..8d8e19d 100644
--- a/src/cmd/cgo/gcc.go
+++ b/src/cmd/cgo/gcc.go
@@ -224,10 +224,12 @@
}
}
p.prepareNames(f)
+ p.prewriteLits(f)
if p.rewriteCalls(f) {
// Add `import _cgo_unsafe "unsafe"` after the package statement.
f.Edit.Insert(f.offset(f.AST.Name.End()), "; import _cgo_unsafe \"unsafe\"")
}
+ p.rewriteLits(f)
p.rewriteRef(f)
}

@@ -791,6 +793,71 @@
})
}

+// prewriteLits modifies the AST of the composite literal in case it is
+// emitted as part of a gofmt in call rewriting.
+func (p *Package) prewriteLits(f *File) {
+ for _, lit := range f.Lits {
+ p.prewriteLit(lit)
+ }
+}
+
+func typeFor(cType string) *Type {
+ ty := typedef["_Ctype_struct_"+cType]
+ if ty != nil {
+ return ty
+ }
+ ty = typedef["_Ctype_"+cType]
+ return ty
+}
+
+func (p *Package) prewriteLit(lit *Lit) {
+ sel := lit.Lit.Type.(*ast.SelectorExpr)
+ ty := typeFor(sel.Sel.Name)
+ fields := ty.Go.(*ast.StructType).Fields.List
+ j := 0
+ for _, fs := range fields {
+ for _, fieldName := range fs.Names {
+ if fieldName.Name == "_" {
+ continue
+ }
+ init := lit.Lit.Elts[j]
+ // prepend fieldName.Name+":"
+ lit.Lit.Elts[j] = &ast.KeyValueExpr{Key: ast.NewIdent(fieldName.Name), Colon: init.Pos(), Value: init}
+ j++
+ }
+ }
+}
+
+func (p *Package) rewriteLits(f *File) {
+ for _, lit := range f.Lits {
+ if lit.Done {
+ continue
+ }
+ p.rewriteLit(f, lit)
+ lit.Done = true
+ }
+}
+
+func (p *Package) rewriteLit(f *File, lit *Lit) {
+ sel := lit.Lit.Type.(*ast.SelectorExpr)
+ ty := typeFor(sel.Sel.Name)
+ fields := ty.Go.(*ast.StructType).Fields.List
+ j := 0
+ for _, fs := range fields {
+ for _, fieldName := range fs.Names {
+ if fieldName.Name == "_" {
+ continue
+ }
+
+ init := lit.Lit.Elts[j].(*ast.KeyValueExpr).Value // it got rewritten in place, in prewriteLit
+ j++
+ pos := f.offset(init.Pos())
+ // just splice in the tag.
+ f.Edit.Replace(pos, pos, fieldName.Name+":")
+ }
+ }
+}
+
// rewriteCalls rewrites all calls that pass pointers to check that
// they follow the rules for passing pointers between Go and C.
// This reports whether the package needs to import unsafe as _cgo_unsafe.
@@ -809,6 +876,7 @@
if nu {
needsUnsafe = true
}
+ f.walk(call.Call, ctxExpr, (*File).doneLiteral)
}
}
return needsUnsafe
diff --git a/src/cmd/cgo/internal/testerrors/ptr_test.go b/src/cmd/cgo/internal/testerrors/ptr_test.go
index 863dead..ce434ce 100644
--- a/src/cmd/cgo/internal/testerrors/ptr_test.go
+++ b/src/cmd/cgo/internal/testerrors/ptr_test.go
@@ -45,14 +45,14 @@
// Passing a pointer to a struct that contains a Go pointer.
name: "ptr1",
c: `typedef struct s1 { int *p; } s1; void f1(s1 *ps) {}`,
- body: `C.f1(&C.s1{p:new(C.int)})`,
+ body: `C.f1(&C.s1{new(C.int)})`,
fail: true,
},
{
// Passing a pointer to a struct that contains a Go pointer.
name: "ptr2",
c: `typedef struct s2 { int *p; } s2; void f2(s2 *ps) {}`,
- body: `p := &C.s2{p:new(C.int)}; C.f2(p)`,
+ body: `p := &C.s2{new(C.int)}; C.f2(p)`,
fail: true,
},
{
@@ -60,7 +60,7 @@
// that (irrelevantly) contains a Go pointer.
name: "ok1",
c: `struct s3 { int i; int *p; }; void f3(int *p) {}`,
- body: `p := &C.struct_s3{i: 0, p: new(C.int)}; C.f3(&p.i)`,
+ body: `p := &C.struct_s3{0, new(C.int)}; C.f3(&p.i)`,
fail: false,
},
{
@@ -231,7 +231,7 @@
struct s19b { struct s19a f; };
struct s19b *f19() { return malloc(sizeof(struct s19b)); }
void f19b(struct s19b *p) {}`,
- body: `p := C.f19(); p.f = C.struct_s19a{a:[32769]*C.char{new(C.char)}}; C.f19b(p)`,
+ body: `p := C.f19(); p.f = C.struct_s19a{[32769]*C.char{new(C.char)}}; C.f19b(p)`,
fail: true,
expensive: true,
},
@@ -245,7 +245,7 @@
void f20b(struct s20b *p) {}
void f20c(void *p) {}`,
imports: []string{"unsafe"},
- body: `p := C.f20(); n := &C.struct_s20a{a:[32769]*C.char{new(C.char)}}; p.f = *n; C.f20b(p); n.a[0] = nil; C.f20c(unsafe.Pointer(n))`,
+ body: `p := C.f20(); n := &C.struct_s20a{[32769]*C.char{new(C.char)}}; p.f = *n; C.f20b(p); n.a[0] = nil; C.f20c(unsafe.Pointer(n))`,
fail: true,
expensive: true,
},
diff --git a/src/cmd/cgo/main.go b/src/cmd/cgo/main.go
index 939e282..3aad849 100644
--- a/src/cmd/cgo/main.go
+++ b/src/cmd/cgo/main.go
@@ -64,17 +64,19 @@

// A File collects information about a single Go input file.
type File struct {
- AST *ast.File // parsed AST
- Comments []*ast.CommentGroup // comments from file
- Package string // Package name
- Preamble string // C preamble (doc comment on import "C")
- Ref []*Ref // all references to C.xxx in AST
- Calls []*Call // all calls to C.xxx in AST
- ExpFunc []*ExpFunc // exported functions for this file
- Name map[string]*Name // map from Go name to Name
- NamePos map[*Name]token.Pos // map from Name to position of the first reference
- NoCallbacks map[string]bool // C function names that with #cgo nocallback directive
- NoEscapes map[string]bool // C function names that with #cgo noescape directive
+ AST *ast.File // parsed AST
+ Comments []*ast.CommentGroup // comments from file
+ Package string // Package name
+ Preamble string // C preamble (doc comment on import "C")
+ Ref []*Ref // all references to C.xxx in AST
+ Calls []*Call // all calls to C.xxx in AST
+ Lits []*Lit // all C.xxx{...} literals in AST
+ LitMap map[*ast.CompositeLit]*Lit // composite literals can be rewritten in TWO WAYS, use this to find and mark done.
+ ExpFunc []*ExpFunc // exported functions for this file
+ Name map[string]*Name // map from Go name to Name
+ NamePos map[*Name]token.Pos // map from Name to position of the first reference
+ NoCallbacks map[string]bool // C function names that with #cgo nocallback directive
+ NoEscapes map[string]bool // C function names that with #cgo noescape directive
Edit *edit.Buffer
}

@@ -98,6 +100,12 @@
Done bool
}

+// A Lit refers to a composite literal of a C.xxx type in the AST.
+type Lit struct {
+ Lit *ast.CompositeLit
+ Done bool
+}
+
// A Ref refers to an expression of the form C.xxx in the AST.
type Ref struct {
Name *Name
@@ -430,6 +438,7 @@

f := new(File)
f.Edit = edit.NewBuffer(b)
+ f.LitMap = make(map[*ast.CompositeLit]*Lit)
f.ParseGo(input, b)
f.ProcessCgoDirectives()
gccIsClang := f.loadDefines(p.GccOptions)

Change information

Files:
  • M src/cmd/cgo/ast.go
  • M src/cmd/cgo/gcc.go
  • M src/cmd/cgo/internal/testerrors/ptr_test.go
  • M src/cmd/cgo/main.go
Change size: M
Delta: 4 files changed, 127 insertions(+), 16 deletions(-)
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newchange
Gerrit-Project: go
Gerrit-Branch: master
Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
Gerrit-Change-Number: 647399
Gerrit-PatchSet: 1
Gerrit-Owner: David Chase <drc...@google.com>
unsatisfied_requirement
satisfied_requirement
open
diffy

Ian Lance Taylor (Gerrit)

unread,
Feb 6, 2025, 6:07:59 PMFeb 6
to David Chase, goph...@pubsubhelper.golang.org, Ian Lance Taylor, golang-co...@googlegroups.com
Attention needed from David Chase

Ian Lance Taylor added 2 comments

File src/cmd/cgo/gcc.go
Line 816, Patchset 1 (Latest): fields := ty.Go.(*ast.StructType).Fields.List
Ian Lance Taylor . unresolved

How do we know that this is a struct type? Seems like it could be any composite literal type. Maybe struct is the only possible use of a C type in a composite literal.

Line 820, Patchset 1 (Latest): if fieldName.Name == "_" {
Ian Lance Taylor . unresolved

Seems like we should only skip structs.HostLayout, not all underscore fields. Or just skip the first field.

Open in Gerrit

Related details

Attention is currently required from:
  • David Chase
Submit Requirements:
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    • requirement is not satisfiedTryBots-Pass
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: go
    Gerrit-Branch: master
    Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
    Gerrit-Change-Number: 647399
    Gerrit-PatchSet: 1
    Gerrit-Owner: David Chase <drc...@google.com>
    Gerrit-CC: Ian Lance Taylor <ia...@golang.org>
    Gerrit-Attention: David Chase <drc...@google.com>
    Gerrit-Comment-Date: Thu, 06 Feb 2025 23:07:54 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    unsatisfied_requirement
    open
    diffy

    David Chase (Gerrit)

    unread,
    Feb 24, 2025, 5:27:06 PMFeb 24
    to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com
    Attention needed from David Chase

    David Chase uploaded new patchset

    David Chase uploaded patch set #2 to this change.
    Open in Gerrit

    Related details

    Attention is currently required from:
    • David Chase
    Submit Requirements:
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    • requirement is not satisfiedTryBots-Pass
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: newpatchset
    Gerrit-Project: go
    Gerrit-Branch: master
    Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
    Gerrit-Change-Number: 647399
    Gerrit-PatchSet: 2
    unsatisfied_requirement
    open
    diffy

    David Chase (Gerrit)

    unread,
    Feb 24, 2025, 5:28:13 PMFeb 24
    to goph...@pubsubhelper.golang.org, Ian Lance Taylor, golang-co...@googlegroups.com
    Attention needed from Ian Lance Taylor

    David Chase voted and added 2 comments

    Votes added by David Chase

    Commit-Queue+1

    2 comments

    File src/cmd/cgo/gcc.go
    Line 816, Patchset 1: fields := ty.Go.(*ast.StructType).Fields.List
    Ian Lance Taylor . resolved

    How do we know that this is a struct type? Seems like it could be any composite literal type. Maybe struct is the only possible use of a C type in a composite literal.

    David Chase

    Good question, not sure. Added a checked cast to be sure.

    Line 820, Patchset 1: if fieldName.Name == "_" {
    Ian Lance Taylor . resolved

    Seems like we should only skip structs.HostLayout, not all underscore fields. Or just skip the first field.

    David Chase

    Because positional is being converted to keyword, anything spelled `_` has to be skipped because `_` is not an allowed field name in keyed literals.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Ian Lance Taylor
    Submit Requirements:
      • requirement is not satisfiedCode-Review
      • requirement satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      • requirement is not satisfiedTryBots-Pass
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: go
      Gerrit-Branch: master
      Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
      Gerrit-Change-Number: 647399
      Gerrit-PatchSet: 2
      Gerrit-Owner: David Chase <drc...@google.com>
      Gerrit-Reviewer: David Chase <drc...@google.com>
      Gerrit-CC: Ian Lance Taylor <ia...@golang.org>
      Gerrit-Attention: Ian Lance Taylor <ia...@golang.org>
      Gerrit-Comment-Date: Mon, 24 Feb 2025 22:28:08 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      Comment-In-Reply-To: Ian Lance Taylor <ia...@golang.org>
      unsatisfied_requirement
      satisfied_requirement
      open
      diffy

      David Chase (Gerrit)

      unread,
      Mar 24, 2025, 1:11:13 AMMar 24
      to goph...@pubsubhelper.golang.org, Go LUCI, Ian Lance Taylor, golang-co...@googlegroups.com
      Attention needed from Ian Lance Taylor

      David Chase voted Commit-Queue+1

      Commit-Queue+1
      Open in Gerrit

      Related details

      Attention is currently required from:
      • Ian Lance Taylor
      Submit Requirements:
      • requirement is not satisfiedCode-Review
      • requirement satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      • requirement is not satisfiedTryBots-Pass
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: go
      Gerrit-Branch: master
      Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
      Gerrit-Change-Number: 647399
      Gerrit-PatchSet: 3
      Gerrit-Owner: David Chase <drc...@google.com>
      Gerrit-Reviewer: David Chase <drc...@google.com>
      Gerrit-CC: Ian Lance Taylor <ia...@golang.org>
      Gerrit-Attention: Ian Lance Taylor <ia...@golang.org>
      Gerrit-Comment-Date: Mon, 24 Mar 2025 05:11:06 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: Yes
      unsatisfied_requirement
      satisfied_requirement
      open
      diffy

      Ian Lance Taylor (Gerrit)

      unread,
      Oct 30, 2025, 7:44:53 PMOct 30
      to David Chase, goph...@pubsubhelper.golang.org, Ian Lance Taylor, Go LUCI, golang-co...@googlegroups.com
      Attention needed from David Chase

      Ian Lance Taylor voted and added 2 comments

      Votes added by Ian Lance Taylor

      Code-Review+2

      2 comments

      File src/cmd/cgo/ast.go
      Line 306, Patchset 6 (Latest):func (f *File) doneLiteral(x any, context astContext) {
      Ian Lance Taylor . unresolved

      Bikeshed: call this didLiteral?

      File src/cmd/cgo/gcc.go
      Line 861, Patchset 6 (Latest): init := lit.Lit.Elts[j]
      Ian Lance Taylor . unresolved

      This will crash if there are more fields in the struct than elements in the literal. Of course that won't happen with correct code, but we shouldn't crash on incorrect code. I suggest we just skip the literal if the number of fields not named "_" doesn't match the number of elements in the literal.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • David Chase
      Submit Requirements:
      • requirement satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      • requirement satisfiedTryBots-Pass
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: go
      Gerrit-Branch: master
      Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
      Gerrit-Change-Number: 647399
      Gerrit-PatchSet: 6
      Gerrit-Owner: David Chase <drc...@google.com>
      Gerrit-Reviewer: David Chase <drc...@google.com>
      Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
      Gerrit-Attention: David Chase <drc...@google.com>
      Gerrit-Comment-Date: Thu, 30 Oct 2025 23:44:46 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      David Chase (Gerrit)

      unread,
      Nov 12, 2025, 6:16:59 PMNov 12
      to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com
      Attention needed from David Chase

      David Chase uploaded new patchset

      David Chase uploaded patch set #7 to this change.
      Following approvals got outdated and were removed:
      • TryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI
      Open in Gerrit

      Related details

      Attention is currently required from:
      • David Chase
      Submit Requirements:
        • requirement satisfiedCode-Review
        • requirement is not satisfiedNo-Unresolved-Comments
        • requirement is not satisfiedReview-Enforcement
        • requirement is not satisfiedTryBots-Pass
        Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
        Gerrit-MessageType: newpatchset
        Gerrit-Project: go
        Gerrit-Branch: master
        Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
        Gerrit-Change-Number: 647399
        Gerrit-PatchSet: 7
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        David Chase (Gerrit)

        unread,
        Nov 12, 2025, 6:21:39 PMNov 12
        to goph...@pubsubhelper.golang.org, Ian Lance Taylor, Go LUCI, golang-co...@googlegroups.com

        David Chase added 2 comments

        File src/cmd/cgo/ast.go
        Line 306, Patchset 6:func (f *File) doneLiteral(x any, context astContext) {
        Ian Lance Taylor . resolved

        Bikeshed: call this didLiteral?

        David Chase

        markLiteralDone

        File src/cmd/cgo/gcc.go
        Line 861, Patchset 6: init := lit.Lit.Elts[j]
        Ian Lance Taylor . resolved

        This will crash if there are more fields in the struct than elements in the literal. Of course that won't happen with correct code, but we shouldn't crash on incorrect code. I suggest we just skip the literal if the number of fields not named "_" doesn't match the number of elements in the literal.

        David Chase

        Done

        Open in Gerrit

        Related details

        Attention set is empty
        Submit Requirements:
        • requirement satisfiedCode-Review
        • requirement satisfiedNo-Unresolved-Comments
        • requirement is not satisfiedReview-Enforcement
        • requirement is not satisfiedTryBots-Pass
        Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
        Gerrit-MessageType: comment
        Gerrit-Project: go
        Gerrit-Branch: master
        Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
        Gerrit-Change-Number: 647399
        Gerrit-PatchSet: 7
        Gerrit-Owner: David Chase <drc...@google.com>
        Gerrit-Reviewer: David Chase <drc...@google.com>
        Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
        Gerrit-Comment-Date: Wed, 12 Nov 2025 23:21:35 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Junyang Shao (Gerrit)

        unread,
        Nov 14, 2025, 1:59:38 PMNov 14
        to David Chase, goph...@pubsubhelper.golang.org, Go LUCI, Ian Lance Taylor, golang-co...@googlegroups.com
        Attention needed from David Chase

        Junyang Shao voted Code-Review+1

        Code-Review+1
        Open in Gerrit

        Related details

        Attention is currently required from:
        • David Chase
        Submit Requirements:
          • requirement satisfiedCode-Review
          • requirement satisfiedNo-Unresolved-Comments
          • requirement satisfiedReview-Enforcement
          • requirement satisfiedTryBots-Pass
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: go
          Gerrit-Branch: master
          Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
          Gerrit-Change-Number: 647399
          Gerrit-PatchSet: 7
          Gerrit-Owner: David Chase <drc...@google.com>
          Gerrit-Reviewer: David Chase <drc...@google.com>
          Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
          Gerrit-Reviewer: Junyang Shao <shaoj...@google.com>
          Gerrit-Attention: David Chase <drc...@google.com>
          Gerrit-Comment-Date: Fri, 14 Nov 2025 18:59:31 +0000
          Gerrit-HasComments: No
          Gerrit-Has-Labels: Yes
          satisfied_requirement
          open
          diffy

          David Chase (Gerrit)

          unread,
          Nov 24, 2025, 12:46:30 PM (5 days ago) Nov 24
          to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com
          Attention needed from David Chase

          David Chase uploaded new patchset

          David Chase uploaded patch set #8 to this change.
          Following approvals got outdated and were removed:
          • TryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI

          Related details

          Attention is currently required from:
          • David Chase
          Submit Requirements:
            • requirement satisfiedCode-Review
            • requirement satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            • requirement is not satisfiedTryBots-Pass
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: newpatchset
            Gerrit-Project: go
            Gerrit-Branch: master
            Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
            Gerrit-Change-Number: 647399
            Gerrit-PatchSet: 8
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            David Chase (Gerrit)

            unread,
            Nov 24, 2025, 5:34:14 PM (5 days ago) Nov 24
            to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com
            Attention needed from David Chase

            David Chase uploaded new patchset

            David Chase uploaded patch set #9 to this change.
            Following approvals got outdated and were removed:
            • TryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI
            Open in Gerrit

            Related details

            Attention is currently required from:
            • David Chase
            Submit Requirements:
            • requirement satisfiedCode-Review
            • requirement satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            • requirement is not satisfiedTryBots-Pass
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: newpatchset
            Gerrit-Project: go
            Gerrit-Branch: master
            Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
            Gerrit-Change-Number: 647399
            Gerrit-PatchSet: 9
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            David Chase (Gerrit)

            unread,
            Nov 25, 2025, 11:44:20 AM (4 days ago) Nov 25
            to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com
            Attention needed from David Chase

            David Chase uploaded new patchset

            David Chase uploaded patch set #10 to this change.
            Following approvals got outdated and were removed:
            • TryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI
            Open in Gerrit

            Related details

            Attention is currently required from:
            • David Chase
            Submit Requirements:
            • requirement satisfiedCode-Review
            • requirement satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            • requirement is not satisfiedTryBots-Pass
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: newpatchset
            Gerrit-Project: go
            Gerrit-Branch: master
            Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
            Gerrit-Change-Number: 647399
            Gerrit-PatchSet: 10
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            David Chase (Gerrit)

            unread,
            Nov 26, 2025, 3:28:49 PM (3 days ago) Nov 26
            to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com
            Attention needed from David Chase

            David Chase uploaded new patchset

            David Chase uploaded patch set #11 to this change.
            Following approvals got outdated and were removed:
            • TryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI
            Open in Gerrit

            Related details

            Attention is currently required from:
            • David Chase
            Submit Requirements:
            • requirement satisfiedCode-Review
            • requirement satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            • requirement is not satisfiedTryBots-Pass
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: newpatchset
            Gerrit-Project: go
            Gerrit-Branch: master
            Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
            Gerrit-Change-Number: 647399
            Gerrit-PatchSet: 11
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            David Chase (Gerrit)

            unread,
            Nov 26, 2025, 3:29:28 PM (3 days ago) Nov 26
            to goph...@pubsubhelper.golang.org, Go LUCI, Junyang Shao, Ian Lance Taylor, golang-co...@googlegroups.com

            David Chase voted Commit-Queue+1

            Commit-Queue+1
            Open in Gerrit

            Related details

            Attention set is empty
            Submit Requirements:
            • requirement satisfiedCode-Review
            • requirement satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            • requirement is not satisfiedTryBots-Pass
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: comment
            Gerrit-Project: go
            Gerrit-Branch: master
            Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
            Gerrit-Change-Number: 647399
            Gerrit-PatchSet: 11
            Gerrit-Owner: David Chase <drc...@google.com>
            Gerrit-Reviewer: David Chase <drc...@google.com>
            Gerrit-Reviewer: Ian Lance Taylor <ia...@golang.org>
            Gerrit-Reviewer: Junyang Shao <shaoj...@google.com>
            Gerrit-Comment-Date: Wed, 26 Nov 2025 20:29:24 +0000
            Gerrit-HasComments: No
            Gerrit-Has-Labels: Yes
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            David Chase (Gerrit)

            unread,
            Nov 26, 2025, 4:10:56 PM (3 days ago) Nov 26
            to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

            David Chase uploaded new patchset

            David Chase uploaded patch set #12 to this change.
            Following approvals got outdated and were removed:
            • TryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI
            Open in Gerrit

            Related details

            Attention set is empty
            Submit Requirements:
            • requirement satisfiedCode-Review
            • requirement satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            • requirement is not satisfiedTryBots-Pass
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: newpatchset
            Gerrit-Project: go
            Gerrit-Branch: master
            Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
            Gerrit-Change-Number: 647399
            Gerrit-PatchSet: 12
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            David Chase (Gerrit)

            unread,
            Nov 26, 2025, 11:49:30 PM (3 days ago) Nov 26
            to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

            David Chase uploaded new patchset

            David Chase uploaded patch set #13 to this change.
            Following approvals got outdated and were removed:
            • TryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI
            Open in Gerrit

            Related details

            Attention set is empty
            Submit Requirements:
            • requirement satisfiedCode-Review
            • requirement satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            • requirement is not satisfiedTryBots-Pass
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: newpatchset
            Gerrit-Project: go
            Gerrit-Branch: master
            Gerrit-Change-Id: Ica07b974a6fc39d32f1140f3211861c0ba69a8e6
            Gerrit-Change-Number: 647399
            Gerrit-PatchSet: 13
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy
            Reply all
            Reply to author
            Forward
            0 new messages