Not all pointers are actually pointers.

Just because T->isPointerType() is true, that doesn't mean that
cast<PointerType>(T) will succeed: isPointerType() is based on the
type's "canonical type", whereas cast<> is based on the non-canonical
type. This means that we can't directly cast uma_zone_t to a PointerType,
even though it's defined with 'typedef struct uma_zone* uma_zone_t'.

Get around this by just calling T->getPointeeType() on the uncasted type;
all of the canonical type magic is handled by T->getAs<>().