about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFelix S. Klock II <pnkfelix@pnkfx.org>2016-10-12 19:29:50 +0200
committerBrian Anderson <banderson@mozilla.com>2016-10-18 22:51:02 +0000
commitf6859b07967e51de2620566340cfa8c4b1a7c4ab (patch)
tree012b751dac73c05a19ae1f533df51c6e0dda266c
parent45d365ae253c0b0cc3f88b8dce8722e9e7fb06c1 (diff)
downloadrust-f6859b07967e51de2620566340cfa8c4b1a7c4ab.tar.gz
rust-f6859b07967e51de2620566340cfa8c4b1a7c4ab.zip
Some tests to check that lifetime parametric fn's do not trip up LLVM.
-rw-r--r--src/test/run-pass/issue-36744-bitcast-args-if-needed.rs32
-rw-r--r--src/test/run-pass/issue-36744-without-calls.rs22
2 files changed, 54 insertions, 0 deletions
diff --git a/src/test/run-pass/issue-36744-bitcast-args-if-needed.rs b/src/test/run-pass/issue-36744-bitcast-args-if-needed.rs
new file mode 100644
index 00000000000..1859cc9ca00
--- /dev/null
+++ b/src/test/run-pass/issue-36744-bitcast-args-if-needed.rs
@@ -0,0 +1,32 @@
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// This tests for an ICE (and, if ignored, subsequent LLVM abort) when
+// a lifetime-parametric fn is passed into a context whose expected
+// type has a differing lifetime parameterization.
+
+struct A<'a> {
+    _a: &'a i32,
+}
+
+fn call<T>(s: T, functions: &Vec<for <'n> fn(&'n T)>) {
+    for function in functions {
+        function(&s);
+    }
+}
+
+fn f(a: &A) { println!("a holds {}", a._a); }
+
+fn main() {
+    let a = A { _a: &10 };
+
+    let vec: Vec<for <'u,'v> fn(&'u A<'v>)> = vec![f];
+    call(a, &vec);
+}
diff --git a/src/test/run-pass/issue-36744-without-calls.rs b/src/test/run-pass/issue-36744-without-calls.rs
new file mode 100644
index 00000000000..1766edb06b4
--- /dev/null
+++ b/src/test/run-pass/issue-36744-without-calls.rs
@@ -0,0 +1,22 @@
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Tests for an LLVM abort when storing a lifetime-parametric fn into
+// context that is expecting one that is not lifetime-parametric
+// (i.e. has no `for <'_>`).
+
+pub struct A<'a>(&'a ());
+pub struct S<T>(T);
+
+pub fn bad<'s>(v: &mut S<fn(A<'s>)>, y: S<for<'b> fn(A<'b>)>) {
+    *v = y;
+}
+
+fn main() {}