Rework CFG edges to encode potentially unreachable edges, instead of just…

Press ? to show keyboard shortcuts.
Committed
kremenekFeb 26 2014, 4:24 PM
Parents
rL202324: Fix testcase for PR18962 with an explicit triple
Branches
Unknown
Tags
Unknown
Description

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

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.

rL202325

cfe/trunk/include/clang/Analysis/CFG.h

Loading...

cfe/trunk/lib/Analysis/CFG.cpp

Loading...

cfe/trunk/lib/Analysis/CFGReachabilityAnalysis.cpp

Loading...

cfe/trunk/lib/Analysis/UninitializedValues.cpp

Loading...

Add Comment