Skip to content

Commit 017b054

Browse files
committed
statics !!!!!! expect it doesn't work :-(
error[E0493]: destructor of `TargetOptions` cannot be evaluated at compile-time --> compiler/rustc_target/src/spec/targets/nvptx64_nvidia_cuda.rs:50:15 | 50 | ..TargetOptions::default() | ^^^^^^^^^^^^^^^^^^^^^^^^ the destructor for this type cannot be evaluated in statics ... 53 | }; | - value is dropped here error[E0015]: cannot call non-const operator in statics --> compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs:26:31 | 26 | supported_sanitizers: SanitizerSet::KCFI | SanitizerSet::KERNELADDRESS, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | note: impl defined here, but it is not `const` --> /home/archie/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bitflags-2.4.2/src/public.rs:359:9 | 317 | macro_rules! __impl_public_bitflags_ops { | --------------------------------------- in this expansion of `$crate::__impl_public_bitflags_ops!` (#2) ... 359 | impl $crate::__private::core::ops::BitOr for $PublicBitFlags { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ::: /home/archie/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bitflags-2.4.2/src/lib.rs:446:1 | 446 | macro_rules! bitflags { | --------------------- in this expansion of `bitflags::bitflags!` (#1) ... 571 | / $crate::__impl_public_bitflags_ops! { 572 | | $BitFlags 573 | | } | |_____________- in this macro invocation (#2) | ::: compiler/rustc_target/src/spec/mod.rs:1220:1 | 1220 | / bitflags::bitflags! { 1221 | | impl SanitizerSet: u16 { 1222 | | const ADDRESS = 1 << 0; 1223 | | const LEAK = 1 << 1; ... | 1234 | | } 1235 | | } | |_- in this macro invocation (#1) = note: calls in statics are limited to constant functions, tuple structs and tuple variants = help: add `#![feature(const_trait_impl)]` to the crate attributes to enable = note: consider wrapping this expression in `Lazy::new(|| ...)` from the `once_cell` crate: https://crates.io/crates/once_cell
1 parent 49a477d commit 017b054

File tree

235 files changed

+496
-499
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

235 files changed

+496
-499
lines changed

compiler/rustc_target/src/spec/mod.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,18 +1382,18 @@ macro_rules! supported_targets {
13821382
/// List of supported targets
13831383
pub const TARGETS: &[&str] = &[$($triple),+];
13841384

1385-
fn load_builtin(target: &str) -> Option<Target> {
1385+
fn load_builtin(target: &str) -> Option<&'static Target> {
13861386
let mut t = match target {
1387-
$( $triple => targets::$module::target(), )+
1387+
$( $triple => &targets::$module::TARGET, )+
13881388
_ => return None,
13891389
};
1390-
t.is_builtin = true;
1390+
// TODO: t.is_builtin = true;
13911391
debug!("got builtin target: {:?}", t);
13921392
Some(t)
13931393
}
13941394

1395-
fn load_all_builtin() -> impl Iterator<Item = Target> {
1396-
[$(targets::$module::target, )*].iter().map(|f| f())
1395+
fn load_all_builtins() -> impl Iterator<Item = &'static Target> {
1396+
[$(&targets::$module::TARGET, )*].into_iter()
13971397
}
13981398

13991399
#[cfg(test)]
@@ -3141,7 +3141,7 @@ impl Target {
31413141
}
31423142

31433143
/// Load a built-in target
3144-
pub fn expect_builtin(target_triple: &TargetTriple) -> Target {
3144+
pub fn expect_builtin(target_triple: &TargetTriple) -> &'static Target {
31453145
match *target_triple {
31463146
TargetTriple::TargetTriple(ref target_triple) => {
31473147
load_builtin(target_triple).expect("built-in target")
@@ -3153,8 +3153,8 @@ impl Target {
31533153
}
31543154

31553155
/// Load all built-in targets
3156-
pub fn iter_builtins() -> impl Iterator<Item = Target> {
3157-
load_all_builtin()
3156+
pub fn iter_builtins() -> impl Iterator<Item = &'static Target> {
3157+
load_all_builtins()
31583158
}
31593159

31603160
/// Search for a JSON file specifying the given target triple.
@@ -3182,9 +3182,11 @@ impl Target {
31823182
match *target_triple {
31833183
TargetTriple::TargetTriple(ref target_triple) => {
31843184
// check if triple is in list of built-in targets
3185-
if let Some(t) = load_builtin(target_triple) {
3186-
return Ok((t, TargetWarnings::empty()));
3187-
}
3185+
// TODO: Make a custom type that either statically borrow a Target
3186+
// or has a owned Target (a bit like Cow but without the write part)
3187+
// if let Some(t) = load_builtin(target_triple) {
3188+
// return Ok((t, TargetWarnings::empty()));
3189+
// }
31883190

31893191
// search for a file named `target_triple`.json in RUST_TARGET_PATH
31903192
let path = {

compiler/rustc_target/src/spec/targets/aarch64_apple_darwin.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::sync::LazyLock;
44
use crate::spec::base::apple::{macos_llvm_target, opts, pre_link_args, Arch};
55
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
66

7-
pub fn target() -> Target {
7+
pub static TARGET: Target = {
88
const ARCH: Arch = Arch::Arm64;
99
const OS: &'static str = "macos";
1010

@@ -31,4 +31,4 @@ pub fn target() -> Target {
3131
..base
3232
},
3333
}
34-
}
34+
};

compiler/rustc_target/src/spec/targets/aarch64_apple_ios.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
let arch = Arch::Arm64;
88
let mut base = opts("ios", arch);
99
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::THREAD;
@@ -24,4 +24,4 @@ pub fn target() -> Target {
2424
..base
2525
},
2626
}
27-
}
27+
};

compiler/rustc_target/src/spec/targets/aarch64_apple_ios_macabi.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
let arch = Arch::Arm64_macabi;
88
let mut base = opts("ios", arch);
99
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::LEAK | SanitizerSet::THREAD;
@@ -20,4 +20,4 @@ pub fn target() -> Target {
2020
..base
2121
},
2222
}
23-
}
23+
};

compiler/rustc_target/src/spec/targets/aarch64_apple_ios_sim.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
let arch = Arch::Arm64_sim;
88
let mut base = opts("ios", arch);
99
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::THREAD;
@@ -24,4 +24,4 @@ pub fn target() -> Target {
2424
..base
2525
},
2626
}
27-
}
27+
};

