diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs index f7a56dd582f..66f01b30f78 100644 --- a/src/librustdoc/html/markdown.rs +++ b/src/librustdoc/html/markdown.rs @@ -34,6 +34,7 @@ use std::ffi::CString; use std::fmt; use std::slice; use std::str; +use std::env; use html::render::derive_id; use html::toc::TocBuilder; @@ -439,6 +440,18 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector) { } } +fn get_unstable_features_setting() -> bool { + // Check if we can activate compile_fail option or not. + // + // It is done to ensure that it won't be used out-of-tree + // because it's not ready yet for production. + match (option_env!("CFG_BOOTSTRAP_KEY"), + env::var("RUSTC_BOOTSTRAP_KEY").ok()) { + (Some(ref cfg), Some(ref r_key)) => cfg == r_key, + _ => false, + } +} + #[derive(Eq, PartialEq, Clone, Debug)] struct LangString { should_panic: bool, @@ -465,6 +478,7 @@ impl LangString { let mut seen_rust_tags = false; let mut seen_other_tags = false; let mut data = LangString::all_false(); + let allow_compile_fail = get_unstable_features_setting(); let tokens = string.split(|c: char| !(c == '_' || c == '-' || c.is_alphanumeric()) @@ -473,13 +487,20 @@ impl LangString { for token in tokens { match token { "" => {}, - "should_panic" => { data.should_panic = true; seen_rust_tags = true; }, + "should_panic" => { + data.should_panic = true; + seen_rust_tags = true; + data.no_run = true; + }, "no_run" => { data.no_run = true; seen_rust_tags = true; }, "ignore" => { data.ignore = true; seen_rust_tags = true; }, "rust" => { data.rust = true; seen_rust_tags = true; }, "test_harness" => { data.test_harness = true; seen_rust_tags = true; }, - "compile_fail" => { data.compile_fail = true; seen_rust_tags = true; - data.no_run = true; }, + "compile_fail" if allow_compile_fail => { + data.compile_fail = true; + seen_rust_tags = true; + data.no_run = true; + }, _ => { seen_other_tags = true } } }