That function's statically-computed effect will be: !+(),-(!destroy('a)), where 'a is the region variable describing the region of the obj pointer.
So Deca statically guarantees you can't use that region after calling maybeFree. The possible error here is that you might get a free/destroy effect computed statically without actually freeing the memory -- a memory leak that leaves your checked accesses safe, same as garbage collection could provide.
The second assignment will be illegal. Global2 won't be polymorphic in its region, it will only be able to take pointers from regions equal to or contained in the region where it was defined.