Hi,
I also think that this is invalid C code. Initializers for static local
variables have to be constant values. Variables with const modifier are
not considered a constant value in this context (at least not by gcc,
not sure what the standard says).
So, the following code does also NOT work...
const unsigned short a = 22;
static unsigned short b = a - 1; /* a is not seen as constant value by
gcc */
The message "error: initializer element is not constant" is in fact a
gcc error message stating exactly that.
If you want to use a declared constant in such case, you can write
something like...
enum {a = 22};
static unsigned short b = a - 1; /* now a is a constant int value and
the expression is folded to 21 */
The integer promotion you noticed is because of the used integer
constant for arithmetics in "a - 1". Since "1" is a signed integer, "a"
has to be promoted to a signed integer in order to compute the minus.
Cheers
Oliver
24.07.2012 07:48, Gabriel Kerneis:
> On Mon, Jul 23, 2012 at 05:45:06PM +0200, Jan Smets wrote:
>> Is this a valid coding error or a bug in cil ?
>> static const unsigned short b = a - 1;
> This is a coding error (or at least gcc refuses to compile it).
> Not sure about the integer promotion, though.
>
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
CIL-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cil-users