Whats going on with the conversion warning?

Andy H hutchinsonandy@aim.com
Tue May 20 02:20:00 GMT 2008


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





More information about the Gcc mailing list