Sorry, silly follow-up question. Why does this code crash?

```
Richards-MBP-2:~ Mikael$ julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.2.1-pre.0 (2019-08-20)
_/ |\__'_|_|_|\__'_| | release-1.2/93929550b6* (fork: 138 commits, 135 days)
|__/ |
julia> import Base: unsafe_convert
julia> import Base.GMP: Limb
julia> import Base.MPFR: BigFloat, _BigFloat
julia> """
mpfr_t <: AbstractFloat
A Julia struct that exactly matches `mpfr_t`.
"""
struct mpfr_t <: AbstractFloat
prec::Clong
sign::Cint
exp::Clong
d::Ptr{Limb}
end
mpfr_t
julia> function mpfr_t(x::BigFloat)
d = x._d
d′ = GC.@preserve d unsafe_string(pointer(d), sizeof(d)) # creates a definitely-new String
mpfr_t(x.prec, x.sign, x.exp, pointer(d′))
end
mpfr_t
julia> function BigFloat(x::mpfr_t)
nb = ccall((:mpfr_custom_get_size,:libmpfr), Csize_t, (Clong,), precision(BigFloat))
nb = (nb + Core.sizeof(Limb) - 1) ÷ Core.sizeof(Limb) # align to number of Limb allocations required for this
str = unsafe_string(Ptr{UInt8}(x.d), nb * Core.sizeof(Limb))
_BigFloat(x.prec, x.sign, x.exp, str)
end
BigFloat
julia> A = Matrix{BigFloat}(I, 2, 2)
2×2 Array{BigFloat,2}:
1.0 0.0
0.0 1.0
julia> B = mpfr_t.(A)
2×2 Array{mpfr_t,2}:
mpfr_t(256, 1, 1, Ptr{UInt64} @0x0000000118612b58) mpfr_t(256, 1, -9223372036854775807, Ptr{UInt64} @0x0000000118612c58)
mpfr_t(256, 1, -9223372036854775807, Ptr{UInt64} @0x0000000118612bd8) mpfr_t(256, 1, 1, Ptr{UInt64} @0x0000000118612c98)
julia> C = BigFloat.(B)
2×2 Array{BigFloat,2}:
/Applications/julia/deps/srccache/mpfr-4.0.2/src/get_str.c:157: MPFR assertion failed: size_s1 >= m
signal (6): Abort trap: 6
in expression starting at REPL[9]:0
__pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line)
Allocations: 8624618 (Pool: 8620748; Big: 3870); GC: 19
Abort trap: 6
Richards-MBP-2:~ Mikael$
```