示例代码:
void main(){
unsigned int x;
x = 1U << 31; // OK
x = 1 << 31; // Sign overflowed
return;
}
frama-c-gui -eva main.c:
void main(void)
{
unsigned int x;
x = 1U << 31;
/*@ assert Eva: signed_overflow: 1 << 31 ≤ 2147483647; */
x = (unsigned int)(1 << 31);
return;
}
由于第4行上的有符号溢出而发出红色警报。我有现有的代码,其中包含大量的硬件寄存器,这些寄存器由屏蔽位和移位位定义,如下所示。修改所有掩码位的代码添加“ U”是不合理的。 eval插件中是否可以将这些常量视为无符号整数?