diff --git a/.travis.yml b/.travis.yml
index 610f64f..424f5d5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,19 +4,26 @@
 matrix:
   include:
     - rust: 1.15.0 # oldest supported version
-      script: cargo build
+      script:
+        - cargo build
+        - cargo build --no-default-features
+        - RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo build
+        - RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo build --no-default-features
     - rust: 1.19.0 # first release with the --tests flag
-      script: cargo test --tests
+      script:
+        - cargo test --tests
+        - cargo test --no-default-features --tests
+        - RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo test --tests
+        - RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo test --no-default-features --tests
     - rust: 1.26.0 # first release on which our doc tests pass
     - rust: stable
     - rust: beta
     - rust: nightly
       script:
         - cargo test
-        - cargo test --features nightly
         - cargo test --no-default-features
         - RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo test
-        - RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo test --features nightly
+        - RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo test --no-default-features
         - cargo update -Z minimal-versions && cargo build
     - rust: nightly
       name: WebAssembly
@@ -28,7 +35,9 @@
 
 script:
   - cargo test
+  - cargo test --no-default-features
   - RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo test
+  - RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo test --no-default-features
 
 notifications:
   email:
diff --git a/Cargo.toml b/Cargo.toml
index a08b98d..dba5c3e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -26,16 +26,12 @@
 quote = "0.6"
 
 [features]
-# When enabled: act as a shim around the nightly compiler's proc_macro crate.
-# This requires a nightly compiler.
-#
-# When disabled: emulate the same API as the nightly compiler's proc_macro crate
-# but in a way that works on all stable compilers 1.15+.
-nightly = ["proc-macro"]
-
 proc-macro = []
 default = ["proc-macro"]
 
+# This feature no longer means anything.
+nightly = []
+
 [badges]
 travis-ci = { repository = "alexcrichton/proc-macro2" }
 
diff --git a/build.rs b/build.rs
index cd6df23..a175711 100644
--- a/build.rs
+++ b/build.rs
@@ -1,3 +1,37 @@
+// rustc-cfg emitted by the build script:
+//
+// "u128"
+//     Include u128 and i128 constructors for proc_macro2::Literal. Enabled on
+//     any compiler 1.26+.
+//
+// "use_proc_macro"
+//     Link to extern crate proc_macro. Available on any compiler and any target
+//     except wasm32. Requires "proc-macro" Cargo cfg to be enabled (default is
+//     enabled). On wasm32 we never link to proc_macro even if "proc-macro" cfg
+//     is enabled.
+//
+// "wrap_proc_macro"
+//     Wrap types from libproc_macro rather than polyfilling the whole API.
+//     Enabled on rustc 1.29+ as long as procmacro2_semver_exempt is not set,
+//     because we can't emulate the unstable API without emulating everything
+//     else. Also enabled unconditionally on nightly, in which case the
+//     procmacro2_semver_exempt surface area is implemented by using the
+//     nightly-only proc_macro API.
+//
+// "slow_extend"
+//     Fallback when `impl Extend for TokenStream` is not available. These impls
+//     were added one version later than the rest of the proc_macro token API.
+//     Enabled on rustc 1.29 only.
+//
+// "nightly"
+//     Enable the Span::unstable method. This is to support proc_macro_span and
+//     proc_macro_diagnostic use on the nightly channel without requiring the
+//     semver exemption opt-in. Enabled when building with nightly.
+//
+// "super_unstable"
+//     Implement the semver exempt API in terms of the nightly-only proc_macro
+//     API. Enabled when using procmacro2_semver_exempt on a nightly compiler.
+
 use std::env;
 use std::process::Command;
 use std::str;
@@ -7,12 +41,12 @@
 
     let target = env::var("TARGET").unwrap();
 
