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.