The attribute nofree guarantees that a function cannot free memory
by any means, directly or indirectly. If it is specified, there is no need to
check nosync separately because it imposes extra limitations (for example,
a function can sync but never write or free memory).
This was already discussed in D99135, but the discussion doesn't explain
case of synching readonly/nofree function. Even if nosync is implied by
something else, we still should not rely on this attribute being explicitly
propagated before we came there.