• Russ Cox's avatar
    runtime: delete panicstring; move its checks into gopanic · c3b5db89
    Russ Cox authored
    In Go 1.3 the runtime called panicstring to report errors like
    divide by zero or memory faults. Now we call panic (gopanic)
    with pre-allocated error values. That new path is missing the
    checking that panicstring did, so add it there.
    
    The only call to panicstring left is in cnew, which is problematic
    because if it fails, probably the heap is corrupt. In that case,
    calling panicstring creates a new errorCString (no allocation there),
    but then panic tries to print it, invoking errorCString.Error, which
    does a string concatenation (allocating), which then dies.
    Replace that one panicstring with a throw: cnew is for allocating
    runtime data structures and should never ask for an inappropriate
    amount of memory.
    
    With panicstring gone, delete newErrorCString, errorCString.
    While we're here, delete newErrorString, not called by anyone.
    (It can't be: that would be C code calling Go code that might
    block or grow the stack.)
    
    Found while debugging a malloc corruption.
    This resulted in 'panic during panic' instead of a more useful message.
    
    LGTM=khr
    R=khr
    CC=golang-codereviews
    https://golang.org/cl/138290045
    c3b5db89
error.go 2.51 KB