| // { 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); |
| } |