-
Notifications
You must be signed in to change notification settings - Fork 18k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
go/internal/gccgoimporter: fails to parse pointer loop with embedded field #34182
Comments
This sounds like an issue with the code itself. Have you tried raising an issue with mongodb ? Also, this sounds like easily reproducible. Can you provide us with a small self-contained reproducer which demonstrates the issue ? Thanks. |
Yes. I did. In package is workspace with trivial example. |
I am using gccgo compiler, because only that compiler is available in standard installation from Arch Linux (I am using go from Arch standard package). |
I was trying run test on my old 32-bit system (Athlon XP with gentoo) with using builtin gccgo (9.1.0) and I got this same error. |
Oh I see you are using gccgo, sorry I missed that. Is it a requirement that you use gccgo ? Because you can easily install the standard Go distribution in your machine. |
Off topic, but standard go is available in the community repo.
|
This is a bug in go/internal/gccgoimporter. A simple test case is package issue34182
type T1 struct {
f *T2
}
type T2 struct {
f map[int] T3
}
type T3 interface {
M(T4)
}
type T4 struct {
*T2
} |
Slightly simpler still: package issue34182
type T1 struct {
f *T2
}
type T2 struct {
f T3
}
type T3 struct {
*T2
} |
Change https://golang.org/cl/194440 mentions this issue: |
Change https://golang.org/cl/194562 mentions this issue: |
Backport of https://golang.org/cl/194440. Original description: If an embedded field refers to a type via a pointer, the parser needs to know the name of the embedded field. It is possible that the pointer type is not yet resolved. This CL fixes the parser to handle that case by setting the pointer element type to the unresolved named type while the pointer is being resolved. Updates golang/go#34182 Change-Id: Id95261b3bd073c3ab18b221c697036c5339572f0 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194562 Reviewed-by: Cherry Zhang <cherryyz@google.com>
Thanks for the report. This has been fixed on GCC trunk and GCC 9 branch. It is likely that you can work around the problem by running |
Backport of https://golang.org/cl/194440. Original description: If an embedded field refers to a type via a pointer, the parser needs to know the name of the embedded field. It is possible that the pointer type is not yet resolved. This CL fixes the parser to handle that case by setting the pointer element type to the unresolved named type while the pointer is being resolved. Updates golang/go#34182 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194562 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-9-branch@275607 138bc75d-0d04-0410-961f-82ee72b054a4
Backport of https://golang.org/cl/194440. Original description: If an embedded field refers to a type via a pointer, the parser needs to know the name of the embedded field. It is possible that the pointer type is not yet resolved. This CL fixes the parser to handle that case by setting the pointer element type to the unresolved named type while the pointer is being resolved. Updates golang/go#34182 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194562 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@275606 138bc75d-0d04-0410-961f-82ee72b054a4
Backport of https://golang.org/cl/194440. Original description: If an embedded field refers to a type via a pointer, the parser needs to know the name of the embedded field. It is possible that the pointer type is not yet resolved. This CL fixes the parser to handle that case by setting the pointer element type to the unresolved named type while the pointer is being resolved. Updates golang/go#34182 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194562 From-SVN: r275607
I am using go 1.12.2 on Arch Linux (gcc 9.1.0) updated from 2019.09.08.
I am using AMD Ryzen (first generation processor).
Any trial of testing any package with import "go.mongodb.org/mongo-driver" causes enough strange error:
`#go.mongodb.org/mongo-driver/bson
panic: import error :1:31 (byte offset = 30): anonymous field expected [recovered]
panic: import error :1:31 (byte offset = 30): anonymous field expected
goroutine 1 [running]:
types.r
/build/gcc/src/gcc/libgo/go/go/types/check.go:240
go..z2ftypes.Checker.handleBailout
/build/gcc/src/gcc/libgo/go/go/types/check.go:233
panic
/build/gcc/src/gcc/libgo/go/runtime/panic.go:555
go..z2finternal..z2fgccgoimporter.parser.error
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:86
go..z2finternal..z2fgccgoimporter.parser.parseField
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:251
go..z2finternal..z2fgccgoimporter.parser.parseStructType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:662
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:802
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypeAfterAngle
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:891
go..z2finternal..z2fgccgoimporter.parser.parseType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:879
go..z2finternal..z2fgccgoimporter.parser.parseNamedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:526
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:791
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypeAfterAngle
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:891
go..z2finternal..z2fgccgoimporter.parser.parseType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:879
go..z2finternal..z2fgccgoimporter.parser.parseParam
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:278
go..z2finternal..z2fgccgoimporter.parser.parseParamList
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:683
go..z2finternal..z2fgccgoimporter.parser.parseFunctionType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:721
go..z2finternal..z2fgccgoimporter.parser.parseFunc
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:737
go..z2finternal..z2fgccgoimporter.parser.parseInterfaceType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:758
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:805
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypeAfterAngle
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:891
go..z2finternal..z2fgccgoimporter.parser.parseType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:879
go..z2finternal..z2fgccgoimporter.parser.parseNamedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:526
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:791
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypeAfterAngle
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:891
go..z2finternal..z2fgccgoimporter.parser.parseType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:879
go..z2finternal..z2fgccgoimporter.parser.parseMapType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:617
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:796
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypeAfterAngle
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:891
go..z2finternal..z2fgccgoimporter.parser.parseType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:879
go..z2finternal..z2fgccgoimporter.parser.parseField
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:241
go..z2finternal..z2fgccgoimporter.parser.parseStructType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:662
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:802
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypeAfterAngle
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:891
go..z2finternal..z2fgccgoimporter.parser.parseType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:879
go..z2finternal..z2fgccgoimporter.parser.parseNamedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:526
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:791
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypeAfterAngle
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:891
go..z2finternal..z2fgccgoimporter.parser.parseType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:879
go..z2finternal..z2fgccgoimporter.parser.parsePointerType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:782
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:809
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypeAfterAngle
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:891
go..z2finternal..z2fgccgoimporter.parser.parseType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:879
go..z2finternal..z2fgccgoimporter.parser.parseField
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:241
go..z2finternal..z2fgccgoimporter.parser.parseStructType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:662
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:802
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypeAfterAngle
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:891
go..z2finternal..z2fgccgoimporter.parser.parseType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:879
go..z2finternal..z2fgccgoimporter.parser.parseNamedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:526
go..z2finternal..z2fgccgoimporter.parser.parseTypeSpec
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:791
go..z2finternal..z2fgccgoimporter.parser.parseSavedType
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1022
go..z2finternal..z2fgccgoimporter.parser.parseTypes
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:998
go..z2finternal..z2fgccgoimporter.parser.parseDirective
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1175
go..z2finternal..z2fgccgoimporter.parser.parsePackage
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/parser.go:1211
gccgoimporter.GetImporter..func1
/build/gcc/src/gcc/libgo/go/go/internal/gccgoimporter/importer.go:216
go..z2fimporter.gccgoimports.ImportFrom
/build/gcc/src/gcc/libgo/go/go/importer/importer.go:128
go..z2fimporter.gccgoimports.Import
/build/gcc/src/gcc/libgo/go/go/importer/importer.go:121
go..z2ftypes.Checker.importPackage
/build/gcc/src/gcc/libgo/go/go/types/resolver.go:161
go..z2ftypes.Checker.collectObjects
/build/gcc/src/gcc/libgo/go/go/types/resolver.go:256
go..z2ftypes.Checker.checkFiles
/build/gcc/src/gcc/libgo/go/go/types/check.go:252
go..z2ftypes.Checker.Files
/build/gcc/src/gcc/libgo/go/go/types/check.go:245
go..z2ftypes.Config.Check
/build/gcc/src/gcc/libgo/go/go/types/api.go:351
main.main
:0`
go env output:
Maybe this is bug in gcimporter or other internals? I don't know.
The text was updated successfully, but these errors were encountered: