Skip to content

Commit f4515dd

Browse files
rscgopherbot
authored andcommitted
go/packages: fix load with NeedTypes but not NeedImports
Fixes golang/go#45584. Change-Id: I65238cc3bdc640bb044c615a5699e8d3cfa39db0 Reviewed-on: https://go-review.googlesource.com/c/tools/+/310512 Trust: Russ Cox <[email protected]> Run-TryBot: Russ Cox <[email protected]> Reviewed-by: Austin Clements <[email protected]> Auto-Submit: Russ Cox <[email protected]> gopls-CI: kokoro <[email protected]> TryBot-Result: Gopher Robot <[email protected]>
1 parent 11930bd commit f4515dd

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

go/packages/packages.go

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,7 +1237,7 @@ func (ld *loader) loadFromExportData(lpkg *loaderPackage) (*types.Package, error
12371237
return nil, fmt.Errorf("reading %s: %v", lpkg.ExportFile, err)
12381238
}
12391239
if viewLen != len(view) {
1240-
log.Fatalf("Unexpected package creation during export data loading")
1240+
log.Panicf("golang.org/x/tools/go/packages: unexpected new packages during load of %s", lpkg.PkgPath)
12411241
}
12421242

12431243
lpkg.Types = tpkg
@@ -1248,17 +1248,8 @@ func (ld *loader) loadFromExportData(lpkg *loaderPackage) (*types.Package, error
12481248

12491249
// impliedLoadMode returns loadMode with its dependencies.
12501250
func impliedLoadMode(loadMode LoadMode) LoadMode {
1251-
if loadMode&NeedTypesInfo != 0 && loadMode&NeedImports == 0 {
1252-
// If NeedTypesInfo, go/packages needs to do typechecking itself so it can
1253-
// associate type info with the AST. To do so, we need the export data
1254-
// for dependencies, which means we need to ask for the direct dependencies.
1255-
// NeedImports is used to ask for the direct dependencies.
1256-
loadMode |= NeedImports
1257-
}
1258-
1259-
if loadMode&NeedDeps != 0 && loadMode&NeedImports == 0 {
1260-
// With NeedDeps we need to load at least direct dependencies.
1261-
// NeedImports is used to ask for the direct dependencies.
1251+
if loadMode&(NeedDeps|NeedTypes|NeedTypesInfo) != 0 {
1252+
// All these things require knowing the import graph.
12621253
loadMode |= NeedImports
12631254
}
12641255

go/packages/packages_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2843,3 +2843,11 @@ func copyAll(srcPath, dstPath string) error {
28432843
return nil
28442844
})
28452845
}
2846+
2847+
func TestExportFile(t *testing.T) {
2848+
// This used to trigger the log.Fatal in loadFromExportData.
2849+
// See go.dev/issue/45584.
2850+
cfg := new(packages.Config)
2851+
cfg.Mode = packages.NeedTypes
2852+
packages.Load(cfg, "fmt")
2853+
}

0 commit comments

Comments
 (0)