Fix build warnings in resolv/res_send.c
authorStefan Liebler <stli@linux.ibm.com>
Tue, 2 Jul 2019 12:07:44 +0000 (14:07 +0200)
committerStefan Liebler <stli@linux.ibm.com>
Tue, 2 Jul 2019 12:07:44 +0000 (14:07 +0200)
This patch fixes the gcc warnings seen with gcc 9 -march>=z13 on s390x:
res_send.c: In function ‘__res_context_send’:
res_send.c:498:7: error: ‘resplen’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
  498 |    if (n == 0 && (buf2 == NULL || *resplen2 == 0))
      |       ^

In this case send_vc is inlined into __res_context_send
and the maybe uninitialized resplen belongs to the one in send_vc.

In send_vc there is already a DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized")
and a comment which explains that this is a false-positive.
Note that resplen is used as return value.

This patch adds a further DIAG_IGNORE_NEEDS_COMMENT around the declaration of n
in __res_context_send and the comparison after n was set to the return value of send_vc.

ChangeLog:

* resolv/res_send.c (__res_context_send): Disable maybe-uninitialized
warning.

ChangeLog
resolv/res_send.c

index 0c7bdd0..3e4d87f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-02  Stefan Liebler  <stli@linux.ibm.com>
+
+       * resolv/res_send.c (__res_context_send): Disable maybe-uninitialized
+       warning.
+
 2019-07-01  Florian Weimer  <fweimer@redhat.com>
 
        * scripts/build-many-glibcs.py (Context.add_all_configs): Add v4t
index eeeb8ac..ed27f3a 100644 (file)
@@ -401,7 +401,18 @@ __res_context_send (struct resolv_context *ctx,
                    int *nansp2, int *resplen2, int *ansp2_malloced)
 {
        struct __res_state *statp = ctx->resp;
-       int gotsomewhere, terrno, try, v_circuit, resplen, n;
+       int gotsomewhere, terrno, try, v_circuit, resplen;
+       /* On some architectures send_vc is inlined and the compiler might emit
+          a warning indicating 'resplen' may be used uninitialized.  Note that
+          the warning belongs to resplen in send_vc which is used as return
+          value!  There the maybe-uninitialized warning is already ignored as
+          it is a false-positive - see comment in send_vc.
+          Here the variable n is set to the return value of send_vc.
+          See below.  */
+       DIAG_PUSH_NEEDS_COMMENT;
+       DIAG_IGNORE_NEEDS_COMMENT (9, "-Wmaybe-uninitialized");
+       int n;
+       DIAG_POP_NEEDS_COMMENT;
 
        if (statp->nscount == 0) {
                __set_errno (ESRCH);
@@ -495,8 +506,12 @@ __res_context_send (struct resolv_context *ctx,
                                    ansp2_malloced);
                        if (n < 0)
                                return (-1);
+                       /* See comment at the declaration of n.  */
+                       DIAG_PUSH_NEEDS_COMMENT;
+                       DIAG_IGNORE_NEEDS_COMMENT (9, "-Wmaybe-uninitialized");
                        if (n == 0 && (buf2 == NULL || *resplen2 == 0))
                                goto next_ns;
+                       DIAG_POP_NEEDS_COMMENT;
                } else {
                        /* Use datagrams. */
                        n = send_dg(statp, buf, buflen, buf2, buflen2,