Fix GLIBCXX_DEBUG error of comparing two singular iterators
authorDavid Greene <greened@obbligato.org>
Fri, 17 Aug 2007 15:13:55 +0000 (15:13 +0000)
committerDavid Greene <greened@obbligato.org>
Fri, 17 Aug 2007 15:13:55 +0000 (15:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41139 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp

index 62854f76f950b5c52dd6c40757958eab67b5b4d2..f12e285416c80a4d27c7c158d40fb3347333a4de 100644 (file)
@@ -164,12 +164,14 @@ private:
   NodeInfo   *NI;                       // Node info
   NIIterator NGI;                       // Node group iterator
   NIIterator NGE;                       // Node group iterator end
+  bool iter_valid;
 
 public:
   // Ctor.
-  NodeGroupIterator(NodeInfo *N) : NI(N) {
+  NodeGroupIterator(NodeInfo *N) : NI(N), iter_valid(false) {
     // If the node is in a group then set up the group iterator.  Otherwise
     // the group iterators will trip first time out.
+    assert(N && "Bad node info");
     if (N->isInGroup()) {
       // get Group
       NodeGroup *Group = NI->Group;
@@ -177,14 +179,17 @@ public:
       NGE = Group->group_end();
       // Prevent this node from being used (will be in members list
       NI = NULL;
+      iter_valid = true;
     }
   }
 
   /// next - Return the next node info, otherwise NULL.
   ///
   NodeInfo *next() {
-    // If members list
-    if (NGI != NGE) return *NGI++;
+    if (iter_valid) {
+      // If members list
+      if (NGI != NGE) return *NGI++;
+    }
     // Use node as the result (may be NULL)
     NodeInfo *Result = NI;
     // Only use once