about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMichael Woerister <michaelwoerister@posteo>2015-03-18 22:05:24 +0100
committerMichael Woerister <michaelwoerister@posteo>2015-03-19 18:52:30 +0100
commit1ea971ff87e7aee729c7330a394b975fb3a598b1 (patch)
treed961091051a758ea0c265dfb0785936fa22d1fe2 /src
parent5f77a47f6b906bc67d71534c0365c6f9efe9389d (diff)
downloadrust-1ea971ff87e7aee729c7330a394b975fb3a598b1.tar.gz
rust-1ea971ff87e7aee729c7330a394b975fb3a598b1.zip
Add test case for stable import of invalid span information.
Diffstat (limited to 'src')
-rw-r--r--src/test/auxiliary/crate_with_invalid_spans.rs30
-rw-r--r--src/test/auxiliary/crate_with_invalid_spans_macros.rs17
-rw-r--r--src/test/run-pass/import-crate-with-invalid-spans.rs20
3 files changed, 67 insertions, 0 deletions
diff --git a/src/test/auxiliary/crate_with_invalid_spans.rs b/src/test/auxiliary/crate_with_invalid_spans.rs
new file mode 100644
index 00000000000..b37533d2da7
--- /dev/null
+++ b/src/test/auxiliary/crate_with_invalid_spans.rs
@@ -0,0 +1,30 @@
+// Copyright 2015 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.
+
+#![crate_type = "rlib"]
+// no-prefer-dynamic
+
+// compile-flags: -g
+
+#[macro_use]
+mod crate_with_invalid_spans_macros;
+
+pub fn exported_generic<T>(x: T, y: u32) -> (T, u32) {
+    // Using the add1 macro will produce an invalid span, because the `y` passed
+    // to the macro will have a span from this file, but the rest of the code
+    // generated from the macro will have spans from the macro-defining file.
+    // The AST node for the (1 + y) expression generated by the macro will then
+    // take it's `lo` span bound from the `1` literal in the macro-defining file
+    // and it's `hi` bound from `y` in this file, which should be lower than the
+    // `lo` and even lower than the lower bound of the FileMap it is supposedly
+    // contained in because the FileMap for this file was allocated earlier than
+    // the FileMap of the macro-defining file.
+    return (x, add1!(y));
+}
diff --git a/src/test/auxiliary/crate_with_invalid_spans_macros.rs b/src/test/auxiliary/crate_with_invalid_spans_macros.rs
new file mode 100644
index 00000000000..112315af844
--- /dev/null
+++ b/src/test/auxiliary/crate_with_invalid_spans_macros.rs
@@ -0,0 +1,17 @@
+// Copyright 2015 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.
+
+macro_rules! add1 {
+    ($e:expr) => ({
+        let a = 1 + $e;
+        let b = $e + 1;
+        a + b - 1
+    })
+}
diff --git a/src/test/run-pass/import-crate-with-invalid-spans.rs b/src/test/run-pass/import-crate-with-invalid-spans.rs
new file mode 100644
index 00000000000..a949f25f41e
--- /dev/null
+++ b/src/test/run-pass/import-crate-with-invalid-spans.rs
@@ -0,0 +1,20 @@
+// Copyright 2015 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.
+
+// aux-build:crate_with_invalid_spans.rs
+
+extern crate crate_with_invalid_spans;
+
+fn main() {
+    // The AST of `exported_generic` stored in crate_with_invalid_spans's
+    // metadata should contain an invalid span where span.lo > span.hi.
+    // Let's make sure the compiler doesn't crash when encountering this.
+    let _ = crate_with_invalid_spans::exported_generic(32u32, 7u32);
+}