Fix bug: test/Regression/Analysis/DSGraph/2003-11-02-NodeCollapsing.ll
authorChris Lattner <sabre@nondot.org>
Sun, 2 Nov 2003 21:02:20 +0000 (21:02 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 2 Nov 2003 21:02:20 +0000 (21:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9658 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/DataStructure.cpp

index b125b5d67f396ad67dd8a461ed8dbc7cc5116362..efcae9826ef72efbc27a92889f1e30e577994d66 100644 (file)
@@ -252,9 +252,11 @@ namespace {
 
 /// ElementTypesAreCompatible - Check to see if the specified types are
 /// "physically" compatible.  If so, return true, else return false.  We only
-/// have to check the fields in T1: T2 may be larger than T1.
+/// have to check the fields in T1: T2 may be larger than T1.  If AllowLargerT1
+/// is true, then we also allow a larger T1.
 ///
-static bool ElementTypesAreCompatible(const Type *T1, const Type *T2) {
+static bool ElementTypesAreCompatible(const Type *T1, const Type *T2,
+                                      bool AllowLargerT1) {
   TypeElementWalker T1W(T1), T2W(T2);
   
   while (!T1W.isDone() && !T2W.isDone()) {
@@ -270,7 +272,7 @@ static bool ElementTypesAreCompatible(const Type *T1, const Type *T2) {
     T2W.StepToNextType();
   }
   
-  return T1W.isDone();
+  return AllowLargerT1 || T1W.isDone();
 }
 
 
@@ -327,8 +329,8 @@ bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset,
   if (Ty == Type::VoidTy) {
     // If this is the first type that this node has seen, just accept it without
     // question....
-    assert(Offset == 0 && "Cannot have an offset into a void node!");
-    assert(!isArray() && "This shouldn't happen!");
+    assert(Offset == 0 && !isArray() &&
+           "Cannot have an offset into a void node!");
     Ty = NewTy;
     NodeType &= ~Array;
     if (WillBeArray) NodeType |= Array;
@@ -424,7 +426,7 @@ bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset,
   // just require each element in the node to be compatible.
   if (NewTySize <= SubTypeSize && NewTySize && NewTySize < 256 &&
       SubTypeSize && SubTypeSize < 256 && 
-      ElementTypesAreCompatible(NewTy, SubType))
+      ElementTypesAreCompatible(NewTy, SubType, !isArray()))
     return false;
 
   // Okay, so we found the leader type at the offset requested.  Search the list