1. Oct 02, 2019
  2. Sep 30, 2019
  3. Sep 29, 2019
  4. Sep 27, 2019
    • Matthew Fernandez's avatar
      fix initial arena size · 381f0897
      Matthew Fernandez authored
      The initial allocation of each thread-local allocator pool was intended to be
      close to 8MB. However, the calculation was using the sizeof a pointer rather
      than the state structure itself. As a result, the initial allocator pool was
      typically much larger than 8MB.
      
      Github: closes #157 "initial arena size incorrect?"
      381f0897
  5. Sep 22, 2019
  6. Sep 19, 2019
    • Matthew Fernandez's avatar
      switch default SMT logic to QF_AUFLIA · e31ffc4c
      Matthew Fernandez authored
      We really should have been using a UF logic already, given we generate
      declare-fun commands. However, seems most solvers are happy to accept these in
      non-UF logics as well.
      e31ffc4c
  7. Sep 18, 2019
  8. Sep 17, 2019
  9. Sep 16, 2019
  10. Sep 15, 2019
    • Matthew Fernandez's avatar
      array expressions suppress SMT simplification in non-array logics · 1100fae5
      Matthew Fernandez authored
      When using an SMT logic like QF_LIA (`--smt-logic QF_LIA`) with no support for
      arrays, the SMT bridge would translate models containing array expressions. This
      meant the SMT solver would receive a problem it would not understand. We now
      bail out of translation when encountering an array expression while using a
      logic that does not support arrays.
      1100fae5
    • Matthew Fernandez's avatar
      enable now-passing test · f3c3020f
      Matthew Fernandez authored
      Github: related to #151 "variable shadowing causes invalid SMT problems"
      f3c3020f
    • Matthew Fernandez's avatar
      SMT: use a name mangling scheme based on identifiers instead of names · 7b171825
      Matthew Fernandez authored
      Instead of translating a variable like "foo" into something like "ru_foo" in the
      SMT bridge, we translate it to something like "s23". The purpose of this is to
      support symbol shadowing. E.g. in Murphi you can declare a rule-local variable
      that shadows one of the state variables. In translation to SMT this previously
      resulted in a malformed problem with a duplicate symbol definition.
      
      It would have been possible to work around this using scoping in SMT (`push` and
      `pop` commands) but these are not supported by all solvers. Instead we stop
      relying on the uniqueness of the Murphi symbols and construct unique symbols out
      of the AST identifiers. This makes the SMT problem less readable but more often
      syntactically well formed.
      
      Note that a side effect of this change is that Murphi identifiers that use
      characters not understood by your SMT solver (e.g. UTF-8 accented letters) no
      longer cause malformed SMT problems.
      
      Github: closes #151 "variable shadowing causes invalid SMT problems"
      7b171825
    • Matthew Fernandez's avatar
      make the target of a TypeExprID a TypeDecl instead of TypeExpr · 117ae412
      Matthew Fernandez authored
      Previously we were "unwrapping" a TypeDecl during symbol resolution. This meant
      that later on there was no way to ask "what TypeDecl did this TypeExprID point
      at?" This question was previously irrelevant but we now need to start
      synthesising unique symbols in the SMT bridge and it's becoming necessary.
      117ae412
    • Matthew Fernandez's avatar
      don't simplify the referent of a TypeExprID in the SMT bridge · 8a2e2dd7
      Matthew Fernandez authored
      Performing simplification within the referent of a TypeExprID is only useful if
      we intend to emit pieces of the referent during eventual code generation. This
      is not the case currently.
      8a2e2dd7
  11. Sep 12, 2019
  12. Sep 11, 2019
    • Matthew Fernandez's avatar
      fix: consider functions with assertions/assumptions/errors impure · ef5eb689
      Matthew Fernandez authored
      I had some doubts as to the semantics of this when I omitted these constructs to
      begin with, but it was confirmed by GCC ≥ 4.7 leveraging this to make
      model-breaking optimisations. We now conservatively consider any property
      statement or error statement to be an indicator of impurity.
      ef5eb689