https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105091
Bug ID: 105091 Summary: RTL dse1 remove stack mem storing incorrectly Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: guojiufu at gcc dot gnu.org Target Milestone: --- Code is narrowed from math/big which passes at the early of r12(r12-656). With -fdisable-rtl-dse1, the case also passes. ----_testmain.go package main import "fmt" import "testing" import "testing/internal/testdeps" import __os__ "os" type Bits []int func TestMulBits(t *testing.T) { for _, test := range []struct { x, y, want Bits }{ {Bits{}, Bits{}, nil}, {Bits{0}, Bits{0}, Bits{0}}, } { p := test.x fmt.Printf("%v", p) } } var tests = []testing.InternalTest { {"TestMulBits", TestMulBits}, } var benchmarks = []testing.InternalBenchmark{ } var fuzzTargets = []testing.InternalFuzzTarget{ } var examples = []testing.InternalExample{ } func main() { m := testing.MainStart(testdeps.TestDeps{}, tests, benchmarks, fuzzTargets, examples) __os__.Exit(m.Run()) } ----- > gccgo -O2 _testmain.go && ./a.out -test.v === RUN TestMulBits [35185086168544 32199672319005300 268454424 268599296 35185086167968 15 32 35185086167968 15 35184405205936 824635867296 15 35184393891632 0 35185086168112]--- FAIL: TestMulBits (0.00s) panic: runtime error: invalid memory address or nil pointer dereference [recovered] panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x200000d08280] goroutine 17 [running]: testing.tRunner..func3 /home/guojiufu/gcc/gcc-mainline-base/libgo/go/testing/testing.go:1425 testing.tRunner..func1 /home/guojiufu/gcc/gcc-mainline-base/libgo/go/testing/testing.go:1342 panic /home/guojiufu/gcc/gcc-mainline-base/libgo/go/runtime/panic.go:714 reflect.typedmemmove /home/guojiufu/gcc/gcc-mainline-base/libgo/go/runtime/mbarrier.go:197 reflect.packEface /home/guojiufu/gcc/gcc-mainline-base/libgo/go/reflect/value.go:123 reflect.valueInterface /home/guojiufu/gcc/gcc-mainline-base/libgo/go/reflect/value.go:930 reflect.Value.Interface /home/guojiufu/gcc/gcc-mainline-base/libgo/go/reflect/value.go:890 fmt.pp.printValue /home/guojiufu/gcc/gcc-mainline-base/libgo/go/fmt/print.go:722 .... > gccgo -O2 _testmain.go -fdisable-rtl-dse1 && ./a.out -test.v go1: note: disable pass rtl-dse1 for functions in the range of [0, 4294967295] === RUN TestMulBits [][0]--- PASS: TestMulBits (0.00s) PASS > gccgo -v Using built-in specs. COLLECT_GCC=/home/guojiufu/gcc/install/gcc-mainline-base-debug/bin/gccgo COLLECT_LTO_WRAPPER=/home/guojiufu/gcc/install/gcc-mainline-base-debug/libexec/gcc/powerpc64le-unknown-linux-gnu/12.0.1/lto-wrapper Target: powerpc64le-unknown-linux-gnu Configured with: /home/guojiufu/gcc/gcc-mainline-base/configure --enable-languages=c,c++,go --with-cpu=native --enable-checking --with-long-double-128 --prefix=/home/guojiufu/gcc/install/gcc-mainline-base-debug --disable-bootstrap Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 12.0.1 20220318 (experimental) (GCC) I encounter this on ppc64le and did not reproduce it x86_64.