Auto merge of #124302 - matthiaskrgr:rollup-2aya8n8, r=matthiaskrgr
Some checks failed
CI / bors build finished (push) Blocked by required conditions
CI / try - ${{ matrix.name }} (map[CODEGEN_BACKENDS:llvm,cranelift], dist-x86_64-linux, ubuntu-20.04-16core-64gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], x86_64-gnu-nopt, ubuntu-20.04-4core-16gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], x86_64-gnu-distcheck, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], x86_64-gnu-debug, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], x86_64-gnu-aux, ubuntu-20.04-4core-16gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], x86_64-gnu, ubuntu-20.04-4core-16gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], i686-gnu-nopt, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], i686-gnu, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-x86_64-netbsd, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-x86_64-illumos, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-x86_64-freebsd, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-various-2, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-various-1, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-s390x-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-riscv64-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-powerpc64le-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-powerpc64-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-powerpc-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-ohos, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-loongarch64-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-i686-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-i586-gnu-i586-i686-musl, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-armv7-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-armhf-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-arm-linux, ubuntu-20.04-16core-64gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], dist-android, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], armhf-gnu, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], arm-android, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], test-various, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[], mingw-check, ubuntu-20.04-4core-16gb) (push) Waiting to run
CI / master (push) Has been skipped
CI / PR - ${{ matrix.name }} (push) Has been skipped
CI / auto - ${{ matrix.name }} (map[RUST_CONFIGURE_ARGS:--build=x86_64-pc-windows-msvc --enable-profiler SCRIPT:make ci-msvc], x86_64-msvc, windows-2019-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[RUST_CONFIGURE_ARGS:--build=x86_64-pc-windows-msvc --enable-extended --enable-profiler SCRIPT:python x.py dist bootstrap --include-default-paths], dist-x86_64-msvc-alt, windows-2019-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[RUST_CONFIGURE_ARGS:--build=i686-pc-windows-msvc SCRIPT:make ci-msvc], i686-msvc, windows-2019-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[RUST_BACKTRACE:1], x86_64-gnu-llvm-18, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[RUST_BACKTRACE:1], x86_64-gnu-llvm-17, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[MACOSX_DEPLOYMENT_TARGET:11 MACOSX_STD_DEPLOYMENT_TARGET:11 NO_DEBUG_ASSERTIONS:1 NO_LLVM_ASSERTIONS:1 NO_OVERFLOW_CHECKS:1 RUSTC_RETRY_LINKER_ON_SEGFAULT:1 RUST_CONFIGURE_ARGS:--enable-sanitizers --enable-profiler --set … (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[MACOSX_DEPLOYMENT_TARGET:10.12 NO_DEBUG_ASSERTIONS:1 NO_LLVM_ASSERTIONS:1 NO_OVERFLOW_CHECKS:1 RUSTC_RETRY_LINKER_ON_SEGFAULT:1 RUST_CONFIGURE_ARGS:--enable-sanitizers --enable-profiler --set rust.jemalloc SCRIPT:./x.py d… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[MACOSX_DEPLOYMENT_TARGET:10.12 MACOSX_STD_DEPLOYMENT_TARGET:10.12 NO_DEBUG_ASSERTIONS:1 NO_LLVM_ASSERTIONS:1 NO_OVERFLOW_CHECKS:1 RUSTC_RETRY_LINKER_ON_SEGFAULT:1 RUST_CONFIGURE_ARGS:--build=x86_64-apple-darwin --enable-s… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[DIST_REQUIRE_ALL_TOOLS:1 RUST_CONFIGURE_ARGS:--build=x86_64-pc-windows-msvc --host=x86_64-pc-windows-msvc --target=x86_64-pc-windows-msvc --enable-full-tools --enable-profiler --set rust.codegen-units=1 SCRIPT:python x.py… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[DIST_REQUIRE_ALL_TOOLS:1 RUST_CONFIGURE_ARGS:--build=x86_64-pc-windows-msvc --host=aarch64-pc-windows-msvc --enable-full-tools --enable-profiler SCRIPT:python x.py dist bootstrap --include-default-paths], dist-aarch64-msv… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[DIST_REQUIRE_ALL_TOOLS:1 RUST_CONFIGURE_ARGS:--build=i686-pc-windows-msvc --host=i686-pc-windows-msvc --target=i686-pc-windows-msvc,i586-pc-windows-msvc --enable-full-tools --enable-profiler SCRIPT:python x.py dist bootst… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[DIST_REQUIRE_ALL_TOOLS:1 MACOSX_DEPLOYMENT_TARGET:11 MACOSX_STD_DEPLOYMENT_TARGET:11 NO_DEBUG_ASSERTIONS:1 NO_LLVM_ASSERTIONS:1 NO_OVERFLOW_CHECKS:1 RUSTC_RETRY_LINKER_ON_SEGFAULT:1 RUST_CONFIGURE_ARGS:--enable-full-tools… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[DEPLOY_TOOLSTATES_JSON:toolstates-windows.json HOST_TARGET:x86_64-pc-windows-msvc RUST_CONFIGURE_ARGS:--build=x86_64-pc-windows-msvc --enable-lld --save-toolstates=/tmp/toolstate/toolstates.json SCRIPT:python x.py --stage… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[DEPLOY_TOOLSTATES_JSON:toolstates-linux.json], x86_64-gnu-tools, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CUSTOM_MINGW:1 NO_DOWNLOAD_CI_LLVM:1 RUST_CONFIGURE_ARGS:--build=x86_64-pc-windows-gnu --enable-profiler SCRIPT:make ci-mingw], x86_64-mingw, windows-2019-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CUSTOM_MINGW:1 NO_DOWNLOAD_CI_LLVM:1 RUST_CONFIGURE_ARGS:--build=i686-pc-windows-gnu SCRIPT:make ci-mingw], i686-mingw, windows-2019-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CUSTOM_MINGW:1 DIST_REQUIRE_ALL_TOOLS:1 NO_DOWNLOAD_CI_LLVM:1 RUST_CONFIGURE_ARGS:--build=x86_64-pc-windows-gnu --enable-full-tools --enable-profiler SCRIPT:python x.py dist bootstrap --include-default-paths], dist-x86_64… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CUSTOM_MINGW:1 DIST_REQUIRE_ALL_TOOLS:1 NO_DOWNLOAD_CI_LLVM:1 RUST_CONFIGURE_ARGS:--build=i686-pc-windows-gnu --enable-full-tools --enable-profiler SCRIPT:python x.py dist bootstrap --include-default-paths], dist-i686-min… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CODEGEN_BACKENDS:llvm,cranelift], dist-x86_64-musl, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CODEGEN_BACKENDS:llvm,cranelift], dist-x86_64-linux, ubuntu-20.04-16core-64gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CODEGEN_BACKENDS:llvm,cranelift], dist-aarch64-linux, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CODEGEN_BACKENDS:llvm,cranelift IMAGE:dist-x86_64-linux], dist-x86_64-linux-alt, ubuntu-20.04-16core-64gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CODEGEN_BACKENDS:llvm,cranelift DIST_REQUIRE_ALL_TOOLS:1 MACOSX_DEPLOYMENT_TARGET:10.12 NO_DEBUG_ASSERTIONS:1 NO_LLVM_ASSERTIONS:1 NO_OVERFLOW_CHECKS:1 RUSTC_RETRY_LINKER_ON_SEGFAULT:1 RUST_CONFIGURE_ARGS:--enable-full-to… (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CI_ONLY_WHEN_CHANNEL:nightly], x86_64-gnu-integration, ubuntu-20.04-8core-32gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (map[CI_ONLY_WHEN_CHANNEL:nightly IMAGE:x86_64-gnu RUST_CI_OVERRIDE_RELEASE_CHANNEL:stable], x86_64-gnu-stable, ubuntu-20.04-4core-16gb) (push) Waiting to run
CI / auto - ${{ matrix.name }} (aarch64-gnu, [self-hosted ARM64 linux]) (push) Waiting to run
CI / Calculate job matrix (push) Failing after 12s

Rollup of 3 pull requests

Successful merges:

 - #124003 (Dellvmize some intrinsics (use `u32` instead of `Self` in some integer intrinsics))
 - #124169 (Don't fatal when calling `expect_one_of` when recovering arg in `parse_seq`)
 - #124286 (Subtree sync for rustc_codegen_cranelift)

r? `@ghost`
`@rustbot` modify labels: rollup
This commit is contained in:
bors 2024-04-23 18:23:46 +00:00
commit 40dcd796d0
46 changed files with 482 additions and 263 deletions

View File

@ -4,9 +4,9 @@ version = 3
[[package]]
name = "ahash"
version = "0.8.7"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
"once_cell",
@ -16,9 +16,9 @@ dependencies = [
[[package]]
name = "anyhow"
version = "1.0.75"
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519"
[[package]]
name = "arbitrary"
@ -34,9 +34,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bumpalo"
version = "3.14.0"
version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "cfg-if"
@ -46,18 +46,18 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "cranelift-bforest"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a535eb1cf5a6003197dc569320c40c1cb2d2f97ef5d5348eebf067f20957381"
checksum = "79b27922a6879b5b5361d0a084cb0b1941bf109a98540addcb932da13b68bed4"
dependencies = [
"cranelift-entity",
]
[[package]]
name = "cranelift-codegen"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11b5066db32cec1492573827183af2142d2d88fe85a83cfc9e73f0f63d3788d4"
checksum = "304c455b28bf56372729acb356afbb55d622f2b0f2f7837aa5e57c138acaac4d"
dependencies = [
"bumpalo",
"cranelift-bforest",
@ -67,7 +67,7 @@ dependencies = [
"cranelift-entity",
"cranelift-isle",
"gimli",
"hashbrown 0.14.0",
"hashbrown 0.14.3",
"log",
"regalloc2",
"smallvec",
@ -76,39 +76,39 @@ dependencies = [
[[package]]
name = "cranelift-codegen-meta"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64942e5774308e835fbad4dd25f253105412c90324631910e1ec27963147bddb"
checksum = "1653c56b99591d07f67c5ca7f9f25888948af3f4b97186bff838d687d666f613"
dependencies = [
"cranelift-codegen-shared",
]
[[package]]
name = "cranelift-codegen-shared"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c39c33db9a86dd6d8d04166a10c53deb477aeea3500eaaefca682e4eda9bb986"
checksum = "f5b6a9cf6b6eb820ee3f973a0db313c05dc12d370f37b4fe9630286e1672573f"
[[package]]
name = "cranelift-control"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b7fc4937613aea3156a0538800a17bf56f345a5da2e79ae3df58488c93d867f"
checksum = "d9d06e6bf30075fb6bed9e034ec046475093392eea1aff90eb5c44c4a033d19a"
dependencies = [
"arbitrary",
]
[[package]]
name = "cranelift-entity"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f85575e79a153ce1ddbfb7fe1813519b4bfe1eb200cc9c8353b45ad123ae4d36"
checksum = "29be04f931b73cdb9694874a295027471817f26f26d2f0ebe5454153176b6e3a"
[[package]]
name = "cranelift-frontend"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbc31d6c0ab2249fe0c21e988256b42f5f401ab2673b4fc40076c82a698bdfb9"
checksum = "a07fd7393041d7faa2f37426f5dc7fc04003b70988810e8c063beefeff1cd8f9"
dependencies = [
"cranelift-codegen",
"log",
@ -118,15 +118,15 @@ dependencies = [
[[package]]
name = "cranelift-isle"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc14f37e3314c0e4c53779c2f46753bf242efff76ee9473757a1fff3b495ad37"
checksum = "f341d7938caa6dff8149dac05bb2b53fc680323826b83b4cf175ab9f5139a3c9"
[[package]]
name = "cranelift-jit"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfdd1942f3233176a68c285380dbc84ff0440246a1bce308611c0a385b56ab18"
checksum = "42733555e06433f1461570e09dbd756dafc228b4dac75c597cdbdc518de07522"
dependencies = [
"anyhow",
"cranelift-codegen",
@ -139,14 +139,14 @@ dependencies = [
"region",
"target-lexicon",
"wasmtime-jit-icache-coherence",
"windows-sys 0.52.0",
"windows-sys",
]
[[package]]
name = "cranelift-module"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "121b2b5a16912554a1b9aace75b9b21eca49f28e33cbfbad4786dd9bc5361a5c"
checksum = "84950af02bb85f3da764d53a953b43bb29a732e793d4fe24637a61591be9a024"
dependencies = [
"anyhow",
"cranelift-codegen",
@ -155,9 +155,9 @@ dependencies = [
[[package]]
name = "cranelift-native"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ea5375f76ab31f9800a23fb2b440810286a6f669a3eb467cdd7ff255ea64268"
checksum = "82af6066e6448d26eeabb7aa26a43f7ff79f8217b06bade4ee6ef230aecc8880"
dependencies = [
"cranelift-codegen",
"libc",
@ -166,9 +166,9 @@ dependencies = [
[[package]]
name = "cranelift-object"
version = "0.106.0"
version = "0.107.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f34e04419ab41661e973d90a73aa7b12771455394dae7a69b101a9b7e7589db7"
checksum = "00af56107039ed150391df6f753298c7b08f2b6a2e0727d216b5fa599d684d8b"
dependencies = [
"anyhow",
"cranelift-codegen",
@ -181,9 +181,9 @@ dependencies = [
[[package]]
name = "crc32fast"
version = "1.3.2"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa"
dependencies = [
"cfg-if",
]
@ -222,21 +222,21 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.14.0"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
dependencies = [
"ahash",
]
[[package]]
name = "indexmap"
version = "2.0.0"
version = "2.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
dependencies = [
"equivalent",
"hashbrown 0.14.0",
"hashbrown 0.14.3",
]
[[package]]
@ -247,19 +247,19 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
[[package]]
name = "libloading"
version = "0.8.1"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19"
dependencies = [
"cfg-if",
"windows-sys 0.48.0",
"windows-targets",
]
[[package]]
name = "log"
version = "0.4.20"
version = "0.4.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
[[package]]
name = "mach"
@ -272,42 +272,42 @@ dependencies = [
[[package]]
name = "memchr"
version = "2.6.3"
version = "2.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
[[package]]
name = "object"
version = "0.32.0"
version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe"
checksum = "d8dd6c0cdf9429bce006e1362bfce61fa1bfd8c898a643ed8d2b471934701d3d"
dependencies = [
"crc32fast",
"hashbrown 0.14.0",
"hashbrown 0.14.3",
"indexmap",
"memchr",
]
[[package]]
name = "once_cell"
version = "1.18.0"
version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "proc-macro2"
version = "1.0.75"
version = "1.0.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "907a61bd0f64c2f29cd1cf1dc34d05176426a3f504a78010f08416ddb7b13708"
checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.35"
version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [
"proc-macro2",
]
@ -369,9 +369,9 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7"
[[package]]
name = "smallvec"
version = "1.11.0"
version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "stable_deref_trait"
@ -381,9 +381,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "syn"
version = "2.0.47"
version = "2.0.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1726efe18f42ae774cc644f330953a5e7b3c3003d3edcecf18850fe9d4dd9afb"
checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
dependencies = [
"proc-macro2",
"quote",
@ -410,13 +410,13 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "wasmtime-jit-icache-coherence"
version = "19.0.0"
version = "20.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2796e4b4989db62899d2117e1e0258b839d088c044591b14e3a0396e7b3ae53a"
checksum = "7a9f93a3289057b26dc75eb84d6e60d7694f7d169c7c09597495de6e016a13ff"
dependencies = [
"cfg-if",
"libc",
"windows-sys 0.52.0",
"windows-sys",
]
[[package]]
@ -441,137 +441,78 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
"windows-targets 0.48.5",
]
[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets 0.52.0",
"windows-targets",
]
[[package]]
name = "windows-targets"
version = "0.48.5"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
dependencies = [
"windows_aarch64_gnullvm 0.48.5",
"windows_aarch64_msvc 0.48.5",
"windows_i686_gnu 0.48.5",
"windows_i686_msvc 0.48.5",
"windows_x86_64_gnu 0.48.5",
"windows_x86_64_gnullvm 0.48.5",
"windows_x86_64_msvc 0.48.5",
]
[[package]]
name = "windows-targets"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
dependencies = [
"windows_aarch64_gnullvm 0.52.0",
"windows_aarch64_msvc 0.52.0",
"windows_i686_gnu 0.52.0",
"windows_i686_msvc 0.52.0",
"windows_x86_64_gnu 0.52.0",
"windows_x86_64_gnullvm 0.52.0",
"windows_x86_64_msvc 0.52.0",
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.5"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
[[package]]
name = "windows_i686_gnu"
version = "0.52.0"
name = "windows_i686_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
[[package]]
name = "zerocopy"

View File

@ -8,15 +8,15 @@ crate-type = ["dylib"]
[dependencies]
# These have to be in sync with each other
cranelift-codegen = { version = "0.106.0", default-features = false, features = ["std", "unwind", "all-arch"] }
cranelift-frontend = { version = "0.106.0" }
cranelift-module = { version = "0.106.0" }
cranelift-native = { version = "0.106.0" }
cranelift-jit = { version = "0.106.0", optional = true }
cranelift-object = { version = "0.106.0" }
cranelift-codegen = { version = "0.107.0", default-features = false, features = ["std", "unwind", "all-arch"] }
cranelift-frontend = { version = "0.107.0" }
cranelift-module = { version = "0.107.0" }
cranelift-native = { version = "0.107.0" }
cranelift-jit = { version = "0.107.0", optional = true }
cranelift-object = { version = "0.107.0" }
target-lexicon = "0.12.0"
gimli = { version = "0.28", default-features = false, features = ["write"]}
object = { version = "0.32", default-features = false, features = ["std", "read_core", "write", "archive", "coff", "elf", "macho", "pe"] }
object = { version = "0.33", default-features = false, features = ["std", "read_core", "write", "archive", "coff", "elf", "macho", "pe"] }
indexmap = "2.0.0"
libloading = { version = "0.8.0", optional = true }

View File

@ -43,7 +43,13 @@ pub(crate) fn run(
let mut cmd = ABI_CAFE.run(bootstrap_host_compiler, dirs);
cmd.arg("--");
cmd.arg("--pairs");
cmd.args(pairs);
cmd.args(
if cfg!(not(any(target_os = "macos", all(target_os = "windows", target_env = "msvc")))) {
&pairs[..]
} else {
&pairs[..2]
},
);
cmd.arg("--add-rustc-codegen-backend");
match cg_clif_dylib {
CodegenBackend::Local(path) => {

View File

@ -290,7 +290,7 @@ pub(crate) fn run_tests(
&& !skip_tests.contains(&"testsuite.extended_sysroot");
if run_base_sysroot || run_extended_sysroot {
let mut target_compiler = build_sysroot::build_sysroot(
let target_compiler = build_sysroot::build_sysroot(
dirs,
channel,
sysroot_kind,
@ -299,11 +299,8 @@ pub(crate) fn run_tests(
rustup_toolchain_name,
target_triple.clone(),
);
// Rust's build system denies a couple of lints that trigger on several of the test
// projects. Changing the code to fix them is not worth it, so just silence all lints.
target_compiler.rustflags.push("--cap-lints=allow".to_owned());
let runner = TestRunner::new(
let mut runner = TestRunner::new(
dirs.clone(),
target_compiler,
use_unstable_features,
@ -319,6 +316,9 @@ pub(crate) fn run_tests(
}
if run_extended_sysroot {
// Rust's build system denies a couple of lints that trigger on several of the test
// projects. Changing the code to fix them is not worth it, so just silence all lints.
runner.target_compiler.rustflags.push("--cap-lints=allow".to_owned());
runner.run_testsuite(EXTENDED_SYSROOT_SUITE);
} else {
eprintln!("[SKIP] extended_sysroot tests");

View File

@ -1,4 +1,5 @@
#![feature(start, core_intrinsics, alloc_error_handler, lang_items)]
#![allow(internal_features)]
#![no_std]
extern crate alloc;

View File

@ -80,7 +80,6 @@ mod platform {
extern "system" {
fn GetProcessHeap() -> HANDLE;
fn HeapAlloc(hHeap: HANDLE, dwFlags: DWORD, dwBytes: SIZE_T) -> LPVOID;
fn HeapReAlloc(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID, dwBytes: SIZE_T) -> LPVOID;
fn HeapFree(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID) -> BOOL;
fn GetLastError() -> DWORD;
}
@ -111,7 +110,7 @@ unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
allocate_with_flags(layout, HEAP_ZERO_MEMORY)
}
#[inline]
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
let header = get_header(ptr);
let err = HeapFree(GetProcessHeap(), 0, header.0 as LPVOID);
debug_assert!(err != 0, "Failed to free heap memory: {}", GetLastError());

View File

@ -149,7 +149,7 @@ pub unsafe fn deref_str_ptr(s: *const str) -> &'static str {
arr
}
pub unsafe fn use_ctlz_nonzero(a: u16) -> u16 {
pub unsafe fn use_ctlz_nonzero(a: u16) -> u32 {
intrinsics::ctlz_nonzero(a)
}

View File

@ -5,7 +5,7 @@
// Test that the simd_f{min,max} intrinsics produce the correct results.
#![feature(repr_simd, core_intrinsics)]
#![allow(non_camel_case_types)]
#![allow(internal_features, non_camel_case_types)]
#[repr(simd)]
#[derive(Copy, Clone, PartialEq, Debug)]

View File

@ -627,7 +627,7 @@ pub mod intrinsics {
pub fn min_align_of_val<T: ?::Sized>(val: *const T) -> usize;
pub fn copy<T>(src: *const T, dst: *mut T, count: usize);
pub fn transmute<T, U>(e: T) -> U;
pub fn ctlz_nonzero<T>(x: T) -> T;
pub fn ctlz_nonzero<T>(x: T) -> u32;
#[rustc_safe_intrinsic]
pub fn needs_drop<T: ?::Sized>() -> bool;
#[rustc_safe_intrinsic]

View File

@ -1,4 +1,5 @@
#![feature(start, core_intrinsics, lang_items)]
#![allow(internal_features)]
#![no_std]
#[cfg_attr(unix, link(name = "c"))]

View File

@ -4,7 +4,9 @@
#[cfg(target_arch = "aarch64")]
use std::arch::aarch64::*;
#[cfg(target_arch = "aarch64")]
use std::mem::transmute;
#[cfg(target_arch = "aarch64")]
use std::simd::*;
#[cfg(target_arch = "aarch64")]

View File

@ -7,6 +7,7 @@
tuple_trait,
unboxed_closures
)]
#![allow(internal_features)]
#[cfg(target_arch = "x86_64")]
use std::arch::x86_64::*;

View File

@ -11,7 +11,7 @@ diff --git a/src/report.rs b/src/report.rs
index eeec614..f582867 100644
--- a/src/report.rs
+++ b/src/report.rs
@@ -48,6 +48,12 @@ pub fn get_test_rules(test: &TestKey, caller: &dyn AbiImpl, callee: &dyn AbiImpl
@@ -48,6 +48,15 @@ pub fn get_test_rules(test: &TestKey, caller: &dyn AbiImpl, callee: &dyn AbiImpl
//
// THIS AREA RESERVED FOR VENDORS TO APPLY PATCHES
@ -19,6 +19,9 @@ index eeec614..f582867 100644
+ if cfg!(all(target_os = "windows", target_env = "gnu")) && test.test_name == "ui128" {
+ result.run = Link;
+ result.check = Pass(Link);
+ } else if test.test_name == "ui128" {
+ result.run == Check;
+ result.check = Pass(Check);
+ }
+
// END OF VENDOR RESERVED AREA

View File

@ -1,3 +1,3 @@
[toolchain]
channel = "nightly-2024-04-11"
channel = "nightly-2024-04-23"
components = ["rust-src", "rustc-dev", "llvm-tools"]

View File

@ -7,11 +7,13 @@
use std::borrow::Cow;
use cranelift_codegen::ir::SigRef;
use cranelift_codegen::isa::CallConv;
use cranelift_module::ModuleError;
use rustc_codegen_ssa::errors::CompilerBuiltinsCannotCall;
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
use rustc_middle::ty::layout::FnAbiOf;
use rustc_middle::ty::print::with_no_trimmed_paths;
use rustc_middle::ty::TypeVisitableExt;
use rustc_monomorphize::is_call_from_compiler_builtins_to_upstream_monomorphization;
use rustc_session::Session;
use rustc_span::source_map::Spanned;

View File

@ -2,12 +2,14 @@
use cranelift_codegen::ir::UserFuncName;
use cranelift_codegen::CodegenError;
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
use cranelift_module::ModuleError;
use rustc_ast::InlineAsmOptions;
use rustc_index::IndexVec;
use rustc_middle::ty::adjustment::PointerCoercion;
use rustc_middle::ty::layout::FnAbiOf;
use rustc_middle::ty::print::with_no_trimmed_paths;
use rustc_middle::ty::TypeVisitableExt;
use rustc_monomorphize::is_call_from_compiler_builtins_to_upstream_monomorphization;
use crate::constant::ConstantCx;
@ -823,7 +825,13 @@ fn is_fat_ptr<'tcx>(fx: &FunctionCx<'_, '_, 'tcx>, ty: Ty<'tcx>) -> bool {
};
let data = codegen_operand(fx, data);
let meta = codegen_operand(fx, meta);
let ptr_val = CValue::pointer_from_data_and_meta(data, meta, layout);
assert!(data.layout().ty.is_unsafe_ptr());
assert!(layout.ty.is_unsafe_ptr());
let ptr_val = if meta.layout().is_zst() {
data.cast_pointer_to(layout)
} else {
CValue::by_val_pair(data.load_scalar(fx), meta.load_scalar(fx), layout)
};
lval.write_cvalue(fx, ptr_val);
}
Rvalue::Aggregate(ref kind, ref operands) => {

View File

@ -1,8 +1,10 @@
use cranelift_codegen::isa::TargetFrontendConfig;
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
use rustc_index::IndexVec;
use rustc_middle::ty::layout::{
FnAbiError, FnAbiOfHelpers, FnAbiRequest, LayoutError, LayoutOfHelpers,
self, FnAbiError, FnAbiOfHelpers, FnAbiRequest, LayoutError, LayoutOfHelpers,
};
use rustc_middle::ty::TypeFoldable;
use rustc_span::source_map::Spanned;
use rustc_target::abi::call::FnAbi;
use rustc_target::abi::{Integer, Primitive};

View File

@ -137,18 +137,23 @@ pub(crate) fn codegen_const_value<'tcx>(
let alloc_id = prov.alloc_id();
let base_addr = match fx.tcx.global_alloc(alloc_id) {
GlobalAlloc::Memory(alloc) => {
let data_id = data_id_for_alloc_id(
&mut fx.constants_cx,
fx.module,
alloc_id,
alloc.inner().mutability,
);
let local_data_id =
fx.module.declare_data_in_func(data_id, &mut fx.bcx.func);
if fx.clif_comments.enabled() {
fx.add_comment(local_data_id, format!("{:?}", alloc_id));
if alloc.inner().len() == 0 {
assert_eq!(offset, Size::ZERO);
fx.bcx.ins().iconst(fx.pointer_type, alloc.inner().align.bytes() as i64)
} else {
let data_id = data_id_for_alloc_id(
&mut fx.constants_cx,
fx.module,
alloc_id,
alloc.inner().mutability,
);
let local_data_id =
fx.module.declare_data_in_func(data_id, &mut fx.bcx.func);
if fx.clif_comments.enabled() {
fx.add_comment(local_data_id, format!("{:?}", alloc_id));
}
fx.bcx.ins().global_value(fx.pointer_type, local_data_id)
}
fx.bcx.ins().global_value(fx.pointer_type, local_data_id)
}
GlobalAlloc::Function(instance) => {
let func_id = crate::abi::import_function(fx.tcx, fx.module, instance);

View File

@ -19,7 +19,7 @@
use rustc_hir::def::DefKind;
use rustc_hir::def_id::DefIdMap;
use rustc_session::Session;
use rustc_span::{SourceFileHash, StableSourceFileId};
use rustc_span::{FileNameDisplayPreference, SourceFileHash, StableSourceFileId};
use rustc_target::abi::call::FnAbi;
pub(crate) use self::emit::{DebugReloc, DebugRelocName};

View File

@ -2,7 +2,7 @@
use cranelift_object::ObjectProduct;
use gimli::SectionId;
use object::write::{Relocation, StandardSegment};
use object::{RelocationEncoding, SectionKind};
use object::{RelocationEncoding, RelocationFlags, SectionKind};
use rustc_data_structures::fx::FxHashMap;
use crate::debuginfo::{DebugReloc, DebugRelocName};
@ -72,9 +72,11 @@ fn add_debug_reloc(
Relocation {
offset: u64::from(reloc.offset),
symbol,
kind: reloc.kind,
encoding: RelocationEncoding::Generic,
size: reloc.size * 8,
flags: RelocationFlags::Generic {
kind: reloc.kind,
encoding: RelocationEncoding::Generic,
size: reloc.size * 8,
},
addend: i64::try_from(symbol_offset).unwrap() + reloc.addend,
},
)

View File

@ -6,6 +6,7 @@
use std::os::raw::{c_char, c_int};
use std::sync::{mpsc, Mutex, OnceLock};
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
use cranelift_jit::{JITBuilder, JITModule};
use rustc_codegen_ssa::CrateInfo;
use rustc_middle::mir::mono::MonoItem;

View File

@ -2,6 +2,7 @@
use std::fmt::Write;
use cranelift_codegen::isa::CallConv;
use rustc_ast::ast::{InlineAsmOptions, InlineAsmTemplatePiece};
use rustc_span::sym;
use rustc_target::asm::*;
@ -785,9 +786,9 @@ fn call_inline_asm<'tcx>(
for (offset, place) in outputs {
let ty = if place.layout().ty.is_simd() {
let (lane_count, lane_type) = place.layout().ty.simd_size_and_type(fx.tcx);
fx.clif_type(lane_type).unwrap().by(lane_count.try_into().unwrap()).unwrap()
asm_clif_type(fx, lane_type).unwrap().by(lane_count.try_into().unwrap()).unwrap()
} else {
fx.clif_type(place.layout().ty).unwrap()
asm_clif_type(fx, place.layout().ty).unwrap()
};
let value = stack_slot.offset(fx, i32::try_from(offset.bytes()).unwrap().into()).load(
fx,
@ -797,3 +798,24 @@ fn call_inline_asm<'tcx>(
place.write_cvalue(fx, CValue::by_val(value, place.layout()));
}
}
fn asm_clif_type<'tcx>(fx: &FunctionCx<'_, '_, 'tcx>, ty: Ty<'tcx>) -> Option<types::Type> {
match ty.kind() {
// Adapted from https://github.com/rust-lang/rust/blob/f3c66088610c1b80110297c2d9a8b5f9265b013f/compiler/rustc_hir_analysis/src/check/intrinsicck.rs#L136-L151
ty::Adt(adt, args) if Some(adt.did()) == fx.tcx.lang_items().maybe_uninit() => {
let fields = &adt.non_enum_variant().fields;
let ty = fields[FieldIdx::from_u32(1)].ty(fx.tcx, args);
let ty::Adt(ty, args) = ty.kind() else {
unreachable!("expected first field of `MaybeUninit` to be an ADT")
};
assert!(
ty.is_manually_drop(),
"expected first field of `MaybeUninit` to be `ManuallyDrop`"
);
let fields = &ty.non_enum_variant().fields;
let ty = fields[FieldIdx::ZERO].ty(fx.tcx, args);
fx.clif_type(ty)
}
_ => fx.clif_type(ty),
}
}

View File

@ -26,6 +26,7 @@ macro_rules! intrinsic_args {
use rustc_span::symbol::{sym, Symbol};
pub(crate) use self::llvm::codegen_llvm_intrinsic_call;
use crate::cast::clif_intcast;
use crate::prelude::*;
fn bug_on_incorrect_arg_count(intrinsic: impl std::fmt::Display) -> ! {
@ -627,7 +628,8 @@ fn codegen_regular_intrinsic_call<'tcx>(
// FIXME trap on `ctlz_nonzero` with zero arg.
let res = fx.bcx.ins().clz(val);
let res = CValue::by_val(res, arg.layout());
let res = clif_intcast(fx, res, types::I32, false);
let res = CValue::by_val(res, ret.layout());
ret.write_cvalue(fx, res);
}
sym::cttz | sym::cttz_nonzero => {
@ -636,7 +638,8 @@ fn codegen_regular_intrinsic_call<'tcx>(
// FIXME trap on `cttz_nonzero` with zero arg.
let res = fx.bcx.ins().ctz(val);
let res = CValue::by_val(res, arg.layout());
let res = clif_intcast(fx, res, types::I32, false);
let res = CValue::by_val(res, ret.layout());
ret.write_cvalue(fx, res);
}
sym::ctpop => {
@ -644,7 +647,8 @@ fn codegen_regular_intrinsic_call<'tcx>(
let val = arg.load_scalar(fx);
let res = fx.bcx.ins().popcnt(val);
let res = CValue::by_val(res, arg.layout());
let res = clif_intcast(fx, res, types::I32, false);
let res = CValue::by_val(res, ret.layout());
ret.write_cvalue(fx, res);
}
sym::bitreverse => {

View File

@ -87,21 +87,17 @@ mod prelude {
AbiParam, Block, FuncRef, Inst, InstBuilder, MemFlags, Signature, SourceLoc, StackSlot,
StackSlotData, StackSlotKind, TrapCode, Type, Value,
};
pub(crate) use cranelift_codegen::isa::{self, CallConv};
pub(crate) use cranelift_codegen::Context;
pub(crate) use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext, Variable};
pub(crate) use cranelift_module::{self, DataDescription, FuncId, Linkage, Module};
pub(crate) use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
pub(crate) use rustc_hir::def_id::{DefId, LOCAL_CRATE};
pub(crate) use rustc_index::Idx;
pub(crate) use rustc_middle::bug;
pub(crate) use rustc_middle::mir::{self, *};
pub(crate) use rustc_middle::ty::layout::{self, LayoutOf, TyAndLayout};
pub(crate) use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
pub(crate) use rustc_middle::ty::{
self, FloatTy, Instance, InstanceDef, IntTy, ParamEnv, Ty, TyCtxt, TypeAndMut,
TypeFoldable, TypeVisitableExt, UintTy,
self, FloatTy, Instance, InstanceDef, IntTy, ParamEnv, Ty, TyCtxt, TypeAndMut, UintTy,
};
pub(crate) use rustc_span::{FileNameDisplayPreference, Span};
pub(crate) use rustc_span::Span;
pub(crate) use rustc_target::abi::{Abi, FieldIdx, Scalar, Size, VariantIdx, FIRST_VARIANT};
pub(crate) use crate::abi::*;
@ -261,7 +257,7 @@ fn target_triple(sess: &Session) -> target_lexicon::Triple {
}
}
fn build_isa(sess: &Session, backend_config: &BackendConfig) -> Arc<dyn isa::TargetIsa + 'static> {
fn build_isa(sess: &Session, backend_config: &BackendConfig) -> Arc<dyn TargetIsa + 'static> {
use target_lexicon::BinaryFormat;
let target_triple = crate::target_triple(sess);

View File

@ -1,3 +1,4 @@
use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext};
use rustc_hir::LangItem;
use rustc_middle::ty::AssocKind;
use rustc_middle::ty::GenericArg;

View File

@ -2,6 +2,7 @@
use cranelift_codegen::entity::EntityRef;
use cranelift_codegen::ir::immediates::Offset32;
use cranelift_frontend::Variable;
use rustc_middle::ty::FnSig;
use crate::prelude::*;
@ -94,23 +95,6 @@ pub(crate) fn by_val_pair(
CValue(CValueInner::ByValPair(value, extra), layout)
}
/// For `AggregateKind::RawPtr`, create a pointer from its parts.
///
/// Panics if the `layout` is not a raw pointer.
pub(crate) fn pointer_from_data_and_meta(
data: CValue<'tcx>,
meta: CValue<'tcx>,
layout: TyAndLayout<'tcx>,
) -> CValue<'tcx> {
assert!(layout.ty.is_unsafe_ptr());
let inner = match (data.0, meta.0) {
(CValueInner::ByVal(p), CValueInner::ByVal(m)) => CValueInner::ByValPair(p, m),
(p @ CValueInner::ByVal(_), CValueInner::ByRef(..)) if meta.1.is_zst() => p,
_ => bug!("RawPtr operands {data:?} {meta:?}"),
};
CValue(inner, layout)
}
pub(crate) fn layout(&self) -> TyAndLayout<'tcx> {
self.1
}

View File

@ -153,9 +153,10 @@ unsafe fn deref_str_ptr(s: *const str) -> &'static str {
arr
}
unsafe fn use_ctlz_nonzero(a: u16) -> u16 {
intrinsics::ctlz_nonzero(a)
}
// FIXME: fix the intrinsic implementation to work with the new ->u32 signature
// unsafe fn use_ctlz_nonzero(a: u16) -> u32 {
// intrinsics::ctlz_nonzero(a)
// }
fn ptr_as_usize(ptr: *const u8) -> usize {
ptr as usize

View File

@ -593,7 +593,7 @@ pub mod intrinsics {
pub fn min_align_of_val<T: ?Sized>(val: *const T) -> usize;
pub fn copy<T>(src: *const T, dst: *mut T, count: usize);
pub fn transmute<T, U>(e: T) -> U;
pub fn ctlz_nonzero<T>(x: T) -> T;
pub fn ctlz_nonzero<T>(x: T) -> u32;
#[rustc_safe_intrinsic]
pub fn needs_drop<T: ?Sized>() -> bool;
#[rustc_safe_intrinsic]

View File

@ -315,25 +315,32 @@ fn codegen_intrinsic_call(
Some((width, signed)) => match name {
sym::ctlz | sym::cttz => {
let y = self.const_bool(false);
self.call_intrinsic(
let ret = self.call_intrinsic(
&format!("llvm.{name}.i{width}"),
&[args[0].immediate(), y],
)
);
self.intcast(ret, llret_ty, false)
}
sym::ctlz_nonzero => {
let y = self.const_bool(true);
let llvm_name = &format!("llvm.ctlz.i{width}");
self.call_intrinsic(llvm_name, &[args[0].immediate(), y])
let ret = self.call_intrinsic(llvm_name, &[args[0].immediate(), y]);
self.intcast(ret, llret_ty, false)
}
sym::cttz_nonzero => {
let y = self.const_bool(true);
let llvm_name = &format!("llvm.cttz.i{width}");
self.call_intrinsic(llvm_name, &[args[0].immediate(), y])
let ret = self.call_intrinsic(llvm_name, &[args[0].immediate(), y]);
self.intcast(ret, llret_ty, false)
}
sym::ctpop => {
let ret = self.call_intrinsic(
&format!("llvm.ctpop.i{width}"),
&[args[0].immediate()],
);
self.intcast(ret, llret_ty, false)
}
sym::ctpop => self.call_intrinsic(
&format!("llvm.ctpop.i{width}"),
&[args[0].immediate()],
),
sym::bswap => {
if width == 8 {
args[0].immediate() // byte swap a u8/i8 is just a no-op
@ -355,6 +362,10 @@ fn codegen_intrinsic_call(
// rotate = funnel shift with first two args the same
let llvm_name =
&format!("llvm.fsh{}.i{}", if is_left { 'l' } else { 'r' }, width);
// llvm expects shift to be the same type as the values, but rust always uses `u32`
let raw_shift = self.intcast(raw_shift, self.val_ty(val), false);
self.call_intrinsic(llvm_name, &[val, val, raw_shift])
}
sym::saturating_add | sym::saturating_sub => {

View File

@ -173,7 +173,8 @@ pub fn emulate_intrinsic(
let ty = instance_args.type_at(0);
let layout = self.layout_of(ty)?;
let val = self.read_scalar(&args[0])?;
let out_val = self.numeric_intrinsic(intrinsic_name, val, layout)?;
let out_val = self.numeric_intrinsic(intrinsic_name, val, layout, dest.layout)?;
self.write_scalar(out_val, dest)?;
}
sym::saturating_add | sym::saturating_sub => {
@ -200,12 +201,15 @@ pub fn emulate_intrinsic(
sym::rotate_left | sym::rotate_right => {
// rotate_left: (X << (S % BW)) | (X >> ((BW - S) % BW))
// rotate_right: (X << ((BW - S) % BW)) | (X >> (S % BW))
let layout = self.layout_of(instance_args.type_at(0))?;
let layout_val = self.layout_of(instance_args.type_at(0))?;
let val = self.read_scalar(&args[0])?;
let val_bits = val.to_bits(layout.size)?;
let val_bits = val.to_bits(layout_val.size)?;
let layout_raw_shift = self.layout_of(self.tcx.types.u32)?;
let raw_shift = self.read_scalar(&args[1])?;
let raw_shift_bits = raw_shift.to_bits(layout.size)?;
let width_bits = u128::from(layout.size.bits());
let raw_shift_bits = raw_shift.to_bits(layout_raw_shift.size)?;
let width_bits = u128::from(layout_val.size.bits());
let shift_bits = raw_shift_bits % width_bits;
let inv_shift_bits = (width_bits - shift_bits) % width_bits;
let result_bits = if intrinsic_name == sym::rotate_left {
@ -213,8 +217,8 @@ pub fn emulate_intrinsic(
} else {
(val_bits >> shift_bits) | (val_bits << inv_shift_bits)
};
let truncated_bits = self.truncate(result_bits, layout);
let result = Scalar::from_uint(truncated_bits, layout.size);
let truncated_bits = self.truncate(result_bits, layout_val);
let result = Scalar::from_uint(truncated_bits, layout_val.size);
self.write_scalar(result, dest)?;
}
sym::copy => {
@ -472,6 +476,7 @@ pub fn numeric_intrinsic(
name: Symbol,
val: Scalar<M::Provenance>,
layout: TyAndLayout<'tcx>,
ret_layout: TyAndLayout<'tcx>,
) -> InterpResult<'tcx, Scalar<M::Provenance>> {
assert!(layout.ty.is_integral(), "invalid type for numeric intrinsic: {}", layout.ty);
let bits = val.to_bits(layout.size)?;
@ -483,11 +488,17 @@ pub fn numeric_intrinsic(
}
sym::ctlz | sym::ctlz_nonzero => u128::from(bits.leading_zeros()) - extra,
sym::cttz | sym::cttz_nonzero => u128::from((bits << extra).trailing_zeros()) - extra,
sym::bswap => (bits << extra).swap_bytes(),
sym::bitreverse => (bits << extra).reverse_bits(),
sym::bswap => {
assert_eq!(layout, ret_layout);
(bits << extra).swap_bytes()
}
sym::bitreverse => {
assert_eq!(layout, ret_layout);
(bits << extra).reverse_bits()
}
_ => bug!("not a numeric intrinsic: {}", name),
};
Ok(Scalar::from_uint(bits_out, layout.size))
Ok(Scalar::from_uint(bits_out, ret_layout.size))
}
pub fn exact_div(

View File

@ -412,13 +412,11 @@ pub fn check_intrinsic_type(
(1, 0, vec![Ty::new_mut_ptr(tcx, param(0)), param(0)], Ty::new_unit(tcx))
}
sym::ctpop
| sym::ctlz
| sym::ctlz_nonzero
| sym::cttz
| sym::cttz_nonzero
| sym::bswap
| sym::bitreverse => (1, 0, vec![param(0)], param(0)),
sym::ctpop | sym::ctlz | sym::ctlz_nonzero | sym::cttz | sym::cttz_nonzero => {
(1, 0, vec![param(0)], tcx.types.u32)
}
sym::bswap | sym::bitreverse => (1, 0, vec![param(0)], param(0)),
sym::three_way_compare => {
(1, 0, vec![param(0), param(0)], tcx.ty_ordering_enum(Some(span)))
@ -461,7 +459,7 @@ pub fn check_intrinsic_type(
(1, 0, vec![param(0), param(0)], param(0))
}
sym::unchecked_shl | sym::unchecked_shr => (2, 0, vec![param(0), param(1)], param(0)),
sym::rotate_left | sym::rotate_right => (1, 0, vec![param(0), param(0)], param(0)),
sym::rotate_left | sym::rotate_right => (1, 0, vec![param(0), tcx.types.u32], param(0)),
sym::unchecked_add | sym::unchecked_sub | sym::unchecked_mul => {
(1, 0, vec![param(0), param(0)], param(0))
}

View File

@ -895,6 +895,7 @@ fn parse_seq_to_before_tokens<T>(
}
// Attempt to keep parsing if it was an omitted separator.
self.last_unexpected_token_span = None;
match f(self) {
Ok(t) => {
// Parsed successfully, therefore most probably the code only

View File

@ -1987,6 +1987,13 @@ pub const fn unlikely(b: bool) -> bool {
/// The stabilized versions of this intrinsic are available on the integer
/// primitives via the `count_ones` method. For example,
/// [`u32::count_ones`]
#[cfg(not(bootstrap))]
#[rustc_const_stable(feature = "const_ctpop", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]
pub fn ctpop<T: Copy>(x: T) -> u32;
#[cfg(bootstrap)]
#[rustc_const_stable(feature = "const_ctpop", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]
@ -2028,6 +2035,13 @@ pub const fn unlikely(b: bool) -> bool {
/// let num_leading = ctlz(x);
/// assert_eq!(num_leading, 16);
/// ```
#[cfg(not(bootstrap))]
#[rustc_const_stable(feature = "const_ctlz", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]
pub fn ctlz<T: Copy>(x: T) -> u32;
#[cfg(bootstrap)]
#[rustc_const_stable(feature = "const_ctlz", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]
@ -2050,6 +2064,12 @@ pub const fn unlikely(b: bool) -> bool {
/// let num_leading = unsafe { ctlz_nonzero(x) };
/// assert_eq!(num_leading, 3);
/// ```
#[cfg(not(bootstrap))]
#[rustc_const_stable(feature = "constctlz", since = "1.50.0")]
#[rustc_nounwind]
pub fn ctlz_nonzero<T: Copy>(x: T) -> u32;
#[cfg(bootstrap)]
#[rustc_const_stable(feature = "constctlz", since = "1.50.0")]
#[rustc_nounwind]
pub fn ctlz_nonzero<T: Copy>(x: T) -> T;
@ -2090,6 +2110,13 @@ pub const fn unlikely(b: bool) -> bool {
/// let num_trailing = cttz(x);
/// assert_eq!(num_trailing, 16);
/// ```
#[cfg(not(bootstrap))]
#[rustc_const_stable(feature = "const_cttz", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]
pub fn cttz<T: Copy>(x: T) -> u32;
#[cfg(bootstrap)]
#[rustc_const_stable(feature = "const_cttz", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]
@ -2112,6 +2139,12 @@ pub const fn unlikely(b: bool) -> bool {
/// let num_trailing = unsafe { cttz_nonzero(x) };
/// assert_eq!(num_trailing, 3);
/// ```
#[cfg(not(bootstrap))]
#[rustc_const_stable(feature = "const_cttz_nonzero", since = "1.53.0")]
#[rustc_nounwind]
pub fn cttz_nonzero<T: Copy>(x: T) -> u32;
#[cfg(bootstrap)]
#[rustc_const_stable(feature = "const_cttz_nonzero", since = "1.53.0")]
#[rustc_nounwind]
pub fn cttz_nonzero<T: Copy>(x: T) -> T;
@ -2288,6 +2321,13 @@ pub const fn unlikely(b: bool) -> bool {
/// The stabilized versions of this intrinsic are available on the integer
/// primitives via the `rotate_left` method. For example,
/// [`u32::rotate_left`]
#[cfg(not(bootstrap))]
#[rustc_const_stable(feature = "const_int_rotate", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]
pub fn rotate_left<T: Copy>(x: T, shift: u32) -> T;
#[cfg(bootstrap)]
#[rustc_const_stable(feature = "const_int_rotate", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]
@ -2303,6 +2343,13 @@ pub const fn unlikely(b: bool) -> bool {
/// The stabilized versions of this intrinsic are available on the integer
/// primitives via the `rotate_right` method. For example,
/// [`u32::rotate_right`]
#[cfg(not(bootstrap))]
#[rustc_const_stable(feature = "const_int_rotate", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]
pub fn rotate_right<T: Copy>(x: T, shift: u32) -> T;
#[cfg(bootstrap)]
#[rustc_const_stable(feature = "const_int_rotate", since = "1.40.0")]
#[rustc_safe_intrinsic]
#[rustc_nounwind]

View File

@ -527,7 +527,12 @@ impl $Ty {
#[inline]
pub const fn leading_zeros(self) -> u32 {
// SAFETY: since `self` cannot be zero, it is safe to call `ctlz_nonzero`.
unsafe { intrinsics::ctlz_nonzero(self.get() as $UnsignedPrimitive) as u32 }
unsafe {
#[cfg(not(bootstrap))]
return intrinsics::ctlz_nonzero(self.get() as $UnsignedPrimitive);
#[cfg(bootstrap)]
return intrinsics::ctlz_nonzero(self.get() as $UnsignedPrimitive) as u32;
}
}
/// Returns the number of trailing zeros in the binary representation
@ -551,7 +556,12 @@ pub const fn leading_zeros(self) -> u32 {
#[inline]
pub const fn trailing_zeros(self) -> u32 {
// SAFETY: since `self` cannot be zero, it is safe to call `cttz_nonzero`.
unsafe { intrinsics::cttz_nonzero(self.get() as $UnsignedPrimitive) as u32 }
unsafe {
#[cfg(not(bootstrap))]
return intrinsics::cttz_nonzero(self.get() as $UnsignedPrimitive);
#[cfg(bootstrap)]
return intrinsics::cttz_nonzero(self.get() as $UnsignedPrimitive) as u32;
}
}
/// Returns the number of ones in the binary representation of `self`.

View File

@ -77,7 +77,10 @@ macro_rules! uint_impl {
without modifying the original"]
#[inline(always)]
pub const fn count_ones(self) -> u32 {
intrinsics::ctpop(self as $ActualT) as u32
#[cfg(not(bootstrap))]
return intrinsics::ctpop(self as $ActualT);
#[cfg(bootstrap)]
return intrinsics::ctpop(self as $ActualT) as u32;
}
/// Returns the number of zeros in the binary representation of `self`.
@ -119,7 +122,10 @@ pub const fn count_zeros(self) -> u32 {
without modifying the original"]
#[inline(always)]
pub const fn leading_zeros(self) -> u32 {
intrinsics::ctlz(self as $ActualT) as u32
#[cfg(not(bootstrap))]
return intrinsics::ctlz(self as $ActualT);
#[cfg(bootstrap)]
return intrinsics::ctlz(self as $ActualT) as u32;
}
/// Returns the number of trailing zeros in the binary representation
@ -140,7 +146,10 @@ pub const fn leading_zeros(self) -> u32 {
without modifying the original"]
#[inline(always)]
pub const fn trailing_zeros(self) -> u32 {
intrinsics::cttz(self) as u32
#[cfg(not(bootstrap))]
return intrinsics::cttz(self);
#[cfg(bootstrap)]
return intrinsics::cttz(self) as u32;
}
/// Returns the number of leading ones in the binary representation of `self`.
@ -205,7 +214,10 @@ pub const fn trailing_ones(self) -> u32 {
without modifying the original"]
#[inline(always)]
pub const fn rotate_left(self, n: u32) -> Self {
intrinsics::rotate_left(self, n as $SelfT)
#[cfg(not(bootstrap))]
return intrinsics::rotate_left(self, n);
#[cfg(bootstrap)]
return intrinsics::rotate_left(self, n as $SelfT);
}
/// Shifts the bits to the right by a specified amount, `n`,
@ -230,7 +242,10 @@ pub const fn rotate_left(self, n: u32) -> Self {
without modifying the original"]
#[inline(always)]
pub const fn rotate_right(self, n: u32) -> Self {
intrinsics::rotate_right(self, n as $SelfT)
#[cfg(not(bootstrap))]
return intrinsics::rotate_right(self, n);
#[cfg(bootstrap)]
return intrinsics::rotate_right(self, n as $SelfT);
}
/// Reverses the byte order of the integer.

View File

@ -163,7 +163,7 @@ enum Op<'a> {
}
}
Op::Numeric(name) => {
this.numeric_intrinsic(name, op.to_scalar(), op.layout)?
this.numeric_intrinsic(name, op.to_scalar(), op.layout, op.layout)?
}
};
this.write_scalar(val, &dest)?;

View File

@ -2,7 +2,7 @@
mod rusti {
extern "rust-intrinsic" {
pub fn ctlz_nonzero<T>(x: T) -> T;
pub fn ctlz_nonzero<T>(x: T) -> u32;
}
}

View File

@ -2,7 +2,7 @@
mod rusti {
extern "rust-intrinsic" {
pub fn cttz_nonzero<T>(x: T) -> T;
pub fn cttz_nonzero<T>(x: T) -> u32;
}
}

View File

@ -491,6 +491,7 @@
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",

View File

@ -0,0 +1,56 @@
//@ compile-flags: -C no-prepopulate-passes
#![crate_type = "lib"]
#![feature(core_intrinsics)]
use std::intrinsics::{ctlz, ctlz_nonzero};
// CHECK-LABEL: @ctlz_u16
#[no_mangle]
pub unsafe fn ctlz_u16(x: u16) -> u32 {
// CHECK: %[[tmp:.*]] = call i16 @llvm.ctlz.i16(i16 %x, i1 false)
// CHECK: zext i16 %[[tmp]] to i32
ctlz(x)
}
// CHECK-LABEL: @ctlz_nzu16
#[no_mangle]
pub unsafe fn ctlz_nzu16(x: u16) -> u32 {
// CHECK: %[[tmp:.*]] = call i16 @llvm.ctlz.i16(i16 %x, i1 true)
// CHECK: zext i16 %[[tmp]] to i32
ctlz_nonzero(x)
}
// CHECK-LABEL: @ctlz_u32
#[no_mangle]
pub unsafe fn ctlz_u32(x: u32) -> u32 {
// CHECK: call i32 @llvm.ctlz.i32(i32 %x, i1 false)
// CHECK-NOT: zext
// CHECK-NOT: trunc
ctlz(x)
}
// CHECK-LABEL: @ctlz_nzu32
#[no_mangle]
pub unsafe fn ctlz_nzu32(x: u32) -> u32 {
// CHECK: call i32 @llvm.ctlz.i32(i32 %x, i1 true)
// CHECK-NOT: zext
// CHECK-NOT: trunc
ctlz_nonzero(x)
}
// CHECK-LABEL: @ctlz_u64
#[no_mangle]
pub unsafe fn ctlz_u64(x: u64) -> u32 {
// CHECK: %[[tmp:.*]] = call i64 @llvm.ctlz.i64(i64 %x, i1 false)
// CHECK: trunc i64 %[[tmp]] to i32
ctlz(x)
}
// CHECK-LABEL: @ctlz_nzu64
#[no_mangle]
pub unsafe fn ctlz_nzu64(x: u64) -> u32 {
// CHECK: %[[tmp:.*]] = call i64 @llvm.ctlz.i64(i64 %x, i1 true)
// CHECK: trunc i64 %[[tmp]] to i32
ctlz_nonzero(x)
}

View File

@ -0,0 +1,31 @@
//@ compile-flags: -C no-prepopulate-passes
#![crate_type = "lib"]
#![feature(core_intrinsics)]
use std::intrinsics::ctpop;
// CHECK-LABEL: @ctpop_u16
#[no_mangle]
pub unsafe fn ctpop_u16(x: u16) -> u32 {
// CHECK: %[[tmp:.*]] = call i16 @llvm.ctpop.i16(i16 %x)
// CHECK: zext i16 %[[tmp]] to i32
ctpop(x)
}
// CHECK-LABEL: @ctpop_u32
#[no_mangle]
pub unsafe fn ctpop_u32(x: u32) -> u32 {
// CHECK: call i32 @llvm.ctpop.i32(i32 %x)
// CHECK-NOT: zext
// CHECK-NOT: trunc
ctpop(x)
}
// CHECK-LABEL: @ctpop_u64
#[no_mangle]
pub unsafe fn ctpop_u64(x: u64) -> u32 {
// CHECK: %[[tmp:.*]] = call i64 @llvm.ctpop.i64(i64 %x)
// CHECK: trunc i64 %[[tmp]] to i32
ctpop(x)
}

View File

@ -0,0 +1,31 @@
//@ compile-flags: -C no-prepopulate-passes
#![crate_type = "lib"]
#![feature(core_intrinsics)]
use std::intrinsics::rotate_left;
// CHECK-LABEL: @rotate_left_u16
#[no_mangle]
pub unsafe fn rotate_left_u16(x: u16, shift: u32) -> u16 {
// CHECK: %[[tmp:.*]] = trunc i32 %shift to i16
// CHECK: call i16 @llvm.fshl.i16(i16 %x, i16 %x, i16 %[[tmp]])
rotate_left(x, shift)
}
// CHECK-LABEL: @rotate_left_u32
#[no_mangle]
pub unsafe fn rotate_left_u32(x: u32, shift: u32) -> u32 {
// CHECK-NOT: trunc
// CHECK-NOT: zext
// CHECK: call i32 @llvm.fshl.i32(i32 %x, i32 %x, i32 %shift)
rotate_left(x, shift)
}
// CHECK-LABEL: @rotate_left_u64
#[no_mangle]
pub unsafe fn rotate_left_u64(x: u64, shift: u32) -> u64 {
// CHECK: %[[tmp:.*]] = zext i32 %shift to i64
// CHECK: call i64 @llvm.fshl.i64(i64 %x, i64 %x, i64 %[[tmp]])
rotate_left(x, shift)
}

View File

@ -0,0 +1,9 @@
// We used to fatal error without any useful diagnostic when we had an unexpected
// token due to a strange interaction between the sequence parsing code and the
// param/lifetime parsing code.
fn hello() -> impl use<'a {}> Sized {}
//~^ ERROR expected one of `,` or `>`, found `{`
//~| ERROR expected item, found `>`
fn main() {}

View File

@ -0,0 +1,16 @@
error: expected one of `,` or `>`, found `{`
--> $DIR/unexpected-token.rs:5:27
|
LL | fn hello() -> impl use<'a {}> Sized {}
| ^ expected one of `,` or `>`
error: expected item, found `>`
--> $DIR/unexpected-token.rs:5:29
|
LL | fn hello() -> impl use<'a {}> Sized {}
| ^ expected item
|
= note: for a full list of items that can appear in modules, see <https://doc.rust-lang.org/reference/items.html>
error: aborting due to 2 previous errors

View File

@ -16,7 +16,7 @@
#[derive(Copy, Clone)]
pub struct Foo(i64);
pub fn test_cttz(v: Foo) -> Foo {
pub fn test_cttz(v: Foo) -> u32 {
intrinsics::cttz(v)
//~^ ERROR `cttz` intrinsic: expected basic integer type, found `Foo`
}

View File

@ -6,13 +6,13 @@
mod rusti {
extern "rust-intrinsic" {
#[rustc_safe_intrinsic]
pub fn ctpop<T>(x: T) -> T;
pub fn ctpop<T>(x: T) -> u32;
#[rustc_safe_intrinsic]
pub fn ctlz<T>(x: T) -> T;
pub fn ctlz_nonzero<T>(x: T) -> T;
pub fn ctlz<T>(x: T) -> u32;
pub fn ctlz_nonzero<T>(x: T) -> u32;
#[rustc_safe_intrinsic]
pub fn cttz<T>(x: T) -> T;
pub fn cttz_nonzero<T>(x: T) -> T;
pub fn cttz<T>(x: T) -> u32;
pub fn cttz_nonzero<T>(x: T) -> u32;
#[rustc_safe_intrinsic]
pub fn bswap<T>(x: T) -> T;
#[rustc_safe_intrinsic]