<div dir="ltr">Hi All,<div><br></div><div>I'm toying with a taint analysis checker, and for compound assignment operators (CAOs) I would like to have a rule stating "if the LHS is tainted or the RHS is tainted, then the LHS will become tainted." So far I've been evaluating these rules by hooking PreStmt's, and I've been tracking tainted memory with checkLocation. Taints are read during a checkLocation[load] and written during a checkLocation[store]. This has worked beautifully for every expression other than CAOs. For CAOs, I would expect the following order of analysis:</div><div><br></div><div>load(LHS)</div><div>load(RHS)</div><div>preStmt(CAO)</div><div>store(LHS)</div><div><br></div><div>Instead I observe</div><div><br></div><div>load(RHS)</div><div>preStmt(CAO)</div><div>load(LHS)</div><div>store(LHS)</div><div><br></div><div>This is clearly problematic for my taint rule. At the time preStmt is triggered, I only have the taint value for the RHS. If I instead implement the rule during the load(LHS) or store(LHS), then I have to do something ugly like resort to the ParentMap to figure out whether I'm loading/storing during a CAO. If I implement the rule during a postStmt, then I would miss the store(LHS), and would instead have to figure out which location had been written to during the store. Although either of these solutions may work in practice, it would seem silly to carve a hole in my design with an exception for this one type of expression.</div><div><br></div><div>Is there a very good reason that the LHS and RHS are loaded on different sides of the preStmt? If so, what would be the best workaround? If not, could I easily reconfigure the core to load the LHS and RHS before visiting the PreStmt?</div><div><br></div><div>~Scott Constable</div></div>