Conversation
sim642
left a comment
There was a problem hiding this comment.
This PR now contains both the generalization of Queries.ID from int64 to big ints and the query cycle check, which isn't actually used.
There are three options:
- Also do assert query removal and extend this PR to merge it all together.
- Remove the
MCP2.querychange for now and merge the domain change on its own. - Keep it as is. I suppose the query cycle detection is also working but not used yet, so I think this would also be fine.
I vote for option 1. |
…cle detection" This reverts commit e03b253.
|
I think I managed to finally switch The result of all this refactoring of I think we can do a new comparison benchmark to see if this hopefully behaves the same as the old master. |
I'll start one 😄 |
|
I guess this looks a lot more reasonable now 😄 |
|
Indeed, although I might try to look into the 15 benchmarks that go from true to unknown. Seems a bit surprising that it's less precise. Could also be that we were unsound before. Maybe due to sub-asks in |
|
I just tried one locally and it still outputted true, so I was confused about the unknown result in the table. The benchexec tool-info module for Goblint doesn't account for this possibility. I'm not sure it should either because there's no reason In this case it seems like we now get tons of these typeOffset errors while previously we didn't, so there might be something to still fix here. |
|
Actually, maybe not. They just appear because I do an extra |
|
Honestly, I don't know how to fix this other than fixing the complete trash error handling strategy in CIL. It prints error text directly and raises an argumentless I guess I could call our copy-pasted analyzer/src/util/cilfacade.ml Lines 249 to 317 in e9e71ae But every use of typeOf in Goblint uses Cil.typeOf directly (except a single one in osek) and this problem would in no way be limited to the typeOf call I added here (base has 69 others, which all could just as easily cause this problem) as any other CIL functions may do the same crap error handling.
|
That funnily enough slightly differs from Also, the entire Maybe we can work some super dirty workaround that temporarily sets |
I noticed that too when I copied the CIL implementation over
I tried to do that, but it didn't work: there was still output. Now I know why: Given that we already have |
|
It seems like this might finally be in merge-able condition although there is one more subtlety about this change regarding the extra I don't completely understand this weird conversion mechanism (seems non-monotonic), so I don't really know what the expected behavior should be. |
|
In the process of making #278 work, I answered my own question: the query response also needs to change bottoms into tops to supply sound values to other analyses. That then happens at every subexpression, not just the outermost, and nothing seemed to break because of this, so hopefully it's good. |
| let shift_right n1 n2 = Int64.shift_right n1 (Int64.to_int n2) | ||
| let bitnot = Ints_t.lognot | ||
| let bitand = Ints_t.logand | ||
| let bitor = Ints_t.logor |
There was a problem hiding this comment.
Is this correct ?!
For int64:
val logor : int64 -> int64 -> int64 (* Bitwise logical or. *)
But for Ints_t we have bitnot etc.
Closes #238.
Queriesnow hasBigIntin the integer result domain.IntDomain.Integersare now a functor which takesIntOps. This way we can choose if we want them withint64orBigInt.