Skip to content

Commit

Permalink
runtime: change checkptr to use throw instead of panic
Browse files Browse the repository at this point in the history
Updates #34964.

Change-Id: I5afb2c1e77a9a47358a1d0d108c4a787d7172b94
Reviewed-on: https://go-review.googlesource.com/c/go/+/214217
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
  • Loading branch information
mdempsky committed Jan 9, 2020
1 parent 6521965 commit 56d6b87
Showing 1 changed file with 4 additions and 27 deletions.
31 changes: 4 additions & 27 deletions src/runtime/checkptr.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,45 +6,22 @@ package runtime

import "unsafe"

type ptrAlignError struct {
ptr unsafe.Pointer
elem *_type
n uintptr
}

func (e ptrAlignError) RuntimeError() {}

func (e ptrAlignError) Error() string {
return "runtime error: unsafe pointer conversion"
}

func checkptrAlignment(p unsafe.Pointer, elem *_type, n uintptr) {
// Check that (*[n]elem)(p) is appropriately aligned.
// TODO(mdempsky): What about fieldAlign?
if uintptr(p)&(uintptr(elem.align)-1) != 0 {
panic(ptrAlignError{p, elem, n})
throw("checkptr: unsafe pointer conversion")
}

// Check that (*[n]elem)(p) doesn't straddle multiple heap objects.
if size := n * elem.size; size > 1 && checkptrBase(p) != checkptrBase(add(p, size-1)) {
panic(ptrAlignError{p, elem, n})
throw("checkptr: unsafe pointer conversion")
}
}

type ptrArithError struct {
ptr unsafe.Pointer
originals []unsafe.Pointer
}

func (e ptrArithError) RuntimeError() {}

func (e ptrArithError) Error() string {
return "runtime error: unsafe pointer arithmetic"
}

func checkptrArithmetic(p unsafe.Pointer, originals []unsafe.Pointer) {
if 0 < uintptr(p) && uintptr(p) < minLegalPointer {
panic(ptrArithError{p, originals})
throw("checkptr: unsafe pointer arithmetic")
}

// Check that if the computed pointer p points into a heap
Expand All @@ -61,7 +38,7 @@ func checkptrArithmetic(p unsafe.Pointer, originals []unsafe.Pointer) {
}
}

panic(ptrArithError{p, originals})
throw("checkptr: unsafe pointer arithmetic")
}

// checkptrBase returns the base address for the allocation containing
Expand Down

0 comments on commit 56d6b87

Please sign in to comment.