[Bug c/35214] New: -Wconversion produces spurious warnings

jason dot vas dot dias at gmail dot com gcc-bugzilla@gcc.gnu.org
Fri Feb 15 20:45:00 GMT 2008


Compiling this code with -Wconversion produces a spurious warning -
(I've tried gcc versions 4.2.3, 4.2.2, 3.4.6, 3.4.3, on both Linux
and Solaris, and get the same warning): 

---{ w_conversion_bug.c listing :
1:     extern unsigned short my_htons( unsigned short );
2:     void f(void)
3:     {   unsigned short port = 0x1234, n_port;
4:         n_port = my_htons( port );        
5:     }
---}
---{ compilation listing:
       $ gcc -Wconversion -c w_conversion_bug.c
       w_conversion_bug.c:4: warning: passing argument 1 of 'my_htons' with \   
       different width due to prototype
---}

This also happens for any code that invokes the system htons() with
an unsigned short argument, on modern Linux glibc and Solaris libc systems.

-Wconversion appears to be incorrectly complaining about a nonexistent
"conversion" - from "unsigned short" to "unsigned short" ?!?!?

OK, analyzing the documentation, I see -Wconversion is meant to be warning
about :
  "if a prototype causes a type conversion that is different
   from what would happen to the same argument in the absence of a
   prototype" ;
Yes, without a prototype here, the argument to my_htons would have been
an "int", so -Wconversion is warning that the argument is not an int.
But the code is passing the correct parameter type for the function!
And if I make the type of "port" into an "int", precisely the same
-Wconversion warning results, even though this would be a serious
error in the case of trying to use the system htons() with an int argument.
So how can one use -Wconversion to discover potential conversion errors?

These spurious warnings make what should be an extremely useful gcc warning
feature practically unusable and rather useless .

I think -Wconversion should produce a warning when
the type of the parameters passed in do not match the prototype,
necessitating a conversion - that would be really useful! - but
not when exactly the correct type according to the prototype is
passed and no conversion is required.

Please consider fixing this in a future release - thank you!


-- 
           Summary: -Wconversion produces spurious warnings
           Product: gcc
           Version: 4.2.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jason dot vas dot dias at gmail dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35214



More information about the Gcc-bugs mailing list