// { dg-do assemble } // { dg-options "-O2" } // g++ crashed because we unsaved the TARGET_EXPR for the return value // for get_allocator without first expanding it, because it was part of the // cleanup for the temporary string. // Derived from libstdc++ v3 code. class AA {}; void fee (const AA&); class basic_string { public: basic_string(const char*); ~basic_string() { fee (this->get_allocator()); } AA get_allocator(); }; class failure { public: failure(const basic_string& __str); }; class foo { public: foo(int x) { throw failure (""); } }; void test05() { foo ofs(0); }