The old library interface parser relied in the generically-derived JSON parser from aeson. Unfortunately, the format that aeson used for these parsers changed in 0.7. Instead of updating all of the data, we now use manually-written ToJSON and FromJSON instances. We can now safely use modern versions of aeson.
This regular expression replaces function calls in code snippets with links to the called function. This tweaks the regex to make sure the matched word ends at a word boundary and doesn't just highlight some prefix of a word. This showed up in various places, but an example was deflate/deflateEnd, where deflate highlighted a prefix of deflateEnd, preventing deflateEnd from being correctly highlighted.
Transitive error returning functions might not return other error constants. The prior version of the analysis only looked at functions that returned error constants. This change just checks every function for transitive error returns.
Once we learn something is a success (by the new majority criterion), never consider a success code to be an error code, even if we previously thought so. This works because we aren't classifying boolean functions anymore. This change also modifies how error code summaries are used. Before, only the first FAReportsErrors annotation would be used. Now all are used. Furthermore, for transitive errors, the error action is dropped because only the callee takes that action - the caller does not.
There is now a check to ignore functions that are trivially boolean or always return 1 or 0. This removes a large source of errors where we would classify boolean returns as error codes, polluting all of the results after that.
Now, in order to be a success indicator, a function whose error return is ignored must be followed by some other non-return non-phi non-direct-branch code. The idea is to try to avoid flagging cleanup code with an ignored return code as a success. It may be worth expanding this so that a basic block of cleanup code (e.g. free; free; free;) could also be handled.