Description
Firstly, it's not clear to me exactly how SMACK handles loop unrolling for bounded model-checking. But so far as I can see, loops can be unrolled either by LLVM (before translation to Boogie IVL), or by whatever Boogie verification backend is being used. There are some flags to control that, but it's not obvious to me which part of the process they affect. In any case, the usage notes suggest that I have to specify the unrolling bound myself, and warn me that verification will succeed if the bug I'm looking for is beyond that bound.
Compare this behaviour with CBMC, which by default attempts to compute loop bounds itself and unrolls to that limit. If it can't find a bound, it fails with an error. (Alternatively, for hard to compute bounds, you can specify a bound and have CBMC insert an assertion violation if the program goes beyond that.)
I would like the option for similar behaviour in SMACK. It looks like LLVM already has some ability to compute loop bounds through LoopInfo. So in the first instance, maybe SMACK could use that somehow, and (optionally) fail with an error message if there are any loops with no bound computable by LLVM?