diff options
author | Matthijs Kooijman <matthijs@stdin.nl> | 2008-06-05 08:57:20 +0000 |
---|---|---|
committer | Matthijs Kooijman <matthijs@stdin.nl> | 2008-06-05 08:57:20 +0000 |
commit | 75ac80378b1febd2a917dc849f099a16ca2243cf (patch) | |
tree | b4ac9d823367bc2de5461c37d9b884e156489a4d /test/Transforms/SRETPromotion | |
parent | 848fa3472ab017516acfc3c6f36797a49afa8f7f (diff) | |
download | external_llvm-75ac80378b1febd2a917dc849f099a16ca2243cf.zip external_llvm-75ac80378b1febd2a917dc849f099a16ca2243cf.tar.gz external_llvm-75ac80378b1febd2a917dc849f099a16ca2243cf.tar.bz2 |
Let StructRetPromotion check if all if its users are really calls or invokesn,
not other instructions. This fixes a crash with the added testcase.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51992 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/SRETPromotion')
-rw-r--r-- | test/Transforms/SRETPromotion/2008-06-05-non-call-use.ll | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/Transforms/SRETPromotion/2008-06-05-non-call-use.ll b/test/Transforms/SRETPromotion/2008-06-05-non-call-use.ll new file mode 100644 index 0000000..10f92ef --- /dev/null +++ b/test/Transforms/SRETPromotion/2008-06-05-non-call-use.ll @@ -0,0 +1,20 @@ +; This test shows an sret function that is used as an operand to a bitcast. +; StructRetPromotion used to assume that a function was only used by call or +; invoke instructions, making this code cause an assertion failure. + +; We're mainly testing for opt not to crash, but we'll check to see if the sret +; attribute is still there for good measure. +; RUN: llvm-as < %s | opt -sretpromotion | llvm-dis | grep sret + +%struct.S = type <{ i32, i32 }> + +define i32 @main() { +entry: + %bar = bitcast void (%struct.S*)* @foo to i32 ()* + ret i32 undef +} + +define internal void @foo(%struct.S* sret) { +entry: + ret void +} |