diff options
| author | Felix S. Klock II <pnkfelix@pnkfx.org> | 2016-10-12 19:29:50 +0200 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2016-10-18 22:51:02 +0000 |
| commit | f6859b07967e51de2620566340cfa8c4b1a7c4ab (patch) | |
| tree | 012b751dac73c05a19ae1f533df51c6e0dda266c | |
| parent | 45d365ae253c0b0cc3f88b8dce8722e9e7fb06c1 (diff) | |
| download | rust-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.rs | 32 | ||||
| -rw-r--r-- | src/test/run-pass/issue-36744-without-calls.rs | 22 |
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() {} |
