NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

toolchain/43234: lint warns about perfectly good casts



>Number:         43234
>Category:       toolchain
>Synopsis:       lint warns about perfectly good casts
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    toolchain-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun May 02 04:15:00 +0000 2010
>Originator:     David A. Holland
>Release:        NetBSD 5.99.22 (20091208, also 20100307)
>Organization:
>Environment:
System: NetBSD tanaqui 5.99.22 NetBSD 5.99.22 (TANAQUI) #31: Tue Dec 8 22:53:35 
EST 2009 dholland@tanaqui:/usr/src/sys/arch/i386/compile/TANAQUI i386
Architecture: i386
Machine: i386
>Description:

Inspecting the representation of an integer value (or, I suspect, any
other value) with a pointer to unsigned char causes lint to warn that
"pointer casts may be troublesome".

>How-To-Repeat:

#include <stdio.h>
#include <stdlib.h>

int main() {
   int *p;
   unsigned char *x;
   size_t i;

   p = malloc(sizeof(*p));
   *p = 0x12345678;

   x = (unsigned char *)p;
   for (i=0; i<sizeof(*p); i++) {
      (void)printf(" %02x\n", x[i]);
   }

   return 0;
}

Use lint -chapbxzFS per sys.mk. It says

foo.c(12): warning: pointer casts may be troublesome [247]

This issue was noticed by agc, but he doesn't think it's important :-)

>Fix:

The problem is in lint1/tree.c at line 1974, which seems to be a
general-purpose test for casting pointers that point to things of
different sizes.

Since inspecting the representation with unsigned char * is the
recommended method of doing various things in standard C the test
there ought to shut up about casts to unsigned (or signed) char.

In the meantime, adding an extra cast through void * makes lint shut
up. (Although I don't immediately see why, which is why I'm not going
to propose a patch for the time being...)



Home | Main Index | Thread Index | Old Index