Temporaries are destroyed at the end of their CXXBindTemporaryExpr, which can be picked up from their CFGTemporaryDtor. Note that lifetime-extended temporaries are different: they are destroyed via CFGAutomaticObjectDtor for their reference, and they don't have a CFGTemoraryDtor of their own. Unless, well, they are copied with an elidable copy-constructor, in which case the temporary destructor is there, but it still fires immediately, and lifetime-extended copy is still dealt with via an automatic destructor.
I think this is one of the places where diagnostics may become confusing due to presence of elidable constructors and their respective destructors. In the second test case nobody would expect anything to be destroyed on the line on which we show the "Calling '~C'" note. So we may need to either think of actually eliding elidable constructors together with their destructors, or at least explaining to the user that the constructor is elidable as part of the path note.
auto?