diff --git a/go/packages/overlay_test.go b/go/packages/overlay_test.go
index 22aade1..6d9be43 100644
--- a/go/packages/overlay_test.go
+++ b/go/packages/overlay_test.go
@@ -831,3 +831,35 @@
 		})
 	}
 }
+
+func TestInvalidXTestInGOPATH(t *testing.T) {
+	packagestest.TestAll(t, testInvalidXTestInGOPATH)
+}
+func testInvalidXTestInGOPATH(t *testing.T, exporter packagestest.Exporter) {
+	t.Skip("Not fixed yet. See golang.org/issue/40825.")
+
+	exported := packagestest.Export(t, exporter, []packagestest.Module{
+		{
+			Name: "golang.org/fake",
+			Files: map[string]interface{}{
+				"x/x.go":      `package x`,
+				"x/x_test.go": ``,
+			},
+		},
+	})
+	defer exported.Cleanup()
+
+	dir := filepath.Dir(filepath.Dir(exported.File("golang.org/fake", "x/x.go")))
+
+	exported.Config.Mode = everythingMode
+	exported.Config.Tests = true
+
+	initial, err := packages.Load(exported.Config, fmt.Sprintf("%s/...", dir))
+	if err != nil {
+		t.Fatal(err)
+	}
+	pkg := initial[0]
+	if len(pkg.CompiledGoFiles) != 2 {
+		t.Fatalf("expected at least 2 CompiledGoFiles for %s, got %v", pkg.PkgPath, len(pkg.CompiledGoFiles))
+	}
+}
diff --git a/internal/lsp/cache/load.go b/internal/lsp/cache/load.go
index 135e2e5..27bfbc8 100644
--- a/internal/lsp/cache/load.go
+++ b/internal/lsp/cache/load.go
@@ -121,6 +121,7 @@
 		}
 		event.Error(ctx, "go/packages.Load", err, tag.Snapshot.Of(s.ID()), tag.Directory.Of(cfg.Dir), tag.Query.Of(query), tag.PackageCount.Of(len(pkgs)))
 	} else {
+		err = fmt.Errorf("no packages returned")
 		event.Log(ctx, "go/packages.Load", tag.Snapshot.Of(s.ID()), tag.Directory.Of(cfg.Dir), tag.Query.Of(query), tag.PackageCount.Of(len(pkgs)))
 	}
 	if len(pkgs) == 0 {
diff --git a/internal/lsp/diagnostics.go b/internal/lsp/diagnostics.go
index 17fd1da..00bbc3b 100644
--- a/internal/lsp/diagnostics.go
+++ b/internal/lsp/diagnostics.go
@@ -101,14 +101,17 @@
 		if s.handleFatalErrors(ctx, snapshot, modErr, err) {
 			return nil, nil
 		}
-		msg := `The code in the workspace failed to compile (see the error message below).
-If you believe this is a mistake, please file an issue: https://github.com/golang/go/issues/new.`
-		event.Error(ctx, msg, err, tag.Snapshot.Of(snapshot.ID()), tag.Directory.Of(snapshot.View().Folder()))
-		if err := s.client.ShowMessage(ctx, &protocol.ShowMessageParams{
-			Type:    protocol.Error,
-			Message: fmt.Sprintf("%s\n%v", msg, err),
-		}); err != nil {
-			event.Error(ctx, "ShowMessage failed", err, tag.Directory.Of(snapshot.View().Folder().Filename()))
+		event.Error(ctx, "errors diagnosing workspace", err, tag.Snapshot.Of(snapshot.ID()), tag.Directory.Of(snapshot.View().Folder()))
+		// Present any `go list` errors directly to the user.
+		if errors.Is(err, source.PackagesLoadError) {
+			if err := s.client.ShowMessage(ctx, &protocol.ShowMessageParams{
+				Type: protocol.Error,
+				Message: fmt.Sprintf(`The code in the workspace failed to compile (see the error message below).
+If you believe this is a mistake, please file an issue: https://github.com/golang/go/issues/new.
+%v`, err),
+			}); err != nil {
+				event.Error(ctx, "ShowMessage failed", err, tag.Directory.Of(snapshot.View().Folder().Filename()))
+			}
 		}
 		return nil, nil
 	}
diff --git a/internal/lsp/regtest/diagnostics_test.go b/internal/lsp/regtest/diagnostics_test.go
index 428da7a..23ed172 100644
--- a/internal/lsp/regtest/diagnostics_test.go
+++ b/internal/lsp/regtest/diagnostics_test.go
@@ -837,7 +837,6 @@
 
 // Reproduces golang/go#40825.
 func TestEmptyGOPATHXTest_40825(t *testing.T) {
-	t.Skip("bug isn't fixed yet")
 	const files = `
 -- x.go --
 package x
diff --git a/internal/lsp/regtest/wrappers.go b/internal/lsp/regtest/wrappers.go
index b4271ec..b84175f 100644
--- a/internal/lsp/regtest/wrappers.go
+++ b/internal/lsp/regtest/wrappers.go
@@ -244,8 +244,8 @@
 	return lens
 }
 
-// References calls textDocument/references for the given path at the
-// position of the given regexp.
+// References calls textDocument/references for the given path at the given
+// position.
 func (e *Env) References(path string, pos fake.Pos) []protocol.Location {
 	e.T.Helper()
 	locations, err := e.Editor.References(e.Ctx, path, pos)
