From 4840146b46b9fa4bb3f14c7f5f7eaf27852bfa55 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 29 Apr 2002 20:09:21 +0000 Subject: [PATCH] Fix for problem when allocating something like this: malloc(100-i); git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2409 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/ExprTypeConvert.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/Transforms/ExprTypeConvert.cpp b/lib/Transforms/ExprTypeConvert.cpp index 9f75198e1ca..02ee7b2d953 100644 --- a/lib/Transforms/ExprTypeConvert.cpp +++ b/lib/Transforms/ExprTypeConvert.cpp @@ -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.