libgomp: Hopefully avoid false positive warnings in env.c on solaris
authorJakub Jelinek <jakub@redhat.com>
Wed, 21 Oct 2020 08:21:52 +0000 (10:21 +0200)
committerJakub Jelinek <jakub@redhat.com>
Wed, 21 Oct 2020 08:21:52 +0000 (10:21 +0200)
> the patch also breaks bootstrap on both i386-pc-solaris2.11 and
> sparc-sun-solaris2.11:
>
> /vol/gcc/src/hg/master/local/libgomp/env.c: In function 'initialize_env':
> /vol/gcc/src/hg/master/local/libgomp/env.c:414:16: error: 'new_offload' may be used uninitialized in this function [-Werror=maybe-uninitialized]
>   414 |       *offload = new_offload;
>       |       ~~~~~~~~~^~~~~~~~~~~~~
> /vol/gcc/src/hg/master/local/libgomp/env.c:384:30: note: 'new_offload' was declared here
>   384 |   enum gomp_target_offload_t new_offload;
>       |                              ^~~~~~~~~~~

I can't reproduce that, but I fail to see why we need two separate
variables, one with actual value and one tracking if the value is valid.

So, I'm going with:

2020-10-21  Jakub Jelinek  <jakub@redhat.com>

* env.c (parse_target_offload): Change new_offload var type to int,
preinitialize to -1, remove found var and test new_offload != -1
instead of found.

libgomp/env.c

index f305b14cf00649539eda4a7f95f2dc7016362f7d..ab22525570929d50bdba0d9c386af390b072ba20 100644 (file)
@@ -380,8 +380,7 @@ static void
 parse_target_offload (const char *name, enum gomp_target_offload_t *offload)
 {
   const char *env;
-  bool found = false;
-  enum gomp_target_offload_t new_offload;
+  int new_offload = -1;
 
   env = getenv (name);
   if (env == NULL)
@@ -392,24 +391,21 @@ parse_target_offload (const char *name, enum gomp_target_offload_t *offload)
   if (strncasecmp (env, "default", 7) == 0)
     {
       env += 7;
-      found = true;
       new_offload = GOMP_TARGET_OFFLOAD_DEFAULT;
     }
   else if (strncasecmp (env, "mandatory", 9) == 0)
     {
       env += 9;
-      found = true;
       new_offload = GOMP_TARGET_OFFLOAD_MANDATORY;
     }
   else if (strncasecmp (env, "disabled", 8) == 0)
     {
       env += 8;
-      found = true;
       new_offload = GOMP_TARGET_OFFLOAD_DISABLED;
     }
   while (isspace ((unsigned char) *env))
     ++env;
-  if (found && *env == '\0')
+  if (new_offload != -1 && *env == '\0')
     {
       *offload = new_offload;
       return;