From 84b617b1ea700b512a6f8d79fe7ae76eb2966316 Mon Sep 17 00:00:00 2001
From: Jay Oster <jay@pubnub.com>
Date: Tue, 14 May 2019 18:15:20 -0700
Subject: [PATCH] Fix features since nightly-2018-08-14 disallowed old features

---
 build.rs   |  7 ++++++-
 ct.sh      |  2 ++
 src/lib.rs | 11 ++++++++---
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/build.rs b/build.rs
index 17f5359..0f3df92 100644
--- a/build.rs
+++ b/build.rs
@@ -52,6 +52,11 @@ type Date = &'static str;
 /// versions for which to enable particular features.
 type ConditionalCfg = (Cfg, &'static [(Date, Cfg)]);
 const CONDITIONAL_CFGS: &'static [ConditionalCfg] = &[
+	(None, &[("2019-02-24", Some("pattern_guards"))]),
+	(None, &[("2018-08-14", Some("non_exhaustive"))]),
+	(Some("collections"), &[("2018-08-13", None)]),
+	(Some("str_char"), &[("2018-08-13", None)]),
+	(Some("unicode"), &[("2018-08-13", None)]),
 	(None, &[("2018-01-01", Some("core_memchr"))]),
 	(None, &[("2017-06-15", Some("no_collections"))]),
 	(Some("rustc_unicode"), &[("2016-12-15", Some("std_unicode")), ("2017-03-03", None)]),
@@ -87,7 +92,7 @@ fn main() {
 	let mut dest_path=PathBuf::from(env::var_os("OUT_DIR").unwrap());
 	dest_path.push("io.rs");
 	let mut f=File::create(&dest_path).unwrap();
-	
+
 	let mut target_path=PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
 	target_path.push("src");
 	target_path.push(io_commit);
diff --git a/ct.sh b/ct.sh
index 48a9703..b13083c 100755
--- a/ct.sh
+++ b/ct.sh
@@ -18,6 +18,8 @@ RUST_VERSIONS=$(awk '{print $1}' <<EOF
     nightly-2018-03-07 # core_io release
     nightly-2018-08-06 # edge case: old features allowed
     nightly-2018-08-14 # edge case: old features disallowed
+    nightly-2018-08-15 # edge case: non_exhaustive feature
+    nightly-2019-02-25 # edge case: bind_by_move_pattern_guards feature
     nightly-2019-04-27 # core_io release
 EOF
 )
diff --git a/src/lib.rs b/src/lib.rs
index 8a33f3a..c527005 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -3,9 +3,14 @@
 //! the [std documentation](https://doc.rust-lang.org/nightly/std/io/index.html)
 //! for a full description of the functionality.
 #![allow(stable_features,unused_features)]
-#![feature(question_mark,const_fn,collections,alloc,unicode,copy_from_slice,
-	str_char,try_from,str_internals,align_offset,doc_spotlight,
-	slice_internals,non_exhaustive,bind_by_move_pattern_guards)]
+#![feature(question_mark,const_fn,copy_from_slice,try_from,str_internals,align_offset,
+       doc_spotlight,slice_internals)]
+#![cfg_attr(any(feature="alloc",feature="collections"),feature(alloc))]
+#![cfg_attr(pattern_guards,feature(bind_by_move_pattern_guards,nll))]
+#![cfg_attr(collections,feature(collections))]
+#![cfg_attr(non_exhaustive,feature(non_exhaustive))]
+#![cfg_attr(str_char,feature(str_char))]
+#![cfg_attr(unicode,feature(unicode))]
 #![no_std]
 
 #[cfg_attr(feature="collections",macro_use)]