mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 23:31:37 +00:00
Check that TD isn't NULL before dereferencing it down this path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187099 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2d680824e3
commit
b97b162731
@ -2783,7 +2783,7 @@ bool Evaluator::EvaluateBlock(BasicBlock::iterator CurInst,
|
|||||||
Value *Ptr = PtrArg->stripPointerCasts();
|
Value *Ptr = PtrArg->stripPointerCasts();
|
||||||
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Ptr)) {
|
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Ptr)) {
|
||||||
Type *ElemTy = cast<PointerType>(GV->getType())->getElementType();
|
Type *ElemTy = cast<PointerType>(GV->getType())->getElementType();
|
||||||
if (!Size->isAllOnesValue() &&
|
if (TD && !Size->isAllOnesValue() &&
|
||||||
Size->getValue().getLimitedValue() >=
|
Size->getValue().getLimitedValue() >=
|
||||||
TD->getTypeStoreSize(ElemTy)) {
|
TD->getTypeStoreSize(ElemTy)) {
|
||||||
Invariants.insert(GV);
|
Invariants.insert(GV);
|
||||||
|
17
test/Transforms/GlobalOpt/invariant-nodatalayout.ll
Normal file
17
test/Transforms/GlobalOpt/invariant-nodatalayout.ll
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
; RUN: opt -globalopt -S -o - < %s | FileCheck %s
|
||||||
|
; The check here is that it doesn't crash.
|
||||||
|
|
||||||
|
declare {}* @llvm.invariant.start(i64 %size, i8* nocapture %ptr)
|
||||||
|
|
||||||
|
@object1 = global { i32, i32 } zeroinitializer
|
||||||
|
; CHECK: @object1 = global { i32, i32 } zeroinitializer
|
||||||
|
|
||||||
|
define void @ctor1() {
|
||||||
|
%ptr = bitcast {i32, i32}* @object1 to i8*
|
||||||
|
call {}* @llvm.invariant.start(i64 4, i8* %ptr)
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
@llvm.global_ctors = appending constant
|
||||||
|
[1 x { i32, void ()* }]
|
||||||
|
[ { i32, void ()* } { i32 65535, void ()* @ctor1 } ]
|
Loading…
x
Reference in New Issue
Block a user