compiler: insert nil checks when storing to a pointer

This does increase code size, but it is necessary to avoid undefined
behavior.
Этот коммит содержится в:
Ayke van Laethem 2019-05-03 22:09:22 +02:00 коммит произвёл Ron Evans
родитель 371c468e8e
коммит 3c2639ad55

Просмотреть файл

@ -1054,6 +1054,7 @@ func (c *Compiler) parseInstr(frame *Frame, instr ssa.Instruction) {
case *ssa.Store: case *ssa.Store:
llvmAddr := c.getValue(frame, instr.Addr) llvmAddr := c.getValue(frame, instr.Addr)
llvmVal := c.getValue(frame, instr.Val) llvmVal := c.getValue(frame, instr.Val)
c.emitNilCheck(frame, llvmAddr, "store")
if c.targetData.TypeAllocSize(llvmVal.Type()) == 0 { if c.targetData.TypeAllocSize(llvmVal.Type()) == 0 {
// nothing to store // nothing to store
return return