In the following code involving GNU statement-expression extension:
struct S { ~S(); }; void foo() { const S &x = ({ return; S(); }); }
function foo() returns before reference x is initialized. We shouldn't call the destructor for the temporary object lifetime-exteneded by x in this case, because the object never gets constructed in the first place.
The real problem is probably in the CFG somewhere, so this is a quick-and-dirty hotfix rather than the perfect solution.