]> granicus.if.org Git - clang/commit
Rework CFG edges to encode potentially unreachable edges, instead of just making...
authorTed Kremenek <kremenek@apple.com>
Thu, 27 Feb 2014 00:24:00 +0000 (00:24 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 27 Feb 2014 00:24:00 +0000 (00:24 +0000)
commit36ce652a8fb927017072470a58af5e2715f231f6
treeffcc417b6ab59784e7969b1aa318895d6840649e
parentb7cb2e80c8ec3389172dab9ea5045fbe7fc19d3d
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202325 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Analysis/CFG.h
lib/Analysis/CFG.cpp
lib/Analysis/CFGReachabilityAnalysis.cpp
lib/Analysis/UninitializedValues.cpp