]> granicus.if.org Git - clang/commitdiff
Added explicit pointer within class CFG to the Entry block.
authorTed Kremenek <kremenek@apple.com>
Wed, 22 Aug 2007 21:03:50 +0000 (21:03 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 22 Aug 2007 21:03:50 +0000 (21:03 +0000)
Before we assumed that the first block in the list of blocks was the entry
block, but this has posed hurdles during CFG construction.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41293 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/CFG.h

index 0f26a8dcbf59a0a15b5c9c921ccb3a27d7c8d64d..8cfe54552968ce4d77cb1f42bc65426ab47a7bfd 100644 (file)
@@ -153,11 +153,11 @@ public:
 ///  was constructed from.
 class CFG {
   typedef std::list<CFGBlock> CFGBlockListTy;
+  CFGBlock* Entry;
   CFGBlockListTy Blocks;
-
+  
 public:
-
-  CFG() {};
+  CFG() : Entry(NULL) {};
   ~CFG() {};
   
   CFGBlock* createBlock(unsigned blockID) { 
@@ -171,28 +171,28 @@ public:
   typedef std::reverse_iterator<iterator>                     reverse_iterator;
   typedef std::reverse_iterator<const_iterator>         const_reverse_iterator;
 
-  CFGBlock&                    front()             { return Blocks.front();  }
-  CFGBlock&                    back()              { return Blocks.back();   }
+  CFGBlock&                    front()             { return Blocks.front();    }
+  CFGBlock&                    back()              { return Blocks.back();     }
   
-  iterator                     begin()             { return Blocks.begin();   }
-  iterator                     end()               { return Blocks.end();     }
-  const_iterator               begin()       const { return Blocks.begin();   }
-  const_iterator               end()         const { return Blocks.end();     } 
+  iterator                     begin()             { return Blocks.begin();    }
+  iterator                     end()               { return Blocks.end();      }
+  const_iterator               begin()       const { return Blocks.begin();    }
+  const_iterator               end()         const { return Blocks.end();      
   
-  reverse_iterator             rbegin()            { return Blocks.rbegin();  }
-  reverse_iterator             rend()              { return Blocks.rend();    }
-  const_reverse_iterator       rbegin()      const { return Blocks.rbegin();  }
-  const_reverse_iterator       rend()        const { return Blocks.rend();    }
+  reverse_iterator             rbegin()            { return Blocks.rbegin();   }
+  reverse_iterator             rend()              { return Blocks.rend();     }
+  const_reverse_iterator       rbegin()      const { return Blocks.rbegin();   }
+  const_reverse_iterator       rend()        const { return Blocks.rend();     }
   
-  CFGBlock&                    getEntry()          { return front();          }
-  CFGBlock&                    getExit()           { return back();           }
+  CFGBlock&                    getEntry()   { return Entry ? *Entry : front(); }
+  CFGBlock&                    getExit()           { return back();            }
   
   // Utility
   
   static CFG* BuildCFG(Stmt* AST);
   void print(std::ostream& OS);
   void dump();
-      
+  void setEntry(CFGBlock *B) { Entry = B; }      
 };
 
-} // end namespace clang
\ No newline at end of file
+} // end namespace clang