From 308173e30bff3cb179f75fdf4b96310482dc6846 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 7 Apr 2014 08:38:23 +0000 Subject: re PR c++/60750 (double free after std::move on string inside throw when compiled with optimization) 2014-04-07 Richard Biener PR middle-end/60750 * tree-ssa-operands.c (maybe_add_call_vops): Also add VDEFs for noreturn calls. * tree-cfgcleanup.c (fixup_noreturn_call): Do not remove VDEFs. * g++.dg/torture/pr60750.C: New testcase. * gcc.dg/tree-ssa/20040517-1.c: Adjust. From-SVN: r209179 --- gcc/tree-ssa-operands.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'gcc/tree-ssa-operands.c') diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index 352ccca4..c525fe5 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -648,10 +648,8 @@ maybe_add_call_vops (struct function *fn, gimple stmt) call-clobbered. */ if (!(call_flags & ECF_NOVOPS)) { - /* A 'pure' or a 'const' function never call-clobbers anything. - A 'noreturn' function might, but since we don't return anyway - there is no point in recording that. */ - if (!(call_flags & (ECF_PURE | ECF_CONST | ECF_NORETURN))) + /* A 'pure' or a 'const' function never call-clobbers anything. */ + if (!(call_flags & (ECF_PURE | ECF_CONST))) add_virtual_operand (fn, stmt, opf_def); else if (!(call_flags & ECF_CONST)) add_virtual_operand (fn, stmt, opf_use); -- cgit v1.1