about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatt Peterson <ricochet1k@gmail.com>2017-12-20 15:37:22 -0500
committerMatt Peterson <ricochet1k@gmail.com>2017-12-28 11:32:05 -0500
commit0e53360af69bf9e71ef39e570655d73fc44339b9 (patch)
tree6c33732eb073e822b6855ec939cbb2f9ff738a49
parente12b87096a9c1856db9874c3af0bc64423b5477a (diff)
downloadrust-0e53360af69bf9e71ef39e570655d73fc44339b9.tar.gz
rust-0e53360af69bf9e71ef39e570655d73fc44339b9.zip
Fix build and add a macro lifetime labels test
-rw-r--r--src/libsyntax/ext/quote.rs3
-rw-r--r--src/test/run-pass/macro-lifetime-used-with-labels.rs43
2 files changed, 44 insertions, 2 deletions
diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs
index a0d72b786bf..59996d1e4a7 100644
--- a/src/libsyntax/ext/quote.rs
+++ b/src/libsyntax/ext/quote.rs
@@ -192,8 +192,7 @@ pub mod rt {
 
     impl ToTokens for ast::Lifetime {
         fn to_tokens(&self, _cx: &ExtCtxt) -> Vec<TokenTree> {
-            let lifetime_ident = ast::Ident::with_empty_ctxt(self.name);
-            vec![TokenTree::Token(DUMMY_SP, token::Lifetime(lifetime_ident))]
+            vec![TokenTree::Token(DUMMY_SP, token::Lifetime(self.ident))]
         }
     }
 
diff --git a/src/test/run-pass/macro-lifetime-used-with-labels.rs b/src/test/run-pass/macro-lifetime-used-with-labels.rs
new file mode 100644
index 00000000000..d003d7dcfb6
--- /dev/null
+++ b/src/test/run-pass/macro-lifetime-used-with-labels.rs
@@ -0,0 +1,43 @@
+// Copyright 2012 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.
+
+#![allow(unreachable_code)]
+
+macro_rules! x {
+    ($a:lifetime) => {
+        $a: loop {
+            break $a;
+            panic!("failed");
+        }
+    }
+}
+macro_rules! br {
+    ($a:lifetime) => {
+        break $a;
+    }
+}
+macro_rules! br2 {
+    ($b:lifetime) => {
+        'b: loop {
+            break $b; // this $b should refer to the outer loop.
+        }
+    }
+}
+fn main() {
+    x!('a);
+    'c: loop {
+        br!('c);
+        panic!("failed");
+    }
+    'b: loop {
+        br2!('b);
+        panic!("failed");
+    }
+}