Skip to content

os: go 1.25.x regression on RemoveAll for oldest Windows 10 build 10240 #78131

@vadimsht

Description

@vadimsht

Go version

1.26.1, 1.25.8

Output of go env in your module/workspace:

AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='0'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE='on'
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN='/Users/vadimsh/infra/infra_internal/dep/infra.git/go/bin'
GOCACHE='/Users/vadimsh/infra/infra_internal/dep/infra.git/go/golang/gocache'
GOCACHEPROG=''
GODEBUG=''
GOENV='/Users/vadimsh/Library/Application Support/go/env'
GOEXE='.exe'
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-m64 -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/s5/038psd6x11x2n172nwdpvk94005swt/T/go-build105125036=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMOD='/Users/vadimsh/infra/infra_internal/dep/infra.git/go/src/go.chromium.org/luci/go.mod'
GOMODCACHE='/Users/vadimsh/infra/infra_internal/dep/infra.git/go/golang/modcache'
GONOPROXY='*.googlesource.com,*.git.corp.google.com,google.com'
GONOSUMDB='*.googlesource.com,*.git.corp.google.com,google.com'
GOOS='windows'
GOPATH='/Users/vadimsh/go'
GOPRIVATE='*.googlesource.com,*.git.corp.google.com,google.com'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Users/vadimsh/infra/infra_internal/dep/infra.git/go/golang/go'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/Users/vadimsh/Library/Application Support/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='local'
GOTOOLDIR='/Users/vadimsh/infra/infra_internal/dep/infra.git/go/golang/go/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.25.8'
GOWORK=''
PKG_CONFIG='pkg-config'

(note I'm cross-compiling to Win amd64, but it doesn't matter, native Windows build fail in the same way)

What did you do?

When build the below snippet with go1.26.1 and running it on Windows 10 build 10240 (aka Windows 10 v1507, aka Windows 10 first RTM release ever), it fails with

openfdat .\test: The parameter is incorrect

It succeeds when building it with go1.24.13.

It also succeeds when running it on Windows 10 build 19045 (aka Windows 10 version 22H2) and newer (I haven't tested any older versions, since I don't have access to them).

package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	if err := run(); err != nil {
		fmt.Printf("%s\n", err)
	} else {
		fmt.Printf("Done\n")
	}
}

func run() error {
	if err := os.MkdirAll(filepath.Join("test", "a"), 0777); err != nil {
		return err
	}
	return os.RemoveAll("test")
}

This matters for the Chrome CI since we use Golang tooling to run tests and Chrome still officially supports this version of Windows (and our tooling is now failing there). IIUC, Go also officially supports Windows 10, but does this support extend to this very first Win 10 version? :)

To be clear, windows build numbers here are the same as reported by https://pkg.go.dev/golang.org/x/sys/windows#RtlGetNtVersionNumbers

What did you see happen?

openfdat .\test: The parameter is incorrect

What did you expect to see?

Done

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugReportIssues describing a possible bug in the Go implementation.NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.OS-Windows

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions