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



             Bug #: 56658

           Summary: Silent conversion between 'char' and 'int' even though

                    there are 'signed char' and 'unsigned char'

                    alternatives

    Classification: Unclassified

           Product: gcc

           Version: 4.7.2

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: greenscape...@gmail.com





Consider code snippet:



#include <stdio.h>



typedef signed char int8_t;

typedef unsigned char uint8_t;



void foo(int8_t x)

{

    printf("Cartman");

}



void foo(uint8_t x)

{

    printf("Stan");

}



void foo(int x)

{

    printf("Kenny");

}



int main(int argc, char ** argv)

{

    char    person = '?';



    printf("Oh my God they killed ");

    foo(person);

    printf("! You bastards!\n");

}





It does compile and generate 0 warnings. Yes, we all know how 'wise' was former

creators of the standard when it came to char. But in this case, if compiler

can't figure out 'char' is 'signed char' there is still an ambiguity. And

silent conversion of 'char' to 'int' is just wrong. As far as I can judge,

clang guys just pathetically copy-pasted GCC's behavior. What I ask for is at

least warning message there.

Reply via email to