Hi Frederik!

On 2020-04-21T14:13:33+0200, Frederik Harwath <frede...@codesourcery.com> wrote:
> Thomas Schwinge <tho...@codesourcery.com> writes:
>> Via <https://gcc.gnu.org/PR94629> "10 issues located by the PVS-studio
>> static analyzer" (so please reference that one on any patch submission),
>> on <https://habr.com/en/company/pvs-studio/blog/497640/> in "Fragment N3,
>> Assigning a variable to itself", we find this latter assignment qualified
>> as "very strange to assign a variable to itself".

> [...] the original intention must have been [...]

>> then does the current algorith still work despite this error?
>
> [...]

Thanks for this analysis!

> Hence I found it preferrable to remove the assignment to the
> "outer_reduction_clauses" field and the "local_reduction_clauses" field
> from "new_omp_context" completely. (The fields are still zero intialized
> by the allocation of the struct which uses XCNEW.) That way the whole
> logic regarding the fields is now contained in "scan_omp_for".
>
> I have executed "make check" (on x86_64-linux-gnu) to verify that the
> change causes no regressions. Ok to push the commit to master?

ACK, thanks!  To record the review effort, please include "Reviewed-by:
Thomas Schwinge <tho...@codesourcery.com>" in the commit log, see
<https://gcc.gnu.org/wiki/Reviewed-by>.


Grüße
 Thomas


> From 2d60b374a44b212ff97c8b1fd6f8c39e478dc70f Mon Sep 17 00:00:00 2001
> From: Frederik Harwath <frede...@codesourcery.com>
> Date: Tue, 21 Apr 2020 12:36:14 +0200
> Subject: [PATCH] Remove fishy self-assignment in omp-low.c [PR94629]
>
> The PR noticed that omp-low.c contains a self-assignment in the
> function new_omp_context:
>
> if (outer_ctx) {
>     ...
>     ctx->outer_reduction_clauses = ctx->outer_reduction_clauses;
>
> This is obviously useless.  The original intention might have been
> to copy the field from the outer_ctx to ctx.  Since this is done
> (properly) in the only function where this field is actually used
> (in function scan_omp_for) and the field is being initialized to zero
> during the struct allocation, there is no need to attempt to do
> anything to this field in new_omp_context. Thus this commit
> removes any assignment to the field from new_omp_context.
>
> 2020-04-21  Frederik Harwath  <frede...@codesourcery.com>
>
>       PR other/94629
>       * gcc/omp-low.c (new_omp_context): Remove assignments to
>       ctx->outer_reduction_clauses and ctx->local_reduction_clauses.
> ---
>  gcc/omp-low.c | 14 ++++++++------
>  1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/gcc/omp-low.c b/gcc/omp-low.c
> index 67565d61400..88f23e60d34 100644
> --- a/gcc/omp-low.c
> +++ b/gcc/omp-low.c
> @@ -128,10 +128,16 @@ struct omp_context
>       corresponding tracking loop iteration variables.  */
>    hash_map<tree, tree> *lastprivate_conditional_map;
>
> -  /* A tree_list of the reduction clauses in this context.  */
> +  /* A tree_list of the reduction clauses in this context. This is
> +    only used for checking the consistency of OpenACC reduction
> +    clauses in scan_omp_for and is not guaranteed to contain a valid
> +    value outside of this function. */
>    tree local_reduction_clauses;
>
> -  /* A tree_list of the reduction clauses in outer contexts.  */
> +  /* A tree_list of the reduction clauses in outer contexts. This is
> +    only used for checking the consistency of OpenACC reduction
> +    clauses in scan_omp_for and is not guaranteed to contain a valid
> +    value outside of this function. */
>    tree outer_reduction_clauses;
>
>    /* Nesting depth of this context.  Used to beautify error messages re
> @@ -931,8 +937,6 @@ new_omp_context (gimple *stmt, omp_context *outer_ctx)
>        ctx->outer = outer_ctx;
>        ctx->cb = outer_ctx->cb;
>        ctx->cb.block = NULL;
> -      ctx->local_reduction_clauses = NULL;
> -      ctx->outer_reduction_clauses = ctx->outer_reduction_clauses;
>        ctx->depth = outer_ctx->depth + 1;
>      }
>    else
> @@ -948,8 +952,6 @@ new_omp_context (gimple *stmt, omp_context *outer_ctx)
>        ctx->cb.transform_call_graph_edges = CB_CGE_MOVE;
>        ctx->cb.adjust_array_error_bounds = true;
>        ctx->cb.dont_remap_vla_if_no_change = true;
> -      ctx->local_reduction_clauses = NULL;
> -      ctx->outer_reduction_clauses = NULL;
>        ctx->depth = 1;
>      }
>
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander 
Walter

Reply via email to