https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80664
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code Status|UNCONFIRMED |NEW Last reconfirmed| |2017-05-08 Ever confirmed|0 |1 Known to fail| |4.8.5, 7.1.0 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- .original shows it: ;; Function int main() (null) ;; enabled by -tree-original { <<< Unknown tree: try_block { struct vector v; struct vector v; <<cleanup_point <<< Unknown tree: expr_stmt std::vector<std::shared_ptr<R> >::vector (&v, TARGET_EXPR <D.39273, {._M_array=(const struct shared_ptr *) &TARGET_EXPR <D.39271, {TARGET_EXPR <D.38842, <<< Unknown tree: aggr_init_expr 4 make_shared D.38842 (int &) &TARGET_EXPR <D.36803, 1> >>>>, TARGET_EXPR <D.38867, <<< Unknown tree: aggr_init_expr ... try { } finally { std::vector<std::shared_ptr<R> >::~vector (&v); } } <<< Unknown tree: handler try { <<cleanup_point <<< Unknown tree: expr_stmt (void) __cxa_begin_catch (__builtin_eh_pointer (0)) >>>>>; } finally { __cxa_end_catch (); } >>> >>>; } eh, so the construction is not in the try block!