compiler/rustc_target/src/spec/targets/aarch64_apple_tvos.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{FramePointer, Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
let arch = Arch::Arm64;
88
Target {
99
llvm_target: tvos_llvm_target(arch).into(),
@@ -17,4 +17,4 @@ pub fn target() -> Target {
1717
..opts("tvos", arch)
1818
},
1919
}
20-
}
20+
};

compiler/rustc_target/src/spec/targets/aarch64_apple_tvos_sim.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{FramePointer, Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
let arch = Arch::Arm64_sim;
88
Target {
99
llvm_target: tvos_sim_llvm_target(arch).into(),
@@ -17,4 +17,4 @@ pub fn target() -> Target {
1717
..opts("tvos", arch)
1818
},
1919
}
20-
}
20+
};

compiler/rustc_target/src/spec/targets/aarch64_apple_watchos.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
let base = opts("watchos", Arch::Arm64);
88
Target {
99
llvm_target: cow!("aarch64-apple-watchos"),
@@ -18,4 +18,4 @@ pub fn target() -> Target {
1818
..base
1919
},
2020
}
21-
}
21+
};

compiler/rustc_target/src/spec/targets/aarch64_apple_watchos_sim.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{FramePointer, Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
let arch = Arch::Arm64_sim;
88
Target {
99
// Clang automatically chooses a more specific target based on
@@ -21,4 +21,4 @@ pub fn target() -> Target {
2121
..opts("watchos", arch)
2222
},
2323
}
24-
}
24+
};

