Fix GDA not visiting global operator delete #231
Merged
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.
When GlobalDepsAnalyzer encounters a function where
isFreeFunctionName
returns true, that function is not visited immediately. Instead, a flag is set indicating that a function named "free" should be visited later, if needed.When
isFreeFunctionName
returns true for a function whose name is not "free" (so "_ZdlPv" or "_ZdaPv"), that function will never be visited by GDA. This results in a crash when the function references any other global that is deleted as a result of the function, and its children, not being visited.Example of a program that would crash:
I don't see any point in defering visiting the global delete operators, so the solution is to simply replace the call to
isFreeFunctionName
so we only defer visiting the function named "free". Note thatisFreeFunctionName
is still used in other places where it should probably return true for the global delete operators as well.