Hex/octal signed constants can be represented in an unsigned extended integer type (csmith)
ID0000775:
**This issue was created automatically from Mantis Issue 775. Further discussion may take place here.**
---
| **Id** | **Project** | **Category** | **View** | **Due Date** | **Updated** |
| --- | --- | --- | --- | --- | --- |
| ID0000775 | Frama-C | Kernel | public | 2011-03-31 | 2014-02-12 |
| | | | | | |
| --- | --- | --- | --- | --- | --- |
| **Reporter** | pascal | **Assigned To** | monate | **Resolution** | fixed |
| **Priority** | normal | **Severity** | minor | **Reproducibility** | always |
| **Platform** | - | **OS** | - | **OS Version** | - |
| **Product Version** | Frama-C Carbon-20110201 | **Target Version** | - | **Fixed in Version** | Frama-C Nitrogen-20111001 |
### Description :
main(){
int r = 0xE2DB80EBBD4856CDLL >= 1;
return r;
}
This program, when compiled with GCC, returns 1. This is in accordance to page 56 of the C99 standard, where octal/hexadecimal LL constants can be represented as unsigned long long int when they do not fit inside a long long int.
However the front-end types the program wrongly, leading the value analysis to believe the return value is 0:
~/ppc/bin/toplevel.opt -val u.c -print
[value] Values for function main:
r ? {0; }
/* Generated by Frama-C */
int main(void)
{
int r ;
r = 0xE2DB80EBBD4856CDLL >= (long long )1;
return (r);
}
issue