powerpc: Fix unitialized variable

Message ID m6bvp4$tus$1@ger.gmane.org
State Superseded
Headers

Commit Message

Stefan Liebler Dec. 11, 2014, 11:39 a.m. UTC
  Hi Adhemerval,

i get the warning: ‘resplen’ may be used uninitialized in this function 
[-Wmaybe-uninitialized] on s390, too.

This patch disables Wmaybe-uninitialized warning on s390x with gcc 4.8, 
4.9 and gcc from today, but not on power.

Please test if it fixes your warnings too.

Bye Stefan

---
2014-12-11  Stefan Liebler  <stli@linux.vnet.ibm.com>

	resolv/res_send.c (send_vc): Disable warning resplen may
	be used uninitialized.

On 12/11/2014 12:42 AM, Adhemerval Zanella wrote:
> On 10-12-2014 19:22, Joseph Myers wrote:
>> On Wed, 10 Dec 2014, Adhemerval Zanella wrote:
>>
>>> The 'resolv/res_send.c' build with _STRING_ARCH_unaligned not defined
>>> may utilize the local resplen uninitialized.  This patch sets it to 0.
>> Do you have an actual path through the function that can result in it
>> being used uninitialized, and where a value of 0 is correct?
>
> I do not, I used as default just to avoid the warning.
>
>>
>> My understanding, as described in
>> <https://sourceware.org/ml/libc-alpha/2014-11/msg00693.html>, was that
>> this is a false positive warning - the variable is never actually used
>> uninitialized, but determining that requires considering the values other
>> variables can have on the paths leading to resplen being used.  And since
>> we don't want to add initializations (to installed code as opposed to
>> testcases) that actually require code to be generated simply in order to
>> avoid warnings, that may indicate disabling -Wmaybe-uninitialized around
>> the code that generates the warning.
>>
> I understand the idea of avoid such warning, I will the compiler directives.
>
>
>
  

Comments

Andreas Schwab Dec. 11, 2014, 11:54 a.m. UTC | #1
Stefan Liebler <stli@linux.vnet.ibm.com> writes:

> +	/* There´s the following warning on S390:

Please avoid non-ascii.

Andreas.
  

Patch

diff --git a/resolv/res_send.c b/resolv/res_send.c
index af42b8a..9c2418b 100644
--- a/resolv/res_send.c
+++ b/resolv/res_send.c
@@ -96,6 +96,7 @@  static const char rcsid[] = "$BINDId: res_send.c,v 8.38 2000/03/30 20:16:51 vixi
 #include <string.h>
 #include <unistd.h>
 #include <kernel-features.h>
+#include <libc-internal.h>
 
 #if PACKETSZ > 65536
 #define MAXPACKET       PACKETSZ
@@ -668,7 +669,17 @@  send_vc(res_state statp,
 	// int anssiz = *anssizp;
 	HEADER *anhp = (HEADER *) ans;
 	struct sockaddr_in6 *nsap = EXT(statp).nsaddrs[ns];
-	int truncating, connreset, resplen, n;
+	int truncating, connreset, n;
+	/* There´s the following warning on S390:
+	   ‘resplen’ may be used uninitialized in this function
+	   [-Wmaybe-uninitialized]
+	   This is a false positive according to:
+	   https://www.sourceware.org/ml/libc-alpha/2014-12/msg00323.html
+	 */
+	DIAG_PUSH_NEEDS_COMMENT;
+	DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized");
+	int resplen;
+	DIAG_POP_NEEDS_COMMENT;
 	struct iovec iov[4];
 	u_short len;
 	u_short len2;
@@ -788,8 +799,11 @@  send_vc(res_state statp,
 			   reply.  We can try to use the rest
 			   of the user-provided buffer.  */
 #if _STRING_ARCH_unaligned
+			DIAG_PUSH_NEEDS_COMMENT;
+			DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized");
 			*anssizp2 = orig_anssizp - resplen;
 			*ansp2 = *ansp + resplen;
+			DIAG_POP_NEEDS_COMMENT;
 #else
 			int aligned_resplen
 			  = ((resplen + __alignof__ (HEADER) - 1)