Built-in construct that returns a constant number of bytes from ptr to the end of the object ptr pointer points to
(if known at compile time).
__builtin_object_size never evaluates its arguments for side-effects. If there are any side-effects in them,
it returns (size_t) -1 for type 0 or 1 and (size_t) 0 for type 2 or 3.
If there are multiple objects ptr can point to and all of them are known at compile time, the returned number is
the maximum of remaining byte counts in those objects if type & 2 is 0 and minimum if nonzero. If it is not possible
to determine which objects ptr points to at compile time, __builtin_object_size should return (size_t) -1 for type 0
or 1 and (size_t) 0 for type 2 or 3.
type is an integer constant from 0 to 3. If the least significant bit is clear, objects are whole variables, if
it is set, a closest surrounding subobject is considered the object a pointer points to. The second bit determines
if maximum or minimum of remaining bytes is computed.