diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-02-16 04:02:09 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-02-16 04:02:09 +0000 |
commit | 9b529a76e9c607f2715529abe1cc9c2cffa35563 (patch) | |
tree | d2adf38680fd5073fb4a69d327dd8a2a221dc3ba /llvm/test/Transforms | |
parent | 7540eafb5c5f5b31436800dc6345f7b39d174e97 (diff) | |
download | bcm5719-llvm-9b529a76e9c607f2715529abe1cc9c2cffa35563.tar.gz bcm5719-llvm-9b529a76e9c607f2715529abe1cc9c2cffa35563.zip |
IR: Properly return nullptr when getAggregateElement is out-of-bounds
We didn't properly handle the out-of-bounds case for
ConstantAggregateZero and UndefValue. This would manifest as a crash
when the constant folder was asked to fold a load of a constant global
whose struct type has no operands.
This fixes PR22595.
llvm-svn: 229352
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r-- | llvm/test/Transforms/InstSimplify/load.ll | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstSimplify/load.ll b/llvm/test/Transforms/InstSimplify/load.ll new file mode 100644 index 00000000000..92953cd0ebf --- /dev/null +++ b/llvm/test/Transforms/InstSimplify/load.ll @@ -0,0 +1,19 @@ +; RUN: opt < %s -instsimplify -S | FileCheck %s + +@zeroinit = constant {} zeroinitializer +@undef = constant {} undef + +define i32 @crash_on_zeroinit() { +; CHECK-LABEL: @crash_on_zeroinit +; CHECK: ret i32 0 + %load = load i32* bitcast ({}* @zeroinit to i32*) + ret i32 %load +} + +define i32 @crash_on_undef() { +; CHECK-LABEL: @crash_on_undef +; CHECK: ret i32 undef + %load = load i32* bitcast ({}* @undef to i32*) + ret i32 %load +} + |