diff options
author | Johan Jansson <johan.jansson@iki.fi> | 2020-03-11 21:05:21 +0200 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-03-12 23:45:51 +0000 |
commit | 1f231d74f6e6b7ce1ccdbf49fc12b022dd875196 (patch) | |
tree | 67c61ac008a57ced0f2b68c33263a60b9348d14b /src/runtime/checkptr.go | |
parent | 5d70cb066756369f99be6ffa69b639626d95e647 (diff) | |
download | go-1f231d74f6e6b7ce1ccdbf49fc12b022dd875196.tar.gz go-1f231d74f6e6b7ce1ccdbf49fc12b022dd875196.zip |
runtime: emit more specific errors from checkptr
Update error messages for pointer alignment checks and pointer
arithmetic checks so that each type of error has a unique error
message.
Fixes #37488
Change-Id: Ida2c2fa3f041a3307d665879a463f9e8f2c1fd03
Reviewed-on: https://go-review.googlesource.com/c/go/+/223037
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/checkptr.go')
-rw-r--r-- | src/runtime/checkptr.go | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/runtime/checkptr.go b/src/runtime/checkptr.go index ddbc8168af..8e401e8763 100644 --- a/src/runtime/checkptr.go +++ b/src/runtime/checkptr.go @@ -10,18 +10,18 @@ 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 { - throw("checkptr: unsafe pointer conversion") + throw("checkptr: misaligned 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)) { - throw("checkptr: unsafe pointer conversion") + throw("checkptr: converted pointer straddles multiple allocations") } } func checkptrArithmetic(p unsafe.Pointer, originals []unsafe.Pointer) { if 0 < uintptr(p) && uintptr(p) < minLegalPointer { - throw("checkptr: unsafe pointer arithmetic") + throw("checkptr: pointer arithmetic computed bad pointer value") } // Check that if the computed pointer p points into a heap @@ -38,7 +38,7 @@ func checkptrArithmetic(p unsafe.Pointer, originals []unsafe.Pointer) { } } - throw("checkptr: unsafe pointer arithmetic") + throw("checkptr: pointer arithmetic result points to invalid allocation") } // checkptrBase returns the base address for the allocation containing |