]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: fix nilcheck for AIX
authorClément Chigot <clement.chigot@atos.net>
Tue, 16 Oct 2018 13:59:43 +0000 (15:59 +0200)
committerLynn Boger <laboger@linux.vnet.ibm.com>
Mon, 26 Nov 2018 14:13:53 +0000 (14:13 +0000)
commit9fe9853ae5641eda4cfa58015bd0bcedb99c12cb
tree7d9f5dc6ec5ab99abe48eb30c009291dabe02e5b
parent041526c6ef669743afc6c4b757b95011f1475d1a
cmd/compile: fix nilcheck for AIX

This commit adapts compile tool to create correct nilchecks for AIX.

AIX allows to load a nil pointer. Therefore, the default nilcheck
which issues a load must be replaced by a CMP instruction followed by a
store at 0x0 if the value is nil. The store will trigger a SIGSEGV as on
others OS.

The nilcheck algorithm must be adapted to do not remove nilcheck if it's
only a read. Stores are detected with v.Type.IsMemory().

Tests related to nilptr must be adapted to the previous changements.
nilptr.go cannot be used as it's because the AIX address space starts at
1<<32.

Change-Id: I9f5aaf0b7e185d736a9b119c0ed2fe4e5bd1e7af
Reviewed-on: https://go-review.googlesource.com/c/144538
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/ppc64/ssa.go
src/cmd/compile/internal/ssa/nilcheck.go
test/nilptr.go
test/nilptr3.go
test/nilptr3_wasm.go [deleted file]
test/nilptr5.go [new file with mode: 0644]
test/nilptr5_aix.go [new file with mode: 0644]
test/nilptr5_wasm.go [new file with mode: 0644]
test/nilptr_aix.go [new file with mode: 0644]