Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently CFI does not properly handle it when adding variable annotations. Notice that
VarAnnot
and real annotations are treated differently byInferenceQualifierHierarchy#findAnnotationInSameHierarchy
andInferenceQualifierHierarchy#findAnnotationInHierarchy
, while considered to be in the same qualifier hierarchy.In this case, calling
replaceAnnotation
(which usesfindAnnotationInSameHierarchy
to fetch and remove existing annotations of the same hierarchy) attempting to replace a real annotation with a variable annotation does not work as intended, and it will add the variable annotation with the original annotation left intact, resulting in conflicting annotations.This pull request is currently only a partial fix and serves as an example of such issues, as there are other places where similar issues are expected to arise, given our experience experimenting on PICO inference. Whenever CFI crashes with a "conflicting annotations" exception between real annotations and variable annotations (or between variable annotations and variable annotations) being raised, it is possible to be a similar problem to the ones illustrated here.
CFI master currently does not have such problems because conflicting annotations check is temporarily disabled (among others), but customized checkers like GUT and PICO could suffer from it.