builder,loader: fix -ldflags -X not overriding variables with default values

When a string variable already had a source-level default value, the -ldflags
"-X" flag was silently ignored and the variable remained the default value
at runtime.

Fix by stripping the InitOrder entry for each -X variable before
LoadSSA() is called. With no entry in InitOrder, go/ssa emits no init
store, so the global stays zero-valued in the IR. makeGlobalsModule
still injects the actual -X values at final link time.

The -X values remain out of the per-package build cache with only the
variable names appearing in the cache key.

Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
deadprogram
2026-04-24 10:08:45 +02:00
committed by Ron Evans
parent 8793dc37fa
commit 1a1506ef79
6 changed files with 59 additions and 2 deletions
+9
View File
@@ -0,0 +1,9 @@
package main
// This global has a default value. It should be overridable via
// -ldflags="-X main.someGlobal=value" just like an uninitialized global.
var someGlobal = "default"
func main() {
println("someGlobal:", someGlobal)
}
+1
View File
@@ -0,0 +1 @@
someGlobal: foobar
+1 -2
View File
@@ -1,7 +1,6 @@
package main
// These globals can be changed using -ldflags="-X main.someGlobal=value".
// At the moment, only globals without an initializer can be replaced this way.
// This global can be changed using -ldflags="-X main.someGlobal=value".
var someGlobal string
func main() {