This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Whats going on with the conversion warning?



I came across this odd issue with testsuite test Wconversion-5.c and AVR target.
I should get warning going from a unsigned value that is wider than signed result.


As I am not skilled in the art of the all conversions rules. I would appreciate some guidance before I report this as bug.

FYI AVR has 16 bit int, 16 bit short int and 32 bit long.

I extracted the problematic line with a few variants and compiled -O0 and -Wconversion,

void foo(void)
{
  signed char sc;
  signed char xi;

xi = (int) (unsigned short int) sc; /* testcase NO WARNING - think this is bug*/
xi = (unsigned short int) sc; /* NO WARNING - think this is bug*/
xi = (long) (unsigned short int) sc; /* warning: conversion to 'signed char' from 'short unsigned int' may alter its value - correct*/
xi = (long) ( short int) sc; /* NO WARNING - correct */
}


It would seem Wconversion:want to see 32bit result before it gives warning.
That can't be right - can it?

best regards




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]