Hi all,
This is either a C standard subtlety or a bug in GCC.
For example:
unsigned short foo (unsigned int a)
{
return a;
}
enum xpto
{
A = 0,
B = 1,
X = 512
};
extern void print (unsigned int);
unsigned char bar (enum xpto a)
{
print (sizeof (unsigned char));
print (sizeof (enum xpto));
return a;
}
$ ~/work/tmp/GCC/builds/gcc-trunk/gcc/cc1 -O2 test.c -Wall -Wconversion
--short-enums -quiet
test.c: In function 'foo':
test.c:3:3: warning: conversion to 'short unsigned int' from 'unsigned int' may
alter its value [-Wconversion]
return a;
^
I was expecting a warning for bar as well since sizeof unsigned char is 1 and
sizeof enum xpto is 2, therefore the value is truncated but no warning is
issued.
Shall I open a PR?
Paulo Matos