| #![feature(doc_cfg)] |
| #![feature(target_feature, cfg_target_feature)] |
| |
| //@ has doc_cfg/struct.Portable.html |
| //@ !has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' '' |
| //@ has - '//*[@id="method.unix_and_arm_only_function"]' 'fn unix_and_arm_only_function()' |
| //@ has - '//*[@class="stab portability"]' 'Available on Unix and ARM only.' |
| //@ has - '//*[@id="method.wasi_and_wasm32_only_function"]' 'fn wasi_and_wasm32_only_function()' |
| //@ has - '//*[@class="stab portability"]' 'Available on WASI and WebAssembly only.' |
| pub struct Portable; |
| |
| //@ has doc_cfg/unix_only/index.html \ |
| // '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \ |
| // 'Available on Unix only.' |
| //@ matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\AARM\Z' |
| //@ count - '//*[@class="stab portability"]' 2 |
| #[doc(cfg(unix))] |
| pub mod unix_only { |
| //@ has doc_cfg/unix_only/fn.unix_only_function.html \ |
| // '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \ |
| // 'Available on Unix only.' |
| //@ count - '//*[@class="stab portability"]' 1 |
| pub fn unix_only_function() { |
| content::should::be::irrelevant(); |
| } |
| |
| //@ has doc_cfg/unix_only/trait.ArmOnly.html \ |
| // '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \ |
| // 'Available on Unix and ARM only.' |
| //@ count - '//*[@class="stab portability"]' 1 |
| #[doc(cfg(target_arch = "arm"))] |
| pub trait ArmOnly { |
| fn unix_and_arm_only_function(); |
| } |
| |
| #[doc(cfg(target_arch = "arm"))] |
| impl ArmOnly for super::Portable { |
| fn unix_and_arm_only_function() {} |
| } |
| } |
| |
| //@ has doc_cfg/wasi_only/index.html \ |
| // '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \ |
| // 'Available on WASI only.' |
| //@ matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\AWebAssembly\Z' |
| //@ count - '//*[@class="stab portability"]' 2 |
| #[doc(cfg(target_os = "wasi"))] |
| pub mod wasi_only { |
| //@ has doc_cfg/wasi_only/fn.wasi_only_function.html \ |
| // '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \ |
| // 'Available on WASI only.' |
| //@ count - '//*[@class="stab portability"]' 1 |
| pub fn wasi_only_function() { |
| content::should::be::irrelevant(); |
| } |
| |
| //@ has doc_cfg/wasi_only/trait.Wasm32Only.html \ |
| // '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \ |
| // 'Available on WASI and WebAssembly only.' |
| //@ count - '//*[@class="stab portability"]' 1 |
| #[doc(cfg(target_arch = "wasm32"))] |
| pub trait Wasm32Only { |
| fn wasi_and_wasm32_only_function(); |
| } |
| |
| #[doc(cfg(target_arch = "wasm32"))] |
| impl Wasm32Only for super::Portable { |
| fn wasi_and_wasm32_only_function() {} |
| } |
| } |
| |
| // tagging a function with `#[target_feature]` creates a doc(cfg(target_feature)) node for that |
| // item as well |
| |
| // the portability header is different on the module view versus the full view |
| //@ has doc_cfg/index.html |
| //@ matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\Aavx\Z' |
| |
| //@ has doc_cfg/fn.uses_target_feature.html |
| //@ has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \ |
| // 'Available with target feature avx only.' |
| #[target_feature(enable = "avx")] |
| pub unsafe fn uses_target_feature() { |
| content::should::be::irrelevant(); |
| } |
| |
| //@ has doc_cfg/fn.uses_cfg_target_feature.html |
| //@ has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \ |
| // 'Available with target feature avx only.' |
| #[doc(cfg(target_feature = "avx"))] |
| pub fn uses_cfg_target_feature() { |
| uses_target_feature(); |
| } |
| |
| // multiple attributes should be allowed |
| //@ has doc_cfg/fn.multiple_attrs.html \ |
| // '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \ |
| // 'Available on x and y and z only.' |
| #[doc(cfg(x))] |
| #[doc(cfg(y), cfg(z))] |
| pub fn multiple_attrs() {} |