compiler/rustc_target/src/spec/targets/aarch64_be_unknown_linux_gnu.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{base, StackProbeType, Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
Target {
88
llvm_target: cow!("aarch64_be-unknown-linux-gnu"),
99
pointer_width: 64,
@@ -18,4 +18,4 @@ pub fn target() -> Target {
1818
..base::linux_gnu::opts()
1919
},
2020
}
21-
}
21+
};

compiler/rustc_target/src/spec/targets/aarch64_be_unknown_linux_gnu_ilp32.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{base, StackProbeType, Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
let mut base = base::linux_gnu::opts();
88
base.max_atomic_width = Some(128);
99

@@ -21,4 +21,4 @@ pub fn target() -> Target {
2121
..base
2222
},
2323
}
24-
}
24+
};

compiler/rustc_target/src/spec/targets/aarch64_be_unknown_netbsd.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::cow;
33

44
use crate::spec::{base, StackProbeType, Target, TargetOptions};
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
Target {
88
llvm_target: cow!("aarch64_be-unknown-netbsd"),
99
pointer_width: 64,
@@ -17,4 +17,4 @@ pub fn target() -> Target {
1717
..base::netbsd::opts()
1818
},
1919
}
20-
}
20+
};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
pub use crate::spec::targets::aarch64_unknown_fuchsia::target;
1+
pub use crate::spec::targets::aarch64_unknown_fuchsia::TARGET;

compiler/rustc_target/src/spec/targets/aarch64_kmc_solid_asp3.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::spec::cow;
22
use crate::spec::{base, RelocModel, StackProbeType, Target, TargetOptions};
33

4-
pub fn target() -> Target {
4+
pub static TARGET: Target = {
55
let base = base::solid::opts("asp3");
66
Target {
77
llvm_target: cow!("aarch64-unknown-none"),
@@ -18,4 +18,4 @@ pub fn target() -> Target {
1818
..base
1919
},
2020
}
21-
}
21+
};

compiler/rustc_target/src/spec/targets/aarch64_linux_android.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::spec::{base, SanitizerSet, StackProbeType, Target, TargetOptions};
44
// See https://developer.android.com/ndk/guides/abis.html#arm64-v8a
55
// for target ABI requirements.
66

7-
pub fn target() -> Target {
7+
pub static TARGET: Target = {
88
Target {
99
llvm_target: cow!("aarch64-linux-android"),
1010
pointer_width: 64,
@@ -25,4 +25,4 @@ pub fn target() -> Target {
2525
..base::android::opts()
2626
},
2727
}
28-
}
28+
};

