diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp index d52cef607c4..8c64d8ff7c9 100644 --- a/lib/Transforms/Scalar/SCCP.cpp +++ b/lib/Transforms/Scalar/SCCP.cpp @@ -1583,7 +1583,6 @@ bool SCCP::runOnFunction(Function &F) { for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) { Instruction *Inst = BI++; if (Inst->getType() == Type::VoidTy || - isa(Inst->getType()) || isa(Inst)) continue; @@ -1760,7 +1759,6 @@ bool IPSCCP::runOnModule(Module &M) { for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) { Instruction *Inst = BI++; if (Inst->getType() == Type::VoidTy || - isa(Inst->getType()) || isa(Inst)) continue; diff --git a/test/Transforms/SCCP/empty-struct.ll b/test/Transforms/SCCP/empty-struct.ll new file mode 100644 index 00000000000..4e3dc69514e --- /dev/null +++ b/test/Transforms/SCCP/empty-struct.ll @@ -0,0 +1,20 @@ +; RUN: llvm-as < %s > %t.bc +; RUN: llvm-ld %t.bc -o %t.sh +; PR2612 + +@current_foo = internal global { } zeroinitializer + +define i32 @main(...) { +entry: + %retval = alloca i32 ; [#uses=2] + store i32 0, i32* %retval + %local_foo = alloca { } ; <{ }*> [#uses=1] + load { }* @current_foo ; <{ }>:0 [#uses=1] + store { } %0, { }* %local_foo + br label %return + +return: ; preds = %entry + load i32* %retval ; :1 [#uses=1] + ret i32 %1 +} +