Fix for problem when allocating something like this:
authorChris Lattner <sabre@nondot.org>
Mon, 29 Apr 2002 20:09:21 +0000 (20:09 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 29 Apr 2002 20:09:21 +0000 (20:09 +0000)
   malloc(100-i);

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

lib/Transforms/ExprTypeConvert.cpp

index 9f75198e1ca1bd3b659e15ebdb7973ea8bd9ede7..02ee7b2d9539722f130927de4a2e68efcc7bbab6 100644 (file)
@@ -62,7 +62,7 @@ static bool MallocConvertableToType(MallocInst *MI, const Type *Ty,
   analysis::ExprType Expr = analysis::ClassifyExpression(MI->getArraySize());
 
   // Get information about the base datatype being allocated, before & after
-  unsigned ReqTypeSize = TD.getTypeSize(Ty);
+  int ReqTypeSize = TD.getTypeSize(Ty);
   unsigned OldTypeSize = TD.getTypeSize(MI->getType()->getElementType());
 
   // Must have a scale or offset to analyze it...
@@ -71,15 +71,11 @@ static bool MallocConvertableToType(MallocInst *MI, const Type *Ty,
   // Get the offset and scale of the allocation...
   int OffsetVal = Expr.Offset ? getConstantValue(Expr.Offset) : 0;
   int ScaleVal = Expr.Scale ? getConstantValue(Expr.Scale) : (Expr.Var ? 1 : 0);
-  if (ScaleVal < 0 || OffsetVal < 0) {
-    cerr << "malloc of a negative number???\n";
-    return false;
-  }
 
   // The old type might not be of unit size, take old size into consideration
   // here...
-  unsigned Offset = (unsigned)OffsetVal * OldTypeSize;
-  unsigned Scale  = (unsigned)ScaleVal  * OldTypeSize;
+  int Offset = OffsetVal * OldTypeSize;
+  int Scale  = ScaleVal  * OldTypeSize;
   
   // In order to be successful, both the scale and the offset must be a multiple
   // of the requested data type's size.