2.0 KiB
Compiler
The compiler and linker in Go 1.25 now generate debug information using DWARF version 5; the newer DWARF version reduces the space required for debugging information in Go binaries. DWARF 5 generation is gated by the "dwarf5" GOEXPERIMENT; this functionality can be disabled (for now) using GOEXPERIMENT=nodwarf5.
The compiler has been fixed to ensure that nil pointer checks are performed promptly. Programs like the following, which used to execute successfully, will now panic with a nil-pointer exception:
package main
import "os"
func main() {
f, err := os.Open("nonExistentFile")
name := f.Name()
if err != nil {
return
}
println(name)
}
This program is incorrect in that it uses the result of os.Open before checking
the error. The main result of os.Open can be a nil pointer if the error result is non-nil.
But because of a compiler bug, this program ran successfully under
Go versions 1.21 through 1.24 (in violation of the Go spec). It will no longer run
successfully in Go 1.25. If this change is affecting your code, the solution is to put
the non-nil error check earlier in your code, preferably immediately after
the error-generating statement.
The compiler can now allocate the backing store for slices on the
stack in more situations, which improves performance. This change has
the potential to amplify the effects of incorrect
unsafe.Pointer usage, see for example issue
73199. In order to track down these problems, the
bisect tool can be
used to find the allocation causing trouble using the
-compile=variablemake flag. All such new stack allocations can also
be turned off using -gcflags=all=-d=variablemakehash=n.