Fixes #18003.
Change-Id: Iadcc5c424c64badecfb5fdbd4dbd9197df56182c
Reviewed-on: https://go-review.googlesource.com/33421
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
clobbers: buildReg("DI CX"),
// Note: CX is only clobbered when dynamic linking.
},
+ faultOnNilArg0: true,
},
// arg0 = address of memory to zero
inputs: []regMask{buildReg("DI"), buildReg("CX"), buildReg("AX")},
clobbers: buildReg("DI CX"),
},
+ faultOnNilArg0: true,
},
{name: "CALLstatic", argLength: 1, reg: regInfo{clobbers: callerSave}, aux: "SymOff", clobberFlags: true, call: true}, // call static function aux.(*gc.Sym). arg0=mem, auxint=argsize, returns mem
inputs: []regMask{buildReg("DI"), buildReg("SI")},
clobbers: buildReg("DI SI CX"), // uses CX as a temporary
},
- clobberFlags: true,
+ clobberFlags: true,
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
},
// arg0 = destination pointer
inputs: []regMask{buildReg("DI"), buildReg("SI"), buildReg("CX")},
clobbers: buildReg("DI SI CX"),
},
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
},
// (InvertFlags (CMPL a b)) == (CMPL b a)
inputs: []regMask{buildReg("DI"), buildReg("X0")},
clobbers: buildReg("DI"),
},
- clobberFlags: true,
+ clobberFlags: true,
+ faultOnNilArg0: true,
},
{name: "MOVOconst", reg: regInfo{nil, 0, []regMask{fp}}, typ: "Int128", aux: "Int128", rematerializeable: true},
inputs: []regMask{buildReg("DI"), buildReg("CX"), buildReg("AX")},
clobbers: buildReg("DI CX"),
},
+ faultOnNilArg0: true,
},
{name: "CALLstatic", argLength: 1, reg: regInfo{clobbers: callerSave}, aux: "SymOff", clobberFlags: true, call: true}, // call static function aux.(*gc.Sym). arg0=mem, auxint=argsize, returns mem
inputs: []regMask{buildReg("DI"), buildReg("SI")},
clobbers: buildReg("DI SI X0"), // uses X0 as a temporary
},
- clobberFlags: true,
+ clobberFlags: true,
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
},
// arg0 = destination pointer
inputs: []regMask{buildReg("DI"), buildReg("SI"), buildReg("CX")},
clobbers: buildReg("DI SI CX"),
},
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
},
// (InvertFlags (CMPQ a b)) == (CMPQ b a)
inputs: []regMask{buildReg("R1"), buildReg("R2"), gpsp},
clobbers: buildReg("R1 R2"),
},
- clobberFlags: true,
- typ: "Mem",
+ clobberFlags: true,
+ typ: "Mem",
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
},
// large clear
inputs: []regMask{buildReg("R1"), gpsp},
clobbers: buildReg("R1"),
},
- clobberFlags: true,
- typ: "Mem",
+ clobberFlags: true,
+ typ: "Mem",
+ faultOnNilArg0: true,
},
}
},
},
{
- name: "DUFFZERO",
- auxType: auxInt64,
- argLen: 3,
+ name: "DUFFZERO",
+ auxType: auxInt64,
+ argLen: 3,
+ faultOnNilArg0: true,
reg: regInfo{
inputs: []inputInfo{
{0, 128}, // DI
},
},
{
- name: "REPSTOSL",
- argLen: 4,
+ name: "REPSTOSL",
+ argLen: 4,
+ faultOnNilArg0: true,
reg: regInfo{
inputs: []inputInfo{
{0, 128}, // DI
},
},
{
- name: "DUFFCOPY",
- auxType: auxInt64,
- argLen: 3,
- clobberFlags: true,
+ name: "DUFFCOPY",
+ auxType: auxInt64,
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
reg: regInfo{
inputs: []inputInfo{
{0, 128}, // DI
},
},
{
- name: "REPMOVSL",
- argLen: 4,
+ name: "REPMOVSL",
+ argLen: 4,
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
reg: regInfo{
inputs: []inputInfo{
{0, 128}, // DI
},
},
{
- name: "DUFFZERO",
- auxType: auxInt64,
- argLen: 3,
- clobberFlags: true,
+ name: "DUFFZERO",
+ auxType: auxInt64,
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
reg: regInfo{
inputs: []inputInfo{
{0, 128}, // DI
},
},
{
- name: "REPSTOSQ",
- argLen: 4,
+ name: "REPSTOSQ",
+ argLen: 4,
+ faultOnNilArg0: true,
reg: regInfo{
inputs: []inputInfo{
{0, 128}, // DI
},
},
{
- name: "DUFFCOPY",
- auxType: auxInt64,
- argLen: 3,
- clobberFlags: true,
+ name: "DUFFCOPY",
+ auxType: auxInt64,
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
reg: regInfo{
inputs: []inputInfo{
{0, 128}, // DI
},
},
{
- name: "REPMOVSQ",
- argLen: 4,
+ name: "REPMOVSQ",
+ argLen: 4,
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
reg: regInfo{
inputs: []inputInfo{
{0, 128}, // DI
},
},
{
- name: "LoweredMove",
- auxType: auxInt64,
- argLen: 4,
- clobberFlags: true,
+ name: "LoweredMove",
+ auxType: auxInt64,
+ argLen: 4,
+ clobberFlags: true,
+ faultOnNilArg0: true,
+ faultOnNilArg1: true,
reg: regInfo{
inputs: []inputInfo{
{0, 2}, // R1
},
},
{
- name: "LoweredZero",
- auxType: auxInt64,
- argLen: 3,
- clobberFlags: true,
+ name: "LoweredZero",
+ auxType: auxInt64,
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
reg: regInfo{
inputs: []inputInfo{
{0, 2}, // R1
p := &t.Y // ERROR "removed nil check"
return t, *p // ERROR "removed nil check"
}
+
+// make sure to remove nil check for memory move (issue #18003)
+func f8(t *[8]int) [8]int {
+ return *t // ERROR "removed nil check"
+}