From df5e61d4bc56e81e4d577311e6528d7b8bde028e Mon Sep 17 00:00:00 2001 From: Max Neverov Date: Sat, 21 Sep 2024 19:04:21 +0200 Subject: [PATCH] Fix error message for recursive types during initialization cycle. --- src/cmd/compile/internal/types2/initorder.go | 6 +++--- src/go/types/initorder.go | 6 +++--- test/initloop.go | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cmd/compile/internal/types2/initorder.go b/src/cmd/compile/internal/types2/initorder.go index 09a53c98ef..8be57f93eb 100644 --- a/src/cmd/compile/internal/types2/initorder.go +++ b/src/cmd/compile/internal/types2/initorder.go @@ -165,11 +165,11 @@ func (check *Checker) reportCycle(cycle []Object) { err.addf(obj, "initialization cycle for %s", obj.Name()) // subtle loop: print cycle[i] for i = 0, n-1, n-2, ... 1 for len(cycle) = n for i := len(cycle) - 1; i >= 0; i-- { - err.addf(obj, "%s refers to", obj.Name()) + currObj := obj + currName := obj.Name() obj = cycle[i] + err.addf(currObj, "%s refers to %s", currName, obj.Name()) } - // print cycle[0] again to close the cycle - err.addf(obj, "%s", obj.Name()) err.report() } diff --git a/src/go/types/initorder.go b/src/go/types/initorder.go index 077f2eccfe..411598f120 100644 --- a/src/go/types/initorder.go +++ b/src/go/types/initorder.go @@ -168,11 +168,11 @@ func (check *Checker) reportCycle(cycle []Object) { err.addf(obj, "initialization cycle for %s", obj.Name()) // subtle loop: print cycle[i] for i = 0, n-1, n-2, ... 1 for len(cycle) = n for i := len(cycle) - 1; i >= 0; i-- { - err.addf(obj, "%s refers to", obj.Name()) + currObj := obj + currName := obj.Name() obj = cycle[i] + err.addf(currObj, "%s refers to %s", currName, obj.Name()) } - // print cycle[0] again to close the cycle - err.addf(obj, "%s", obj.Name()) err.report() } diff --git a/test/initloop.go b/test/initloop.go index b1a8470b3a..c4530f36d6 100644 --- a/test/initloop.go +++ b/test/initloop.go @@ -11,7 +11,7 @@ package main var ( x int = a - a int = b // ERROR "a refers to\n.*b refers to\n.*c refers to\n.*a|initialization loop" + a int = b // ERROR "a refers to b\n.*b refers to c\n.*c refers to a|initialization loop" b int = c c int = a )