Hi guys,

The following snippet of code should not produce a warning as far as I
understand:

int foo(short bar)
{
  return bar;
}

int main()
{
  short d = 0;
  return foo(d);
}

Unfortunately, however, I get this when I try to compile this code:

[EMAIL PROTECTED] ~/src $ gcc -Wconversion -o foo foo.c 
foo.c: In function 'main':
foo.c:9: warning: passing argument 1 of 'foo' with different width due to
prototype
[EMAIL PROTECTED] ~/src $ 

We use -Wconversion to catch assignments of signed values to unsigned variables
like such:

unsigned foo = -1;

Which it catches correctly as expected.

This problem also shows up when using char instead of short (at least, haven't
tested other types).  If the type of bar gets changed to int in the parameter
list of foo the warning goes away.

This warning was orriginally noted when using the strtok_r function, which uses
a macro implementation in order to use more optimal variations for certain
cases, the branch that checks for a constant needle of length 1 and then uses a
variation that looks for a single char produces the same warning:

warning: passing argument 2 of '__strtok_r_1c' with different width due to
prototype


-- 
           Summary: -Wconversion produces invalid warnings.
           Product: gcc
           Version: 4.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jaco at kroon dot co dot za
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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

Reply via email to