Now that we've added the necessary information into the CFG in D42875, we can use it to support returning objects by value.
Unfortunately, we still do not support the constructions into temporaries which are later copied via copy-constructors, which is common in statements like return Class(). But we can still support objects constructed in a different manner, say return getObject() or return { 1, 2 }. Also, we've always supported return Obj; when Obj has a trivial copy constructor, but now we support it even when the constructor is non-trivial.
This patch adds a facility to prevent the new approach from being activated when temporary destructors are disabled, because we have a mechanism for suppressing hilarious false positives that wouldn't work in this case - see D42779. Namely, i'm adding a new EvalCallOption that will indicate that we're constructing a temporary object.