Fix size/offset assertion to allow negative offsets and folded nodes.
authorVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 23 May 2004 07:34:53 +0000 (07:34 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 23 May 2004 07:34:53 +0000 (07:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13644 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/DSNode.h
include/llvm/Analysis/DataStructure/DSNode.h

index 3ddd29a5ad0ae8841b794c54663cf7693a917777..f1bb90ed9c6b1fef25eb89587a8423468e976632 100644 (file)
@@ -386,7 +386,14 @@ struct ilist_traits<const DSNode> : public ilist_traits<DSNode> {};
 // Define inline DSNodeHandle functions that depend on the definition of DSNode
 //
 inline DSNode *DSNodeHandle::getNode() const {
-  assert((!N || Offset < N->Size || (N->Size == 0 && Offset == 0) ||
+  // Disabling this assertion because it is failing on a "magic" struct
+  // in named (from bind).  The fourth field is an array of length 0,
+  // presumably used to create struct instances of different sizes.
+  assert((!N ||
+          N->isNodeCompletelyFolded() ||
+          (N->Size == 0 && Offset == 0) ||
+          (int(Offset) >= 0 && Offset < N->Size) ||
+          (int(Offset) < 0 && -int(Offset) < int(N->Size)) ||
           N->isForwarding()) && "Node handle offset out of range!");
   if (N == 0 || !N->isForwarding())
     return N;
index 3ddd29a5ad0ae8841b794c54663cf7693a917777..f1bb90ed9c6b1fef25eb89587a8423468e976632 100644 (file)
@@ -386,7 +386,14 @@ struct ilist_traits<const DSNode> : public ilist_traits<DSNode> {};
 // Define inline DSNodeHandle functions that depend on the definition of DSNode
 //
 inline DSNode *DSNodeHandle::getNode() const {
-  assert((!N || Offset < N->Size || (N->Size == 0 && Offset == 0) ||
+  // Disabling this assertion because it is failing on a "magic" struct
+  // in named (from bind).  The fourth field is an array of length 0,
+  // presumably used to create struct instances of different sizes.
+  assert((!N ||
+          N->isNodeCompletelyFolded() ||
+          (N->Size == 0 && Offset == 0) ||
+          (int(Offset) >= 0 && Offset < N->Size) ||
+          (int(Offset) < 0 && -int(Offset) < int(N->Size)) ||
           N->isForwarding()) && "Node handle offset out of range!");
   if (N == 0 || !N->isForwarding())
     return N;