[cfe-dev] segfault while calculating post-dominator tree
    Greenwalker 
    panagos13 at hotmail.com
       
    Sun Jul  6 11:25:56 PDT 2014
    
    
  
Hi all!
I am trying to caclulate the post-dominance tree of a given cfg.
Since clang::DominatorTree class is for calculating the dominance tree (not
post-dominance) I did the following:
class methodAnalyser{
public:
  methodAnalyser(const FunctionDecl *FD){
    manager = new AnalysisDeclContextManager();
    analysis = new AnalysisDeclContext(&manager, FD);
    DT = new llvm::DominatorTreeBase<CFGBlock>(true);//argument 'true'
indicates we are interested in POST-dominance tree.
    cfg = analysis->getCFG();
    DT->recalculate(*cfg);
  } 
protected:
  CFG *cfg;
  llvm::DominatorTreeBase<CFGBlock> *DT;
  AnalysisDeclContextManager manager;
  AnalysisDeclContext *analysis;
};
While for some (non trivial) programs the above approach works fine there
are cases where DT->recalculate(*cfg) segfaults.
One thing I found is that this happens when an edge in the cfg is marked as
'non-reachable' (basic block contains a statement that is marked as
'no-return').
I am interested in calculating the post-dominance tree for nodes that *are
reachable* from the start of a program so is there a way to create a cfg
without 'non-reachable' edges etc... ? If not, is there a completelly
different approach for calculating the post-dominance tree or I have to
implement my own algorithm ?
Thank you very much!
--
View this message in context: http://clang-developers.42468.n3.nabble.com/segfault-while-calculating-post-dominator-tree-tp4040376.html
Sent from the Clang Developers mailing list archive at Nabble.com.
    
    
More information about the cfe-dev
mailing list