Triggered by discussion on https://reviews.llvm.org/D100141.
Key changes:
- Reorder and use consistent wording to indicate what is specification, and what is discussion.
- Add the requirement for a nocapture parameter to the deref discussion. Without it, the old wording left it unclear whether the callee could capture a pointer, and then arrange for another thread to free it, while still being nofree. (I think the answer must be yes, as otherwise, we have to prove nocapture to prove nofree.)
One gap I still see - and don't have a great suggestion on how to fix - is whether a nofree function is allowed to free an object allocated by a different thread *after* the start of execution of 'f'. I think the answer should probably be no, I'm just not sure how to specify that in the wording.
Note that we don't currently implement the discussed deref rule, so there's no code to match this against or fix.
this sentence wasn't finished.