On Wed, Aug 31, 2022 at 12:56:25PM +0200, Marcel Vollweiler wrote:
> +       case PARSE_BIND:
> +         *(char *) (host_envvars[omp_var].dest[0])
> +               = *(char *) params[0];
> +         *(char *) (host_envvars[omp_var].dest[1])
> +               = *(char *) params[1];
> +         *(unsigned long *) (host_envvars[omp_var].dest[2])
> +               = *(unsigned long *) params[2];

While the first param is char (gomp_global_icv.bind_var), the second param
is char * (gomp_bind_var_list), so we shouldn't access it through *(char *).

Tested on x86_64-linux with
make check RUNTESTFLAGS="c.exp='*affinity* icv-6.c *display*' 
c++.exp='*affinity* icv-6.c *display*' fortran.exp='*affinity*'"
which previously had various failures, committed to trunk.

2022-09-09  Jakub Jelinek  <ja...@redhat.com>

        PR libgomp/106894
        * env.c (initialize_env) <case PARSE_BIND>: Use char ** instead of
        char * for dest[1] initialization from params[1].  Formatting fixes.

--- libgomp/env.c.jj    2022-09-08 20:22:07.849183684 +0200
+++ libgomp/env.c       2022-09-09 13:30:14.090107492 +0200
@@ -2184,12 +2184,10 @@ initialize_env (void)
            *(int *) (host_envvars[omp_var].dest[1]) = *(int *) params[1];
            break;
          case PARSE_BIND:
-           *(char *) (host_envvars[omp_var].dest[0])
-                 = *(char *) params[0];
-           *(char *) (host_envvars[omp_var].dest[1])
-                 = *(char *) params[1];
+           *(char *) (host_envvars[omp_var].dest[0]) = *(char *) params[0];
+           *(char **) (host_envvars[omp_var].dest[1]) = *(char **) params[1];
            *(unsigned long *) (host_envvars[omp_var].dest[2])
-                 = *(unsigned long *) params[2];
+             = *(unsigned long *) params[2];
            break;
          }
       }


        Jakub

Reply via email to