Skip to content
  • Xavier Leroy's avatar
    Fix evaluation order in emulation of bitfield assignment · 1f35599a
    Xavier Leroy authored
    A bitfield assignment `x.b = f()` is expanded into a read-modify-write
    on `x.carrier`.  Wrong results can occur if `x.carrier` is read before
    the call to `f()`, and `f` itself modifies a bitfield with the same
    carrier `x.carrier`.
    
    In this temporary fix, we play on the evaluation order implemented by
    the SimplExpr pass of CompCert (left-to-right for side-effecting
    subexpression) to make sure the read part of the read-modify-write
    sequence occurs after the evaluation of the right-hand side.
    
    More substantial fixes will be considered later.
    
    Fixes: #395
    1f35599a