On Mon, Nov 23, 2015 at 9:45 AM, Jakub Jelinek <ja...@redhat.com> wrote: > On Sat, Nov 21, 2015 at 07:34:02PM +0100, Tom de Vries wrote: >> Mark by_ref mem_ref in build_receiver_ref as non-trapping >> >> 2015-11-21 Tom de Vries <t...@codesourcery.com> >> >> * omp-low.c (build_receiver_ref): Mark by_ref mem_ref as non-trapping. > > This is ok.
Are you sure this is properly re-set by inlining via /* We cannot propagate the TREE_THIS_NOTRAP flag if we have remapped a parameter as the property might be valid only for the parameter itself. */ if (TREE_THIS_NOTRAP (old) && (!is_parm (TREE_OPERAND (old, 0)) || (!id->transform_parameter && is_parm (ptr)))) TREE_THIS_NOTRAP (*tp) = 1; ? Or is this never hoistable to a place where TREE_THIS_NOTRAP is not true even after inlining? (I presume this is not directly a load via the static chain pointer?) >> >> --- >> gcc/omp-low.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/gcc/omp-low.c b/gcc/omp-low.c >> index 830db75..78f2853 100644 >> --- a/gcc/omp-low.c >> +++ b/gcc/omp-low.c >> @@ -1249,7 +1249,10 @@ build_receiver_ref (tree var, bool by_ref, >> omp_context *ctx) >> TREE_THIS_NOTRAP (x) = 1; >> x = omp_build_component_ref (x, field); >> if (by_ref) >> - x = build_simple_mem_ref (x); >> + { >> + x = build_simple_mem_ref (x); >> + TREE_THIS_NOTRAP (x) = 1; >> + } >> >> return x; >> } > > > Jakub