From fe924d9ff03ae0e13ab26745c0020cc1fdaf9577 Mon Sep 17 00:00:00 2001 From: Patrick Marlier Date: Mon, 6 Feb 2012 14:42:07 +0000 Subject: [PATCH] re PR middle-end/52047 ([trans-mem] ICE: SIGSEGV in execute_tm_mark (trans-mem.c:2270) with -O -fgnu-tm -fprefetch-loop-arrays) PR middle-end/52047 * trans-mem.c (expand_call_tm): Add an assertion. * calls.c (flags_from_decl_or_type): Add ECF_TM_PURE to 'no vops' functions. From-SVN: r183936 --- gcc/ChangeLog | 7 +++++++ gcc/calls.c | 2 +- gcc/trans-mem.c | 4 +++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 97ceef1d05f..bf5e93b3f78 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-02-06 Patrick Marlier + + PR middle-end/52047 + * trans-mem.c (expand_call_tm): Add an assertion. + * calls.c (flags_from_decl_or_type): Add ECF_TM_PURE to 'no vops' + functions. + 2012-02-06 Richard Guenther PR tree-optimization/50955 diff --git a/gcc/calls.c b/gcc/calls.c index 53c03354726..19b2bfad81a 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -716,7 +716,7 @@ flags_from_decl_or_type (const_tree exp) { if (is_tm_builtin (exp)) flags |= ECF_TM_BUILTIN; - else if ((flags & ECF_CONST) != 0 + else if ((flags & (ECF_CONST|ECF_NOVOPS)) != 0 || lookup_attribute ("transaction_pure", TYPE_ATTRIBUTES (TREE_TYPE (exp)))) flags |= ECF_TM_PURE; diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index de7a913be66..d760db34b2a 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -1,5 +1,5 @@ /* Passes for transactional memory support. - Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This file is part of GCC. @@ -2267,6 +2267,8 @@ expand_call_tm (struct tm_region *region, } node = cgraph_get_node (fn_decl); + /* All calls should have cgraph here. */ + gcc_assert (node); if (node->local.tm_may_enter_irr) transaction_subcode_ior (region, GTMA_MAY_ENTER_IRREVOCABLE);