|  | #![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 - '//dt//*[@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 - '//dt//*[@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 - '//dt//*[@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() {} |