diff --git a/gopls/internal/analysis/norangeoverfunc/norangeoverfunc.go b/gopls/internal/analysis/norangeoverfunc/norangeoverfunc.go
deleted file mode 100644
index aa58e89..0000000
--- a/gopls/internal/analysis/norangeoverfunc/norangeoverfunc.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2024 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 norangeoverfunc
-
-// TODO(adonovan): delete this when #67237 and dominikh/go-tools#1494 are fixed.
-
-import (
-	_ "embed"
-	"fmt"
-	"go/ast"
-	"go/types"
-
-	"golang.org/x/tools/go/analysis"
-	"golang.org/x/tools/go/analysis/passes/inspect"
-	"golang.org/x/tools/go/ast/inspector"
-)
-
-var Analyzer = &analysis.Analyzer{
-	Name: "norangeoverfunc",
-	Doc: `norangeoverfunc fails if a package uses go1.23 range-over-func
-
-Require it from any analyzer that cannot yet safely process this new feature.`,
-	Requires: []*analysis.Analyzer{inspect.Analyzer},
-	Run:      run,
-}
-
-func run(pass *analysis.Pass) (any, error) {
-	inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
-	filter := []ast.Node{(*ast.RangeStmt)(nil)}
-
-	// TODO(adonovan): opt: short circuit if not using go1.23.
-
-	var found *ast.RangeStmt
-	inspect.Preorder(filter, func(n ast.Node) {
-		if found == nil {
-			stmt := n.(*ast.RangeStmt)
-			if _, ok := pass.TypesInfo.TypeOf(stmt.X).Underlying().(*types.Signature); ok {
-				found = stmt
-			}
-		}
-	})
-	if found != nil {
-		return nil, fmt.Errorf("package %q uses go1.23 range-over-func; cannot build SSA or IR (#67237)",
-			pass.Pkg.Path())
-	}
-
-	return nil, nil
-}
diff --git a/gopls/internal/settings/analysis.go b/gopls/internal/settings/analysis.go
index 86fa476..6bb85f1 100644
--- a/gopls/internal/settings/analysis.go
+++ b/gopls/internal/settings/analysis.go
@@ -50,7 +50,6 @@
 	"golang.org/x/tools/gopls/internal/analysis/fillreturns"
 	"golang.org/x/tools/gopls/internal/analysis/infertypeargs"
 	"golang.org/x/tools/gopls/internal/analysis/nonewvars"
-	"golang.org/x/tools/gopls/internal/analysis/norangeoverfunc"
 	"golang.org/x/tools/gopls/internal/analysis/noresultvalues"
 	"golang.org/x/tools/gopls/internal/analysis/simplifycompositelit"
 	"golang.org/x/tools/gopls/internal/analysis/simplifyrange"
@@ -60,7 +59,6 @@
 	"golang.org/x/tools/gopls/internal/analysis/unusedvariable"
 	"golang.org/x/tools/gopls/internal/analysis/useany"
 	"golang.org/x/tools/gopls/internal/protocol"
-	"honnef.co/go/tools/staticcheck"
 )
 
 // Analyzer augments a [analysis.Analyzer] with additional LSP configuration.
@@ -108,32 +106,7 @@
 var DefaultAnalyzers = make(map[string]*Analyzer) // initialized below
 
 func init() {
-	// Emergency workaround for #67237 to allow standard library
-	// to use range over func: disable SSA-based analyses of
-	// go1.23 packages that use range-over-func.
-	suppressOnRangeOverFunc := func(a *analysis.Analyzer) {
-		a.Requires = append(a.Requires, norangeoverfunc.Analyzer)
-	}
-	// buildir is non-exported so we have to scan the Analysis.Requires graph to find it.
-	var buildir *analysis.Analyzer
-	for _, a := range staticcheck.Analyzers {
-		for _, req := range a.Analyzer.Requires {
-			if req.Name == "buildir" {
-				buildir = req
-			}
-		}
-
-		// Temporarily disable SA4004 CheckIneffectiveLoop as
-		// it crashes when encountering go1.23 range-over-func
-		// (#67237, dominikh/go-tools#1494).
-		if a.Analyzer.Name == "SA4004" {
-			suppressOnRangeOverFunc(a.Analyzer)
-		}
-	}
-	if buildir != nil {
-		suppressOnRangeOverFunc(buildir)
-	}
-
+	// The traditional vet suite:
 	analyzers := []*Analyzer{
 		// The traditional vet suite:
 		{analyzer: appends.Analyzer, enabled: true},
diff --git a/gopls/internal/test/marker/testdata/diagnostics/range-over-func-67237.txt b/gopls/internal/test/marker/testdata/diagnostics/range-over-func-67237.txt
deleted file mode 100644
index e2aa142..0000000
--- a/gopls/internal/test/marker/testdata/diagnostics/range-over-func-67237.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-
-This test verifies that SSA-based analyzers don't run on packages that
-use range-over-func. This is an emergency fix of #67237 (for buildssa)
-until we land https://go.dev/cl/555075.
-
-Similarly, it is an emergency fix of dominikh/go-tools#1494 (for
-buildir) until that package is similarly fixed for go1.23.
-
-Explanation:
-- Package p depends on q and r, and analyzers buildssa and buildir
-  depend on norangeoverfunc.
-- Analysis pass norangeoverfunc@q fails, thus norangeoverfunc@p is not
-  executed; but norangeoverfunc@r is ok
-- nilness requires buildssa, which is not facty, so it can run on p and r.
-- SA4010 (CheckIneffectiveAppend) requires buildir, which is facty,
-  so SA4010 can run only on r.
-
-We don't import any std packages because even "fmt" depends on
-range-over-func now (which means that in practice, everything does).
-
--- flags --
--min_go=go1.23
-
--- settings.json --
-{
-	"staticcheck": true,
-	"analyses": {"SA4010": true}
-}
-
--- go.mod --
-module example.com
-
-go 1.23
-
--- p/p.go --
-package p // a dependency uses range-over-func, so nilness runs but SA4010 cannot (buildir is facty)
-
-import (
-	_ "example.com/q"
-	_ "example.com/r"
-)
-
-func f(ptr *int) {
-	if ptr == nil {
-		println(*ptr) //@diag(re"[*]ptr", re"nil dereference in load")
-	}
-
-	var s []int
-	s = append(s, 1) // no SA4010 finding
-}
-
--- q/q.go --
-package q // uses range-over-func, so no diagnostics from SA4010
-
-type iterSeq[T any] func(yield func(T) bool)
-
-func f(seq iterSeq[int]) {
-	for x := range seq {
-		println(x)
-	}
-
-	var s []int
-	s = append(s, 1) // no SA4010 finding
-}
-
-func _(ptr *int) {
-	if ptr == nil {
-		println(*ptr) //@diag(re"[*]ptr", re"nil dereference in load")
-	}
-}
-
--- r/r.go --
-package r // does not use range-over-func, so nilness and SA4010 report diagnosticcs
-
-func f(ptr *int) {
-	if ptr == nil {
-		println(*ptr) //@diag(re"[*]ptr", re"nil dereference in load")
-	}
-
-	var s []int
-	s = append(s, 1) //@ diag(re`s`, re`s is never used`), diag(re`append`, re`append is never used`)
-}
