diff --git a/src/doc/reference.md b/src/doc/reference.md index cd24e33a232d..eeae2de827ae 100644 --- a/src/doc/reference.md +++ b/src/doc/reference.md @@ -2093,6 +2093,8 @@ The following configurations must be defined by the implementation: * `target_pointer_width = "..."` - Target pointer width in bits. This is set to `"32"` for targets with 32-bit pointers, and likewise set to `"64"` for 64-bit pointers. +* `target_vendor = "..."` - Vendor of the target, for example `apple`, `pc`, or + simply `"unknown"`. * `test` - Enabled when compiling the test harness (using the `--test` flag). * `unix` - See `target_family`. * `windows` - See `target_family`. @@ -2269,7 +2271,7 @@ The currently implemented features of the reference compiler are: * `advanced_slice_patterns` - See the [match expressions](#match-expressions) section for discussion; the exact semantics of slice patterns are subject to change, so some types - are still unstable. + are still unstable. * `slice_patterns` - OK, actually, slice patterns are just scary and completely unstable. @@ -2290,6 +2292,9 @@ The currently implemented features of the reference compiler are: * `box_syntax` - Allows use of `box` expressions, the exact semantics of which is subject to change. +* `cfg_target_vendor` - Allows conditional compilation using the `target_vendor` + matcher which is subject to change. + * `concat_idents` - Allows use of the `concat_idents` macro, which is in many ways insufficient for concatenating identifiers, and may be removed entirely for something more wholesome. diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index 30f43baabba2..dcc4ca137ead 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -617,6 +617,7 @@ pub fn default_configuration(sess: &Session) -> ast::CrateConfig { let wordsz = &sess.target.target.target_pointer_width; let os = &sess.target.target.target_os; let env = &sess.target.target.target_env; + let vendor = &sess.target.target.target_vendor; let fam = match sess.target.target.options.is_like_windows { true => InternedString::new("windows"), @@ -632,6 +633,7 @@ pub fn default_configuration(sess: &Session) -> ast::CrateConfig { mk(InternedString::new("target_endian"), intern(end)), mk(InternedString::new("target_pointer_width"), intern(wordsz)), mk(InternedString::new("target_env"), intern(env)), + mk(InternedString::new("target_vendor"), intern(vendor)), ]; if sess.opts.debug_assertions { ret.push(attr::mk_word_item(InternedString::new("debug_assertions"))); diff --git a/src/librustc_back/target/aarch64_apple_ios.rs b/src/librustc_back/target/aarch64_apple_ios.rs index e87cb43128d2..e1242560e62c 100644 --- a/src/librustc_back/target/aarch64_apple_ios.rs +++ b/src/librustc_back/target/aarch64_apple_ios.rs @@ -19,6 +19,7 @@ pub fn target() -> Target { arch: "aarch64".to_string(), target_os: "ios".to_string(), target_env: "".to_string(), + target_vendor: "apple".to_string(), options: TargetOptions { features: "+neon,+fp-armv8,+cyclone".to_string(), eliminate_frame_pointer: false, diff --git a/src/librustc_back/target/aarch64_linux_android.rs b/src/librustc_back/target/aarch64_linux_android.rs index 8c350e8b2875..c6901a4cc427 100644 --- a/src/librustc_back/target/aarch64_linux_android.rs +++ b/src/librustc_back/target/aarch64_linux_android.rs @@ -18,6 +18,7 @@ pub fn target() -> Target { arch: "aarch64".to_string(), target_os: "android".to_string(), target_env: "".to_string(), + target_vendor: "unknown".to_string(), options: super::android_base::opts(), } } diff --git a/src/librustc_back/target/aarch64_unknown_linux_gnu.rs b/src/librustc_back/target/aarch64_unknown_linux_gnu.rs index ed79caf48694..51abab6609a8 100644 --- a/src/librustc_back/target/aarch64_unknown_linux_gnu.rs +++ b/src/librustc_back/target/aarch64_unknown_linux_gnu.rs @@ -19,6 +19,7 @@ pub fn target() -> Target { target_env: "gnu".to_string(), arch: "aarch64".to_string(), target_os: "linux".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/arm_linux_androideabi.rs b/src/librustc_back/target/arm_linux_androideabi.rs index 0770fe70e8a5..732f1a353a8b 100644 --- a/src/librustc_back/target/arm_linux_androideabi.rs +++ b/src/librustc_back/target/arm_linux_androideabi.rs @@ -21,6 +21,7 @@ pub fn target() -> Target { arch: "arm".to_string(), target_os: "android".to_string(), target_env: "gnu".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/arm_unknown_linux_gnueabi.rs b/src/librustc_back/target/arm_unknown_linux_gnueabi.rs index 084f989277f3..7c35b43fd4b7 100644 --- a/src/librustc_back/target/arm_unknown_linux_gnueabi.rs +++ b/src/librustc_back/target/arm_unknown_linux_gnueabi.rs @@ -19,6 +19,7 @@ pub fn target() -> Target { arch: "arm".to_string(), target_os: "linux".to_string(), target_env: "gnueabi".to_string(), + target_vendor: "unknown".to_string(), options: TargetOptions { features: "+v6".to_string(), diff --git a/src/librustc_back/target/arm_unknown_linux_gnueabihf.rs b/src/librustc_back/target/arm_unknown_linux_gnueabihf.rs index 08f1aa5ade84..a99ec45996c2 100644 --- a/src/librustc_back/target/arm_unknown_linux_gnueabihf.rs +++ b/src/librustc_back/target/arm_unknown_linux_gnueabihf.rs @@ -19,6 +19,7 @@ pub fn target() -> Target { arch: "arm".to_string(), target_os: "linux".to_string(), target_env: "gnueabihf".to_string(), + target_vendor: "unknown".to_string(), options: TargetOptions { features: "+v6,+vfp2".to_string(), diff --git a/src/librustc_back/target/armv7_apple_ios.rs b/src/librustc_back/target/armv7_apple_ios.rs index a6d649ea162f..d30648002912 100644 --- a/src/librustc_back/target/armv7_apple_ios.rs +++ b/src/librustc_back/target/armv7_apple_ios.rs @@ -19,6 +19,7 @@ pub fn target() -> Target { arch: "arm".to_string(), target_os: "ios".to_string(), target_env: "".to_string(), + target_vendor: "apple".to_string(), options: TargetOptions { features: "+v7,+vfp3,+neon".to_string(), .. opts(Arch::Armv7) diff --git a/src/librustc_back/target/armv7s_apple_ios.rs b/src/librustc_back/target/armv7s_apple_ios.rs index 264385512add..66ec6efca0e6 100644 --- a/src/librustc_back/target/armv7s_apple_ios.rs +++ b/src/librustc_back/target/armv7s_apple_ios.rs @@ -19,6 +19,7 @@ pub fn target() -> Target { arch: "arm".to_string(), target_os: "ios".to_string(), target_env: "".to_string(), + target_vendor: "apple".to_string(), options: TargetOptions { features: "+v7,+vfp4,+neon".to_string(), .. opts(Arch::Armv7s) diff --git a/src/librustc_back/target/i386_apple_ios.rs b/src/librustc_back/target/i386_apple_ios.rs index d17aa915461d..52b5901192c6 100644 --- a/src/librustc_back/target/i386_apple_ios.rs +++ b/src/librustc_back/target/i386_apple_ios.rs @@ -19,6 +19,7 @@ pub fn target() -> Target { arch: "x86".to_string(), target_os: "ios".to_string(), target_env: "".to_string(), + target_vendor: "apple".to_string(), options: opts(Arch::I386) } } diff --git a/src/librustc_back/target/i686_apple_darwin.rs b/src/librustc_back/target/i686_apple_darwin.rs index 9fe15e769428..98f4654ecab4 100644 --- a/src/librustc_back/target/i686_apple_darwin.rs +++ b/src/librustc_back/target/i686_apple_darwin.rs @@ -22,6 +22,7 @@ pub fn target() -> Target { arch: "x86".to_string(), target_os: "macos".to_string(), target_env: "".to_string(), + target_vendor: "apple".to_string(), options: base, } } diff --git a/src/librustc_back/target/i686_linux_android.rs b/src/librustc_back/target/i686_linux_android.rs index 708e7756b94b..f548fdad3cbe 100644 --- a/src/librustc_back/target/i686_linux_android.rs +++ b/src/librustc_back/target/i686_linux_android.rs @@ -21,6 +21,7 @@ pub fn target() -> Target { arch: "x86".to_string(), target_os: "android".to_string(), target_env: "gnu".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/i686_pc_windows_gnu.rs b/src/librustc_back/target/i686_pc_windows_gnu.rs index ae1b4d450a58..c825f6043d27 100644 --- a/src/librustc_back/target/i686_pc_windows_gnu.rs +++ b/src/librustc_back/target/i686_pc_windows_gnu.rs @@ -30,6 +30,7 @@ pub fn target() -> Target { arch: "x86".to_string(), target_os: "windows".to_string(), target_env: "gnu".to_string(), + target_vendor: "pc".to_string(), options: options, } } diff --git a/src/librustc_back/target/i686_pc_windows_msvc.rs b/src/librustc_back/target/i686_pc_windows_msvc.rs index d8c1c79b47fc..96b2d37ab208 100644 --- a/src/librustc_back/target/i686_pc_windows_msvc.rs +++ b/src/librustc_back/target/i686_pc_windows_msvc.rs @@ -21,6 +21,7 @@ pub fn target() -> Target { arch: "x86".to_string(), target_os: "windows".to_string(), target_env: "msvc".to_string(), + target_vendor: "pc".to_string(), options: base, } } diff --git a/src/librustc_back/target/i686_unknown_dragonfly.rs b/src/librustc_back/target/i686_unknown_dragonfly.rs index f2478e6d0dbf..32a15b9f2d4d 100644 --- a/src/librustc_back/target/i686_unknown_dragonfly.rs +++ b/src/librustc_back/target/i686_unknown_dragonfly.rs @@ -22,6 +22,7 @@ pub fn target() -> Target { arch: "x86".to_string(), target_os: "dragonfly".to_string(), target_env: "".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/i686_unknown_freebsd.rs b/src/librustc_back/target/i686_unknown_freebsd.rs index 6b2d9b5053c4..812ba11cd796 100644 --- a/src/librustc_back/target/i686_unknown_freebsd.rs +++ b/src/librustc_back/target/i686_unknown_freebsd.rs @@ -22,6 +22,7 @@ pub fn target() -> Target { arch: "x86".to_string(), target_os: "freebsd".to_string(), target_env: "".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/i686_unknown_linux_gnu.rs b/src/librustc_back/target/i686_unknown_linux_gnu.rs index 074d5b2b9ed2..ac2af0c64fd6 100644 --- a/src/librustc_back/target/i686_unknown_linux_gnu.rs +++ b/src/librustc_back/target/i686_unknown_linux_gnu.rs @@ -22,6 +22,7 @@ pub fn target() -> Target { arch: "x86".to_string(), target_os: "linux".to_string(), target_env: "gnu".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/mips_unknown_linux_gnu.rs b/src/librustc_back/target/mips_unknown_linux_gnu.rs index 3f3da6d6c913..357499c48ec7 100644 --- a/src/librustc_back/target/mips_unknown_linux_gnu.rs +++ b/src/librustc_back/target/mips_unknown_linux_gnu.rs @@ -18,6 +18,7 @@ pub fn target() -> Target { arch: "mips".to_string(), target_os: "linux".to_string(), target_env: "gnu".to_string(), + target_vendor: "unknown".to_string(), options: super::linux_base::opts() } } diff --git a/src/librustc_back/target/mipsel_unknown_linux_gnu.rs b/src/librustc_back/target/mipsel_unknown_linux_gnu.rs index d7f286c8aa40..3d0088add0d5 100644 --- a/src/librustc_back/target/mipsel_unknown_linux_gnu.rs +++ b/src/librustc_back/target/mipsel_unknown_linux_gnu.rs @@ -18,6 +18,7 @@ pub fn target() -> Target { arch: "mips".to_string(), target_os: "linux".to_string(), target_env: "gnu".to_string(), + target_vendor: "unknown".to_string(), options: super::linux_base::opts() } diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs index e7c1c3fb258a..b5847b98af1f 100644 --- a/src/librustc_back/target/mod.rs +++ b/src/librustc_back/target/mod.rs @@ -77,6 +77,8 @@ pub struct Target { pub target_os: String, /// Environment name to use for conditional compilation. pub target_env: String, + /// Vendor name to use for conditional compilation. + pub target_vendor: String, /// Architecture to use for ABI considerations. Valid options: "x86", "x86_64", "arm", /// "aarch64", "mips", and "powerpc". "mips" includes "mipsel". pub arch: String, @@ -260,14 +262,20 @@ impl Target { } }; + let get_opt_field = |name: &str, default: &str| { + obj.find(name).and_then(|s| s.as_string()) + .map(|s| s.to_string()) + .unwrap_or(default.to_string()) + }; + let mut base = Target { llvm_target: get_req_field("llvm-target"), target_endian: get_req_field("target-endian"), target_pointer_width: get_req_field("target-pointer-width"), arch: get_req_field("arch"), target_os: get_req_field("os"), - target_env: obj.find("env").and_then(|s| s.as_string()) - .map(|s| s.to_string()).unwrap_or(String::new()), + target_env: get_opt_field("env", ""), + target_vendor: get_opt_field("vendor", "unknown"), options: Default::default(), }; diff --git a/src/librustc_back/target/powerpc_unknown_linux_gnu.rs b/src/librustc_back/target/powerpc_unknown_linux_gnu.rs index 896824eba0e5..6664abf5458b 100644 --- a/src/librustc_back/target/powerpc_unknown_linux_gnu.rs +++ b/src/librustc_back/target/powerpc_unknown_linux_gnu.rs @@ -21,6 +21,7 @@ pub fn target() -> Target { arch: "powerpc".to_string(), target_os: "linux".to_string(), target_env: "gnu".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_apple_darwin.rs b/src/librustc_back/target/x86_64_apple_darwin.rs index ef40c2f2006e..3e19e1482909 100644 --- a/src/librustc_back/target/x86_64_apple_darwin.rs +++ b/src/librustc_back/target/x86_64_apple_darwin.rs @@ -23,6 +23,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "macos".to_string(), target_env: "".to_string(), + target_vendor: "apple".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_apple_ios.rs b/src/librustc_back/target/x86_64_apple_ios.rs index 7aca8c554dab..63234c0baee8 100644 --- a/src/librustc_back/target/x86_64_apple_ios.rs +++ b/src/librustc_back/target/x86_64_apple_ios.rs @@ -19,6 +19,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "ios".to_string(), target_env: "".to_string(), + target_vendor: "apple".to_string(), options: opts(Arch::X86_64) } } diff --git a/src/librustc_back/target/x86_64_pc_windows_gnu.rs b/src/librustc_back/target/x86_64_pc_windows_gnu.rs index aef1d7471b85..2bd363e46bb1 100644 --- a/src/librustc_back/target/x86_64_pc_windows_gnu.rs +++ b/src/librustc_back/target/x86_64_pc_windows_gnu.rs @@ -25,6 +25,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "windows".to_string(), target_env: "gnu".to_string(), + target_vendor: "pc".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_pc_windows_msvc.rs b/src/librustc_back/target/x86_64_pc_windows_msvc.rs index 85756db96061..5030a1ff4483 100644 --- a/src/librustc_back/target/x86_64_pc_windows_msvc.rs +++ b/src/librustc_back/target/x86_64_pc_windows_msvc.rs @@ -22,6 +22,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "windows".to_string(), target_env: "msvc".to_string(), + target_vendor: "pc".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_unknown_bitrig.rs b/src/librustc_back/target/x86_64_unknown_bitrig.rs index 6ecf885aba38..04456b1b2714 100644 --- a/src/librustc_back/target/x86_64_unknown_bitrig.rs +++ b/src/librustc_back/target/x86_64_unknown_bitrig.rs @@ -21,6 +21,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "bitrig".to_string(), target_env: "".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_unknown_dragonfly.rs b/src/librustc_back/target/x86_64_unknown_dragonfly.rs index f0e665967ec6..62654176aa48 100644 --- a/src/librustc_back/target/x86_64_unknown_dragonfly.rs +++ b/src/librustc_back/target/x86_64_unknown_dragonfly.rs @@ -22,6 +22,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "dragonfly".to_string(), target_env: "".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_unknown_freebsd.rs b/src/librustc_back/target/x86_64_unknown_freebsd.rs index f742ebfde1d2..888b7f58bffc 100644 --- a/src/librustc_back/target/x86_64_unknown_freebsd.rs +++ b/src/librustc_back/target/x86_64_unknown_freebsd.rs @@ -22,6 +22,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "freebsd".to_string(), target_env: "".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_unknown_linux_gnu.rs b/src/librustc_back/target/x86_64_unknown_linux_gnu.rs index 4749e481fd85..e3ccd9c4c7e7 100644 --- a/src/librustc_back/target/x86_64_unknown_linux_gnu.rs +++ b/src/librustc_back/target/x86_64_unknown_linux_gnu.rs @@ -22,6 +22,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "linux".to_string(), target_env: "gnu".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_unknown_linux_musl.rs b/src/librustc_back/target/x86_64_unknown_linux_musl.rs index c66192c28b13..a5ac78cd5b60 100644 --- a/src/librustc_back/target/x86_64_unknown_linux_musl.rs +++ b/src/librustc_back/target/x86_64_unknown_linux_musl.rs @@ -76,6 +76,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "linux".to_string(), target_env: "musl".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_unknown_netbsd.rs b/src/librustc_back/target/x86_64_unknown_netbsd.rs index e13e58e3a186..4101fabe7348 100644 --- a/src/librustc_back/target/x86_64_unknown_netbsd.rs +++ b/src/librustc_back/target/x86_64_unknown_netbsd.rs @@ -21,6 +21,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "netbsd".to_string(), target_env: "".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/librustc_back/target/x86_64_unknown_openbsd.rs b/src/librustc_back/target/x86_64_unknown_openbsd.rs index a404db48b22b..07a1e137b419 100644 --- a/src/librustc_back/target/x86_64_unknown_openbsd.rs +++ b/src/librustc_back/target/x86_64_unknown_openbsd.rs @@ -21,6 +21,7 @@ pub fn target() -> Target { arch: "x86_64".to_string(), target_os: "openbsd".to_string(), target_env: "".to_string(), + target_vendor: "unknown".to_string(), options: base, } } diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index eaf964a3c64f..6643dad6a68e 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -203,6 +203,9 @@ const KNOWN_FEATURES: &'static [(&'static str, &'static str, Option, Status // allow `#[omit_gdb_pretty_printer_section]` ("omit_gdb_pretty_printer_section", "1.5.0", None, Active), + + // Allows cfg(target_vendor = "..."). + ("cfg_target_vendor", "1.5.0", None, Active), ]; // (changing above list without updating src/doc/reference.md makes @cmr sad) @@ -377,6 +380,7 @@ macro_rules! cfg_fn { const GATED_CFGS: &'static [(&'static str, &'static str, fn(&Features) -> bool)] = &[ // (name in cfg, feature, function to check if the feature is enabled) ("target_feature", "cfg_target_feature", cfg_fn!(|x| x.cfg_target_feature)), + ("target_vendor", "cfg_target_vendor", cfg_fn!(|x| x.cfg_target_vendor)), ]; #[derive(Debug, Eq, PartialEq)] @@ -471,6 +475,7 @@ pub struct Features { pub default_type_parameter_fallback: bool, pub type_macros: bool, pub cfg_target_feature: bool, + pub cfg_target_vendor: bool, pub augmented_assignments: bool, } @@ -500,6 +505,7 @@ impl Features { default_type_parameter_fallback: false, type_macros: false, cfg_target_feature: false, + cfg_target_vendor: false, augmented_assignments: false, } } @@ -1069,6 +1075,7 @@ fn check_crate_inner(cm: &CodeMap, span_handler: &SpanHandler, default_type_parameter_fallback: cx.has_feature("default_type_parameter_fallback"), type_macros: cx.has_feature("type_macros"), cfg_target_feature: cx.has_feature("cfg_target_feature"), + cfg_target_vendor: cx.has_feature("cfg_target_vendor"), augmented_assignments: cx.has_feature("augmented_assignments"), } } diff --git a/src/test/compile-fail/feature-gate-cfg-target-vendor.rs b/src/test/compile-fail/feature-gate-cfg-target-vendor.rs new file mode 100644 index 000000000000..e68a84d35534 --- /dev/null +++ b/src/test/compile-fail/feature-gate-cfg-target-vendor.rs @@ -0,0 +1,21 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[cfg(target_vendor = "x")] //~ ERROR `cfg(target_vendor)` is experimental +#[cfg_attr(target_vendor = "x", x)] //~ ERROR `cfg(target_vendor)` is experimental +struct Foo(u64, u64); + +#[cfg(not(any(all(target_vendor = "x"))))] //~ ERROR `cfg(target_vendor)` is experimental +fn foo() {} + +fn main() { + cfg!(target_vendor = "x"); + //~^ ERROR `cfg(target_vendor)` is experimental and subject to change +} diff --git a/src/test/run-pass/cfg-target-vendor.rs b/src/test/run-pass/cfg-target-vendor.rs new file mode 100644 index 000000000000..787ae5289dd5 --- /dev/null +++ b/src/test/run-pass/cfg-target-vendor.rs @@ -0,0 +1,19 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(cfg_target_vendor)] + +#[cfg(target_vendor = "unknown")] +pub fn main() { +} + +#[cfg(not(target_vendor = "unknown"))] +pub fn main() { +}