Merge commit '493d427c7d3423f085f05179e36a35b4943b1379' into sync_cg_clif-2026-03-25

This commit is contained in:
bjorn3
2026-03-25 11:43:04 +01:00
20 changed files with 385 additions and 212 deletions
@@ -43,7 +43,7 @@ jobs:
# TARGET_TRIPLE: x86_64-pc-windows-gnu
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: CPU features
if: matrix.os == 'ubuntu-latest'
@@ -56,7 +56,7 @@ jobs:
run: .github/scripts/free-disk-space.sh
- name: Cache cargo target dir
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: build/cg_clif
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-cargo-build-target-${{ hashFiles('rust-toolchain', '**/Cargo.lock') }}
@@ -1,18 +0,0 @@
name: Security audit
on:
workflow_dispatch:
schedule:
- cron: '0 10 * * 1' # every monday at 10:00 UTC
permissions:
issues: write
checks: write
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
sed -i 's/components.*/components = []/' rust-toolchain.toml
- uses: rustsec/audit-check@v2.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
+21 -11
View File
@@ -19,12 +19,22 @@ env:
RUSTFLAGS: "-Dwarnings"
jobs:
todo_check:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v6
- name: Check todo
run: ./y.sh check-todo
rustfmt:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Avoid installing rustc-dev
run: |
@@ -78,14 +88,14 @@ jobs:
TARGET_TRIPLE: x86_64-pc-windows-gnu
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: CPU features
if: matrix.os == 'ubuntu-latest'
run: cat /proc/cpuinfo
- name: Cache cargo target dir
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: build/cg_clif
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-cargo-build-target-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}
@@ -127,7 +137,7 @@ jobs:
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: CPU features
run: cat /proc/cpuinfo
@@ -149,13 +159,13 @@ jobs:
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: CPU features
run: cat /proc/cpuinfo
- name: Cache cargo target dir
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: build/cg_clif
key: ${{ runner.os }}-x86_64-unknown-linux-gnu-cargo-build-target-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}
@@ -201,10 +211,10 @@ jobs:
TARGET_TRIPLE: x86_64-pc-windows-gnu
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Cache cargo target dir
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: build/cg_clif
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-dist-cargo-build-target-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}
@@ -223,7 +233,7 @@ jobs:
run: tar cvfJ cg_clif.tar.xz dist
- name: Upload prebuilt cg_clif
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: cg_clif-${{ matrix.env.TARGET_TRIPLE }}
path: cg_clif.tar.xz
@@ -232,7 +242,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
if: ${{ github.ref == 'refs/heads/main' }}
needs: [rustfmt, test, bench, dist]
needs: [todo_check, rustfmt, test, bench, dist]
permissions:
contents: write # for creating the dev tag and release
@@ -242,7 +252,7 @@ jobs:
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Download all built artifacts
uses: actions/download-artifact@v4
@@ -11,13 +11,13 @@ jobs:
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: CPU features
run: cat /proc/cpuinfo
- name: Cache cargo target dir
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: build/cg_clif
key: ${{ runner.os }}-rustc-test-cargo-build-target-${{ hashFiles('rust-toolchain.toml', 'Cargo.lock') }}
@@ -31,13 +31,13 @@ jobs:
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: CPU features
run: cat /proc/cpuinfo
- name: Cache cargo target dir
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: build/cg_clif
key: ${{ runner.os }}-rustc-test-cargo-build-target-${{ hashFiles('rust-toolchain.toml', 'Cargo.lock') }}
+78 -64
View File
@@ -28,9 +28,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bumpalo"
version = "3.19.1"
version = "3.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
dependencies = [
"allocator-api2",
]
@@ -43,42 +43,46 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "cranelift-assembler-x64"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0377b13bf002a0774fcccac4f1102a10f04893d24060cf4b7350c87e4cbb647c"
checksum = "4f248321c6a7d4de5dcf2939368e96a397ad3f53b6a076e38d0104d1da326d37"
dependencies = [
"cranelift-assembler-x64-meta",
]
[[package]]
name = "cranelift-assembler-x64-meta"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfa027979140d023b25bf7509fb7ede3a54c3d3871fb5ead4673c4b633f671a2"
checksum = "ab6d78ff1f7d9bf8b7e1afbedbf78ba49e38e9da479d4c8a2db094e22f64e2bc"
dependencies = [
"cranelift-srcgen",
]
[[package]]
name = "cranelift-bforest"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "618e4da87d9179a70b3c2f664451ca8898987aa6eb9f487d16988588b5d8cc40"
checksum = "6b6005ba640213a5b95382aeaf6b82bf028309581c8d7349778d66f27dc1180b"
dependencies = [
"cranelift-entity",
"wasmtime-internal-core",
]
[[package]]
name = "cranelift-bitset"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db53764b5dad233b37b8f5dc54d3caa9900c54579195e00f17ea21f03f71aaa7"
checksum = "81fb5b134a12b559ff0c0f5af0fcd755ad380723b5016c4e0d36f74d39485340"
dependencies = [
"wasmtime-internal-core",
]
[[package]]
name = "cranelift-codegen"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ae927f1d8c0abddaa863acd201471d56e7fc6c3925104f4861ed4dc3e28b421"
checksum = "85837de8be7f17a4034a6b08816f05a3144345d2091937b39d415990daca28f4"
dependencies = [
"bumpalo",
"cranelift-assembler-x64",
@@ -90,21 +94,22 @@ dependencies = [
"cranelift-entity",
"cranelift-isle",
"gimli",
"hashbrown",
"hashbrown 0.16.1",
"libm",
"log",
"regalloc2",
"rustc-hash",
"serde",
"smallvec",
"target-lexicon",
"wasmtime-internal-math",
"wasmtime-internal-core",
]
[[package]]
name = "cranelift-codegen-meta"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3fcf1e3e6757834bd2584f4cbff023fcc198e9279dcb5d684b4bb27a9b19f54"
checksum = "e433faa87d38e5b8ff469e44a26fea4f93e58abd7a7c10bad9810056139700c9"
dependencies = [
"cranelift-assembler-x64-meta",
"cranelift-codegen-shared",
@@ -114,33 +119,34 @@ dependencies = [
[[package]]
name = "cranelift-codegen-shared"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "205dcb9e6ccf9d368b7466be675ff6ee54a63e36da6fe20e72d45169cf6fd254"
checksum = "5397ba61976e13944ca71230775db13ee1cb62849701ed35b753f4761ed0a9b7"
[[package]]
name = "cranelift-control"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "108eca9fcfe86026054f931eceaf57b722c1b97464bf8265323a9b5877238817"
checksum = "cc81c88765580720eb30f4fc2c1bfdb75fcbf3094f87b3cd69cecca79d77a245"
dependencies = [
"arbitrary",
]
[[package]]
name = "cranelift-entity"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0d96496910065d3165f84ff8e1e393916f4c086f88ac8e1b407678bc78735aa"
checksum = "463feed5d46cf8763f3ba3045284cf706dd161496e20ec9c14afbb4ba09b9e66"
dependencies = [
"cranelift-bitset",
"wasmtime-internal-core",
]
[[package]]
name = "cranelift-frontend"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e303983ad7e23c850f24d9c41fc3cb346e1b930f066d3966545e4c98dac5c9fb"
checksum = "a4c5eca7696c1c04ab4c7ed8d18eadbb47d6cc9f14ec86fe0881bf1d7e97e261"
dependencies = [
"cranelift-codegen",
"log",
@@ -150,15 +156,15 @@ dependencies = [
[[package]]
name = "cranelift-isle"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24b0cf8d867d891245836cac7abafb0a5b0ea040a019d720702b3b8bcba40bfa"
checksum = "f1153844610cc9c6da8cf10ce205e45da1a585b7688ed558aa808bbe2e4e6d77"
[[package]]
name = "cranelift-jit"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf1e35da6eca2448395f483eb172ce71dd7842f7dc96f44bb8923beafe43c6d"
checksum = "41836de8321b303d3d4188e58cc09c30c7645337342acfcfb363732695cae098"
dependencies = [
"anyhow",
"cranelift-codegen",
@@ -176,9 +182,9 @@ dependencies = [
[[package]]
name = "cranelift-module"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "792ba2a54100e34f8a36e3e329a5207cafd1f0918a031d34695db73c163fdcc7"
checksum = "b731f66cb1b69b60a74216e632968ebdbb95c488d26aa1448ec226ae0ffec33e"
dependencies = [
"anyhow",
"cranelift-codegen",
@@ -187,9 +193,9 @@ dependencies = [
[[package]]
name = "cranelift-native"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e24b641e315443e27807b69c440fe766737d7e718c68beb665a2d69259c77bf3"
checksum = "a97b583fe9a60f06b0464cee6be5a17f623fd91b217aaac99b51b339d19911af"
dependencies = [
"cranelift-codegen",
"libc",
@@ -198,9 +204,9 @@ dependencies = [
[[package]]
name = "cranelift-object"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecba1f219a201cf946150538e631defd620c5051b62c52ecb89a0004bab263d4"
checksum = "9809d2d419cd18f17377f4ce64a7ad22eeda0d042c08833d3796657f1ddebc82"
dependencies = [
"anyhow",
"cranelift-codegen",
@@ -213,9 +219,9 @@ dependencies = [
[[package]]
name = "cranelift-srcgen"
version = "0.128.3"
version = "0.130.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4e378a54e7168a689486d67ee1f818b7e5356e54ae51a1d7a53f4f13f7f8b7a"
checksum = "8594dc6bb4860fa8292f1814c76459dbfb933e1978d8222de6380efce45c7cee"
[[package]]
name = "crc32fast"
@@ -233,24 +239,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "fallible-iterator"
version = "0.3.0"
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "foldhash"
version = "0.1.5"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]]
name = "gimli"
version = "0.32.3"
version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
checksum = "0bf7f043f89559805f8c7cacc432749b2fa0d0a0a9ee46ce47164ed5ba7f126c"
dependencies = [
"fallible-iterator",
"fnv",
"hashbrown 0.16.1",
"indexmap",
"stable_deref_trait",
]
@@ -260,6 +267,12 @@ name = "hashbrown"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
[[package]]
name = "hashbrown"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
dependencies = [
"foldhash",
]
@@ -272,12 +285,12 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "indexmap"
version = "2.10.0"
version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
dependencies = [
"equivalent",
"hashbrown",
"hashbrown 0.16.1",
]
[[package]]
@@ -325,12 +338,12 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
[[package]]
name = "object"
version = "0.37.3"
version = "0.38.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
checksum = "271638cd5fa9cca89c4c304675ca658efc4e64a66c716b7cfe1afb4b9611dbbc"
dependencies = [
"crc32fast",
"hashbrown",
"hashbrown 0.16.1",
"indexmap",
"memchr",
]
@@ -355,13 +368,13 @@ dependencies = [
[[package]]
name = "regalloc2"
version = "0.13.5"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08effbc1fa53aaebff69521a5c05640523fab037b34a4a2c109506bc938246fa"
checksum = "952ddbfc6f9f64d006c3efd8c9851a6ba2f2b944ba94730db255d55006e0ffda"
dependencies = [
"allocator-api2",
"bumpalo",
"hashbrown",
"hashbrown 0.15.5",
"log",
"rustc-hash",
"smallvec",
@@ -468,24 +481,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
[[package]]
name = "wasmtime-internal-jit-icache-coherence"
version = "41.0.3"
name = "wasmtime-internal-core"
version = "43.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bada5ca1cc47df7d14100e2254e187c2486b426df813cea2dd2553a7469f7674"
checksum = "e671917bb6856ae360cb59d7aaf26f1cfd042c7b924319dd06fd380739fc0b2e"
dependencies = [
"anyhow",
"cfg-if",
"libc",
"windows-sys 0.61.2",
"hashbrown 0.16.1",
"libm",
]
[[package]]
name = "wasmtime-internal-math"
version = "41.0.3"
name = "wasmtime-internal-jit-icache-coherence"
version = "43.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf6f615d528eda9adc6eefb062135f831b5215c348f4c3ec3e143690c730605b"
checksum = "9b3112806515fac8495883885eb8dbdde849988ae91fe6beb544c0d7c0f4c9aa"
dependencies = [
"libm",
"cfg-if",
"libc",
"wasmtime-internal-core",
"windows-sys 0.61.2",
]
[[package]]
+14 -14
View File
@@ -8,15 +8,15 @@ crate-type = ["dylib"]
[dependencies]
# These have to be in sync with each other
cranelift-codegen = { version = "0.128.3", default-features = false, features = ["std", "timing", "unwind", "all-native-arch"] }
cranelift-frontend = { version = "0.128.3" }
cranelift-module = { version = "0.128.3" }
cranelift-native = { version = "0.128.3" }
cranelift-jit = { version = "0.128.3", optional = true }
cranelift-object = { version = "0.128.3" }
cranelift-codegen = { version = "0.130.0", default-features = false, features = ["std", "timing", "unwind", "all-native-arch"] }
cranelift-frontend = { version = "0.130.0" }
cranelift-module = { version = "0.130.0" }
cranelift-native = { version = "0.130.0" }
cranelift-jit = { version = "0.130.0", optional = true }
cranelift-object = { version = "0.130.0" }
target-lexicon = "0.13"
gimli = { version = "0.32", default-features = false, features = ["write"] }
object = { version = "0.37.3", default-features = false, features = ["std", "read_core", "write", "archive", "coff", "elf", "macho", "pe"] }
gimli = { version = "0.33", default-features = false, features = ["write"] }
object = { version = "0.38.0", default-features = false, features = ["std", "read_core", "write", "archive", "coff", "elf", "macho", "pe"] }
indexmap = "2.0.0"
libloading = { version = "0.9.0", optional = true }
@@ -24,12 +24,12 @@ smallvec = "1.8.1"
[patch.crates-io]
# Uncomment to use an unreleased version of cranelift
#cranelift-codegen = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
#cranelift-frontend = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
#cranelift-module = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
#cranelift-native = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
#cranelift-jit = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
#cranelift-object = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-41.0.0" }
#cranelift-codegen = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
#cranelift-frontend = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
#cranelift-module = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
#cranelift-native = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
#cranelift-jit = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
#cranelift-object = { git = "https://github.com/bytecodealliance/wasmtime.git", branch = "release-43.0.0" }
# Uncomment to use local checkout of cranelift
#cranelift-codegen = { path = "../wasmtime/cranelift/codegen" }
@@ -17,6 +17,7 @@
mod rustc_info;
mod shared_utils;
mod tests;
mod todo;
mod utils;
fn usage() {
@@ -38,6 +39,7 @@ enum Command {
Test,
AbiCafe,
Bench,
CheckTodo,
}
#[derive(Copy, Clone, Debug)]
@@ -66,6 +68,7 @@ fn main() {
Some("test") => Command::Test,
Some("abi-cafe") => Command::AbiCafe,
Some("bench") => Command::Bench,
Some("check-todo") => Command::CheckTodo,
Some(flag) if flag.starts_with('-') => arg_error!("Expected command found flag {}", flag),
Some(command) => arg_error!("Unknown command {}", command),
None => {
@@ -139,6 +142,10 @@ fn main() {
process::exit(0);
}
if command == Command::CheckTodo {
todo::run();
}
let rustup_toolchain_name = match (env::var("CARGO"), env::var("RUSTC"), env::var("RUSTDOC")) {
(Ok(_), Ok(_), Ok(_)) => None,
(_, Err(_), Err(_)) => Some(rustc_info::get_toolchain_name()),
@@ -202,7 +209,7 @@ fn main() {
))
};
match command {
Command::Prepare => {
Command::Prepare | Command::CheckTodo => {
// Handled above
}
Command::Test => {
@@ -0,0 +1,70 @@
use std::ffi::OsStr;
use std::path::{Path, PathBuf};
use std::process::Command;
use std::{fs, process};
const EXTENSIONS: &[&str] =
&["rs", "py", "js", "sh", "c", "cpp", "h", "md", "css", "ftl", "toml", "yml", "yaml"];
fn has_supported_extension(path: &Path) -> bool {
path.extension().is_some_and(|ext| EXTENSIONS.iter().any(|e| ext == OsStr::new(e)))
}
fn list_tracked_files() -> Result<Vec<PathBuf>, String> {
let output = Command::new("git")
.args(["ls-files", "-z"])
.output()
.map_err(|e| format!("Failed to run `git ls-files`: {e}"))?;
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
return Err(format!("`git ls-files` failed: {stderr}"));
}
let mut files = Vec::new();
for entry in output.stdout.split(|b| *b == 0) {
if entry.is_empty() {
continue;
}
let path = std::str::from_utf8(entry).unwrap();
files.push(PathBuf::from(path));
}
Ok(files)
}
pub(crate) fn run() -> ! {
let files = list_tracked_files().unwrap();
let mut error_count = 0;
// Avoid embedding the task marker in source so greps only find real occurrences.
let todo_marker = "todo".to_ascii_uppercase();
for file in files {
if !has_supported_extension(&file) {
continue;
}
let bytes = fs::read(&file).unwrap();
let contents = std::str::from_utf8(&bytes).unwrap();
for (i, line) in contents.split('\n').enumerate() {
let trimmed = line.trim();
if trimmed.contains(&todo_marker) {
eprintln!(
"{}:{}: {} is used for tasks that should be done before merging a PR; if you want to leave a message in the codebase use FIXME",
file.display(),
i + 1,
todo_marker
);
error_count += 1;
}
}
}
if error_count == 0 {
process::exit(0);
}
eprintln!("found {} {}(s)", error_count, todo_marker);
process::exit(1);
}
@@ -6,6 +6,7 @@ USAGE:
./y.sh test [--sysroot none|clif|llvm] [--out-dir DIR] [--download-dir DIR] [--no-unstable-features] [--frozen] [--skip-test TESTNAME]
./y.sh abi-cafe [--sysroot none|clif|llvm] [--out-dir DIR] [--download-dir DIR] [--no-unstable-features] [--frozen]
./y.sh bench [--sysroot none|clif|llvm] [--out-dir DIR] [--download-dir DIR] [--no-unstable-features] [--frozen]
./y.sh check-todo
OPTIONS:
--sysroot none|clif|llvm
@@ -2,9 +2,3 @@
set -e
rm -rf target/ build_system/target download/ build/ dist/
# Kept for now in case someone updates their checkout of cg_clif before running clean_all.sh
# FIXME remove at some point in the future
rm y.bin y.bin.dSYM y.exe y.pdb 2>/dev/null || true
rm -rf rand/ regex/ simple-raytracer/ portable-simd/ abi-checker/ abi-cafe/
rm -rf build_sysroot/{sysroot_src/,target/,compiler-builtins/,rustc_version}
@@ -9,9 +9,9 @@
rustc_private,
transparent_unions,
auto_traits,
freeze_impls,
thread_local
freeze_impls
)]
#![cfg_attr(not(all(windows, target_env = "gnu")), feature(thread_local))]
#![no_core]
#![allow(dead_code, internal_features, ambiguous_wide_pointer_comparisons)]
@@ -1,13 +1,5 @@
#![feature(
no_core,
lang_items,
never_type,
linkage,
extern_types,
thread_local,
repr_simd,
rustc_private
)]
#![feature(no_core, lang_items, never_type, extern_types, thread_local, repr_simd, rustc_private)]
#![cfg_attr(not(any(jit, target_vendor = "apple", windows)), feature(linkage))]
#![no_core]
#![allow(dead_code, non_camel_case_types, internal_features)]
@@ -1,6 +1,6 @@
// Most of these tests are copied from https://github.com/japaric/stdsimd/blob/0f4413d01c4f0c3ffbc5a69e9a37fbc7235b31a9/coresimd/arm/neon.rs
#![feature(portable_simd)]
#![cfg_attr(target_arch = "aarch64", feature(portable_simd))]
#[cfg(target_arch = "aarch64")]
use std::arch::aarch64::*;
@@ -1,14 +1,8 @@
#![feature(
core_intrinsics,
coroutines,
stmt_expr_attributes,
coroutine_trait,
repr_simd,
tuple_trait,
unboxed_closures
)]
#![feature(core_intrinsics, coroutines, coroutine_trait, repr_simd, tuple_trait, unboxed_closures)]
#![allow(internal_features)]
#[cfg(target_arch = "x86_64")]
use std::arch::asm;
#[cfg(target_arch = "x86_64")]
use std::arch::x86_64::*;
use std::hint::black_box;
@@ -173,6 +167,9 @@ enum Never {}
rust_call_abi();
// #[cfg(target_arch = "x86_64")]
// inline_asm_call_custom_abi();
const fn no_str() -> Option<Box<str>> {
None
}
@@ -279,6 +276,17 @@ unsafe fn test_simd() {
#[cfg(not(jit))]
test_crc32();
#[cfg(not(jit))]
test_xmm_roundtrip();
#[cfg(not(jit))]
if is_x86_feature_detected!("avx") {
test_ymm_roundtrip();
}
#[cfg(not(jit))]
if is_x86_feature_detected!("avx512f") {
test_zmm_roundtrip();
}
}
}
@@ -576,6 +584,65 @@ unsafe fn test_mm_cvtps_ph() {
assert_eq_m128i(r, e);
}
#[cfg(target_arch = "x86_64")]
#[cfg(not(jit))]
unsafe fn test_xmm_roundtrip() {
unsafe {
let input = [1u8; 16];
let mut output = [0u8; 16];
asm!(
"movups {xmm}, [{input}]",
"movups [{output}], {xmm}",
input = in(reg) input.as_ptr(),
output = in(reg) output.as_mut_ptr(),
xmm = out(xmm_reg) _,
);
assert_eq!(input, output);
}
}
#[cfg(target_arch = "x86_64")]
#[target_feature(enable = "avx")]
#[cfg(not(jit))]
unsafe fn test_ymm_roundtrip() {
unsafe {
let input = [1u8; 32];
let mut output = [0u8; 32];
asm!(
"vmovups {ymm}, [{input}]",
"vmovups [{output}], {ymm}",
input = in(reg) input.as_ptr(),
output = in(reg) output.as_mut_ptr(),
ymm = out(ymm_reg) _,
);
assert_eq!(input, output);
}
}
#[cfg(target_arch = "x86_64")]
#[target_feature(enable = "avx512f")]
#[cfg(not(jit))]
unsafe fn test_zmm_roundtrip() {
unsafe {
let input = [1u8; 64];
let mut output = [0u8; 64];
asm!(
"vmovups {zmm}, [{input}]",
"vmovups [{output}], {zmm}",
input = in(reg) input.as_ptr(),
output = in(reg) output.as_mut_ptr(),
zmm = out(zmm_reg) _,
);
assert_eq!(input, output);
}
}
fn test_checked_mul() {
let u: Option<u8> = u8::from_str_radix("1000", 10).ok();
assert_eq!(u, None);
@@ -614,3 +681,18 @@ fn map(a: Option<(u8, Box<Instruction>)>) -> Option<Box<Instruction>> {
Some((_, instr)) => Some(instr),
}
}
// FIXME enable once inline asm sym references are stabilized in cg_clif
// #[cfg(target_arch = "x86_64")]
// fn inline_asm_call_custom_abi() {
// use std::arch::{asm, naked_asm};
//
// #[unsafe(naked)]
// unsafe extern "custom" fn double() {
// naked_asm!("add rax, rax", "ret");
// }
//
// let mut x: u64 = 21;
// unsafe { asm!("call {}", sym double, inout("rax") x) };
// assert_eq!(x, 42);
// }
@@ -37,16 +37,7 @@ diff --git a/library/core/src/sync/atomic.rs b/library/core/src/sync/atomic.rs
index bf2b6d59f88..d5ccce03bbf 100644
--- a/library/core/src/sync/atomic.rs
+++ b/library/core/src/sync/atomic.rs
@@ -300,8 +300,6 @@ impl_atomic_primitive!(AtomicI32(i32), size("32"), align(4));
impl_atomic_primitive!(AtomicU32(u32), size("32"), align(4));
impl_atomic_primitive!(AtomicI64(i64), size("64"), align(8));
impl_atomic_primitive!(AtomicU64(u64), size("64"), align(8));
-impl_atomic_primitive!(AtomicI128(i128), size("128"), align(16));
-impl_atomic_primitive!(AtomicU128(u128), size("128"), align(16));
#[cfg(target_pointer_width = "16")]
impl_atomic_primitive!(AtomicIsize(isize), size("ptr"), align(2));
@@ -3585,44 +3585,6 @@ pub const fn as_ptr(&self) -> *mut $int_type {
@@ -3585,42 +3585,6 @@ pub const fn as_ptr(&self) -> *mut $int_type {
8,
u64 AtomicU64
}
@@ -62,7 +53,6 @@ index bf2b6d59f88..d5ccce03bbf 100644
- unstable(feature = "integer_atomics", issue = "99069"),
- rustc_const_unstable(feature = "integer_atomics", issue = "99069"),
- rustc_const_unstable(feature = "integer_atomics", issue = "99069"),
- rustc_diagnostic_item = "AtomicI128",
- "i128",
- "#![feature(integer_atomics)]\n\n",
- atomic_min, atomic_max,
@@ -81,7 +71,6 @@ index bf2b6d59f88..d5ccce03bbf 100644
- unstable(feature = "integer_atomics", issue = "99069"),
- rustc_const_unstable(feature = "integer_atomics", issue = "99069"),
- rustc_const_unstable(feature = "integer_atomics", issue = "99069"),
- rustc_diagnostic_item = "AtomicU128",
- "u128",
- "#![feature(integer_atomics)]\n\n",
- atomic_umin, atomic_umax,
@@ -1,4 +1,4 @@
[toolchain]
channel = "nightly-2026-02-18"
channel = "nightly-2026-03-25"
components = ["rust-src", "rustc-dev", "llvm-tools", "rustfmt"]
profile = "minimal"
@@ -63,18 +63,18 @@ index 2e16f2cf27..3ac3df99a8 100644
# Note that RUSTFLAGS_BOOTSTRAP should always be added to the end of
# RUSTFLAGS, since that causes RUSTFLAGS_BOOTSTRAP to override RUSTFLAGS.
diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs
index a656927b1f6..44fc5546fac 100644
index bc68bfe396..00143ef3ed 100644
--- a/src/bootstrap/src/core/config/config.rs
+++ b/src/bootstrap/src/core/config/config.rs
@@ -2249,7 +2249,7 @@ pub fn parse_download_ci_llvm<'a>(
}
@@ -2230,7 +2230,7 @@ pub fn download_ci_rustc_commit<'a>(
return None;
}
#[cfg(not(test))]
- if b && dwn_ctx.is_running_on_ci && CiEnv::is_rust_lang_managed_ci_job() {
+ if false && dwn_ctx.is_running_on_ci && CiEnv::is_rust_lang_managed_ci_job() {
// On rust-lang CI, we must always rebuild LLVM if there were any modifications to it
panic!(
"\`llvm.download-ci-llvm\` cannot be set to \`true\` on CI. Use \`if-unchanged\` instead."
- if dwn_ctx.is_running_on_ci() {
+ if false && dwn_ctx.is_running_on_ci() {
eprintln!("CI rustc commit matches with HEAD and we are in CI.");
eprintln!(
"\`rustc.download-ci\` functionality will be skipped as artifacts are not available."
diff --git a/src/build_helper/src/git.rs b/src/build_helper/src/git.rs
index 330fb465de..a4593ed96f 100644
--- a/src/build_helper/src/git.rs
@@ -20,7 +20,6 @@ for test in $(rg -i --files-with-matches "//(\[\w+\])?~[^\|]*\s*ERR|//@ error-pa
done
git checkout -- tests/ui/issues/auxiliary/issue-3136-a.rs # contains //~ERROR, but shouldn't be removed
git checkout -- tests/ui/proc-macro/pretty-print-hack/
git checkout -- tests/ui/entry-point/auxiliary/bad_main_functions.rs
# missing features
@@ -152,7 +151,6 @@ rm -r tests/run-make/short-ice # ICE backtrace begin/end marker mismatch
rm -r tests/run-make/remap-path-prefix-dwarf # requires llvm-dwarfdump
rm -r tests/run-make/strip # same
rm -r tests/run-make-cargo/compiler-builtins # Expects lib/rustlib/src/rust to contains the standard library source
rm -r tests/run-make/translation # same
rm -r tests/run-make-cargo/panic-immediate-abort-works # same
rm -r tests/run-make-cargo/panic-immediate-abort-codegen # same
rm -r tests/run-make/missing-unstable-trait-bound # This disables support for unstable features, but running cg_clif needs some unstable features
@@ -120,9 +120,15 @@ fn codegen_global_asm_inner<'tcx>(
}
let symbol = tcx.symbol_name(instance);
let symbol_name = if tcx.sess.target.is_like_darwin {
format!("_{}", symbol.name)
} else {
symbol.name.to_owned()
};
// FIXME handle the case where the function was made private to the
// current codegen unit
global_asm.push_str(&escape_symbol_name(tcx, symbol.name, span));
global_asm.push_str(&escape_symbol_name(tcx, &symbol_name, span));
}
GlobalAsmOperandRef::SymStatic { def_id } => {
if cfg!(not(feature = "inline_asm_sym")) {
@@ -134,7 +140,13 @@ fn codegen_global_asm_inner<'tcx>(
let instance = Instance::mono(tcx, def_id);
let symbol = tcx.symbol_name(instance);
global_asm.push_str(&escape_symbol_name(tcx, symbol.name, span));
let symbol_name = if tcx.sess.target.is_like_darwin {
format!("_{}", symbol.name)
} else {
symbol.name.to_owned()
};
global_asm.push_str(&escape_symbol_name(tcx, &symbol_name, span));
}
}
}
@@ -3,8 +3,10 @@
use std::fmt::Write;
use cranelift_codegen::isa::CallConv;
use rustc_abi::CanonAbi;
use rustc_ast::ast::{InlineAsmOptions, InlineAsmTemplatePiece};
use rustc_hir::LangItem;
use rustc_middle::ty::layout::FnAbiOf;
use rustc_span::sym;
use rustc_target::asm::*;
use rustc_target::spec::Arch;
@@ -120,21 +122,30 @@ pub(crate) fn codegen_inline_asm_terminator<'tcx>(
.unwrap();
let symbol = fx.tcx.symbol_name(instance);
// Pass a wrapper rather than the function itself as the function itself may not
// be exported from the main codegen unit and may thus be unreachable from the
// object file created by an external assembler.
let wrapper_name = format!(
"{}__inline_asm_{}_wrapper_n{}",
fx.symbol_name,
fx.cgu_name.as_str().replace('.', "__").replace('-', "_"),
fx.inline_asm_index,
);
fx.inline_asm_index += 1;
let sig =
get_function_sig(fx.tcx, fx.target_config.default_call_conv, instance);
create_wrapper_function(fx.module, sig, &wrapper_name, symbol.name);
if FullyMonomorphizedLayoutCx(fx.tcx)
.fn_abi_of_instance(instance, ty::List::empty())
.conv
== CanonAbi::Custom
{
// We can't create a wrapper for custom ABI functions.
CInlineAsmOperand::Symbol { symbol: symbol.name.to_owned() }
} else {
// Pass a wrapper rather than the function itself as the function itself may not
// be exported from the main codegen unit and may thus be unreachable from the
// object file created by an external assembler.
let wrapper_name = format!(
"{}__inline_asm_{}_wrapper_n{}",
fx.symbol_name,
fx.cgu_name.as_str().replace('.', "__").replace('-', "_"),
fx.inline_asm_index,
);
fx.inline_asm_index += 1;
let sig =
get_function_sig(fx.tcx, fx.target_config.default_call_conv, instance);
create_wrapper_function(fx.module, sig, &wrapper_name, symbol.name);
CInlineAsmOperand::Symbol { symbol: wrapper_name }
CInlineAsmOperand::Symbol { symbol: wrapper_name }
}
} else {
span_bug!(span, "invalid type for asm sym (fn)");
}
@@ -548,22 +559,21 @@ fn generate_asm_wrapper(&self, asm_name: &str) -> String {
match self.arch {
InlineAsmArch::X86_64 => match reg {
InlineAsmReg::X86(reg)
if reg as u32 >= X86InlineAsmReg::xmm0 as u32
&& reg as u32 <= X86InlineAsmReg::xmm15 as u32 =>
if matches!(
reg.reg_class(),
X86InlineAsmRegClass::xmm_reg
| X86InlineAsmRegClass::ymm_reg
| X86InlineAsmRegClass::zmm_reg
) =>
{
// rustc emits x0 rather than xmm0
let class = match *modifier {
None | Some('x') => "xmm",
Some('y') => "ymm",
Some('z') => "zmm",
_ => unreachable!(),
};
write!(
generated_asm,
"{class}{}",
reg as u32 - X86InlineAsmReg::xmm0 as u32
)
.unwrap();
// rustc emits x0/y0/z0 rather than xmm0/ymm0/zmm0
let name = reg.name();
if let Some(prefix) = modifier {
let index = &name[3..];
write!(generated_asm, "{prefix}mm{index}").unwrap();
} else {
write!(generated_asm, "{name}").unwrap();
}
}
_ => reg
.emit(&mut generated_asm, InlineAsmArch::X86_64, *modifier)
@@ -575,7 +585,13 @@ fn generate_asm_wrapper(&self, asm_name: &str) -> String {
CInlineAsmOperand::Const { ref value } => {
generated_asm.push_str(value);
}
CInlineAsmOperand::Symbol { ref symbol } => generated_asm.push_str(symbol),
CInlineAsmOperand::Symbol { ref symbol } => {
if binary_format == BinaryFormat::Macho {
generated_asm.push('_');
}
generated_asm.push_str(symbol);
}
}
}
}
@@ -716,12 +732,17 @@ fn save_register(
InlineAsmArch::X86_64 => {
match reg {
InlineAsmReg::X86(reg)
if reg as u32 >= X86InlineAsmReg::xmm0 as u32
&& reg as u32 <= X86InlineAsmReg::xmm15 as u32 =>
if matches!(
reg.reg_class(),
X86InlineAsmRegClass::xmm_reg
| X86InlineAsmRegClass::ymm_reg
| X86InlineAsmRegClass::zmm_reg
) =>
{
// rustc emits x0 rather than xmm0
write!(generated_asm, " movups [rbx+0x{:x}], ", offset.bytes()).unwrap();
write!(generated_asm, "xmm{}", reg as u32 - X86InlineAsmReg::xmm0 as u32)
// rustc emits x0/y0/z0 rather than xmm0/ymm0/zmm0
let name = reg.name();
let mov = if name.starts_with("xmm") { "movups" } else { "vmovups" };
write!(generated_asm, " {mov} [rbx+0x{:x}], {name}", offset.bytes())
.unwrap();
}
_ => {
@@ -761,16 +782,17 @@ fn restore_register(
InlineAsmArch::X86_64 => {
match reg {
InlineAsmReg::X86(reg)
if reg as u32 >= X86InlineAsmReg::xmm0 as u32
&& reg as u32 <= X86InlineAsmReg::xmm15 as u32 =>
if matches!(
reg.reg_class(),
X86InlineAsmRegClass::xmm_reg
| X86InlineAsmRegClass::ymm_reg
| X86InlineAsmRegClass::zmm_reg
) =>
{
// rustc emits x0 rather than xmm0
write!(
generated_asm,
" movups xmm{}",
reg as u32 - X86InlineAsmReg::xmm0 as u32
)
.unwrap();
// rustc emits x0/y0/z0 rather than xmm0/ymm0/zmm0
let name = reg.name();
let mov = if name.starts_with("xmm") { "movups" } else { "vmovups" };
write!(generated_asm, " {mov} {name}").unwrap();
}
_ => {
generated_asm.push_str(" mov ");