diff --git a/src/bootstrap/channel.rs b/src/bootstrap/channel.rs index c4c3f68f7b6bb..be8cfbc670b95 100644 --- a/src/bootstrap/channel.rs +++ b/src/bootstrap/channel.rs @@ -28,7 +28,7 @@ pub const CFG_RELEASE_NUM: &'static str = "1.18.0"; // An optional number to put after the label, e.g. '.2' -> '-beta.2' // Be sure to make this starts with a dot to conform to semver pre-release // versions (section 9) -pub const CFG_PRERELEASE_VERSION: &'static str = ".2"; +pub const CFG_PRERELEASE_VERSION: &'static str = ".3"; pub struct GitInfo { inner: Option, diff --git a/src/doc/unstable-book/src/SUMMARY.md b/src/doc/unstable-book/src/SUMMARY.md index 6134757304170..a59a37f821df7 100644 --- a/src/doc/unstable-book/src/SUMMARY.md +++ b/src/doc/unstable-book/src/SUMMARY.md @@ -103,7 +103,6 @@ - [alloc](library-features/alloc.md) - [as_c_str](library-features/as-c-str.md) - [ascii_ctype](library-features/ascii-ctype.md) - - [binary_heap_peek_mut_pop](library-features/binary-heap-peek-mut-pop.md) - [box_heap](library-features/box-heap.md) - [c_void_variant](library-features/c-void-variant.md) - [char_escape_debug](library-features/char-escape-debug.md) @@ -172,17 +171,14 @@ - [panic_abort](library-features/panic-abort.md) - [panic_unwind](library-features/panic-unwind.md) - [pattern](library-features/pattern.md) - - [peek](library-features/peek.md) - [placement_in](library-features/placement-in.md) - [placement_new_protocol](library-features/placement-new-protocol.md) - [print](library-features/print.md) - [proc_macro_internals](library-features/proc-macro-internals.md) - - [process_try_wait](library-features/process-try-wait.md) - [question_mark_carrier](library-features/question-mark-carrier.md) - [rand](library-features/rand.md) - [range_contains](library-features/range-contains.md) - [raw](library-features/raw.md) - - [retain_hash_collection](library-features/retain-hash-collection.md) - [reverse_cmp_key](library-features/reverse-cmp-key.md) - [rt](library-features/rt.md) - [rustc_private](library-features/rustc-private.md) diff --git a/src/doc/unstable-book/src/library-features/binary-heap-peek-mut-pop.md b/src/doc/unstable-book/src/library-features/binary-heap-peek-mut-pop.md deleted file mode 100644 index f3863ab2a2abb..0000000000000 --- a/src/doc/unstable-book/src/library-features/binary-heap-peek-mut-pop.md +++ /dev/null @@ -1,7 +0,0 @@ -# `binary_heap_peek_mut_pop` - -The tracking issue for this feature is: [#38863] - -[#38863]: https://github.com/rust-lang/rust/issues/38863 - ------------------------- diff --git a/src/doc/unstable-book/src/library-features/peek.md b/src/doc/unstable-book/src/library-features/peek.md deleted file mode 100644 index c42b4e995ec58..0000000000000 --- a/src/doc/unstable-book/src/library-features/peek.md +++ /dev/null @@ -1,7 +0,0 @@ -# `peek` - -The tracking issue for this feature is: [#38980] - -[#38980]: https://github.com/rust-lang/rust/issues/38980 - ------------------------- diff --git a/src/doc/unstable-book/src/library-features/process-try-wait.md b/src/doc/unstable-book/src/library-features/process-try-wait.md deleted file mode 100644 index 3593b6423495a..0000000000000 --- a/src/doc/unstable-book/src/library-features/process-try-wait.md +++ /dev/null @@ -1,7 +0,0 @@ -# `process_try_wait` - -The tracking issue for this feature is: [#38903] - -[#38903]: https://github.com/rust-lang/rust/issues/38903 - ------------------------- diff --git a/src/doc/unstable-book/src/library-features/retain-hash-collection.md b/src/doc/unstable-book/src/library-features/retain-hash-collection.md deleted file mode 100644 index c9ba5acf02003..0000000000000 --- a/src/doc/unstable-book/src/library-features/retain-hash-collection.md +++ /dev/null @@ -1,7 +0,0 @@ -# `retain_hash_collection` - -The tracking issue for this feature is: [#36648] - -[#36648]: https://github.com/rust-lang/rust/issues/36648 - ------------------------- diff --git a/src/libcollections/binary_heap.rs b/src/libcollections/binary_heap.rs index 7d972403f65db..4e9dea09f79a0 100644 --- a/src/libcollections/binary_heap.rs +++ b/src/libcollections/binary_heap.rs @@ -268,7 +268,7 @@ impl<'a, T: Ord> DerefMut for PeekMut<'a, T> { impl<'a, T: Ord> PeekMut<'a, T> { /// Removes the peeked value from the heap and returns it. - #[unstable(feature = "binary_heap_peek_mut_pop", issue = "38863")] + #[stable(feature = "binary_heap_peek_mut_pop", since = "1.18.0")] pub fn pop(mut this: PeekMut<'a, T>) -> T { let value = this.heap.pop().unwrap(); this.sift = false; diff --git a/src/libcollections/tests/lib.rs b/src/libcollections/tests/lib.rs index 9c6e31d70a541..6da85ebaa77c8 100644 --- a/src/libcollections/tests/lib.rs +++ b/src/libcollections/tests/lib.rs @@ -10,7 +10,6 @@ #![deny(warnings)] -#![feature(binary_heap_peek_mut_pop)] #![feature(box_syntax)] #![feature(inclusive_range_syntax)] #![feature(collection_placement)] diff --git a/src/libstd/collections/hash/map.rs b/src/libstd/collections/hash/map.rs index 51d127f8ba79a..8c4cbb66b454d 100644 --- a/src/libstd/collections/hash/map.rs +++ b/src/libstd/collections/hash/map.rs @@ -1231,14 +1231,13 @@ impl HashMap /// # Examples /// /// ``` - /// #![feature(retain_hash_collection)] /// use std::collections::HashMap; /// /// let mut map: HashMap = (0..8).map(|x|(x, x*10)).collect(); /// map.retain(|&k, _| k % 2 == 0); /// assert_eq!(map.len(), 4); /// ``` - #[unstable(feature = "retain_hash_collection", issue = "36648")] + #[stable(feature = "retain_hash_collection", since = "1.18.0")] pub fn retain(&mut self, mut f: F) where F: FnMut(&K, &mut V) -> bool { diff --git a/src/libstd/collections/hash/set.rs b/src/libstd/collections/hash/set.rs index 7215e1bde8503..d80df5f18b610 100644 --- a/src/libstd/collections/hash/set.rs +++ b/src/libstd/collections/hash/set.rs @@ -116,8 +116,6 @@ use super::map::{self, HashMap, Keys, RandomState}; /// [`HashMap`]: struct.HashMap.html /// [`PartialEq`]: ../../std/cmp/trait.PartialEq.html /// [`RefCell`]: ../../std/cell/struct.RefCell.html - - #[derive(Clone)] #[stable(feature = "rust1", since = "1.0.0")] pub struct HashSet { @@ -658,7 +656,6 @@ impl HashSet /// # Examples /// /// ``` - /// #![feature(retain_hash_collection)] /// use std::collections::HashSet; /// /// let xs = [1,2,3,4,5,6]; @@ -666,7 +663,7 @@ impl HashSet /// set.retain(|&k| k % 2 == 0); /// assert_eq!(set.len(), 3); /// ``` - #[unstable(feature = "retain_hash_collection", issue = "36648")] + #[stable(feature = "retain_hash_collection", since = "1.18.0")] pub fn retain(&mut self, mut f: F) where F: FnMut(&T) -> bool { @@ -1041,9 +1038,7 @@ impl<'a, K> FusedIterator for Iter<'a, K> {} #[stable(feature = "std_debug", since = "1.16.0")] impl<'a, K: fmt::Debug> fmt::Debug for Iter<'a, K> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_list() - .entries(self.clone()) - .finish() + f.debug_list().entries(self.clone()).finish() } } @@ -1070,10 +1065,11 @@ impl FusedIterator for IntoIter {} #[stable(feature = "std_debug", since = "1.16.0")] impl fmt::Debug for IntoIter { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let entries_iter = self.iter.inner.iter().map(|(k, _)| k); - f.debug_list() - .entries(entries_iter) - .finish() + let entries_iter = self.iter + .inner + .iter() + .map(|(k, _)| k); + f.debug_list().entries(entries_iter).finish() } } @@ -1100,10 +1096,11 @@ impl<'a, K> FusedIterator for Drain<'a, K> {} #[stable(feature = "std_debug", since = "1.16.0")] impl<'a, K: fmt::Debug> fmt::Debug for Drain<'a, K> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let entries_iter = self.iter.inner.iter().map(|(k, _)| k); - f.debug_list() - .entries(entries_iter) - .finish() + let entries_iter = self.iter + .inner + .iter() + .map(|(k, _)| k); + f.debug_list().entries(entries_iter).finish() } } @@ -1143,12 +1140,10 @@ impl<'a, T, S> Iterator for Intersection<'a, T, S> #[stable(feature = "std_debug", since = "1.16.0")] impl<'a, T, S> fmt::Debug for Intersection<'a, T, S> where T: fmt::Debug + Eq + Hash, - S: BuildHasher, + S: BuildHasher { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_list() - .entries(self.clone()) - .finish() + f.debug_list().entries(self.clone()).finish() } } @@ -1202,12 +1197,10 @@ impl<'a, T, S> FusedIterator for Difference<'a, T, S> #[stable(feature = "std_debug", since = "1.16.0")] impl<'a, T, S> fmt::Debug for Difference<'a, T, S> where T: fmt::Debug + Eq + Hash, - S: BuildHasher, + S: BuildHasher { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_list() - .entries(self.clone()) - .finish() + f.debug_list().entries(self.clone()).finish() } } @@ -1243,12 +1236,10 @@ impl<'a, T, S> FusedIterator for SymmetricDifference<'a, T, S> #[stable(feature = "std_debug", since = "1.16.0")] impl<'a, T, S> fmt::Debug for SymmetricDifference<'a, T, S> where T: fmt::Debug + Eq + Hash, - S: BuildHasher, + S: BuildHasher { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_list() - .entries(self.clone()) - .finish() + f.debug_list().entries(self.clone()).finish() } } @@ -1269,12 +1260,10 @@ impl<'a, T, S> FusedIterator for Union<'a, T, S> #[stable(feature = "std_debug", since = "1.16.0")] impl<'a, T, S> fmt::Debug for Union<'a, T, S> where T: fmt::Debug + Eq + Hash, - S: BuildHasher, + S: BuildHasher { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_list() - .entries(self.clone()) - .finish() + f.debug_list().entries(self.clone()).finish() } } @@ -1698,7 +1687,7 @@ mod test_set { #[test] fn test_retain() { - let xs = [1,2,3,4,5,6]; + let xs = [1, 2, 3, 4, 5, 6]; let mut set: HashSet = xs.iter().cloned().collect(); set.retain(|&k| k % 2 == 0); assert_eq!(set.len(), 3); diff --git a/src/libstd/net/tcp.rs b/src/libstd/net/tcp.rs index bc315d54100e4..a46b6ea9d3c19 100644 --- a/src/libstd/net/tcp.rs +++ b/src/libstd/net/tcp.rs @@ -337,7 +337,6 @@ impl TcpStream { /// # Examples /// /// ```no_run - /// #![feature(peek)] /// use std::net::TcpStream; /// /// let stream = TcpStream::connect("127.0.0.1:8000") @@ -345,7 +344,7 @@ impl TcpStream { /// let mut buf = [0; 10]; /// let len = stream.peek(&mut buf).expect("peek failed"); /// ``` - #[unstable(feature = "peek", issue = "38980")] + #[stable(feature = "peek", since = "1.18.0")] pub fn peek(&self, buf: &mut [u8]) -> io::Result { self.0.peek(buf) } diff --git a/src/libstd/net/udp.rs b/src/libstd/net/udp.rs index cdf04f7f1a484..80151dc2b4455 100644 --- a/src/libstd/net/udp.rs +++ b/src/libstd/net/udp.rs @@ -112,7 +112,6 @@ impl UdpSocket { /// # Examples /// /// ```no_run - /// #![feature(peek)] /// use std::net::UdpSocket; /// /// let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to address"); @@ -120,7 +119,7 @@ impl UdpSocket { /// let (number_of_bytes, src_addr) = socket.peek_from(&mut buf) /// .expect("Didn't receive data"); /// ``` - #[unstable(feature = "peek", issue = "38980")] + #[stable(feature = "peek", since = "1.18.0")] pub fn peek_from(&self, buf: &mut [u8]) -> io::Result<(usize, SocketAddr)> { self.0.peek_from(buf) } @@ -638,7 +637,6 @@ impl UdpSocket { /// # Examples /// /// ```no_run - /// #![feature(peek)] /// use std::net::UdpSocket; /// /// let socket = UdpSocket::bind("127.0.0.1:34254").expect("couldn't bind to address"); @@ -649,7 +647,7 @@ impl UdpSocket { /// Err(e) => println!("peek function failed: {:?}", e), /// } /// ``` - #[unstable(feature = "peek", issue = "38980")] + #[stable(feature = "peek", since = "1.18.0")] pub fn peek(&self, buf: &mut [u8]) -> io::Result { self.0.peek(buf) } diff --git a/src/libstd/process.rs b/src/libstd/process.rs index 4ec9076de6166..1cbd6e66c6c39 100644 --- a/src/libstd/process.rs +++ b/src/libstd/process.rs @@ -903,8 +903,6 @@ impl Child { /// Basic usage: /// /// ```no_run - /// #![feature(process_try_wait)] - /// /// use std::process::Command; /// /// let mut child = Command::new("ls").spawn().unwrap(); @@ -919,7 +917,7 @@ impl Child { /// Err(e) => println!("error attempting to wait: {}", e), /// } /// ``` - #[unstable(feature = "process_try_wait", issue = "38903")] + #[stable(feature = "process_try_wait", since = "1.18.0")] pub fn try_wait(&mut self) -> io::Result> { Ok(self.handle.try_wait()?.map(ExitStatus)) } diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index fda026fec64ef..1f279cc9c80cd 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -695,7 +695,7 @@ impl<'a> ExtCtxt<'a> { /// Returns span for the macro which originally caused the current expansion to happen. /// /// Stops backtracing at include! boundary. - pub fn expansion_cause(&self) -> Span { + pub fn expansion_cause(&self) -> Option { let mut ctxt = self.backtrace(); let mut last_macro = None; loop { @@ -711,7 +711,7 @@ impl<'a> ExtCtxt<'a> { break } } - last_macro.expect("missing expansion backtrace") + last_macro } pub fn struct_span_warn(&self, diff --git a/src/libsyntax/ext/source_util.rs b/src/libsyntax/ext/source_util.rs index 0103d6ea959dd..49f5719ee3e26 100644 --- a/src/libsyntax/ext/source_util.rs +++ b/src/libsyntax/ext/source_util.rs @@ -35,7 +35,7 @@ pub fn expand_line(cx: &mut ExtCtxt, sp: Span, tts: &[tokenstream::TokenTree]) -> Box { base::check_zero_tts(cx, sp, tts, "line!"); - let topmost = cx.expansion_cause(); + let topmost = cx.expansion_cause().unwrap_or(sp); let loc = cx.codemap().lookup_char_pos(topmost.lo); base::MacEager::expr(cx.expr_u32(topmost, loc.line as u32)) @@ -46,7 +46,7 @@ pub fn expand_column(cx: &mut ExtCtxt, sp: Span, tts: &[tokenstream::TokenTree]) -> Box { base::check_zero_tts(cx, sp, tts, "column!"); - let topmost = cx.expansion_cause(); + let topmost = cx.expansion_cause().unwrap_or(sp); let loc = cx.codemap().lookup_char_pos(topmost.lo); base::MacEager::expr(cx.expr_u32(topmost, loc.col.to_usize() as u32)) @@ -59,7 +59,7 @@ pub fn expand_file(cx: &mut ExtCtxt, sp: Span, tts: &[tokenstream::TokenTree]) -> Box { base::check_zero_tts(cx, sp, tts, "file!"); - let topmost = cx.expansion_cause(); + let topmost = cx.expansion_cause().unwrap_or(sp); let loc = cx.codemap().lookup_char_pos(topmost.lo); base::MacEager::expr(cx.expr_str(topmost, Symbol::intern(&loc.file.name))) } diff --git a/src/test/compile-fail/issue-41776.rs b/src/test/compile-fail/issue-41776.rs new file mode 100644 index 0000000000000..5f108e0a1ed81 --- /dev/null +++ b/src/test/compile-fail/issue-41776.rs @@ -0,0 +1,13 @@ +// Copyright 2017 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + include!(line!()); //~ ERROR argument must be a string literal +}