1 // { dg-do assemble } 2 // { dg-options "-O2" } 3 // g++ crashed because we unsaved the TARGET_EXPR for the return value 4 // for get_allocator without first expanding it, because it was part of the 5 // cleanup for the temporary string. 6 7 // Derived from libstdc++ v3 code. 8 9 10 class AA {}; 11 12 void fee (const AA&); 13 14 class basic_string 15 { 16 public: 17 basic_string(const char*); 18 ~basic_string()19 ~basic_string() 20 { fee (this->get_allocator()); } 21 22 AA get_allocator(); 23 }; 24 25 class failure 26 { 27 public: 28 failure(const basic_string& __str); 29 }; 30 31 class foo 32 { 33 public: foo(int x)34 foo(int x) 35 { 36 throw failure (""); 37 } 38 }; 39 test05()40void test05() 41 { 42 foo ofs(0); 43 } 44