Burstall-Bornat style on array init
ID0000377: This issue was created automatically from Mantis Issue 377. Further discussion may take place here.
Id | Project | Category | View | Due Date | Updated |
---|---|---|---|---|---|
ID0000377 | Frama-C | Plug-in > jessie | public | 2010-01-20 | 2014-02-12 |
Reporter | dpariente | Assigned To | cmarche | Resolution | fixed |
Priority | normal | Severity | minor | Reproducibility | always |
Platform | - | OS | - | OS Version | - |
Product Version | Frama-C Beryllium-20090902 | Target Version | - | Fixed in Version | - |
Description :
(This issue was previously discussed with Frama-C team, and its solution - if not distorted too much - provided by CM)
On the following code:
void f() { float t[100]={0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14., ...}; //@ assert t[0]==0.; }
analyzed with : frama-c -jessie foo.c
PO generated for assert clause contains "nested" memory stores: mem1 == store(mem0, t[0], 0.) mem2 == store(mem1, t[1], 1.) mem3 == store(mem2, t[2], 2.) ... which can make difficult discharging by automatic theorem provers.
This could be avoided by replacing these nested stores by something like: select(mem0, t[0]) == 0. select(mem0, t[1]) == 1. select(mem0, t[2]) == 2. ...