-    let minor = match rustc_minor_version() {
-        Some(n) => n,
+    let version = match rustc_version() {
+        Some(version) => version,
         None => return,
     };
 
-    if minor >= 26 {
+    if version.minor >= 26 {
         println!("cargo:rustc-cfg=u128");
     }
 
@@ -21,20 +55,28 @@
     }
     println!("cargo:rustc-cfg=use_proc_macro");
 
-    // Rust 1.29 stabilized the necessary APIs in the `proc_macro` crate
-    if (minor >= 29 && !cfg!(procmacro2_semver_exempt)) || cfg!(feature = "nightly") {
-        println!("cargo:rustc-cfg=wrap_proc_macro");
-
-        if cfg!(procmacro2_semver_exempt) {
-            println!("cargo:rustc-cfg=super_unstable");
-            // https://github.com/alexcrichton/proc-macro2/issues/147
-            println!("cargo:rustc-cfg=procmacro2_semver_exempt");
-        }
+    let semver_exempt = cfg!(procmacro2_semver_exempt);
+    if semver_exempt {
+        // https://github.com/alexcrichton/proc-macro2/issues/147
+        println!("cargo:rustc-cfg=procmacro2_semver_exempt");
     }
 
-    if minor == 29 {
+    // Rust 1.29 stabilized the necessary APIs in the `proc_macro` crate
+    if version.nightly || version.minor >= 29 && !semver_exempt {
+        println!("cargo:rustc-cfg=wrap_proc_macro");
+    }
+
+    if version.minor == 29 {
         println!("cargo:rustc-cfg=slow_extend");
     }
+
+    if version.nightly {
+        println!("cargo:rustc-cfg=nightly");
+    }
+
+    if semver_exempt && version.nightly {
+        println!("cargo:rustc-cfg=super_unstable");
+    }
 }
 
 fn enable_use_proc_macro(target: &str) -> bool {
@@ -47,7 +89,12 @@
     cfg!(feature = "proc-macro")
 }
 
-fn rustc_minor_version() -> Option<u32> {
+struct RustcVersion {
+    minor: u32,
+    nightly: bool,
+}
+
+fn rustc_version() -> Option<RustcVersion> {
     macro_rules! otry {
         ($e:expr) => {
             match $e {
@@ -56,12 +103,20 @@
             }
         };
     }
+
     let rustc = otry!(env::var_os("RUSTC"));
     let output = otry!(Command::new(rustc).arg("--version").output().ok());
     let version = otry!(str::from_utf8(&output.stdout).ok());
+    let nightly = version.contains("nightly");
     let mut pieces = version.split('.');
     if pieces.next() != Some("rustc 1") {
         return None;
     }
-    otry!(pieces.next()).parse().ok()
+    let minor = otry!(pieces.next());
+    let minor = otry!(minor.parse().ok());
+
+    Some(RustcVersion {
+        minor: minor,
+        nightly: nightly,
+    })
 }
diff --git a/src/lib.rs b/src/lib.rs
index db51272..347b937 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -333,9 +333,11 @@
         Span::_new(self.inner.located_at(other.inner))
     }
 
-    /// This method is only available when the `"nightly"` feature is enabled.
-    #[doc(hidden)]
-    #[cfg(any(feature = "nightly", super_unstable))]
+    /// Convert `proc_macro2::Span` to `proc_macro::Span`.
+    ///
+    /// This method is available when building with a nightly compiler, or when
+    /// building with rustc 1.29+ *without* semver exempt features.
+    #[cfg(wrap_proc_macro)]
     pub fn unstable(self) -> proc_macro::Span {
         self.inner.unstable()
     }
diff --git a/tests/test.rs b/tests/test.rs
index 9d37cf3..6da1283 100644
--- a/tests/test.rs
+++ b/tests/test.rs
@@ -193,7 +193,7 @@
 }
 
 #[cfg(procmacro2_semver_exempt)]
-#[cfg(not(feature = "nightly"))]
+#[cfg(not(nightly))]
 #[test]
 fn default_span() {
     let start = Span::call_site().start();
@@ -329,7 +329,6 @@
 }
 
 #[test]
-#[cfg(not(feature = "nightly"))]
 fn test_debug_tokenstream() {
     let tts = TokenStream::from_str("[a + 1]").unwrap();
 
