From 4fef9f8b5596d42a2997fd8b74185d53fb7d0e43 Mon Sep 17 00:00:00 2001 From: Mark Freeman Date: Wed, 19 Nov 2025 15:10:24 -0500 Subject: [PATCH] go/types, types2: fix object path for grouped declaration statements CL 715840 deferred popping from the object path during handling of grouped declaration statements, which leaves extra objects on the path since this executes in a loop. Surprisingly, no test exercised this. This change fixes this small bug and adds a supporting test. Fixes #76366 Change-Id: I7fc038b39d3871eea3e60855c46614b463bcfa4f Reviewed-on: https://go-review.googlesource.com/c/go/+/722060 Reviewed-by: Robert Griesemer Auto-Submit: Mark Freeman LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/types2/decl.go | 2 +- src/go/types/decl.go | 2 +- src/internal/types/testdata/fixedbugs/issue76366.go | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/internal/types/testdata/fixedbugs/issue76366.go diff --git a/src/cmd/compile/internal/types2/decl.go b/src/cmd/compile/internal/types2/decl.go index 2df34f3b946..60371651ab0 100644 --- a/src/cmd/compile/internal/types2/decl.go +++ b/src/cmd/compile/internal/types2/decl.go @@ -876,8 +876,8 @@ func (check *Checker) declStmt(list []syntax.Decl) { scopePos := s.Name.Pos() check.declare(check.scope, s.Name, obj, scopePos) check.push(obj) // mark as grey - defer check.pop() check.typeDecl(obj, s, nil) + check.pop() default: check.errorf(s, InvalidSyntaxTree, "unknown syntax.Decl node %T", s) diff --git a/src/go/types/decl.go b/src/go/types/decl.go index 05cc63e01c8..4b374fb66df 100644 --- a/src/go/types/decl.go +++ b/src/go/types/decl.go @@ -935,8 +935,8 @@ func (check *Checker) declStmt(d ast.Decl) { scopePos := d.spec.Name.Pos() check.declare(check.scope, d.spec.Name, obj, scopePos) check.push(obj) // mark as grey - defer check.pop() check.typeDecl(obj, d.spec, nil) + check.pop() default: check.errorf(d.node(), InvalidSyntaxTree, "unknown ast.Decl node %T", d.node()) } diff --git a/src/internal/types/testdata/fixedbugs/issue76366.go b/src/internal/types/testdata/fixedbugs/issue76366.go new file mode 100644 index 00000000000..b78aa4463f8 --- /dev/null +++ b/src/internal/types/testdata/fixedbugs/issue76366.go @@ -0,0 +1,12 @@ +// Copyright 2025 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 p + +func _() { + type ( + A = int + B = []A + ) +}