Rework CFG edges to encode potentially unreachable edges, instead of just making them NULL.

Programming / Compilers / Clang - Ted Kremenek [apple.com] - 26 February 2014 18:24 UTC

This is to support some analyses, like -Wunreachable-code, that will need to recover the original unprunned CFG edges in order to suppress issues that aren't really bugs in practice.

There are two important changes here:

- AdjacentBlock replaces CFGBlock* for CFG successors/predecessors. This has the size of 2 pointers, instead of 1. This is unlikely to have a significant memory impact on Sema since a single CFG usually exists at one time, but could impact the memory usage of the static analyzer. This could possibly be optimized down to a single pointer with some cleverness.

- Predecessors can now contain null predecessors, which means some analyses doing a reverse traversal will need to take into account. This already exists for successors, which contain successor slots for specific branch kinds (e.g., 'if') that expect a fixed number of successors, even if a branch is not reachable.

36ce652 Rework CFG edges to encode potentially unreachable edges, instead of just making them NULL.
include/clang/Analysis/CFG.h | 66 +++++++++++++++++++++++++++---
lib/Analysis/CFG.cpp | 51 ++++++++++++++++++++---
lib/Analysis/CFGReachabilityAnalysis.cpp | 3 +-
lib/Analysis/UninitializedValues.cpp | 5 +++
4 files changed, 113 insertions(+), 12 deletions(-)

Upstream: github.com


  • Share