summaryrefslogtreecommitdiffstats
path: root/test/Transforms/SRETPromotion/2008-06-05-non-call-use.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/Transforms/SRETPromotion/2008-06-05-non-call-use.ll')
-rw-r--r--test/Transforms/SRETPromotion/2008-06-05-non-call-use.ll20
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..26c6a6e
--- /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: opt < %s -sretpromotion -S | 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
+}