From: Bob Wilson Date: Mon, 1 Feb 2010 17:41:44 +0000 (+0000) Subject: Fix pr6198 by moving the isSized() check to an outer conditional. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3cb8509b680209c79632d7445709452f28213057;p=oota-llvm.git Fix pr6198 by moving the isSized() check to an outer conditional. The testcase from pr6198 does not crash for me -- I don't know what's up with that -- so I'm not adding it to the tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94984 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Utils/Local.cpp b/lib/Transforms/Utils/Local.cpp index 62c0ae0d844..7e7973ae0b7 100644 --- a/lib/Transforms/Utils/Local.cpp +++ b/lib/Transforms/Utils/Local.cpp @@ -95,13 +95,15 @@ bool llvm::isSafeToLoadUnconditionally(Value *V, Instruction *ScanFrom, BaseAlign = GV->getAlignment(); } } - if (TD && BaseType && BaseAlign == 0) - BaseAlign = TD->getPrefTypeAlignment(BaseType); - if (BaseType && Align <= BaseAlign) { - if (!TD) - return true; // Loading directly from an alloca or global is OK. - if (BaseType->isSized()) { + if (BaseType && BaseType->isSized()) { + if (TD && BaseAlign == 0) + BaseAlign = TD->getPrefTypeAlignment(BaseType); + + if (Align <= BaseAlign) { + if (!TD) + return true; // Loading directly from an alloca or global is OK. + // Check if the load is within the bounds of the underlying object. const PointerType *AddrTy = cast(V->getType()); uint64_t LoadSize = TD->getTypeStoreSize(AddrTy->getElementType());