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

Reply via email to