compiler/rustc_target/src/spec/targets/aarch64_nintendo_switch_freestanding.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::spec::{
66
const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_freestanding_linker_script.ld");
77

88
/// A base target for Nintendo Switch devices using a pure LLVM toolchain.
9-
pub fn target() -> Target {
9+
pub static TARGET: Target = {
1010
Target {
1111
llvm_target: cow!("aarch64-unknown-none"),
1212
pointer_width: 64,
@@ -27,4 +27,4 @@ pub fn target() -> Target {
2727
..TargetOptions::default()
2828
},
2929
}
30-
}
30+
};

compiler/rustc_target/src/spec/targets/aarch64_pc_windows_gnullvm.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::spec::cow;
22
use crate::spec::{base, Target};
33

4-
pub fn target() -> Target {
4+
pub static TARGET: Target = {
55
let mut base = base::windows_gnullvm::opts();
66
base.max_atomic_width = Some(128);
77
base.features = cow!("+v8a,+neon,+fp-armv8");
@@ -14,4 +14,4 @@ pub fn target() -> Target {
1414
arch: cow!("aarch64"),
1515
options: base,
1616
}
17-
}
17+
};

compiler/rustc_target/src/spec/targets/aarch64_pc_windows_msvc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::spec::cow;
22
use crate::spec::{base, Target};
33

4-
pub fn target() -> Target {
4+
pub static TARGET: Target = {
55
let mut base = base::windows_msvc::opts();
66
base.max_atomic_width = Some(128);
77
base.features = cow!("+v8a,+neon,+fp-armv8");
@@ -13,4 +13,4 @@ pub fn target() -> Target {
1313
arch: cow!("aarch64"),
1414
options: base,
1515
}
16-
}
16+
};

compiler/rustc_target/src/spec/targets/aarch64_unknown_freebsd.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::spec::cow;
22
use crate::spec::{base, SanitizerSet, StackProbeType, Target, TargetOptions};
33

4-
pub fn target() -> Target {
4+
pub static TARGET: Target = {
55
Target {
66
llvm_target: cow!("aarch64-unknown-freebsd"),
77
pointer_width: 64,
@@ -18,4 +18,4 @@ pub fn target() -> Target {
1818
..base::freebsd::opts()
1919
},
2020
}
21-
}
21+
};

compiler/rustc_target/src/spec/targets/aarch64_unknown_fuchsia.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::spec::cow;
22
use crate::spec::{base, SanitizerSet, StackProbeType, Target, TargetOptions};
33

4-
pub fn target() -> Target {
4+
pub static TARGET: Target = {
55
Target {
66
llvm_target: cow!("aarch64-unknown-fuchsia"),
77
pointer_width: 64,
@@ -17,4 +17,4 @@ pub fn target() -> Target {
1717
..base::fuchsia::opts()
1818
},
1919
}
20-
}
20+
};

compiler/rustc_target/src/spec/targets/aarch64_unknown_hermit.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::spec::cow;
22
use crate::spec::{base, StackProbeType, Target, TargetOptions};
33

4-
pub fn target() -> Target {
4+
pub static TARGET: Target = {
55
Target {
66
llvm_target: cow!("aarch64-unknown-hermit"),
77
pointer_width: 64,
@@ -14,4 +14,4 @@ pub fn target() -> Target {
1414
..base::hermit::opts()
1515
},
1616
}
17-
}
17+
};

compiler/rustc_target/src/spec/targets/aarch64_unknown_illumos.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::spec::{base, Cc, LinkerFlavor, SanitizerSet, Target, TargetOptions};
33

44
use std::sync::LazyLock;
55

6-
pub fn target() -> Target {
6+
pub static TARGET: Target = {
77
let mut base = base::illumos::opts();
88
base.pre_link_args =
99
LazyLock::new(|| TargetOptions::link_args(LinkerFlavor::Unix(Cc::Yes), &["-std=c99"]));
@@ -20,4 +20,4 @@ pub fn target() -> Target {
2020
arch: cow!("aarch64"),
2121
options: base,
2222
}
23-
}
23+
};

compiler/rustc_target/src/spec/targets/aarch64_unknown_linux_gnu.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::spec::cow;
22
use crate::spec::{base, SanitizerSet, StackProbeType, Target, TargetOptions};
33

4-
pub fn target() -> Target {
4+
pub static TARGET: Target = {
55
Target {
66
llvm_target: cow!("aarch64-unknown-linux-gnu"),
77
pointer_width: 64,
@@ -23,4 +23,4 @@ pub fn target() -> Target {
2323
..base::linux_gnu::opts()
2424
},
2525
}
26-
}
26+
};

compiler/rustc_target/src/spec/targets/aarch64_unknown_linux_gnu_ilp32.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::spec::cow;
22
use crate::spec::{base, StackProbeType, Target, TargetOptions};
33

4-
pub fn target() -> Target {
4+
pub static TARGET: Target = {
55
Target {
66
llvm_target: cow!("aarch64-unknown-linux-gnu_ilp32"),
77
pointer_width: 32,
@@ -16,4 +16,4 @@ pub fn target() -> Target {
1616
..base::linux_gnu::opts()
1717
},
1818
}
19-
}
19+
};

0 commit comments

Comments
 (0)