Rollup merge of #57486 - nnethercote:simplify-TokenStream-more, r=petrochenkov
Simplify `TokenStream` some more
These commits simplify `TokenStream`, remove `ThinTokenStream`, and avoid some clones. The end result is simpler code and a slight perf win on some benchmarks.
r? @petrochenkov
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 65cdfe6..9924055 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -19,9 +19,16 @@
As a reminder, all contributors are expected to follow our [Code of Conduct][coc].
+The [rustc-guide] is your friend! It describes how the compiler works and how
+to contribute to it in more detail than this document.
+
+If this is your first time contributing, the [walkthrough] chapter of the guide
+can give you a good example of how a typical contribution would go.
+
[pound-rust-internals]: https://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-internals
[internals]: https://internals.rust-lang.org
[coc]: https://www.rust-lang.org/conduct.html
+[walkthrough]: https://rust-lang.github.io/rustc-guide/walkthrough.html
## Feature Requests
[feature-requests]: #feature-requests
@@ -89,222 +96,14 @@
```
## The Build System
-[the-build-system]: #the-build-system
-Rust's build system allows you to bootstrap the compiler, run tests &
-benchmarks, generate documentation, install a fresh build of Rust, and more.
-It's your best friend when working on Rust, allowing you to compile & test
-your contributions before submission.
+For info on how to configure and build the compiler, please see [this
+chapter][rustcguidebuild] of the rustc-guide. This chapter contains info for
+contributions to the compiler and the standard library. It also lists some
+really useful commands to the build system (`./x.py`), which could save you a
+lot of time.
-The build system lives in [the `src/bootstrap` directory][bootstrap] in the
-project root. Our build system is itself written in Rust and is based on Cargo
-to actually build all the compiler's crates. If you have questions on the build
-system internals, try asking in [`#rust-internals`][pound-rust-internals].
-
-[bootstrap]: https://github.com/rust-lang/rust/tree/master/src/bootstrap/
-
-### Configuration
-[configuration]: #configuration
-
-Before you can start building the compiler you need to configure the build for
-your system. In most cases, that will just mean using the defaults provided
-for Rust.
-
-To change configuration, you must copy the file `config.toml.example`
-to `config.toml` in the directory from which you will be running the build, and
-change the settings provided.
-
-There are large number of options provided in this config file that will alter the
-configuration used in the build process. Some options to note:
-
-#### `[llvm]`:
-- `assertions = true` = This enables LLVM assertions, which makes LLVM misuse cause an assertion failure instead of weird misbehavior. This also slows down the compiler's runtime by ~20%.
-- `ccache = true` - Use ccache when building llvm
-
-#### `[build]`:
-- `compiler-docs = true` - Build compiler documentation
-
-#### `[rust]`:
-- `debuginfo = true` - Build a compiler with debuginfo. Makes building rustc slower, but then you can use a debugger to debug `rustc`.
-- `debuginfo-lines = true` - An alternative to `debuginfo = true` that doesn't let you use a debugger, but doesn't make building rustc slower and still gives you line numbers in backtraces.
-- `debuginfo-tools = true` - Build the extended tools with debuginfo.
-- `debug-assertions = true` - Makes the log output of `debug!` work.
-- `optimize = false` - Disable optimizations to speed up compilation of stage1 rust, but makes the stage1 compiler x100 slower.
-
-For more options, the `config.toml` file contains commented out defaults, with
-descriptions of what each option will do.
-
-Note: Previously the `./configure` script was used to configure this
-project. It can still be used, but it's recommended to use a `config.toml`
-file. If you still have a `config.mk` file in your directory - from
-`./configure` - you may need to delete it for `config.toml` to work.
-
-### Building
-[building]: #building
-
-A default configuration requires around 3.5 GB of disk space, whereas building a debug configuration may require more than 30 GB.
-
-Dependencies
-- [build dependencies](README.md#building-from-source)
-- `gdb` 6.2.0 minimum, 7.1 or later recommended for test builds
-
-The build system uses the `x.py` script to control the build process. This script
-is used to build, test, and document various parts of the compiler. You can
-execute it as:
-
-```sh
-python x.py build
-```
-
-On some systems you can also use the shorter version:
-
-```sh
-./x.py build
-```
-
-To learn more about the driver and top-level targets, you can execute:
-
-```sh
-python x.py --help
-```
-
-The general format for the driver script is:
-
-```sh
-python x.py <command> [<directory>]
-```
-
-Some example commands are `build`, `test`, and `doc`. These will build, test,
-and document the specified directory. The second argument, `<directory>`, is
-optional and defaults to working over the entire compiler. If specified,
-however, only that specific directory will be built. For example:
-
-```sh
-# build the entire compiler
-python x.py build
-
-# build all documentation
-python x.py doc
-
-# run all test suites
-python x.py test
-
-# build only the standard library
-python x.py build src/libstd
-
-# test only one particular test suite
-python x.py test src/test/rustdoc
-
-# build only the stage0 libcore library
-python x.py build src/libcore --stage 0
-```
-
-You can explore the build system through the various `--help` pages for each
-subcommand. For example to learn more about a command you can run:
-
-```
-python x.py build --help
-```
-
-To learn about all possible rules you can execute, run:
-
-```
-python x.py build --help --verbose
-```
-
-Note: Previously `./configure` and `make` were used to build this project.
-They are still available, but `x.py` is the recommended build system.
-
-### Useful commands
-[useful-commands]: #useful-commands
-
-Some common invocations of `x.py` are:
-
-- `x.py build --help` - show the help message and explain the subcommand
-- `x.py build src/libtest --stage 1` - build up to (and including) the first
- stage. For most cases we don't need to build the stage2 compiler, so we can
- save time by not building it. The stage1 compiler is a fully functioning
- compiler and (probably) will be enough to determine if your change works as
- expected.
-- `x.py build src/rustc --stage 1` - This will build just rustc, without libstd.
- This is the fastest way to recompile after you changed only rustc source code.
- Note however that the resulting rustc binary won't have a stdlib to link
- against by default. You can build libstd once with `x.py build src/libstd`,
- but it is only guaranteed to work if recompiled, so if there are any issues
- recompile it.
-- `x.py test` - build the full compiler & run all tests (takes a while). This
- is what gets run by the continuous integration system against your pull
- request. You should run this before submitting to make sure your tests pass
- & everything builds in the correct manner.
-- `x.py test src/libstd --stage 1` - test the standard library without
- recompiling stage 2.
-- `x.py test src/test/run-pass --test-args TESTNAME` - Run a matching set of
- tests.
- - `TESTNAME` should be a substring of the tests to match against e.g. it could
- be the fully qualified test name, or just a part of it.
- `TESTNAME=collections::hash::map::test_map::test_capacity_not_less_than_len`
- or `TESTNAME=test_capacity_not_less_than_len`.
-- `x.py test src/test/run-pass --stage 1 --test-args <substring-of-test-name>` -
- Run a single rpass test with the stage1 compiler (this will be quicker than
- running the command above as we only build the stage1 compiler, not the entire
- thing). You can also leave off the directory argument to run all stage1 test
- types.
-- `x.py test src/libcore --stage 1` - Run stage1 tests in `libcore`.
-- `x.py test src/tools/tidy` - Check that the source code is in compliance with
- Rust's style guidelines. There is no official document describing Rust's full
- guidelines as of yet, but basic rules like 4 spaces for indentation and no
- more than 99 characters in a single line should be kept in mind when writing
- code.
-
-### Using your local build
-[using-local-build]: #using-local-build
-
-If you use Rustup to manage your rust install, it has a feature called ["custom
-toolchains"][toolchain-link] that you can use to access your newly-built compiler
-without having to install it to your system or user PATH. If you've run `python
-x.py build`, then you can add your custom rustc to a new toolchain like this:
-
-[toolchain-link]: https://github.com/rust-lang-nursery/rustup.rs#working-with-custom-toolchains-and-local-builds
-
-```
-rustup toolchain link <name> build/<host-triple>/stage2
-```
-
-Where `<host-triple>` is the build triple for the host (the triple of your
-computer, by default), and `<name>` is the name for your custom toolchain. (If you
-added `--stage 1` to your build command, the compiler will be in the `stage1`
-folder instead.) You'll only need to do this once - it will automatically point
-to the latest build you've done.
-
-Once this is set up, you can use your custom toolchain just like any other. For
-example, if you've named your toolchain `local`, running `cargo +local build` will
-compile a project with your custom rustc, setting `rustup override set local` will
-override the toolchain for your current directory, and `cargo +local doc` will use
-your custom rustc and rustdoc to generate docs. (If you do this with a `--stage 1`
-build, you'll need to build rustdoc specially, since it's not normally built in
-stage 1. `python x.py build --stage 1 src/libstd src/tools/rustdoc` will build
-rustdoc and libstd, which will allow rustdoc to be run with that toolchain.)
-
-### Out-of-tree builds
-[out-of-tree-builds]: #out-of-tree-builds
-
-Rust's `x.py` script fully supports out-of-tree builds - it looks for
-the Rust source code from the directory `x.py` was found in, but it
-reads the `config.toml` configuration file from the directory it's
-run in, and places all build artifacts within a subdirectory named `build`.
-
-This means that if you want to do an out-of-tree build, you can just do it:
-```
-$ cd my/build/dir
-$ cp ~/my-config.toml config.toml # Or fill in config.toml otherwise
-$ path/to/rust/x.py build
-...
-$ # This will use the Rust source code in `path/to/rust`, but build
-$ # artifacts will now be in ./build
-```
-
-It's absolutely fine to have multiple build directories with different
-`config.toml` configurations using the same code.
+[rustcguidebuild]: https://rust-lang.github.io/rustc-guide/how-to-build-and-run.html
## Pull Requests
[pull-requests]: #pull-requests
@@ -320,26 +119,13 @@
Please make pull requests against the `master` branch.
-Compiling all of `./x.py test` can take a while. When testing your pull request,
-consider using one of the more specialized `./x.py` targets to cut down on the
-amount of time you have to wait. You need to have built the compiler at least
-once before running these will work, but that’s only one full build rather than
-one each time.
-
- $ python x.py test --stage 1
-
-is one such example, which builds just `rustc`, and then runs the tests. If
-you’re adding something to the standard library, try
-
- $ python x.py test src/libstd --stage 1
-
Please make sure your pull request is in compliance with Rust's style
guidelines by running
$ python x.py test src/tools/tidy
Make this check before every pull request (and every new commit in a pull
-request) ; you can add [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
+request); you can add [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
before every push to make sure you never forget to make this check.
All pull requests are reviewed by another person. We have a bot,
@@ -532,6 +318,12 @@
reference to `doc/reference.html`. The CSS might be messed up, but you can
verify that the HTML is right.
+Additionally, contributions to the [rustc-guide] are always welcome. Contributions
+can be made directly at [the
+rust-lang/rustc-guide](https://github.com/rust-lang/rustc-guide) repo. The issue
+tracker in that repo is also a great way to find things that need doing. There
+are issues for beginners and advanced compiler devs alike!
+
## Issue Triage
[issue-triage]: #issue-triage
@@ -627,7 +419,7 @@
more seasoned developers, some useful places to look for information
are:
-* The [rustc guide] contains information about how various parts of the compiler work
+* The [rustc guide] contains information about how various parts of the compiler work and how to contribute to the compiler
* [Rust Forge][rustforge] contains additional documentation, including write-ups of how to achieve common tasks
* The [Rust Internals forum][rif], a place to ask questions and
discuss Rust's internals
diff --git a/Cargo.lock b/Cargo.lock
index 1fde5ac..d4593c1 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -97,7 +97,7 @@
version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"compiler_builtins 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-std-workspace-core 1.0.0",
@@ -131,7 +131,7 @@
version = "0.0.0"
dependencies = [
"build_helper 0.1.0",
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"cmake 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)",
"filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -264,7 +264,7 @@
[[package]]
name = "cc"
-version = "1.0.25"
+version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -382,7 +382,7 @@
version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -414,7 +414,7 @@
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-std-workspace-core 1.0.0",
]
@@ -608,7 +608,7 @@
version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
"libnghttp2-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1077,7 +1077,7 @@
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1161,7 +1161,7 @@
version = "0.7.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"curl-sys 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
"libssh2-sys 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1175,7 +1175,7 @@
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1184,7 +1184,7 @@
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
"libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1197,7 +1197,7 @@
version = "1.0.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
"vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1237,7 +1237,7 @@
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1332,7 +1332,7 @@
[[package]]
name = "minifier"
-version = "0.0.20"
+version = "0.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"macro-utils 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1343,7 +1343,7 @@
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1360,7 +1360,7 @@
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
"miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1474,7 +1474,7 @@
version = "111.1.0+1.1.1a"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1482,7 +1482,7 @@
version = "0.9.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-src 111.1.0+1.1.1a (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1681,7 +1681,7 @@
name = "profiler_builtins"
version = "0.0.0"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"compiler_builtins 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"core 0.0.0",
]
@@ -2323,7 +2323,7 @@
name = "rustc_codegen_llvm"
version = "0.0.0"
dependencies = [
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-demangle 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2335,7 +2335,7 @@
version = "0.0.0"
dependencies = [
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"jobserver 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2485,7 +2485,7 @@
version = "0.0.0"
dependencies = [
"build_helper 0.1.0",
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2565,10 +2565,6 @@
]
[[package]]
-name = "rustc_platform_intrinsics"
-version = "0.0.0"
-
-[[package]]
name = "rustc_plugin"
version = "0.0.0"
dependencies = [
@@ -2678,7 +2674,6 @@
"rustc 0.0.0",
"rustc_data_structures 0.0.0",
"rustc_errors 0.0.0",
- "rustc_platform_intrinsics 0.0.0",
"rustc_target 0.0.0",
"smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
"syntax 0.0.0",
@@ -2697,7 +2692,7 @@
name = "rustdoc"
version = "0.0.0"
dependencies = [
- "minifier 0.0.20 (registry+https://github.com/rust-lang/crates.io-index)",
+ "minifier 0.0.26 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
"pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tempfile 3.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2900,7 +2895,7 @@
dependencies = [
"alloc 0.0.0",
"backtrace-sys 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)",
- "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
"compiler_builtins 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"core 0.0.0",
"dlmalloc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3411,7 +3406,7 @@
"checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d"
"checksum bytesize 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "716960a18f978640f25101b5cbf1c6f6b0d3192fab36a2d98ca96f0ecbe41010"
"checksum cargo_metadata 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7d8dfe3adeb30f7938e6c1dd5327f29235d8ada3e898aeb08c343005ec2915a2"
-"checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
+"checksum cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a8b715cb4597106ea87c7c84b2f1d452c7492033765df7f32651e66fcf749"
"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
"checksum chalk-engine 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17ec698a6f053a23bfbe646d9f2fde4b02abc19125595270a99e6f44ae0bdd1a"
"checksum chalk-macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "295635afd6853aa9f20baeb7f0204862440c0fe994c5a253d5f479dac41d047e"
@@ -3515,7 +3510,7 @@
"checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16"
"checksum memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2ffa2c986de11a9df78620c01eeaaf27d94d3ff02bf81bfcca953102dd0c6ff"
"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
-"checksum minifier 0.0.20 (registry+https://github.com/rust-lang/crates.io-index)" = "96c269bb45c39b333392b2b18ad71760b34ac65666591386b0e959ed58b3f474"
+"checksum minifier 0.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "f299df45afd73332044ea9f717c816a84fc90c8b631409abf339ba93642a7985"
"checksum miniz-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0300eafb20369952951699b68243ab4334f4b10a88f411c221d444b36c40e649"
"checksum miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ad30a47319c16cde58d0314f5d98202a80c9083b5f61178457403dfb14e509c"
"checksum miniz_oxide_c_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "28edaef377517fd9fe3e085c37d892ce7acd1fbeab9239c5a36eec352d8a8b7e"
diff --git a/README.md b/README.md
index cb1f062..514e420 100644
--- a/README.md
+++ b/README.md
@@ -13,9 +13,13 @@
["Installation"]: https://doc.rust-lang.org/book/ch01-01-installation.html
[The Book]: https://doc.rust-lang.org/book/index.html
-## Building from Source
+## Installing from Source
[building-from-source]: #building-from-source
+_Note: If you wish to contribute to the compiler, you should read
+[this chapter](https://rust-lang.github.io/rustc-guide/how-to-build-and-run.html)
+of the rustc-guide instead._
+
### Building on *nix
1. Make sure you have installed the dependencies:
diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs
index 8bc7c58..b581271 100644
--- a/src/bootstrap/compile.rs
+++ b/src/bootstrap/compile.rs
@@ -78,11 +78,8 @@
builder.info(&format!("Uplifting stage1 std ({} -> {})", from.host, target));
// Even if we're not building std this stage, the new sysroot must
- // still contain the musl startup objects.
- if target.contains("musl") {
- let libdir = builder.sysroot_libdir(compiler, target);
- copy_musl_third_party_objects(builder, target, &libdir);
- }
+ // still contain the third party objects needed by various targets.
+ copy_third_party_objects(builder, &compiler, target);
builder.ensure(StdLink {
compiler: from,
@@ -92,10 +89,7 @@
return;
}
- if target.contains("musl") {
- let libdir = builder.sysroot_libdir(compiler, target);
- copy_musl_third_party_objects(builder, target, &libdir);
- }
+ copy_third_party_objects(builder, &compiler, target);
let mut cargo = builder.cargo(compiler, Mode::Std, target, "build");
std_cargo(builder, &compiler, target, &mut cargo);
@@ -116,17 +110,36 @@
}
}
-/// Copies the crt(1,i,n).o startup objects
-///
-/// Since musl supports fully static linking, we can cross link for it even
-/// with a glibc-targeting toolchain, given we have the appropriate startup
-/// files. As those shipped with glibc won't work, copy the ones provided by
-/// musl so we have them on linux-gnu hosts.
-fn copy_musl_third_party_objects(builder: &Builder,
- target: Interned<String>,
- into: &Path) {
- for &obj in &["crt1.o", "crti.o", "crtn.o"] {
- builder.copy(&builder.musl_root(target).unwrap().join("lib").join(obj), &into.join(obj));
+/// Copies third pary objects needed by various targets.
+fn copy_third_party_objects(builder: &Builder, compiler: &Compiler, target: Interned<String>) {
+ let libdir = builder.sysroot_libdir(*compiler, target);
+
+ // Copies the crt(1,i,n).o startup objects
+ //
+ // Since musl supports fully static linking, we can cross link for it even
+ // with a glibc-targeting toolchain, given we have the appropriate startup
+ // files. As those shipped with glibc won't work, copy the ones provided by
+ // musl so we have them on linux-gnu hosts.
+ if target.contains("musl") {
+ for &obj in &["crt1.o", "crti.o", "crtn.o"] {
+ builder.copy(
+ &builder.musl_root(target).unwrap().join("lib").join(obj),
+ &libdir.join(obj),
+ );
+ }
+ }
+
+ // Copies libunwind.a compiled to be linked wit x86_64-fortanix-unknown-sgx.
+ //
+ // This target needs to be linked to Fortanix's port of llvm's libunwind.
+ // libunwind requires support for rwlock and printing to stderr,
+ // which is provided by std for this target.
+ if target == "x86_64-fortanix-unknown-sgx" {
+ let src_path_env = "X86_FORTANIX_SGX_LIBS";
+ let obj = "libunwind.a";
+ let src = env::var(src_path_env).expect(&format!("{} not found in env", src_path_env));
+ let src = Path::new(&src).join(obj);
+ builder.copy(&src, &libdir.join(obj));
}
}
diff --git a/src/ci/docker/dist-various-1/Dockerfile b/src/ci/docker/dist-various-1/Dockerfile
index 4f8a3c0..76cdd36 100644
--- a/src/ci/docker/dist-various-1/Dockerfile
+++ b/src/ci/docker/dist-various-1/Dockerfile
@@ -21,12 +21,18 @@
patch \
libssl-dev \
pkg-config \
- gcc-arm-none-eabi \
libnewlib-arm-none-eabi \
- qemu-system-arm
+ qemu-system-arm \
+# software-properties-common for the add-apt-repository command
+ software-properties-common
WORKDIR /build
+# Use the team-gcc-arm-embedded PPA for a newer version of Arm GCC
+RUN add-apt-repository ppa:team-gcc-arm-embedded/ppa && \
+ apt-get update && \
+ apt-get install -y --no-install-recommends gcc-arm-embedded
+
COPY dist-various-1/build-rumprun.sh /build
RUN ./build-rumprun.sh
@@ -103,6 +109,7 @@
ENV TARGETS=$TARGETS,thumbv7m-none-eabi
ENV TARGETS=$TARGETS,thumbv7em-none-eabi
ENV TARGETS=$TARGETS,thumbv7em-none-eabihf
+ENV TARGETS=$TARGETS,thumbv8m.main-none-eabi
ENV TARGETS=$TARGETS,riscv32imc-unknown-none-elf
ENV TARGETS=$TARGETS,riscv32imac-unknown-none-elf
ENV TARGETS=$TARGETS,armebv7r-none-eabi
diff --git a/src/ci/docker/dist-various-2/Dockerfile b/src/ci/docker/dist-various-2/Dockerfile
index 944c2a5..9062555 100644
--- a/src/ci/docker/dist-various-2/Dockerfile
+++ b/src/ci/docker/dist-various-2/Dockerfile
@@ -29,6 +29,10 @@
COPY dist-various-2/build-solaris-toolchain.sh /tmp/
RUN /tmp/build-solaris-toolchain.sh x86_64 amd64 solaris-i386
RUN /tmp/build-solaris-toolchain.sh sparcv9 sparcv9 solaris-sparc
+COPY dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh /tmp/
+# We pass the commit id of the port of LLVM's libunwind to the build script.
+# Any update to the commit id here, should cause the container image to be re-built from this point on.
+RUN /tmp/build-x86_64-fortanix-unknown-sgx-toolchain.sh "bbe23902411be88d7388f381becefadd6e3ef819"
COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh
@@ -65,6 +69,9 @@
ENV TARGETS=$TARGETS,x86_64-sun-solaris
ENV TARGETS=$TARGETS,x86_64-unknown-linux-gnux32
ENV TARGETS=$TARGETS,x86_64-unknown-cloudabi
+ENV TARGETS=$TARGETS,x86_64-fortanix-unknown-sgx
+
+ENV X86_FORTANIX_SGX_LIBS="/x86_64-fortanix-unknown-sgx/lib/"
ENV RUST_CONFIGURE_ARGS --enable-extended --enable-lld --disable-docs
ENV SCRIPT python2.7 ../x.py dist --target $TARGETS
diff --git a/src/ci/docker/dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh b/src/ci/docker/dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh
new file mode 100755
index 0000000..7692131
--- /dev/null
+++ b/src/ci/docker/dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+set -eu
+source shared.sh
+
+if [ -z "$1" ]; then
+ echo "Usage: ${0} <commit_id>"
+ exit -1
+fi
+
+target="x86_64-fortanix-unknown-sgx"
+url="https://github.com/fortanix/llvm-project/archive/${1}.tar.gz"
+repo_name="llvm-project"
+
+install_prereq()
+{
+ apt-get update
+ apt-get install -y --no-install-recommends \
+ build-essential \
+ ca-certificates \
+ cmake \
+ git
+}
+
+# Clone Fortanix's port of llvm-project to build libunwind that would link with this target.
+# The below method to download a single commit from llvm-project is based on fetch_submodule
+# from init_repo.sh
+fetch_llvm_commit()
+{
+ cached="download-${repo_name}.tar.gz"
+ curl -f -sSL -o ${cached} ${url}
+ tar -xvzf ${cached}
+ mkdir "./${repo_name}" && tar -xf ${cached} -C ${repo_name} --strip-components 1
+}
+
+build_unwind()
+{
+ dir_name="${target}_temp"
+ rm -rf "./${dir_name}"
+ mkdir -p ${dir_name}
+ cd ${dir_name}
+
+ retry fetch_llvm_commit
+ cd "${repo_name}/libunwind"
+
+ # Build libunwind
+ mkdir -p build
+ cd build
+ cmake -DCMAKE_BUILD_TYPE="RELEASE" -DRUST_SGX=1 -G "Unix Makefiles" -DLLVM_PATH=../../llvm/ ../
+ make unwind_static
+ install -D "lib/libunwind.a" "/${target}/lib/libunwind.a"
+ rm -rf ${dir_name}
+}
+
+set -x
+hide_output install_prereq
+hide_output build_unwind
diff --git a/src/ci/docker/dist-various-2/shared.sh b/src/ci/docker/dist-various-2/shared.sh
index 2b5eccb..fb917b0 100644
--- a/src/ci/docker/dist-various-2/shared.sh
+++ b/src/ci/docker/dist-various-2/shared.sh
@@ -13,3 +13,21 @@
kill $PING_LOOP_PID
set -x
}
+
+function retry {
+ echo "Attempting with retry:" "$@"
+ local n=1
+ local max=5
+ while true; do
+ "$@" && break || {
+ if [[ $n -lt $max ]]; then
+ sleep $n # don't retry immediately
+ ((n++))
+ echo "Command failed. Attempt $n/$max:"
+ else
+ echo "The command has failed after $n attempts."
+ return 1
+ fi
+ }
+ done
+}
diff --git a/src/doc/book b/src/doc/book
index 74d81d8..0e9061c 160000
--- a/src/doc/book
+++ b/src/doc/book
@@ -1 +1 @@
-Subproject commit 74d81d80052cb88925f0e73b12fbd0b73ab7b5a0
+Subproject commit 0e9061cbaf95adfb9f3ed36c6cef4c046f282e86
diff --git a/src/doc/reference b/src/doc/reference
index 60077ef..1c775a1 160000
--- a/src/doc/reference
+++ b/src/doc/reference
@@ -1 +1 @@
-Subproject commit 60077efda319c95a89fe39609803c5433567adbf
+Subproject commit 1c775a1dc5e29bc44b36604b510d6196d98077fa
diff --git a/src/doc/rustc/src/codegen-options/index.md b/src/doc/rustc/src/codegen-options/index.md
index 94f2104..a616409 100644
--- a/src/doc/rustc/src/codegen-options/index.md
+++ b/src/doc/rustc/src/codegen-options/index.md
@@ -187,7 +187,7 @@
This flag lets you control the optimization level.
-* `0`: no optimizations
+* `0`: no optimizations, also turn on `cfg(debug_assertions)`.
* `1`: basic optimizations
* `2`: some optimizations
* `3`: all optimizations
diff --git a/src/doc/rustc/src/contributing.md b/src/doc/rustc/src/contributing.md
index 3a1cafe..25a5c97 100644
--- a/src/doc/rustc/src/contributing.md
+++ b/src/doc/rustc/src/contributing.md
@@ -1,6 +1,12 @@
# Contributing to rustc
We'd love to have your help improving `rustc`! To that end, we've written [a
-whole book](https://rust-lang.github.io/rustc-guide/) on its
+whole book][rustc_guide] on its
internals, how it works, and how to get started working on it. To learn
more, you'll want to check that out.
+
+If you would like to contribute to _this_ book, you can find its source in the
+rustc source at [src/doc/rustc][rustc_book].
+
+[rustc_guide]: https://rust-lang.github.io/rustc-guide/
+[rustc_book]: https://github.com/rust-lang/rust/tree/master/src/doc/rustc
diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md
index 905b064..d3eb8cb 100644
--- a/src/doc/rustdoc/src/unstable-features.md
+++ b/src/doc/rustdoc/src/unstable-features.md
@@ -417,3 +417,15 @@
(grouping of crate docs generated into the same output directory, like with `cargo doc`). Per-crate
files like the search index will still load from the documentation root, but anything that gets
renamed with `--resource-suffix` will load from the given path.
+
+### `--persist-doctests`: persist doctest executables after running
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --test -Z unstable-options --persist-doctests target/rustdoctest
+```
+
+This flag allows you to keep doctest executables around after they're compiled or run.
+Usually, rustdoc will immediately discard a compiled doctest after it's been tested, but
+with this option, you can keep those binaries around for farther testing.
\ No newline at end of file
diff --git a/src/doc/unstable-book/src/language-features/extern-in-paths.md b/src/doc/unstable-book/src/language-features/extern-in-paths.md
deleted file mode 100644
index 9979d77..0000000
--- a/src/doc/unstable-book/src/language-features/extern-in-paths.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# `extern_in_paths`
-
-The tracking issue for this feature is: [#44660]
-
-[#44660]: https://github.com/rust-lang/rust/issues/44660
-
-------------------------
-
-The `extern_in_paths` feature allows to refer to names from other crates "inline", without
-introducing `extern crate` items, using keyword `extern`.
-
-For example, `extern::my_crat::a::b` will resolve to path `a::b` in crate `my_crate`.
-
-Absolute paths on 2018 edition (e.g. `::my_crate::a::b`) provide the same effect
-and resolve to extern crates (built-in or passed with `--extern`).
-
-```rust,ignore
-#![feature(extern_in_paths)]
-
-// Suppose we have a dependency crate `xcrate` available through `Cargo.toml`, or `--extern`
-// options, or standard Rust distribution, or some other means.
-
-use extern::xcrate::Z;
-
-fn f() {
- use extern::xcrate;
- use extern::xcrate as ycrate;
- let s = xcrate::S;
- assert_eq!(format!("{:?}", s), "S");
- let z = ycrate::Z;
- assert_eq!(format!("{:?}", z), "Z");
-}
-
-fn main() {
- let s = extern::xcrate::S;
- assert_eq!(format!("{:?}", s), "S");
- let z = Z;
- assert_eq!(format!("{:?}", z), "Z");
-}
-```
diff --git a/src/etc/platform-intrinsics/aarch64.json b/src/etc/platform-intrinsics/aarch64.json
deleted file mode 100644
index c8cda40..0000000
--- a/src/etc/platform-intrinsics/aarch64.json
+++ /dev/null
@@ -1,592 +0,0 @@
-{
- "platform": "aarch64_v",
- "intrinsic_prefix": "",
- "llvm_prefix": "llvm.aarch64.neon.",
- "number_info": {
- "signed": {
- "kind": "s",
- "data_type": { "pattern": "s{bitwidth}" }
- },
- "unsigned": {
- "kind": "u",
- "data_type": { "pattern": "u{bitwidth}" }
- },
- "float": {
- "kind": "f",
- "data_type": { "pattern": "f{bitwidth}" }
- }
- },
- "width_info": {
- "64": { "width": "" },
- "128": { "width": "q" }
- },
- "intrinsics": [
- {
- "intrinsic": "hadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}hadd.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rhadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}rhadd.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}qadd.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "uqadd_{0.data_type}",
- "width": [128],
- "llvm": "suqadd.{0.llvm_name}",
- "ret": "s(8-64)",
- "args": ["0", "0u"]
- },
- {
- "intrinsic": "sqadd_{0.data_type}",
- "width": [128],
- "llvm": "usqadd.{0.llvm_name}",
- "ret": "u(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "raddhn_{1.data_type}",
- "width": [64],
- "llvm": "raddhn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "0w"]
- },
- {
- "intrinsic": "fmulx{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "fmulx.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "fma{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.fma.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qdmulh{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqdmulh.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qrdmulh{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqrdmulh.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "mull_{1.data_type}",
- "width": [128],
- "llvm": "{0.kind}mull.{0.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "qdmull{0.width}_{1.data_type}",
- "width": [128],
- "llvm": "sqdmull.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "hsub{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}hsub.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qsub{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}qsub.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rsubhn_{1.data_type}",
- "width": [64],
- "llvm": "rsubhn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "0w"]
- },
- {
- "intrinsic": "abd{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}abd.{0.llvm_name}",
- "ret": ["i(8-32)","f(32-64)"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "max{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}max.{0.llvm_name}",
- "ret": ["i(8-32)","f(32-64)"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "min{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}min.{0.llvm_name}",
- "ret": ["i(8-32)","f(32-64)"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "maxnm{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxnm.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "minnm{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minnm.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "shl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}shl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}qshl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "rshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}rshl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qrshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}qrshl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qshrun_n_{1.data_type}",
- "width": [64],
- "llvm": "sqshrun.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qrshrun_n_{1.data_type}",
- "width": [64],
- "llvm": "sqrshrun.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "{0.kind}qshrn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "rshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "rshrn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qrshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "{0.kind}qrshrn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "sri{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "vsri.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sli{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "vsli.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "vqmovn_{1.data_type}",
- "width": [64],
- "llvm": "{0.kind}qxtn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w"]
- },
- {
- "intrinsic": "abs{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "abs.{0.llvm_name}",
- "ret": "s(8-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "abs{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.fabs.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "qabs{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "sqabs.{0.llvm_name}",
- "ret": "s(8-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "qneg{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqneg.{0.llvm_name}",
- "ret": "s(8-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "clz{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.ctlz.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "cls{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "cls.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "cnt{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.ctpop.{0.llvm_name}",
- "ret": "i8",
- "args": ["0"]
- },
- {
- "intrinsic": "recpe{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}recpe.{0.llvm_name}",
- "ret": ["u32","f(32-64)"],
- "args": ["0"]
- },
- {
- "intrinsic": "recps{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "frecps.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sqrt{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.sqrt.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrte{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}rsqrte.{0.llvm_name}",
- "ret": ["u32","f(32-64)"],
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrts{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "frsqrts.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rbit{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "rbit.{0.llvm_name}",
- "ret": "i8",
- "args": ["0"]
- },
- {
- "intrinsic": "ld2{0[0].width}_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld2.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);2]","[f(32-64);2]"],
- "args": ["0.0SPc/0.0"]
- },
- {
- "intrinsic": "ld3{0[0].width}_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld3.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);3]","[f(32-64);3]"],
- "args": ["0.0SPc/0.0"]
- },
- {
- "intrinsic": "ld4{0[0].width}_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld4.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);4]","[f(32-64);4]"],
- "args": ["0.0SPc/0.0"]
- },
- {
- "intrinsic": "ld2{0[0].width}_dup_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld2.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);2]","[f(32-64);2]"],
- "args": ["0.0SPc"]
- },
- {
- "intrinsic": "ld3{0[0].width}_dup_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld3.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);3]","[f(32-64);3]"],
- "args": ["0.0SPc"]
- },
- {
- "intrinsic": "ld4{0[0].width}_dup_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld4.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);4]","[f(32-64);4]"],
- "args": ["0.0SPc"]
- },
- {
- "intrinsic": "padd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "addp.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "padd{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "addp.{0.llvm_name}",
- "ret": ["i64","f64"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "paddl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}addlp.{0.llvm_name}.{1.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0dn"]
- },
- {
- "intrinsic": "pmax{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxp.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmax{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}maxp.{0.llvm_name}",
- "ret": ["i64","f64"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmin{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minp.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmin{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}minp.{0.llvm_name}",
- "ret": ["i64","f64"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmaxnm{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxnmp.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmaxnm{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}maxnmp.{0.llvm_name}",
- "ret": ["i64","f64"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pminnm{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minnmp.{0.llvm_name}",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pminnm{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}minnmp.{0.llvm_name}",
- "ret": "f64",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "addv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}addv.{0.llvm_name}.{1.llvm_name}",
- "ret": ["I(8-32)","F32"],
- "args": ["0v"]
- },
- {
- "intrinsic": "addv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}addv.{0.llvm_name}.{1.llvm_name}",
- "ret": ["I64","F64"],
- "args": ["0v"]
- },
- {
- "intrinsic": "addlv{1.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}addlv.{0.llvm_name}.{1.llvm_name}",
- "ret": "I(16-64)",
- "args": ["0vdn"]
- },
- {
- "intrinsic": "maxv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxv.{0.llvm_name}.{1.llvm_name}",
- "ret": ["I(8-32)","F32"],
- "args": ["0v"]
- },
- {
- "intrinsic": "maxv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}maxv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F64",
- "args": ["0v"]
- },
- {
- "intrinsic": "minv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minv.{0.llvm_name}.{1.llvm_name}",
- "ret": ["I(8-32)","F32"],
- "args": ["0v"]
- },
- {
- "intrinsic": "minv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}minv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F64",
- "args": ["0v"]
- },
- {
- "intrinsic": "maxnmv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxnmv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F32",
- "args": ["0v"]
- },
- {
- "intrinsic": "maxnmv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}maxnmv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F64",
- "args": ["0v"]
- },
- {
- "intrinsic": "minnmv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minnmv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F32",
- "args": ["0v"]
- },
- {
- "intrinsic": "minnmv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}minnmv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F64",
- "args": ["0v"]
- },
- {
- "intrinsic": "qtbl1{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbl1.{0.llvm_name}",
- "ret": "i8",
- "args": ["0x128", "0u"]
- },
- {
- "intrinsic": "qtbx1{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbx1.{0.llvm_name}",
- "ret": "i8",
- "args": ["0", "0x128", "0u"]
- },
- {
- "intrinsic": "qtbl2{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbl2.{0.llvm_name}",
- "ret": "i8",
- "args": ["(0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbx2{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbx2.{0.llvm_name}",
- "ret": "i8",
- "args": ["(0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbl3{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbl3.{0.llvm_name}",
- "ret": "i8",
- "args": ["(0x128,0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbx3{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbx3.{0.llvm_name}",
- "ret": "i8",
- "args": ["0", "(0x128,0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbl4{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbl4.{0.llvm_name}",
- "ret": "i8",
- "args": ["(0x128,0x128,0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbx4{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbx4.{0.llvm_name}",
- "ret": "i8",
- "args": ["0", "(0x128,0x128,0x128,0x128)f", "0u"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/arm.json b/src/etc/platform-intrinsics/arm.json
deleted file mode 100644
index d008320..0000000
--- a/src/etc/platform-intrinsics/arm.json
+++ /dev/null
@@ -1,396 +0,0 @@
-{
- "platform": "arm_v",
- "intrinsic_prefix": "",
- "llvm_prefix": "llvm.arm.neon.v",
- "number_info": {
- "signed": {
- "kind": "s",
- "data_type": { "pattern": "s{bitwidth}" }
- },
- "unsigned": {
- "kind": "u",
- "data_type": { "pattern": "u{bitwidth}" }
- },
- "float": {
- "kind": "f",
- "data_type": { "pattern": "f{bitwidth}" }
- }
- },
- "width_info": {
- "64": { "width": "" },
- "128": { "width": "q" }
- },
- "intrinsics": [
- {
- "intrinsic": "hadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "hadd{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rhadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "rhadd{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "qadd{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "raddhn_{1.data_type}",
- "width": [64],
- "llvm": "raddhn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "0w"]
- },
- {
- "intrinsic": "fma{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.fma.{0.llvm_name}",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qdmulh{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqdmulh.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qrdmulh{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqrdmulh.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "mull_{1.data_type}",
- "width": [128],
- "llvm": "mull{0.kind}.{0.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "qdmull{0.width}_{1.data_type}",
- "width": [128],
- "llvm": "sqdmull.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "hsub{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "hsub{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qsub{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "qsub{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rsubhn_{1.data_type}",
- "width": [64],
- "llvm": "rsubhn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "0w"]
- },
- {
- "intrinsic": "abd{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "abd{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "max{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "max{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "min{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "min{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "shl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "shl{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "qshl{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "rshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "rshl{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qrshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "qrshl{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qshrun_n_{1.data_type}",
- "width": [64],
- "llvm": "sqshrun.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qrshrun_n_{1.data_type}",
- "width": [64],
- "llvm": "sqrshrun.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "qshrn{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "rshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "rshrn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qrshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "qrshrn{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "sri{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "vsri.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sli{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "vsli.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "vqmovn_{1.data_type}",
- "width": [64],
- "llvm": "qxtn{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w"]
- },
- {
- "intrinsic": "abs{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "abs.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "abs{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.fabs.{0.llvm_name}",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "qabs{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "sqabs.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "qneg{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqneg.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "clz{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.ctlz.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "cls{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "cls.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "cnt{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.ctpop.{0.llvm_name}",
- "ret": "i8",
- "args": ["0"]
- },
- {
- "intrinsic": "recpe{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "recpe.{0.llvm_name}",
- "ret": ["u32","f32"],
- "args": ["0"]
- },
- {
- "intrinsic": "recps{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "frecps.{0.llvm_name}",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sqrt{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.sqrt.{0.llvm_name}",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrte{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "rsqrte.{0.llvm_name}",
- "ret": ["u32","f32"],
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrts{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "rsqrts.{0.llvm_name}",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "bsl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "bsl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0u", "0"]
- },
- {
- "intrinsic": "padd{0.width}_{0.data_type}",
- "width": [64],
- "llvm": "padd.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "paddl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "paddl{0.kind}.{0.llvm_name}.{1.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0dn"]
- },
- {
- "intrinsic": "padal{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "padal{0.kind}.{0.llvm_name}.{1.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0", "0dn"]
- },
- {
- "intrinsic": "pmax{0.width}_{0.data_type}",
- "width": [64],
- "llvm": "pmax{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmin{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "pmin{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "tbl1_{0.data_type}",
- "width": [64],
- "llvm": "tbl1",
- "ret": "i8",
- "args": ["0", "0u"]
- },
- {
- "intrinsic": "tbx1_{0.data_type}",
- "width": [64],
- "llvm": "tbx1",
- "ret": "i8",
- "args": ["0", "0", "0u"]
- },
- {
- "intrinsic": "tbl2_{0.data_type}",
- "width": [64],
- "llvm": "tbl2",
- "ret": "i8",
- "args": ["(0,0)f", "0u"]
- },
- {
- "intrinsic": "tbx2_{0.data_type}",
- "width": [64],
- "llvm": "tbx2",
- "ret": "i8",
- "args": ["(0,0)f", "0u"]
- },
- {
- "intrinsic": "tbl3_{0.data_type}",
- "width": [64],
- "llvm": "tbl3",
- "ret": "i8",
- "args": ["(0,0,0)f", "0u"]
- },
- {
- "intrinsic": "tbx3_{0.data_type}",
- "width": [64],
- "llvm": "tbx3",
- "ret": "i8",
- "args": ["0", "(0,0,0)f", "0u"]
- },
- {
- "intrinsic": "tbl4_{0.data_type}",
- "width": [64],
- "llvm": "tbl4",
- "ret": "i8",
- "args": ["(0,0,0,0)f", "0u"]
- },
- {
- "intrinsic": "tbx4_{0.data_type}",
- "width": [64],
- "llvm": "tbx4",
- "ret": "i8",
- "args": ["0", "(0,0,0,0)f", "0u"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/generator.py b/src/etc/platform-intrinsics/generator.py
deleted file mode 100644
index fa97131..0000000
--- a/src/etc/platform-intrinsics/generator.py
+++ /dev/null
@@ -1,854 +0,0 @@
-from __future__ import division, print_function
-import json
-import argparse
-import sys
-import re
-import textwrap
-import itertools
-
-SPEC = re.compile(
- r'^(?:(?P<void>V)|(?P<id>[iusfIUSF])(?:\((?P<start>\d+)-(?P<end>\d+)\)|'
- r'(?P<width>\d+)(:?/(?P<llvm_width>\d+))?)'
- r'|(?P<reference>\d+))(?P<index>\.\d+)?(?P<modifiers>[vShdnwusfDMCNW]*)(?P<force_width>x\d+)?'
- r'(?:(?P<pointer>Pm|Pc)(?P<llvm_pointer>/.*)?|(?P<bitcast>->.*))?$'
-)
-
-class PlatformInfo(object):
- def __init__(self, json):
- self._platform = json['platform']
-
- def platform_prefix(self):
- return self._platform
-
-class IntrinsicSet(object):
- def __init__(self, platform, json):
- self._llvm_prefix = json['llvm_prefix']
- self._type_info = json['number_info']
- self._intrinsics = json['intrinsics']
- self._widths = json['width_info']
- self._platform = platform
- self._intrinsic_prefix = json['intrinsic_prefix']
-
- def intrinsics(self):
- for raw in self._intrinsics:
- yield GenericIntrinsic(self,
- raw['intrinsic'], raw['width'], raw['llvm'],
- raw['ret'], raw['args'])
-
- def platform(self):
- return self._platform
-
- def intrinsic_prefix(self):
- return self._intrinsic_prefix
-
- def llvm_prefix(self):
- return self._llvm_prefix
-
- def width_info(self, bitwidth):
- return self._widths[str(bitwidth)]
-
- def number_type_info(self, value):
- data = self._type_info[value.__class__.__name__.lower()]
- bitwidth = value.bitwidth()
- def lookup(raw):
- if not isinstance(raw, dict):
- return raw
-
- try:
- return raw[str(bitwidth)]
- except KeyError:
- return raw['pattern'].format(bitwidth = bitwidth)
-
- return PlatformTypeInfo(value.llvm_name(),
- {k: lookup(v) for k, v in data.items()})
-
-class PlatformTypeInfo(object):
- def __init__(self, llvm_name, properties, elems = None):
- if elems is None:
- self.properties = properties
- self.llvm_name = llvm_name
- else:
- assert properties is None and llvm_name is None
- self.properties = {}
- self.elems = elems
-
- def __repr__(self):
- return '<PlatformTypeInfo {}, {}>'.format(self.llvm_name, self.properties)
-
- def __getattr__(self, name):
- return self.properties[name]
-
- def __getitem__(self, idx):
- return self.elems[idx]
-
- def vectorize(self, length, width_info):
- props = self.properties.copy()
- props.update(width_info)
- return PlatformTypeInfo('v{}{}'.format(length, self.llvm_name), props)
-
- def pointer(self, llvm_elem):
- name = self.llvm_name if llvm_elem is None else llvm_elem.llvm_name
- return PlatformTypeInfo('p0{}'.format(name), self.properties)
-
-BITWIDTH_POINTER = '<pointer>'
-
-class Type(object):
- def __init__(self, bitwidth):
- self._bitwidth = bitwidth
-
- def bitwidth(self):
- return self._bitwidth
-
- def modify(self, spec, width, previous):
- raise NotImplementedError()
-
- def __ne__(self, other):
- return not (self == other)
-
-class Void(Type):
- def __init__(self):
- Type.__init__(self, 0)
-
- @staticmethod
- def compiler_ctor():
- return '::VOID'
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- @staticmethod
- def rust_name():
- return '()'
-
- @staticmethod
- def type_info(platform_info):
- return None
-
- def __eq__(self, other):
- return isinstance(other, Void)
-
-class Number(Type):
- def __init__(self, bitwidth):
- Type.__init__(self, bitwidth)
-
- def modify(self, spec, width, previous):
- if spec == 'u':
- return Unsigned(self.bitwidth())
- elif spec == 's':
- return Signed(self.bitwidth())
- elif spec == 'f':
- return Float(self.bitwidth())
- elif spec == 'w':
- return self.__class__(self.bitwidth() * 2)
- elif spec == 'n':
- return self.__class__(self.bitwidth() // 2)
- elif spec == 'v':
- return Vector(self, width // self.bitwidth())
- else:
- raise ValueError('unknown modification spec {}', spec)
-
- def type_info(self, platform_info):
- return platform_info.number_type_info(self)
-
- def __eq__(self, other):
- # print(self, other)
- return self.__class__ == other.__class__ and self.bitwidth() == other.bitwidth()
-
-class Signed(Number):
- def __init__(self, bitwidth, llvm_bitwidth = None):
- Number.__init__(self, bitwidth)
- self._llvm_bitwidth = llvm_bitwidth
-
-
- def compiler_ctor(self):
- if self._llvm_bitwidth is None:
- return '::I{}'.format(self.bitwidth())
- else:
- return '::I{}_{}'.format(self.bitwidth(), self._llvm_bitwidth)
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- def llvm_name(self):
- bw = self._llvm_bitwidth or self.bitwidth()
- return 'i{}'.format(bw)
-
- def rust_name(self):
- return 'i{}'.format(self.bitwidth())
-
-class Unsigned(Number):
- def __init__(self, bitwidth, llvm_bitwidth = None):
- Number.__init__(self, bitwidth)
- self._llvm_bitwidth = llvm_bitwidth
-
- def compiler_ctor(self):
- if self._llvm_bitwidth is None:
- return '::U{}'.format(self.bitwidth())
- else:
- return '::U{}_{}'.format(self.bitwidth(), self._llvm_bitwidth)
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- def llvm_name(self):
- bw = self._llvm_bitwidth or self.bitwidth()
- return 'i{}'.format(bw)
-
- def rust_name(self):
- return 'u{}'.format(self.bitwidth())
-
-class Float(Number):
- def __init__(self, bitwidth):
- assert bitwidth in (32, 64)
- Number.__init__(self, bitwidth)
-
- def compiler_ctor(self):
- return '::F{}'.format(self.bitwidth())
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- def llvm_name(self):
- return 'f{}'.format(self.bitwidth())
-
- def rust_name(self):
- return 'f{}'.format(self.bitwidth())
-
-class Vector(Type):
- def __init__(self, elem, length, bitcast = None):
- assert isinstance(elem, Type) and not isinstance(elem, Vector)
- Type.__init__(self,
- elem.bitwidth() * length)
- self._length = length
- self._elem = elem
- assert bitcast is None or (isinstance(bitcast, Vector) and
- bitcast._bitcast is None and
- bitcast._elem.bitwidth() == elem.bitwidth())
- if bitcast is not None and bitcast._elem != elem:
- self._bitcast = bitcast._elem
- else:
- self._bitcast = None
-
- def modify(self, spec, width, previous):
- if spec == 'S':
- return self._elem
- elif spec == 'h':
- return Vector(self._elem, self._length // 2)
- elif spec == 'd':
- return Vector(self._elem, self._length * 2)
- elif spec == 'N':
- elem = self._elem.__class__(self._elem.bitwidth() // 2)
- return Vector(elem, self._length * 2)
- elif spec == 'W':
- elem = self._elem.__class__(self._elem.bitwidth() * 2)
- return Vector(elem, self._length // 2)
- elif spec.startswith('x'):
- new_bitwidth = int(spec[1:])
- return Vector(self._elem, new_bitwidth // self._elem.bitwidth())
- elif spec.startswith('->'):
- bitcast_to = TypeSpec(spec[2:])
- choices = list(bitcast_to.enumerate(width, previous))
- assert len(choices) == 1
- bitcast_to = choices[0]
- return Vector(self._elem, self._length, bitcast_to)
- else:
- return Vector(self._elem.modify(spec, width, previous), self._length)
-
- def compiler_ctor(self):
- if self._bitcast is None:
- return '{}x{}'.format(self._elem.compiler_ctor(),
- self._length)
- else:
- return '{}x{}_{}'.format(self._elem.compiler_ctor(),
- self._length,
- self._bitcast.compiler_ctor()
- .replace('::', ''))
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- def rust_name(self):
- return '{}x{}'.format(self._elem.rust_name(), self._length)
-
- def type_info(self, platform_info):
- elem_info = self._elem.type_info(platform_info)
- return elem_info.vectorize(self._length,
- platform_info.width_info(self.bitwidth()))
-
- def __eq__(self, other):
- return isinstance(other, Vector) and self._length == other._length and \
- self._elem == other._elem and self._bitcast == other._bitcast
-
-class Pointer(Type):
- def __init__(self, elem, llvm_elem, const):
- self._elem = elem
- self._llvm_elem = llvm_elem
- self._const = const
- Type.__init__(self, BITWIDTH_POINTER)
-
- def modify(self, spec, width, previous):
- if spec == 'D':
- return self._elem
- elif spec == 'M':
- return Pointer(self._elem, self._llvm_elem, False)
- elif spec == 'C':
- return Pointer(self._elem, self._llvm_elem, True)
- else:
- return Pointer(self._elem.modify(spec, width, previous), self._llvm_elem, self._const)
-
- def compiler_ctor(self):
- if self._llvm_elem is None:
- llvm_elem = 'None'
- else:
- llvm_elem = 'Some({})'.format(self._llvm_elem.compiler_ctor_ref())
- return 'Type::Pointer({}, {}, {})'.format(self._elem.compiler_ctor_ref(),
- llvm_elem,
- 'true' if self._const else 'false')
-
- def compiler_ctor_ref(self):
- return "{{ static PTR: Type = {}; &PTR }}".format(self.compiler_ctor())
-
-
- def rust_name(self):
- return '*{} {}'.format('const' if self._const else 'mut',
- self._elem.rust_name())
-
- def type_info(self, platform_info):
- if self._llvm_elem is None:
- llvm_elem = None
- else:
- llvm_elem = self._llvm_elem.type_info(platform_info)
- return self._elem.type_info(platform_info).pointer(llvm_elem)
-
- def __eq__(self, other):
- return isinstance(other, Pointer) and self._const == other._const \
- and self._elem == other._elem and self._llvm_elem == other._llvm_elem
-
-class Aggregate(Type):
- def __init__(self, flatten, elems):
- self._flatten = flatten
- self._elems = elems
- Type.__init__(self, sum(elem.bitwidth() for elem in elems))
-
- def __repr__(self):
- return '<Aggregate {}>'.format(self._elems)
-
- def modify(self, spec, width, previous):
- if spec.startswith('.'):
- num = int(spec[1:])
- return self._elems[num]
- else:
- print(spec)
- raise NotImplementedError()
-
- def compiler_ctor(self):
- parts = "{{ static PARTS: [&'static Type; {}] = [{}]; &PARTS }}"
- elems = ', '.join(elem.compiler_ctor_ref() for elem in self._elems)
- parts = parts.format(len(self._elems), elems)
- return 'Type::Aggregate({}, {})'.format('true' if self._flatten else 'false',
- parts)
-
- def compiler_ctor_ref(self):
- return "{{ static AGG: Type = {}; &AGG }}".format(self.compiler_ctor())
-
- def rust_name(self):
- return '({})'.format(', '.join(elem.rust_name() for elem in self._elems))
-
- def type_info(self, platform_info):
- return PlatformTypeInfo(None, None, [elem.type_info(platform_info) for elem in self._elems])
-
- def __eq__(self, other):
- return isinstance(other, Aggregate) and self._flatten == other._flatten and \
- self._elems == other._elems
-
-
-TYPE_ID_LOOKUP = {'i': [Signed, Unsigned],
- 's': [Signed],
- 'u': [Unsigned],
- 'f': [Float]}
-
-def ptrify(match, elem, width, previous):
- ptr = match.group('pointer')
- if ptr is None:
- return elem
- else:
- llvm_ptr = match.group('llvm_pointer')
- if llvm_ptr is None:
- llvm_elem = None
- else:
- assert llvm_ptr.startswith('/')
- options = list(TypeSpec(llvm_ptr[1:]).enumerate(width, previous))
- assert len(options) == 1
- llvm_elem = options[0]
- assert ptr in ('Pc', 'Pm')
- return Pointer(elem, llvm_elem, ptr == 'Pc')
-
-class TypeSpec(object):
- def __init__(self, spec):
- if not isinstance(spec, list):
- spec = [spec]
-
- self.spec = spec
-
- def enumerate(self, width, previous):
- for spec in self.spec:
- match = SPEC.match(spec)
- if match is not None:
- id = match.group('id')
- reference = match.group('reference')
-
- modifiers = []
- index = match.group('index')
- if index is not None:
- modifiers.append(index)
- modifiers += list(match.group('modifiers') or '')
- force = match.group('force_width')
- if force is not None:
- modifiers.append(force)
- bitcast = match.group('bitcast')
- if bitcast is not None:
- modifiers.append(bitcast)
-
- if match.group('void') is not None:
- assert spec == 'V'
- yield Void()
- elif id is not None:
- is_vector = id.islower()
- type_ctors = TYPE_ID_LOOKUP[id.lower()]
-
- start = match.group('start')
- if start is not None:
- end = match.group('end')
- llvm_width = None
- else:
- start = end = match.group('width')
- llvm_width = match.group('llvm_width')
- start = int(start)
- end = int(end)
-
- bitwidth = start
- while bitwidth <= end:
- for ctor in type_ctors:
- if llvm_width is not None:
- assert not is_vector
- llvm_width = int(llvm_width)
- assert llvm_width < bitwidth
- scalar = ctor(bitwidth, llvm_width)
- else:
- scalar = ctor(bitwidth)
-
- if is_vector:
- elem = Vector(scalar, width // bitwidth)
- else:
- assert bitcast is None
- elem = scalar
-
- for x in modifiers:
- elem = elem.modify(x, width, previous)
- yield ptrify(match, elem, width, previous)
- bitwidth *= 2
- elif reference is not None:
- reference = int(reference)
- assert reference < len(previous), \
- 'referring to argument {}, but only {} are known'.format(reference,
- len(previous))
- ret = previous[reference]
- for x in modifiers:
- ret = ret.modify(x, width, previous)
- yield ptrify(match, ret, width, previous)
- else:
- assert False, 'matched `{}`, but didn\'t understand it?'.format(spec)
- elif spec.startswith('('):
- if spec.endswith(')'):
- true_spec = spec[1:-1]
- flatten = False
- elif spec.endswith(')f'):
- true_spec = spec[1:-2]
- flatten = True
- else:
- assert False, 'found unclosed aggregate `{}`'.format(spec)
-
- for elems in itertools.product(*(TypeSpec(subspec).enumerate(width, previous)
- for subspec in true_spec.split(','))):
- yield Aggregate(flatten, elems)
- elif spec.startswith('['):
- if spec.endswith(']'):
- true_spec = spec[1:-1]
- flatten = False
- elif spec.endswith(']f'):
- true_spec = spec[1:-2]
- flatten = True
- else:
- assert False, 'found unclosed aggregate `{}`'.format(spec)
- elem_spec, count = true_spec.split(';')
-
- count = int(count)
- for elem in TypeSpec(elem_spec).enumerate(width, previous):
- yield Aggregate(flatten, [elem] * count)
- else:
- assert False, 'Failed to parse `{}`'.format(spec)
-
-class GenericIntrinsic(object):
- def __init__(self, platform, intrinsic, widths, llvm_name, ret, args):
- self._platform = platform
- self.intrinsic = intrinsic
- self.widths = map(int, widths)
- self.llvm_name = llvm_name
- self.ret = TypeSpec(ret)
- self.args = list(map(TypeSpec, args))
-
- def monomorphise(self):
- for width in self.widths:
- # must be a power of two
- assert width & (width - 1) == 0
- def recur(processed, untouched):
- if not untouched:
- ret = processed[0]
- args = processed[1:]
- yield MonomorphicIntrinsic(self._platform, self.intrinsic, width,
- self.llvm_name,
- ret, args)
- else:
- raw_arg = untouched[0]
- rest = untouched[1:]
- for arg in raw_arg.enumerate(width, processed):
- for intr in recur(processed + [arg], rest):
- yield intr
-
- for x in recur([], [self.ret] + self.args):
- yield x
-
-class MonomorphicIntrinsic(object):
- def __init__(self, platform, intrinsic, width, llvm_name, ret, args):
- self._platform = platform
- self._intrinsic = intrinsic
- self._width = '' if width == 64 else 'q'
- self._llvm_name = llvm_name
- self._ret_raw = ret
- self._ret = ret.type_info(platform)
- self._args_raw = args
- self._args = [arg.type_info(platform) for arg in args]
-
- def llvm_name(self):
- if self._llvm_name.startswith('!'):
- return self._llvm_name[1:].format(self._ret, *self._args)
- else:
- return self._platform.llvm_prefix() + self._llvm_name.format(self._ret, *self._args)
-
- def intrinsic_suffix(self):
- return self._intrinsic.format(self._ret,
- *self._args,
- width = self._width)
-
- def platform_prefix(self):
- return self._platform.platform().platform_prefix()
-
- def intrinsic_set_name(self):
- return self._platform.intrinsic_prefix()
-
- def intrinsic_name(self):
- return self._platform.intrinsic_prefix() + self.intrinsic_suffix()
-
- def compiler_args(self):
- return ', '.join(arg.compiler_ctor_ref() for arg in self._args_raw)
-
- def compiler_ret(self):
- return self._ret_raw.compiler_ctor_ref()
-
- def compiler_signature(self):
- return '({}) -> {}'.format(self.compiler_args(), self.compiler_ret())
-
- def intrinsic_signature(self):
- names = 'xyzwabcdef'
- return '({}) -> {}'.format(', '.join('{}: {}'.format(name, arg.rust_name())
- for name, arg in zip(names, self._args_raw)),
- self._ret_raw.rust_name())
-
-def parse_args():
- parser = argparse.ArgumentParser(
- formatter_class = argparse.RawDescriptionHelpFormatter,
- description = 'Render an intrinsic definition JSON to various formats.',
- epilog = textwrap.dedent('''\
- Quick How-To:
-
- There are two operating modes: single file and multiple files.
-
- For example, ARM is specified as a single file. To generate the
- compiler-definitions for ARM just pass the script the "arm.json" file:
-
- python generator.py --format compiler-defs arm.json
-
- The X86 architecture is specified as multiple files (for the different
- instruction sets that x86 supports). To generate the compiler
- definitions one needs to pass the script a "platform information file"
- (with the -i flag) next to the files of the different instruction sets.
- For example, to generate the X86 compiler-definitions for SSE4.2, just:
-
- python generator.py --format compiler-defs -i x86/info.json sse42.json
-
- And to generate the compiler-definitions for SSE4.1 and SSE4.2, just:
-
- python generator.py --format compiler-defs -i x86/info.json sse41.json sse42.json
-
- An intrinsic definition consists of a map with fields:
- - intrinsic: pattern for the name(s) of the vendor's C intrinsic(s)
- - llvm: pattern for the name(s) of the internal llvm intrinsic(s)
- - width: a vector of vector bit-widths the pattern works with
- - ret: type specifier for the return value
- - arguments: vector of type specifiers for arguments
-
- The width and types describe a range of possible intrinsics,
- and these are fed back into the intrinsic and llvm patterns to
- create the appropriate definitions.
-
- ## Type specifier grammar
-
- ```
- type := core_type modifier* suffix?
-
- core_type := void | vector | scalar | aggregate | reference
-
- modifier := 'v' | 'h' | 'd' | 'n' | 'w' | 'u' | 's' |
- 'x' number | '.' number
- suffix := pointer | bitcast
- pointer := 'Pm' llvm_pointer? | 'Pc' llvm_pointer?
- llvm_pointer := '/' type
- bitcast := '->' type
-
- void := 'V'
-
- vector := vector_elem width |
- vector_elem := 'i' | 'u' | 's' | 'f'
-
- scalar := scalar_type number llvm_width?
- scalar_type := 'U' | 'S' | 'F'
- llvm_width := '/' number
-
- aggregate := '(' (type),* ')' 'f'? | '[' type ';' number ']' 'f'?
-
- reference := number
-
- width = number | '(' number '-' number ')'
-
- number = [0-9]+
- ```
-
- ## Void
-
- The `V` type corresponds to `void` in LLVM (`()` in
- Rust). It's likely to only work in return position.
-
- ## Vectors
-
- The vector grammar is a pattern describing many possibilities
- for arguments/return value. The `vector_elem` describes the
- types of elements to use, and the `width` describes the (range
- of) widths for those elements, which are then placed into a
- vector with the `width` bitwidth. E.g. if an intrinsic has a
- `width` that includes 128, and the return value is `i(8-32)`,
- then some instantiation of that intrinsic will be `u8x16`,
- `u32x4`, `i32x4`, etc.
-
- ### Elements
-
- - i: integer, both signed and unsigned
- - u: unsigned integer
- - s: signed integer
- - f: float
-
- ## Scalars
-
- Similar to vectors, but these describe a single concrete type,
- not a range. The number is the bitwidth. The optional
- `llvm_width` is the bitwidth of the integer that should be
- passed to LLVM (by truncating the Rust argument): this only
- works with scalar integers and the LLVM width must be smaller
- than the Rust width.
-
- ### Types
-
- - U: unsigned integer
- - S: signed integer
- - F: float
-
- ## Aggregates
-
- An aggregate is a collection of multiple types; a tuple in
- Rust terms, or an unnamed struct in LLVM. The `f` modifiers
- forces the tuple to be flattened in the LLVM
- intrinsic. E.g. if `llvm.foo` takes `(F32,S32)`:
-
- - no `f` corresponds to `declare ... @llvm.foo({float, i32})`.
- - having an `f` corresponds to `declare ... @llvm.foo(float, i32)`.
-
- The `[type;number]` form is a just shorter way to write
- `(...)`, except avoids doing a cartesian product of generic
- types, e.g. `[S32;2]` is the same as `(S32, S32)`, while
- `[I32;2]` is describing just the two types `(S32,S32)` and
- `(U32,U32)` (i.e. doesn't include `(S32,U32)`, `(U32,S32)` as
- `(I32,I32)` would).
-
- (Currently aggregates can not contain other aggregates.)
-
- ## References
-
- A reference uses the type of another argument, with possible
- modifications. The number refers to the type to use, starting
- with 0 == return value, 1 == first argument, 2 == second
- argument, etc.
-
- ## Affixes
-
- The `modifier` and `suffix` adaptors change the precise
- representation.
-
- ### Modifiers
-
- - 'v': put a scalar into a vector of the current width (u32 -> u32x4, when width == 128)
- - 'S': get the scalar element of a vector (u32x4 -> u32)
- - 'h': half the length of the vector (u32x4 -> u32x2)
- - 'd': double the length of the vector (u32x2 -> u32x4)
- - 'n': narrow the element of the vector (u32x4 -> u16x4)
- - 'w': widen the element of the vector (u16x4 -> u32x4)
- - 'N': half the length of the vector element (u32x4 -> u16x8)
- - 'W': double the length of the vector element (u16x8 -> u32x4)
- - 'u': force a number (vector or scalar) to be unsigned int (f32x4 -> u32x4)
- - 's': force a number (vector or scalar) to be signed int (u32x4 -> i32x4)
- - 'f': force a number (vector or scalar) to be float (u32x4 -> f32x4)
- - 'x' number: force the type to be a vector of bitwidth `number`.
- - '.' number: get the `number`th element of an aggregate
- - 'D': dereference a pointer (*mut u32 -> u32)
- - 'C': make a pointer const (*mut u32 -> *const u32)
- - 'M': make a pointer mut (*const u32 -> *mut u32)
-
- ### Pointers
-
- Pointers can be created of any type by appending a `P*`
- suffix. The `m` vs. `c` chooses mut vs. const. e.g. `S32Pm`
- corresponds to `*mut i32`, and `i32Pc` corresponds (with width
- 128) to `*const i8x16`, `*const u32x4`, etc.
-
- The type after the `/` (optional) represents the type used
- internally to LLVM, e.g. `S32pm/S8` is exposed as `*mut i32`
- in Rust, but is `i8*` in LLVM. (This defaults to the main
- type).
-
- ### Bitcast
-
- The `'->' type` bitcast suffix will cause the value to be
- bitcast to the right-hand type when calling the intrinsic,
- e.g. `s32->f32` will expose the intrinsic as `i32x4` at the
- Rust level, but will cast that vector to `f32x4` when calling
- the LLVM intrinsic.
- '''))
- parser.add_argument('--format', choices=FORMATS, required=True,
- help = 'Output format.')
- parser.add_argument('-o', '--out', type=argparse.FileType('w'), default=sys.stdout,
- help = 'File to output to (default stdout).')
- parser.add_argument('-i', '--info', type=argparse.FileType('r'),
- help = 'File containing platform specific information to merge into '
- 'the input files\' header.')
- parser.add_argument('in_', metavar="FILE", type=argparse.FileType('r'), nargs='+',
- help = 'JSON files to load')
- return parser.parse_args()
-
-
-class ExternBlock(object):
- def __init__(self):
- pass
-
- @staticmethod
- def open(platform):
- return 'extern "platform-intrinsic" {'
-
- @staticmethod
- def render(mono):
- return ' fn {}{}{};'.format(mono.platform_prefix(),
- mono.intrinsic_name(),
- mono.intrinsic_signature())
-
- @staticmethod
- def close():
- return '}'
-
-class CompilerDefs(object):
- def __init__(self):
- pass
-
- @staticmethod
- def open(platform):
- return '''\
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {{Intrinsic, Type}};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {{
- if !name.starts_with("{0}") {{ return None }}
- Some(match &name["{0}".len()..] {{'''.format(platform.platform_prefix())
-
- @staticmethod
- def render(mono):
- return '''\
- "{}" => Intrinsic {{
- inputs: {{ static INPUTS: [&'static Type; {}] = [{}]; &INPUTS }},
- output: {},
- definition: Named("{}")
- }},'''.format(mono.intrinsic_set_name() + mono.intrinsic_suffix(),
- len(mono._args_raw),
- mono.compiler_args(),
- mono.compiler_ret(),
- mono.llvm_name())
-
- @staticmethod
- def close():
- return '''\
- _ => return None,
- })
-}'''
-
-FORMATS = {
- 'extern-block': ExternBlock(),
- 'compiler-defs': CompilerDefs(),
-}
-
-
-def main():
- args = parse_args()
- ins = args.in_
- out = args.out
- out_format = FORMATS[args.format]
- info = args.info
- one_file_no_info = False
- if len(ins) > 1 and info is None:
- print('error: cannot have multiple inputs without an info header.', file=sys.stderr)
- sys.exit(1)
-
- elif info is None:
- info = ins[0]
- one_file_no_info = True
- info_json = json.load(info)
- platform = PlatformInfo(info_json)
-
- print(out_format.open(platform), file=out)
-
- for in_ in ins:
-
- if one_file_no_info:
- data = info_json
- else:
- data = json.load(in_)
- data.update(info_json)
-
- intrinsics = IntrinsicSet(platform, data)
- for intr in intrinsics.intrinsics():
- for mono in intr.monomorphise():
- print(out_format.render(mono), file=out)
-
- print(out_format.close(), file=out)
-
-if __name__ == '__main__':
- main()
diff --git a/src/etc/platform-intrinsics/hexagon/hvx_v60.json b/src/etc/platform-intrinsics/hexagon/hvx_v60.json
deleted file mode 100644
index a1897e6..0000000
--- a/src/etc/platform-intrinsics/hexagon/hvx_v60.json
+++ /dev/null
@@ -1,1326 +0,0 @@
-{
- "platform": "Q6_",
- "intrinsic_prefix": "",
- "llvm_prefix": "llvm.hexagon.V6.",
- "number_info": {
- "signed": {
- "kind": "s",
- "data_type": { "8": "b", "16": "h", "32": "w" },
- "data_type_plain": { "8": "b", "16": "h", "32": "w" }
- },
- "unsigned": {
- "kind": "u",
- "data_type": { "8": "ub", "16": "uh", "32": "uw" },
- "data_type_plain": { "8": "b", "16": "h", "32": "w" }
- },
- "float": {
- "kind": "f",
- "data_type": { "8": "b", "16": "h", "32": "w" },
- "data_type_plain": { "8": "b", "16": "h", "32": "w" }
- }
- },
- "width_info": {
- "64": { "width_b": "64", "width_suffix": "" },
- "128": { "width_b": "128", "width_suffix": ".128B" },
- "512": { "width_b": "64", "width_suffix": "" },
- "1024": { "widthd_b": "64", "width_b": "128", "width_suffix": ".128B", "widthd_suffix": "" },
- "2048": { "widthd_b": "128", "widthd_suffix": ".128B" }
- },
- "intrinsics": [
- {
- "intrinsic": "R_vextract{1.width_b}",
- "width": [512, 1024],
- "llvm": "extractw{1.width_suffix}",
- "ret": "U32",
- "args": ["u32", "U32"]
- },
- {
- "intrinsic": "V_lo{0.width_b}",
- "width": [512, 1024],
- "llvm": "lo{0.width_suffix}",
- "ret": "u32",
- "args": ["0d"]
- },
- {
- "intrinsic": "V_hi{0.width_b}",
- "width": [512, 1024],
- "llvm": "hi{0.width_suffix}",
- "ret": "u32",
- "args": ["0d"]
- },
- {
- "intrinsic": "V_vsplat_R{0.width_b}",
- "width": [512, 1024],
- "llvm": "lvsplat{1.data_type}{0.width_suffix}",
- "ret": "u32",
- "args": ["0S"]
- },
- {
- "intrinsic": "Q_and_QQ{0.width_b}",
- "width": [64, 128],
- "llvm": "pred.and{0.width_suffix}",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "Q_not_Q{0.width_b}",
- "width": [64, 128],
- "llvm": "pred.not{0.width_suffix}",
- "ret": "u32",
- "args": ["0"]
- },
- {
- "intrinsic": "Q_or_QQ{0.width_b}",
- "width": [64, 128],
- "llvm": "pred.or{0.width_suffix}",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "Q_xor_QQ{0.width_b}",
- "width": [64, 128],
- "llvm": "pred.xor{0.width_suffix}",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vabsdiff_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vabsdiff{1.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vabsdiff_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vabsdiff{1.data_type}{0.width_suffix}",
- "ret": "u(16-32)",
- "args": ["0s", "0s"]
- },
- {
- "intrinsic": "V{0.data_type}_vabs_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vabs{1.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vabs_V{1.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vabs{1.data_type}.sat{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vadd_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vadd_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}sat{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vadd_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}sat{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vadd_W{1.data_type}W{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}.dv{0.widthd_suffix}",
- "ret": "s(8-32)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vadd_W{1.data_type}W{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}sat.dv{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vadd_W{1.data_type}W{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}sat.dv{0.widthd_suffix}",
- "ret": "u(8-16)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V_valign_VVR{0.width_b}",
- "width": [512, 1024],
- "llvm": "valignb{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V_valign_VVI{0.width_b}",
- "width": [512, 1024],
- "llvm": "valignbi{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V_vlalign_VVR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlalignb{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V_vlalign_VVI{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlalignbi{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V_vand_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vand{0.width_suffix}",
- "ret": "u16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V_vand_QR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vandqrt{0.width_suffix}",
- "ret": "u8",
- "args": ["u32hhh", "U32"]
- },
- {
- "intrinsic": "V_vandor_VQR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vandqrt.acc{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "u32hhh", "U32"]
- },
- {
- "intrinsic": "Q_vand_VR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vandvrt{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["u8", "U32"]
- },
- {
- "intrinsic": "Q_vandor_QVR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vandvrt{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "u8", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasl_V{1.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasl{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasl_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasl{0.data_type}v{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vaslacc_V{1.data_type}V{2.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasl{0.data_type}.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{0.data_type}v{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vasracc_V{1.data_type}V{2.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{0.data_type}.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}V{2.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{0.data_type}{1.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0hw", "0hw", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}V{2.data_type}R_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{1.data_type}{0.data_type_plain}sat{0.width_suffix}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}V{2.data_type}R_rnd_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{1.data_type}{0.data_type_plain}rndsat{0.width_suffix}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws", "U32"]
- },
- {
- "intrinsic": "V_equals_V{0.width_b}",
- "width": [512, 1024],
- "llvm": "vassign{0.width_suffix}",
- "ret": "u32",
- "args": ["0"]
- },
- {
- "intrinsic": "W_equals_W{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vassignp{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vavg_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vavg{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vavg_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vavg{0.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vavg_V{1.data_type}V{2.data_type}_rnd{0.width_b}",
- "width": [512, 1024],
- "llvm": "vavgrnd{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vavg_V{1.data_type}V{2.data_type}_rnd{0.width_b}",
- "width": [512, 1024],
- "llvm": "vavgrnd{0.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vcl0_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vcl0{0.data_type_plain}{0.width_suffix}",
- "ret": "u(16-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "W_vcombine_VV{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vcombine{0.widthd_suffix}",
- "ret": "u8d",
- "args": ["0h", "0h"]
- },
- {
- "intrinsic": "V_vzero{0.width_b}",
- "width": [512, 1024],
- "llvm": "vd0{0.width_suffix}",
- "ret": "u32",
- "args": []
- },
- {
- "intrinsic": "V{0.data_type}_vdeal_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdeal{1.data_type}{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vdeale_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdeal{1.data_type}4w{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W_vdeal_VVR{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdealvdd{0.widthd_suffix}",
- "ret": "u8d",
- "args": ["0h", "0h", "U32"]
- },
- {
- "intrinsic": "V_vdelta_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdelta{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpybus{0.width_suffix}",
- "ret": "s16",
- "args": ["u8", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpybus.acc{0.width_suffix}",
- "ret": "s16",
- "args": ["s16", "u8", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdmpybus.dv{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdmpybus.dv.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["s16d", "u8d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhb{0.width_suffix}",
- "ret": "s32",
- "args": ["s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhb.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["s32", "s16", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhb.dv{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["s16d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhb.dv.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["s32d", "s16d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_W{1.data_type}Rh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhisat{0.width_suffix}",
- "ret": "s32",
- "args": ["0d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}Rh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsat{0.width_suffix}",
- "ret": "s32",
- "args": ["s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_W{1.data_type}Ruh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsuisat{0.width_suffix}",
- "ret": "s32",
- "args": ["s16d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}Ruh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsusat{0.width_suffix}",
- "ret": "s32",
- "args": ["s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhvsat{0.width_suffix}",
- "ret": "s32",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}W{2.data_type}Rh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhisat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdsad_W{1.data_type}Ruh{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdsaduh{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["u16d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdsadacc_W{1.data_type}W{2.data_type}Ruh{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdsaduh.acc{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["0", "u16d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}Rh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}W{2.data_type}Ruh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsuisat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "s16d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}Ruh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsusat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}V{3.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhvsat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "s16", "s16"]
- },
- {
- "intrinsic": "Q_vcmp_eq_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "veq{1.data_type}{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["s(8-32)", "1"]
- },
- {
- "intrinsic": "Q_vcmp_eqand_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "veq{2.data_type}.and{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_eqor_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "veq{2.data_type}.or{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_eqxacc_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "veq{2.data_type}.xor{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gt_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{1.data_type}{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["s(8-32)", "1"]
- },
- {
- "intrinsic": "Q_vcmp_gt_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{1.data_type}{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["u(8-16)", "1"]
- },
- {
- "intrinsic": "Q_vcmp_gtand_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.and{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtand_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.and{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "u(8-16)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtor_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.or{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtor_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.or{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "u(8-16)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtxacc_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.xor{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtxacc_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.xor{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "u(8-16)", "2"]
- },
- {
- "intrinsic": "V{0.data_type}_vinsert_V{1.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vinsertwr{0.width_suffix}",
- "ret": "s32",
- "args": ["S32"]
- },
- {
- "intrinsic": "V{0.data_type}_vlsr_V{1.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlsr{0.data_type_plain}{0.width_suffix}",
- "ret": "u(16-32)",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vlsr_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlsr{0.data_type}v{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vlut32_V{1.data_type}V{2.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlutvv{0.data_type}{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vlut16_V{1.data_type}V{2.data_type}R{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vlutvw{0.data_type}{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["s8", "s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vlut32or_V{1.data_type}V{2.data_type}V{3.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlutvv{0.data_type}.oracc{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0", "0", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vlut16or_W{1.data_type}V{2.data_type}V{3.data_type}R{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vlutvw{0.data_type}.oracc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "s8", "s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmax_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmax{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmax_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmax{0.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmin_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmin{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmin_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmin{0.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpa_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpabus{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpaacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpabus.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpa_W{1.data_type}W{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpab{1.kind}{2.kind}v{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8d", "i8d"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpa_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpahb{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["s16d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpaacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpahb.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0", "s16d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}V{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}us{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0n", "0nu"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}V{3.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{2.data_type}us.acc{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0", "0n", "0nu"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}V{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpybusv{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8", "s8"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}V{3.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpybusv.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "0nu", "0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}V{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}v{0.widthd_suffix}",
- "ret": "i(16-32)d",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}V{3.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{2.data_type}v.acc{0.widthd_suffix}",
- "ret": "i(16-32)d",
- "args": ["0", "0n", "0n"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpye_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyewuh{0.width_suffix}",
- "ret": "s32",
- "args": ["s32", "u16"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}R{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}{0.widthd_suffix}",
- "ret": "i32d",
- "args": ["0n", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}R{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{2.data_type}sat.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0", "0n", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpy_V{1.data_type}R{1.data_type}_s1_rnd_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}srs{0.width_suffix}",
- "ret": "s32",
- "args": ["0nd", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpy_V{1.data_type}R{1.data_type}_s1_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}ss{0.width_suffix}",
- "ret": "s32",
- "args": ["0nd", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpy_V{1.data_type}V{2.data_type}_s1_rnd_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}vsrs{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyieo_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyieo{1.data_type}{0.width_suffix}",
- "ret": "s32",
- "args": ["0nd", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyieacc_V{1.data_type}V{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyie{2.data_type}{3.data_type}.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "i16"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyie_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyie{1.data_type}{2.data_type}{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "u16"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyi_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyiacc_V{1.data_type}V{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}.acc{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyi_V{1.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}b{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyiacc_V{1.data_type}V{2.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}b.acc{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyi_V{1.data_type}Rh{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}h{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyiacc_V{1.data_type}V{2.data_type}Rh{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}h.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyi_V{1.data_type}Rub{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}ub{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyiacc_V{1.data_type}V{2.data_type}Rub{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}ub.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyo_V{1.data_type}V{2.data_type}_s1_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyo{1.data_type}{2.data_type}{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyo_V{1.data_type}V{2.data_type}_s1_rnd_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyo{1.data_type}{2.data_type}.rnd{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyo_V{1.data_type}V{2.data_type}_s1_rnd_sat_shift{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyo{1.data_type}{2.data_type}.rnd.sacc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyo_V{1.data_type}V{2.data_type}_s1_sat_shift{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyo{1.data_type}{2.data_type}.sacc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyio_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyio{1.data_type}{2.data_type}{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}R{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}{0.widthd_suffix}",
- "ret": "u16d",
- "args": ["0n", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}R{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{2.data_type}.acc{0.widthd_suffix}",
- "ret": "u(16-32)d",
- "args": ["0", "0n", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmux_QVV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmux{0.width_suffix}",
- "ret": "u32",
- "args": ["0hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vnavg_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vnavg{0.data_type}{0.width_suffix}",
- "ret": "i(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vnavg_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vnavg{0.data_type}{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vnormamt_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vnormamt{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "V_vnot_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vnot{0.width_suffix}",
- "ret": "u16",
- "args": ["0"]
- },
- {
- "intrinsic": "V_vor_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vor{0.width_suffix}",
- "ret": "u16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vpacke_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vpack{1.data_type}e{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0hw", "0hw"]
- },
- {
- "intrinsic": "V{0.data_type}_vpacko_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vpack{1.data_type}o{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0hw", "0hw"]
- },
- {
- "intrinsic": "V{0.data_type}_vpack_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vpack{1.data_type}{0.data_type}.sat{0.width_suffix}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws"]
- },
- {
- "intrinsic": "V{0.data_type}_vpopcount_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vpopcount{0.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0"]
- },
- {
- "intrinsic": "V_vrdelta_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrdelta{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpy_V{1.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpybus{0.width_suffix}",
- "ret": "s32",
- "args": ["u8", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpyacc_V{1.data_type}V{2.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpybus.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "u8", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrmpy_W{1.data_type}RbI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrmpybusi{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrmpyacc_W{1.data_type}W{2.data_type}RbI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrmpybusi.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpy_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpybusv{0.width_suffix}",
- "ret": "s32",
- "args": ["u8", "s8"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpyacc_V{1.data_type}V{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpybusv.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "u8", "s8"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpy_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpy{1.data_type}v{0.width_suffix}",
- "ret": "i32",
- "args": ["0nndd", "0nndd"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpyacc_V{1.data_type}V{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpy{1.data_type}v.acc{0.width_suffix}",
- "ret": "i32",
- "args": ["0", "0nndd", "0nndd"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpy_V{1.data_type}Rub{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpyub{0.width_suffix}",
- "ret": "u32",
- "args": ["u8", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpyacc_V{1.data_type}V{2.data_type}Rub{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpyub.acc{0.width_suffix}",
- "ret": "u32",
- "args": ["0", "u8", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrmpy_W{1.data_type}RubI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrmpyubi{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrmpyacc_W{1.data_type}W{2.data_type}RubI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrmpyubi.acc{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "V_vror_VR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vror{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vround_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vround{1.data_type}{0.data_type}{0.width_suffix}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws"]
- },
- {
- "intrinsic": "W{0.data_type}_vrsad_W{1.data_type}RubI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrsadubi{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrsadacc_W{1.data_type}W{2.data_type}RubI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrsadubi.acc{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vsat_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsat{1.data_type}{0.data_type}{0.width_suffix}",
- "ret": "u8",
- "args": ["0hws", "0hws"]
- },
- {
- "intrinsic": "V{0.data_type}_vsat_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsat{1.data_type}{0.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0hw", "0hw"]
- },
- {
- "intrinsic": "W{0.data_type}_vsxt_V{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vs{1.data_type}{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vzxt_V{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vz{1.data_type_plain}{0.widthd_suffix}",
- "ret": "u(16-32)d",
- "args": ["0n"]
- },
- {
- "intrinsic": "V{0.data_type}_condacc_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}q{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["u32hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_condacc_QnV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}nq{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["u32hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_condnac_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}q{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["u32hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_condnac_QnV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}nq{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["u32hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffe_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshufe{1.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffo_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshufo{1.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuff_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshuff{1.data_type}{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffe_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshuffe{1.data_type}{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffo_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshuffo{1.data_type}{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffoe_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshuffoe{1.data_type}{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W_vshuff_VVR{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vshufvvd{0.widthd_suffix}",
- "ret": "u8d",
- "args": ["0h", "0h", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vsub_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vsub_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}sat{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vsub_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}sat{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vsub_W{1.data_type}W{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}.dv{0.widthd_suffix}",
- "ret": "s(8-32)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vsub_W{1.data_type}W{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}sat.dv{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vsub_W{1.data_type}W{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}sat.dv{0.widthd_suffix}",
- "ret": "u(8-16)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W_vswap_QVV{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vswap{0.widthd_suffix}",
- "ret": "u8d",
- "args": ["u32hhh", "0h", "0h"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpyb{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0nd", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpyb.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "0nd", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpybus{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpybus.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpyhb{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0nd", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vunpack_V{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vunpack{1.data_type}{0.widthd_suffix}",
- "ret": "i(16-32)d",
- "args": ["0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vunpackoor_W{1.data_type}V{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vunpacko{2.data_type}{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0", "0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpyhb.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0", "0nd", "U32"]
- },
- {
- "intrinsic": "V_vxor_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vxor{0.width_suffix}",
- "ret": "u16",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/nvptx/cuda.json b/src/etc/platform-intrinsics/nvptx/cuda.json
deleted file mode 100644
index 1beaaeb..0000000
--- a/src/etc/platform-intrinsics/nvptx/cuda.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "intrinsic_prefix": "_",
- "llvm_prefix": "llvm.cuda.",
- "intrinsics": [
- {
- "intrinsic": "syncthreads",
- "width": ["0"],
- "llvm": "syncthreads",
- "ret": "V",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/nvptx/info.json b/src/etc/platform-intrinsics/nvptx/info.json
deleted file mode 100644
index 80332c5..0000000
--- a/src/etc/platform-intrinsics/nvptx/info.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "platform": "nvptx",
- "number_info": {
- "signed": {}
- },
- "width_info": {}
-}
diff --git a/src/etc/platform-intrinsics/nvptx/sreg.json b/src/etc/platform-intrinsics/nvptx/sreg.json
deleted file mode 100644
index 33d97f2..0000000
--- a/src/etc/platform-intrinsics/nvptx/sreg.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
- "intrinsic_prefix": "_",
- "llvm_prefix": "llvm.nvvm.read.ptx.sreg.",
- "intrinsics": [
- {
- "intrinsic": "block_dim_x",
- "width": ["0"],
- "llvm": "ntid.x",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_dim_y",
- "width": ["0"],
- "llvm": "ntid.y",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_dim_z",
- "width": ["0"],
- "llvm": "ntid.z",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_idx_x",
- "width": ["0"],
- "llvm": "ctaid.x",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_idx_y",
- "width": ["0"],
- "llvm": "ctaid.y",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_idx_z",
- "width": ["0"],
- "llvm": "ctaid.z",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "grid_dim_x",
- "width": ["0"],
- "llvm": "nctaid.x",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "grid_dim_y",
- "width": ["0"],
- "llvm": "nctaid.y",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "grid_dim_z",
- "width": ["0"],
- "llvm": "nctaid.z",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "thread_idx_x",
- "width": ["0"],
- "llvm": "tid.x",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "thread_idx_y",
- "width": ["0"],
- "llvm": "tid.y",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "thread_idx_z",
- "width": ["0"],
- "llvm": "tid.z",
- "ret": "S32",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/powerpc.json b/src/etc/platform-intrinsics/powerpc.json
deleted file mode 100644
index acb6813..0000000
--- a/src/etc/platform-intrinsics/powerpc.json
+++ /dev/null
@@ -1,294 +0,0 @@
-{
- "platform": "powerpc",
- "intrinsic_prefix": "_vec_",
- "llvm_prefix": "llvm.ppc.altivec.",
- "number_info": {
- "unsigned": {
- "kind" : "u",
- "data_type_short": { "8": "b", "16": "h", "32": "w", "64": "d" }
- },
- "signed": {
- "kind" : "s",
- "data_type_short": { "8": "b", "16": "h", "32": "w", "64": "d" }
- },
- "float": {}
- },
- "width_info": {
- "128": { "width": "" }
- },
- "intrinsics": [
- {
- "intrinsic": "perm",
- "width": [128],
- "llvm": "vperm",
- "ret": "s32",
- "args": ["0", "0", "s8"]
- },
- {
- "intrinsic": "mradds",
- "width": [128],
- "llvm": "vmhraddshs",
- "ret": "s16",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "cmpb",
- "width": [128],
- "llvm": "vcmpbfp",
- "ret": "s32",
- "args": ["f32", "f32"]
- },
- {
- "intrinsic": "cmpeq{0.data_type_short}",
- "width": [128],
- "llvm": "vcmpequ{0.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "cmpgt{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vcmpgt{1.kind}{1.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0u", "1"]
- },
- {
- "intrinsic": "cmpgt{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vcmpgt{1.kind}{1.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0", "1"]
- },
- {
- "intrinsic": "max{0.kind}{0.data_type_short}",
- "width": [128],
- "llvm": "vmax{0.kind}{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "min{0.kind}{0.data_type_short}",
- "width": [128],
- "llvm": "vmin{0.kind}{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sub{0.kind}{0.data_type_short}s",
- "width": [128],
- "llvm": "vsub{0.kind}{0.data_type_short}s",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "subc",
- "width": [128],
- "llvm": "vsubcuw",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "add{0.kind}{0.data_type_short}s",
- "width": [128],
- "llvm": "vadd{0.kind}{0.data_type_short}s",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "addc",
- "width": [128],
- "llvm": "vaddcuw",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "mule{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vmule{0.kind}{1.data_type_short}",
- "ret": "i(16-32)",
- "args": ["0N", "1"]
- },
- {
- "intrinsic": "mulo{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vmulo{0.kind}{1.data_type_short}",
- "ret": "i(16-32)",
- "args": ["0N", "1"]
- },
- {
- "intrinsic": "avg{0.kind}{0.data_type_short}",
- "width": [128],
- "llvm": "vavg{0.kind}{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "packs{0.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vpk{0.kind}{1.data_type_short}{0.kind}s",
- "ret": "i(8-16)",
- "args": ["0W", "1"]
- },
- {
- "intrinsic": "packsu{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vpk{1.kind}{1.data_type_short}{0.kind}s",
- "ret": "u(8-16)",
- "args": ["0Ws", "1"]
- },
- {
- "intrinsic": "packpx",
- "width": [128],
- "llvm": "vpkpx",
- "ret": "s16",
- "args": ["s32", "s32"]
- },
- {
- "intrinsic": "unpackl{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vupkl{1.kind}{1.data_type_short}",
- "ret": "s(16-32)",
- "args": ["0N"]
- },
- {
- "intrinsic": "unpackh{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vupkh{1.kind}{1.data_type_short}",
- "ret": "s(16-32)",
- "args": ["0N"]
- },
- {
- "intrinsic": "madds",
- "width": [128],
- "llvm": "vmhaddshs",
- "ret": "s16",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "msumu{1.data_type_short}m",
- "width": [128],
- "llvm": "vmsumu{1.data_type_short}m",
- "ret": "u32",
- "args": ["u(8-16)", "1", "u32"]
- },
- {
- "intrinsic": "msummbm",
- "width": [128],
- "llvm": "vmsummbm",
- "ret": "s32",
- "args": ["s8", "u8", "s32"]
- },
- {
- "intrinsic": "msumshm",
- "width": [128],
- "llvm": "vmsumshm",
- "ret": "s32",
- "args": ["s16", "s16", "s32"]
- },
- {
- "intrinsic": "msum{0.kind}hs",
- "width": [128],
- "llvm": "vmsum{0.kind}hs",
- "ret": "i32",
- "args": ["0N", "0N", "0"]
- },
- {
- "intrinsic": "sum2s",
- "width": [128],
- "llvm": "vsum2sws",
- "ret": "s32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sum4{0.kind}bs",
- "width": [128],
- "llvm": "vsum4{0.kind}bs",
- "ret": "i32",
- "args": ["0NN", "0"]
- },
- {
- "intrinsic": "sum4shs",
- "width": [128],
- "llvm": "vsum4shs",
- "ret": "s32",
- "args": ["0N", "0"]
- },
- {
- "intrinsic": "sums",
- "width": [128],
- "llvm": "vsumsws",
- "ret": "s32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "madd",
- "width": [128],
- "llvm": "vmaddfp",
- "ret": "f32",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "nmsub",
- "width": [128],
- "llvm": "vnmsubfp",
- "ret": "f32",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "expte",
- "width": [128],
- "llvm": "vexptefp",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "floor",
- "width": [128],
- "llvm": "vrfim",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "ceil",
- "width": [128],
- "llvm": "vrfip",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "round",
- "width": [128],
- "llvm": "vrfin",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "trunc",
- "width": [128],
- "llvm": "vrfiz",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "loge",
- "width": [128],
- "llvm": "vlogefp",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "re",
- "width": [128],
- "llvm": "vrefp",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrte",
- "width": [128],
- "llvm": "vrsqrtefp",
- "ret": "f32",
- "args": ["0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/avx.json b/src/etc/platform-intrinsics/x86/avx.json
deleted file mode 100644
index 1f41e2e..0000000
--- a/src/etc/platform-intrinsics/x86/avx.json
+++ /dev/null
@@ -1,272 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.avx.",
- "intrinsics": [
- {
- "intrinsic": "256_addsub_{0.data_type}",
- "width": [256],
- "llvm": "addsub.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_blendv_{0.data_type}",
- "width": [256],
- "llvm": "blendv.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "256_broadcast_{0.data_type}",
- "width": [256],
- "llvm": "vbroadcastf128.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["s8SPc"]
- },
- {
- "intrinsic": "256_cmp_{0.data_type}",
- "width": [256],
- "llvm": "cmp.{1.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0", "s8S"]
- },
- {
- "intrinsic": "256_cvtepi32_pd",
- "width": [256],
- "llvm": "cvtdq2.pd.256",
- "ret": "f64",
- "args": ["s32h"]
- },
- {
- "intrinsic": "256_cvtepi32_ps",
- "width": [256],
- "llvm": "cvtdq2.ps.256",
- "ret": "f32",
- "args": ["s32"]
- },
- {
- "intrinsic": "256_cvtpd_epi32",
- "width": [256],
- "llvm": "cvt.pd2dq.256",
- "ret": "s32h",
- "args": ["f64"]
- },
- {
- "intrinsic": "256_cvtpd_ps",
- "width": [256],
- "llvm": "cvt.pd2.ps.256",
- "ret": "f32h",
- "args": ["f64"]
- },
- {
- "intrinsic": "256_cvtps_epi32",
- "width": [256],
- "llvm": "cvt.ps2dq.256",
- "ret": "s32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_cvtps_pd",
- "width": [256],
- "llvm": "cvt.ps2.pd.256",
- "ret": "f64",
- "args": ["f32h"]
- },
- {
- "intrinsic": "256_cvttpd_epi32",
- "width": [256],
- "llvm": "cvtt.pd2dq.256",
- "ret": "s32h",
- "args": ["f64"]
- },
- {
- "intrinsic": "256_cvttps_epi32",
- "width": [256],
- "llvm": "cvtt.ps2dq.256",
- "ret": "s32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_dp_ps",
- "width": [256],
- "llvm": "dp.ps.256",
- "ret": "f32",
- "args": ["0", "0", "S32/8"]
- },
- {
- "intrinsic": "256_hadd_{0.data_type}",
- "width": [256],
- "llvm": "hadd.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hsub_{0.data_type}",
- "width": [256],
- "llvm": "hsub.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_max_{0.data_type}",
- "width": [256],
- "llvm": "max.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_maskload_{0.data_type}",
- "width": [128, 256],
- "llvm": "maskload.{0.data_type_short}{0.width_suffix}",
- "ret": ["f(32-64)"],
- "args": ["0SPc/S8", "0s->0"]
- },
- {
- "intrinsic": "{3.width_mm}_maskstore_{3.data_type}",
- "width": [128, 256],
- "llvm": "maskstore.{3.data_type_short}{3.width_suffix}",
- "ret": "V",
- "args": ["F(32-64)Pm/S8", "1Dsv->1Dv", "1Dv"]
- },
- {
- "intrinsic": "256_min_{0.data_type}",
- "width": [256],
- "llvm": "min.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_movemask_ps",
- "width": [256],
- "llvm": "movmsk.ps.256",
- "ret": "S32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_movemask_pd",
- "width": [256],
- "llvm": "movmsk.pd.256",
- "ret": "S32",
- "args": ["f64"]
- },
- {
- "intrinsic": "{0.width_mm}_permutevar_{0.data_type}",
- "width": [128, 256],
- "llvm": "vpermilvar.{0.data_type}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "256_rcp_ps",
- "width": [256],
- "llvm": "rcp.ps.256",
- "ret": "f32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_rsqrt_ps",
- "width": [256],
- "llvm": "rsqrt.ps.256",
- "ret": "f32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_storeu_{2.data_type}",
- "width": [256],
- "llvm": "storeu.ps.256",
- "ret": "V",
- "args": ["f(32-64)Pm/U8", "1D"]
- },
- {
- "intrinsic": "256_storeu_si256",
- "width": [256],
- "llvm": "storeu.dq.256",
- "ret": "V",
- "args": ["u8Pm/U8", "1D"]
- },
- {
- "intrinsic": "256_sqrt_{0.data_type}",
- "width": [256],
- "llvm": "!llvm.sqrt.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "{1.width_mm}_testc_ps",
- "width": [128, 256],
- "llvm": "vtestc.ps{1.width_suffix}",
- "ret": "S32",
- "args": ["f32", "f32"]
- },
- {
- "intrinsic": "{1.width_mm}_testc_pd",
- "width": [128, 256],
- "llvm": "vtestc.pd{1.width_suffix}",
- "ret": "S32",
- "args": ["f64", "f64"]
- },
- {
- "intrinsic": "256_testc_si256",
- "width": [256],
- "llvm": "ptestc.256",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "{1.width_mm}_testnzc_ps",
- "width": [128, 256],
- "llvm": "vtestnzc.ps{1.width_suffix}",
- "ret": "S32",
- "args": ["f32", "f32"]
- },
- {
- "intrinsic": "{1.width_mm}_testnzc_pd",
- "width": [128, 256],
- "llvm": "vtestnzc.pd{1.width_suffix}",
- "ret": "S32",
- "args": ["f64", "f64"]
- },
- {
- "intrinsic": "256_testnzc_si256",
- "width": [256],
- "llvm": "ptestnzc.256",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "{1.width_mm}_testz_ps",
- "width": [128, 256],
- "llvm": "vtestz.ps{1.width_suffix}",
- "ret": "S32",
- "args": ["f32", "f32"]
- },
- {
- "intrinsic": "{1.width_mm}_testz_pd",
- "width": [128, 256],
- "llvm": "vtestz.pd{1.width_suffix}",
- "ret": "S32",
- "args": ["f64", "f64"]
- },
- {
- "intrinsic": "256_testz_si256",
- "width": [256],
- "llvm": "ptestz.256",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "256_zeroall",
- "width": [256],
- "llvm": "vzeroall",
- "ret": "V",
- "args": []
- },
- {
- "intrinsic": "256_zeroupper",
- "width": [256],
- "llvm": "vzeroupper",
- "ret": "V",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/avx2.json b/src/etc/platform-intrinsics/x86/avx2.json
deleted file mode 100644
index dc055b5..0000000
--- a/src/etc/platform-intrinsics/x86/avx2.json
+++ /dev/null
@@ -1,202 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.avx2.",
- "intrinsics": [
- {
- "intrinsic": "256_abs_{0.data_type}",
- "width": [256],
- "llvm": "pabs.{0.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "256_adds_{0.data_type}",
- "width": [256],
- "llvm": "padd{0.kind_short}s.{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_avg_{0.data_type}",
- "width": [256],
- "llvm": "pavg.{0.data_type_short}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hadd_{0.data_type}",
- "width": [256],
- "llvm": "phadd.{0.data_type_short}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hadds_epi16",
- "width": [256],
- "llvm": "phadd.sw",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hsub_{0.data_type}",
- "width": [256],
- "llvm": "phsub.{0.data_type_short}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hsubs_epi16",
- "width": [256],
- "llvm": "phsub.sw",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_madd_epi16",
- "width": [256],
- "llvm": "pmadd.wd",
- "ret": "s32",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "256_maddubs_epi16",
- "width": [256],
- "llvm": "pmadd.ub.sw",
- "ret": "s16",
- "args": ["s8", "s8"]
- },
- {
- "intrinsic": "{0.width_mm}_mask_i32gather_{0.data_type}",
- "width": [128, 256],
- "llvm": "gather.d.{0.data_type_short}{0.width_suffix}",
- "ret": ["s32", "f32"],
- "args": ["0", "0SPc/S8", "s32", "0s->0", "S32/8"]
- },
- {
- "intrinsic": "{0.width_mm}_mask_i32gather_{0.data_type}",
- "width": [128, 256],
- "llvm": "gather.d.{0.data_type_short}{0.width_suffix}",
- "ret": ["s64", "f64"],
- "args": ["0", "0SPc/S8", "s32x128", "0s->0", "S32/8"]
- },
- {
- "intrinsic": "{3.width_mm}_mask_i64gather_{0.data_type}",
- "width": [128, 256],
- "llvm": "gather.q.{0.data_type_short}{0.width_suffix}",
- "ret": ["s32x128", "f32x128"],
- "args": ["0", "0SPc/S8", "s64", "0s->0", "S32/8"]
- },
- {
- "intrinsic": "{0.width_mm}_mask_i64gather_{0.data_type}",
- "width": [128, 256],
- "llvm": "gather.q.{0.data_type_short}{0.width_suffix}",
- "ret": ["s64", "f64"],
- "args": ["0", "0SPc/S8", "s64", "0s->0", "S32/8"]
- },
- {
- "intrinsic": "{0.width_mm}_maskload_{0.data_type}",
- "width": [128, 256],
- "llvm": "maskload.{0.data_type_short}{0.width_suffix}",
- "ret": ["s(32-64)"],
- "args": ["0Pc/S8", "0"]
- },
- {
- "intrinsic": "{2.width_mm}_maskstore_{2.data_type}",
- "width": [128, 256],
- "llvm": "maskstore.{2.data_type_short}{2.width_suffix}",
- "ret": "V",
- "args": ["S(32-64)Pm/S8", "1Dv", "2"]
- },
- {
- "intrinsic": "256_max_{0.data_type}",
- "width": [256],
- "llvm": "pmax{0.kind}.{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_min_{0.data_type}",
- "width": [256],
- "llvm": "pmin{0.kind}.{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_movemask_epi8",
- "width": [256],
- "llvm": "pmovmskb",
- "ret": "S32",
- "args": ["s8"]
- },
- {
- "intrinsic": "256_mpsadbw_epu8",
- "width": [256],
- "llvm": "mpsadbw",
- "ret": "u16",
- "args": ["u8", "u8", "S32/8"]
- },
- {
- "intrinsic": "256_mul_{0.data_type}",
- "width": [256],
- "llvm": "pmul{0.data_type_short}.dq",
- "ret": "i64",
- "args": ["0dn", "0dn"]
- },
- {
- "intrinsic": "256_mulhi_{0.data_type}",
- "width": [256],
- "llvm": "pmulh{0.data_type_short}.w",
- "ret": "i16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_mulhrs_epi16",
- "width": [256],
- "llvm": "pmul.hr.sw",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_pack{0.kind_short}s_{1.data_type}",
- "width": [256],
- "llvm": "pack{0.kind}s{1.data_type_short}{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws"]
- },
- {
- "intrinsic": "256_permutevar8x32_{0.data_type}",
- "width": [256],
- "llvm": "perm{0.data_type_short}",
- "ret": ["s32", "f32"],
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "256_sad_epu8",
- "width": [256],
- "llvm": "psad.bw",
- "ret": "u64",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_shuffle_epi8",
- "width": [256],
- "llvm": "pshuf.b",
- "ret": "s8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_sign_{0.data_type}",
- "width": [256],
- "llvm": "psign.{0.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_subs_{0.data_type}",
- "width": [256],
- "llvm": "psub{0.kind_short}s.{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/bmi.json b/src/etc/platform-intrinsics/x86/bmi.json
deleted file mode 100644
index 24e2cbc..0000000
--- a/src/etc/platform-intrinsics/x86/bmi.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "intrinsic_prefix": "_bmi",
- "llvm_prefix": "llvm.x86.bmi.",
- "intrinsics": [
- {
- "intrinsic": "_bextr_{0.bitwidth}",
- "width": ["0"],
- "llvm": "bextr.{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/bmi2.json b/src/etc/platform-intrinsics/x86/bmi2.json
deleted file mode 100644
index f5a0db5..0000000
--- a/src/etc/platform-intrinsics/x86/bmi2.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "intrinsic_prefix": "_bmi2",
- "llvm_prefix": "llvm.x86.bmi.",
- "intrinsics": [
- {
- "intrinsic": "_bzhi_{0.bitwidth}",
- "width": ["0"],
- "llvm": "bzhi.{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_pdep_{0.bitwidth}",
- "width": ["0"],
- "llvm": "pdep.{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_pext_{0.bitwidth}",
- "width": ["0"],
- "llvm": "pext.{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/fma.json b/src/etc/platform-intrinsics/x86/fma.json
deleted file mode 100644
index dcc26cd..0000000
--- a/src/etc/platform-intrinsics/x86/fma.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.fma.",
- "intrinsics": [
- {
- "intrinsic": "{0.width_mm}_fmadd_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfmadd.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fmaddsub_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfmaddsub.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fmsub_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfmsub.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fmsubadd_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfmsubadd.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fnmadd_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfnmadd.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fnmsub_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfnmsub.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/info.json b/src/etc/platform-intrinsics/x86/info.json
deleted file mode 100644
index 8e90b85..0000000
--- a/src/etc/platform-intrinsics/x86/info.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "platform": "x86",
- "number_info": {
- "signed": {
- "kind": "s",
- "kind_short": "",
- "data_type": { "pattern": "epi{bitwidth}" },
- "bitwidth": { "pattern": "{bitwidth}" },
- "data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
- },
- "unsigned": {
- "kind": "u",
- "kind_short": "u",
- "data_type": { "pattern": "epu{bitwidth}" },
- "bitwidth": { "pattern": "{bitwidth}" },
- "data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
- },
- "float": {
- "kind": "f",
- "data_type": { "32": "ps", "64": "pd" },
- "bitwidth": { "pattern": "{bitwidth}" },
- "data_type_short": { "32": "ps", "64": "pd" }
- }
- },
- "width_info": {
- "32": { "width_mm": "32", "width_suffix": "" },
- "64": { "width_mm": "64", "width_suffix": "" },
- "128": { "width_mm": "", "width_suffix": "" },
- "256": { "width_mm": "256", "width_suffix": ".256" },
- "512": { "width_mm": "512", "width_suffix": ".512" }
- }
-}
diff --git a/src/etc/platform-intrinsics/x86/rdrand.json b/src/etc/platform-intrinsics/x86/rdrand.json
deleted file mode 100644
index fa2feb4..0000000
--- a/src/etc/platform-intrinsics/x86/rdrand.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "intrinsic_prefix": "_rdrand",
- "llvm_prefix": "llvm.x86.rdrand.",
- "intrinsics": [
- {
- "intrinsic": "16_step",
- "width": ["0"],
- "llvm": "16",
- "ret": "(U16,S32)",
- "args": []
- },
- {
- "intrinsic": "32_step",
- "width": ["0"],
- "llvm": "32",
- "ret": "(U32,S32)",
- "args": []
- },
- {
- "intrinsic": "64_step",
- "width": ["0"],
- "llvm": "64",
- "ret": "(U64,S32)",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/rdseed.json b/src/etc/platform-intrinsics/x86/rdseed.json
deleted file mode 100644
index 7be64b5..0000000
--- a/src/etc/platform-intrinsics/x86/rdseed.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "intrinsic_prefix": "_rdseed",
- "llvm_prefix": "llvm.x86.rdseed.",
- "intrinsics": [
- {
- "intrinsic": "16_step",
- "width": ["0"],
- "llvm": "16",
- "ret": "(U16,S32)",
- "args": []
- },
- {
- "intrinsic": "32_step",
- "width": ["0"],
- "llvm": "32",
- "ret": "(U32,S32)",
- "args": []
- },
- {
- "intrinsic": "64_step",
- "width": ["0"],
- "llvm": "64",
- "ret": "(U64,S32)",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse.json b/src/etc/platform-intrinsics/x86/sse.json
deleted file mode 100644
index d8eef8a..0000000
--- a/src/etc/platform-intrinsics/x86/sse.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse.",
- "intrinsics": [
- {
- "intrinsic": "_movemask_ps",
- "width": [128],
- "llvm": "movmsk.ps",
- "ret": "S32",
- "args": ["f32"]
- },
- {
- "intrinsic": "_max_ps",
- "width": [128],
- "llvm": "max.ps",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_min_ps",
- "width": [128],
- "llvm": "min.ps",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_rsqrt_ps",
- "width": [128],
- "llvm": "rsqrt.ps",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "_rcp_ps",
- "width": [128],
- "llvm": "rcp.ps",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "_sqrt_ps",
- "width": [128],
- "llvm": "!llvm.sqrt.v4f32",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "_storeu_ps",
- "width": [128],
- "llvm": "storeu.ps",
- "ret": "V",
- "args": ["F32Pm/S8", "f32"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse2.json b/src/etc/platform-intrinsics/x86/sse2.json
deleted file mode 100644
index 4d6317d..0000000
--- a/src/etc/platform-intrinsics/x86/sse2.json
+++ /dev/null
@@ -1,160 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse2.",
- "intrinsics": [
- {
- "intrinsic": "_adds_{0.data_type}",
- "width": [128],
- "llvm": "padd{0.kind_short}s.{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_avg_{0.data_type}",
- "width": [128],
- "llvm": "pavg.{0.data_type_short}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_lfence",
- "width": [128],
- "llvm": "lfence",
- "ret": "V",
- "args": []
- },
- {
- "intrinsic": "_madd_epi16",
- "width": [128],
- "llvm": "pmadd.wd",
- "ret": "s32",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "_maskmoveu_si128",
- "width": [128],
- "llvm": "maskmov.dqu",
- "ret": "V",
- "args": ["u8", "u8", "U8Pm"]
- },
- {
- "intrinsic": "_max_{0.data_type}",
- "width": [128],
- "llvm": "pmax{0.kind}.{0.data_type_short}",
- "ret": ["s16", "u8"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_max_pd",
- "width": [128],
- "llvm": "max.pd",
- "ret": "f64",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_mfence",
- "width": [128],
- "llvm": "fence",
- "ret": "V",
- "args": []
- },
- {
- "intrinsic": "_min_{0.data_type}",
- "width": [128],
- "llvm": "pmin{0.kind}.{0.data_type_short}",
- "ret": ["s16", "u8"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_min_pd",
- "width": [128],
- "llvm": "min.pd",
- "ret": "f64",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_movemask_pd",
- "width": [128],
- "llvm": "movmsk.pd",
- "ret": "S32",
- "args": ["f64"]
- },
- {
- "intrinsic": "_movemask_epi8",
- "width": [128],
- "llvm": "pmovmskb.128",
- "ret": "S32",
- "args": ["s8"]
- },
- {
- "intrinsic": "_mul_epu32",
- "width": [128],
- "llvm": "pmulu.dq",
- "ret": "u64",
- "args": ["0dn", "0dn"]
- },
- {
- "intrinsic": "_mulhi_{0.data_type}",
- "width": [128],
- "llvm": "pmulh{0.kind_short}.w",
- "ret": "i16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_packs_{1.data_type}",
- "width": [128],
- "llvm": "packss{1.data_type_short}{0.data_type_short}.128",
- "ret": "s(8-16)",
- "args": ["0hw", "0hw"]
- },
- {
- "intrinsic": "_packus_epi16",
- "width": [128],
- "llvm": "packuswb.128",
- "ret": "u8",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "_sad_epu8",
- "width": [128],
- "llvm": "psad.bw",
- "ret": "u64",
- "args": ["u8", "u8"]
- },
- {
- "intrinsic": "_sfence",
- "width": [128],
- "llvm": "sfence",
- "ret": "V",
- "args": []
- },
- {
- "intrinsic": "_sqrt_pd",
- "width": [128],
- "llvm": "!llvm.sqrt.v2f64",
- "ret": "f64",
- "args": ["0"]
- },
- {
- "intrinsic": "_storeu_pd",
- "width": [128],
- "llvm": "storeu.pd",
- "ret": "V",
- "args": ["F64Pm/U8", "f64"]
- },
- {
- "intrinsic": "_storeu_si128",
- "width": [128],
- "llvm": "storeu.dq",
- "ret": "V",
- "args": ["u8Pm/U8", "u8"]
- },
- {
- "intrinsic": "_subs_{0.data_type}",
- "width": [128],
- "llvm": "psub{0.kind_short}s.{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse3.json b/src/etc/platform-intrinsics/x86/sse3.json
deleted file mode 100644
index 119bf20..0000000
--- a/src/etc/platform-intrinsics/x86/sse3.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse3.",
- "intrinsics": [
- {
- "intrinsic": "_addsub_{0.data_type}",
- "width": [128],
- "llvm": "addsub.{0.data_type}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hadd_{0.data_type}",
- "width": [128],
- "llvm": "hadd.{0.data_type}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hsub_{0.data_type}",
- "width": [128],
- "llvm": "hsub.{0.data_type}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_lddqu_si128",
- "width": [128],
- "llvm": "ldu.dq",
- "ret": "u8",
- "args": ["0Pc/S8"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse41.json b/src/etc/platform-intrinsics/x86/sse41.json
deleted file mode 100644
index b499637..0000000
--- a/src/etc/platform-intrinsics/x86/sse41.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse41.",
- "intrinsics": [
- {
- "intrinsic": "_dp_{0.data_type}",
- "width": [128],
- "llvm": "dp{0.data_type}",
- "ret": "f(32-64)",
- "args": ["0", "0", "S32/8"]
- },
- {
- "intrinsic": "_max_{0.data_type}",
- "width": [128],
- "llvm": "pmax{0.kind}{0.data_type_short}",
- "ret": ["s8", "u16", "i32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_min_{0.data_type}",
- "width": [128],
- "llvm": "pmin{0.kind}{0.data_type_short}",
- "ret": ["s8", "u16", "i32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_minpos_epu16",
- "width": [128],
- "llvm": "phminposuw",
- "ret": "u16",
- "args": ["0"]
- },
- {
- "intrinsic": "_mpsadbw_epu8",
- "width": [128],
- "llvm": "mpsadbw",
- "ret": "u16",
- "args": ["u8", "u8", "S32/8"]
- },
- {
- "intrinsic": "_mul_epi32",
- "width": [128],
- "llvm": "pmuldq",
- "ret": "s64",
- "args": ["s32", "s32"]
- },
- {
- "intrinsic": "_packus_epi32",
- "width": [128],
- "llvm": "packusdw",
- "ret": "u16",
- "args": ["s32", "s32"]
- },
- {
- "intrinsic": "_testc_si128",
- "width": [128],
- "llvm": "ptestc",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "_testnzc_si128",
- "width": [128],
- "llvm": "ptestnzc",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "_testz_si128",
- "width": [128],
- "llvm": "ptestz",
- "ret": "S32",
- "args": ["u64", "u64"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse42.json b/src/etc/platform-intrinsics/x86/sse42.json
deleted file mode 100644
index fdee9c8..0000000
--- a/src/etc/platform-intrinsics/x86/sse42.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse42.",
- "intrinsics": [
- {
- "intrinsic": "_cmpestra",
- "width": [128],
- "llvm": "pcmpestria128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestrc",
- "width": [128],
- "llvm": "pcmpestric128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestri",
- "width": [128],
- "llvm": "pcmpestri128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestrm",
- "width": [128],
- "llvm": "pcmpestrm128",
- "ret": "s8",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestro",
- "width": [128],
- "llvm": "pcmpestrio128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestrs",
- "width": [128],
- "llvm": "pcmpestris128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestrz",
- "width": [128],
- "llvm": "pcmpestriz128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpistra",
- "width": [128],
- "llvm": "pcmpistria128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistrc",
- "width": [128],
- "llvm": "pcmpistric128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistri",
- "width": [128],
- "llvm": "pcmpistri128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistrm",
- "width": [128],
- "llvm": "pcmpistrm128",
- "ret": "s8",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistro",
- "width": [128],
- "llvm": "pcmpistrio128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistrs",
- "width": [128],
- "llvm": "pcmpistris128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistrz",
- "width": [128],
- "llvm": "pcmpistriz128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/ssse3.json b/src/etc/platform-intrinsics/x86/ssse3.json
deleted file mode 100644
index 5a56179..0000000
--- a/src/etc/platform-intrinsics/x86/ssse3.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.ssse3.",
- "intrinsics": [
- {
- "intrinsic": "_abs_{0.data_type}",
- "width": [128],
- "llvm": "pabs.{0.data_type_short}.128",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "_hadd_{0.data_type}",
- "width": [128],
- "llvm": "phadd.{0.data_type_short}.128",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hadds_epi16",
- "width": [128],
- "llvm": "phadd.sw.128",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hsub_{0.data_type}",
- "width": [128],
- "llvm": "phsub.{0.data_type_short}.128",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hsubs_epi16",
- "width": [128],
- "llvm": "phsub.sw.128",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_maddubs_epi16",
- "width": [128],
- "llvm": "pmadd.ub.sw.128",
- "ret": "s16",
- "args": ["u8", "s8"]
- },
- {
- "intrinsic": "_mulhrs_epi16",
- "width": [128],
- "llvm": "pmul.hr.sw.128",
- "ret": "s16",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "_shuffle_epi8",
- "width": [128],
- "llvm": "pshuf.b.128",
- "ret": "s8",
- "args": ["s8", "s8"]
- },
- {
- "intrinsic": "_sign_{0.data_type}",
- "width": [128],
- "llvm": "psign.{0.data_type_short}.128",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/tbm.json b/src/etc/platform-intrinsics/x86/tbm.json
deleted file mode 100644
index d1322cd6..0000000
--- a/src/etc/platform-intrinsics/x86/tbm.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "intrinsic_prefix": "_tbm",
- "llvm_prefix": "llvm.x86.tbm.",
- "intrinsics": [
- {
- "intrinsic": "_bextri_u{0.bitwidth}",
- "width": ["0"],
- "llvm": "bextri.u{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/liballoc/raw_vec.rs b/src/liballoc/raw_vec.rs
index c05452b..5e4aac9 100644
--- a/src/liballoc/raw_vec.rs
+++ b/src/liballoc/raw_vec.rs
@@ -22,7 +22,7 @@
/// * Catches all overflows in capacity computations (promotes them to "capacity overflow" panics)
/// * Guards against 32-bit systems allocating more than isize::MAX bytes
/// * Guards against overflowing your length
-/// * Aborts on OOM
+/// * Aborts on OOM or calls handle_alloc_error as applicable
/// * Avoids freeing Unique::empty()
/// * Contains a ptr::Unique and thus endows the user with all related benefits
///
diff --git a/src/liballoc/vec.rs b/src/liballoc/vec.rs
index e1c5ab1..ba3b3df 100644
--- a/src/liballoc/vec.rs
+++ b/src/liballoc/vec.rs
@@ -819,6 +819,8 @@
#[inline]
#[stable(feature = "rust1", since = "1.0.0")]
pub unsafe fn set_len(&mut self, new_len: usize) {
+ debug_assert!(new_len <= self.capacity());
+
self.len = new_len;
}
diff --git a/src/libcore/cmp.rs b/src/libcore/cmp.rs
index 86f28a9..d43a5c1 100644
--- a/src/libcore/cmp.rs
+++ b/src/libcore/cmp.rs
@@ -91,6 +91,8 @@
/// For example, let's tweak our previous code a bit:
///
/// ```
+/// // The derive implements <BookFormat> == <BookFormat> comparisons
+/// #[derive(PartialEq)]
/// enum BookFormat {
/// Paperback,
/// Hardback,
@@ -102,31 +104,34 @@
/// format: BookFormat,
/// }
///
+/// // Implement <Book> == <BookFormat> comparisons
/// impl PartialEq<BookFormat> for Book {
/// fn eq(&self, other: &BookFormat) -> bool {
-/// match (&self.format, other) {
-/// (BookFormat::Paperback, BookFormat::Paperback) => true,
-/// (BookFormat::Hardback, BookFormat::Hardback) => true,
-/// (BookFormat::Ebook, BookFormat::Ebook) => true,
-/// (_, _) => false,
-/// }
+/// self.format == *other
+/// }
+/// }
+///
+/// // Implement <BookFormat> == <Book> comparisons
+/// impl PartialEq<Book> for BookFormat {
+/// fn eq(&self, other: &Book) -> bool {
+/// *self == other.format
/// }
/// }
///
/// let b1 = Book { isbn: 3, format: BookFormat::Paperback };
///
/// assert!(b1 == BookFormat::Paperback);
-/// assert!(b1 != BookFormat::Ebook);
+/// assert!(BookFormat::Ebook != b1);
/// ```
///
/// By changing `impl PartialEq for Book` to `impl PartialEq<BookFormat> for Book`,
-/// we've changed what type we can use on the right side of the `==` operator.
-/// This lets us use it in the `assert!` statements at the bottom.
+/// we allow `BookFormat`s to be compared with `Book`s.
///
/// You can also combine these implementations to let the `==` operator work with
/// two different types:
///
/// ```
+/// #[derive(PartialEq)]
/// enum BookFormat {
/// Paperback,
/// Hardback,
@@ -140,12 +145,13 @@
///
/// impl PartialEq<BookFormat> for Book {
/// fn eq(&self, other: &BookFormat) -> bool {
-/// match (&self.format, other) {
-/// (&BookFormat::Paperback, &BookFormat::Paperback) => true,
-/// (&BookFormat::Hardback, &BookFormat::Hardback) => true,
-/// (&BookFormat::Ebook, &BookFormat::Ebook) => true,
-/// (_, _) => false,
-/// }
+/// self.format == *other
+/// }
+/// }
+///
+/// impl PartialEq<Book> for BookFormat {
+/// fn eq(&self, other: &Book) -> bool {
+/// *self == other.format
/// }
/// }
///
@@ -159,7 +165,7 @@
/// let b2 = Book { isbn: 3, format: BookFormat::Ebook };
///
/// assert!(b1 == BookFormat::Paperback);
-/// assert!(b1 != BookFormat::Ebook);
+/// assert!(BookFormat::Ebook != b1);
/// assert!(b1 == b2);
/// ```
///
diff --git a/src/libcore/convert.rs b/src/libcore/convert.rs
index 5bf5c85..08b5ac0 100644
--- a/src/libcore/convert.rs
+++ b/src/libcore/convert.rs
@@ -55,7 +55,6 @@
/// Using `identity` to do nothing among other interesting functions:
///
/// ```rust
-/// #![feature(convert_id)]
/// use std::convert::identity;
///
/// fn manipulation(x: u32) -> u32 {
@@ -69,7 +68,6 @@
/// Using `identity` to get a function that changes nothing in a conditional:
///
/// ```rust
-/// #![feature(convert_id)]
/// use std::convert::identity;
///
/// # let condition = true;
@@ -86,14 +84,13 @@
/// Using `identity` to keep the `Some` variants of an iterator of `Option<T>`:
///
/// ```rust
-/// #![feature(convert_id)]
/// use std::convert::identity;
///
/// let iter = vec![Some(1), None, Some(3)].into_iter();
/// let filtered = iter.filter_map(identity).collect::<Vec<_>>();
/// assert_eq!(vec![1, 3], filtered);
/// ```
-#[unstable(feature = "convert_id", issue = "53500")]
+#[stable(feature = "convert_id", since = "1.33.0")]
#[inline]
pub const fn identity<T>(x: T) -> T { x }
diff --git a/src/libcore/ffi.rs b/src/libcore/ffi.rs
index 0717a88..644380c 100644
--- a/src/libcore/ffi.rs
+++ b/src/libcore/ffi.rs
@@ -12,24 +12,27 @@
/// and `*mut c_void` is equivalent to C's `void*`. That said, this is
/// *not* the same as C's `void` return type, which is Rust's `()` type.
///
-/// Ideally, this type would be equivalent to [`!`], but currently it may
-/// be more ideal to use `c_void` for FFI purposes.
+/// To model pointers to opaque types in FFI, until `extern type` is
+/// stabilized, it is recommended to use a newtype wrapper around an empty
+/// byte array. See the [Nomicon] for details.
///
-/// [`!`]: ../../std/primitive.never.html
/// [pointer]: ../../std/primitive.pointer.html
+/// [Nomicon]: https://doc.rust-lang.org/nomicon/ffi.html#representing-opaque-structs
// N.B., for LLVM to recognize the void pointer type and by extension
// functions like malloc(), we need to have it represented as i8* in
// LLVM bitcode. The enum used here ensures this and prevents misuse
-// of the "raw" type by only having private variants.. We need two
+// of the "raw" type by only having private variants. We need two
// variants, because the compiler complains about the repr attribute
-// otherwise.
+// otherwise and we need at least one variant as otherwise the enum
+// would be uninhabited and at least dereferencing such pointers would
+// be UB.
#[repr(u8)]
#[stable(feature = "raw_os", since = "1.1.0")]
pub enum c_void {
- #[unstable(feature = "c_void_variant", reason = "should not have to exist",
+ #[unstable(feature = "c_void_variant", reason = "temporary implementation detail",
issue = "0")]
#[doc(hidden)] __variant1,
- #[unstable(feature = "c_void_variant", reason = "should not have to exist",
+ #[unstable(feature = "c_void_variant", reason = "temporary implementation detail",
issue = "0")]
#[doc(hidden)] __variant2,
}
@@ -49,7 +52,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
extern {
type VaListImpl;
}
@@ -74,7 +77,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
struct VaListImpl {
stack: *mut (),
gr_top: *mut (),
@@ -90,7 +93,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
struct VaListImpl {
gpr: u8,
fpr: u8,
@@ -106,7 +109,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
struct VaListImpl {
gp_offset: i32,
fp_offset: i32,
@@ -120,7 +123,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
#[repr(transparent)]
pub struct VaList<'a>(&'a mut VaListImpl);
@@ -140,7 +143,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
pub trait VaArgSafe {}
}
@@ -150,7 +153,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
impl sealed_trait::VaArgSafe for $t {}
)+
}
@@ -163,12 +166,12 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
impl<T> sealed_trait::VaArgSafe for *mut T {}
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
impl<T> sealed_trait::VaArgSafe for *const T {}
impl<'a> VaList<'a> {
@@ -176,7 +179,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
pub unsafe fn arg<T: sealed_trait::VaArgSafe>(&mut self) -> T {
va_arg(self)
}
@@ -185,7 +188,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
pub unsafe fn copy<F, R>(&self, f: F) -> R
where F: for<'copy> FnOnce(VaList<'copy>) -> R {
#[cfg(any(all(not(target_arch = "aarch64"), not(target_arch = "powerpc"),
diff --git a/src/libcore/hint.rs b/src/libcore/hint.rs
index 9e57a4e..ad5a207 100644
--- a/src/libcore/hint.rs
+++ b/src/libcore/hint.rs
@@ -49,3 +49,26 @@
pub unsafe fn unreachable_unchecked() -> ! {
intrinsics::unreachable()
}
+
+/// Save power or switch hyperthreads in a busy-wait spin-loop.
+///
+/// This function is deliberately more primitive than
+/// [`std::thread::yield_now`](../../std/thread/fn.yield_now.html) and
+/// does not directly yield to the system's scheduler.
+/// In some cases it might be useful to use a combination of both functions.
+/// Careful benchmarking is advised.
+///
+/// On some platforms this function may not do anything at all.
+#[inline]
+#[unstable(feature = "renamed_spin_loop", issue = "55002")]
+pub fn spin_loop() {
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
+ unsafe {
+ asm!("pause" ::: "memory" : "volatile");
+ }
+
+ #[cfg(target_arch = "aarch64")]
+ unsafe {
+ asm!("yield" ::: "memory" : "volatile");
+ }
+}
diff --git a/src/libcore/iter/iterator.rs b/src/libcore/iter/iterator.rs
index 640af74..0ad29af 100644
--- a/src/libcore/iter/iterator.rs
+++ b/src/libcore/iter/iterator.rs
@@ -2358,7 +2358,7 @@
///
/// ```
/// fn factorial(n: u32) -> u32 {
- /// (1..).take_while(|&i| i <= n).product()
+ /// (1..=n).product()
/// }
/// assert_eq!(factorial(0), 1);
/// assert_eq!(factorial(1), 1);
diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs
index 1ef5428..974906b 100644
--- a/src/libcore/iter/mod.rs
+++ b/src/libcore/iter/mod.rs
@@ -329,6 +329,8 @@
pub use self::sources::{Empty, empty};
#[stable(feature = "iter_once", since = "1.2.0")]
pub use self::sources::{Once, once};
+#[unstable(feature = "iter_once_with", issue = "57581")]
+pub use self::sources::{OnceWith, once_with};
#[unstable(feature = "iter_unfold", issue = "55977")]
pub use self::sources::{Unfold, unfold, Successors, successors};
diff --git a/src/libcore/iter/sources.rs b/src/libcore/iter/sources.rs
index 2a39089..2590fa6 100644
--- a/src/libcore/iter/sources.rs
+++ b/src/libcore/iter/sources.rs
@@ -377,6 +377,119 @@
Once { inner: Some(value).into_iter() }
}
+/// An iterator that repeats elements of type `A` endlessly by
+/// applying the provided closure `F: FnMut() -> A`.
+///
+/// This `struct` is created by the [`once_with`] function.
+/// See its documentation for more.
+///
+/// [`once_with`]: fn.once_with.html
+#[derive(Copy, Clone, Debug)]
+#[unstable(feature = "iter_once_with", issue = "57581")]
+pub struct OnceWith<F> {
+ gen: Option<F>,
+}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+impl<A, F: FnOnce() -> A> Iterator for OnceWith<F> {
+ type Item = A;
+
+ #[inline]
+ fn next(&mut self) -> Option<A> {
+ self.gen.take().map(|f| f())
+ }
+
+ #[inline]
+ fn size_hint(&self) -> (usize, Option<usize>) {
+ self.gen.iter().size_hint()
+ }
+}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+impl<A, F: FnOnce() -> A> DoubleEndedIterator for OnceWith<F> {
+ fn next_back(&mut self) -> Option<A> {
+ self.next()
+ }
+}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+impl<A, F: FnOnce() -> A> ExactSizeIterator for OnceWith<F> {
+ fn len(&self) -> usize {
+ self.gen.iter().len()
+ }
+}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+impl<A, F: FnOnce() -> A> FusedIterator for OnceWith<F> {}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+unsafe impl<A, F: FnOnce() -> A> TrustedLen for OnceWith<F> {}
+
+/// Creates an iterator that lazily generates a value exactly once by invoking
+/// the provided closure.
+///
+/// This is commonly used to adapt a single value generator into a [`chain`] of
+/// other kinds of iteration. Maybe you have an iterator that covers almost
+/// everything, but you need an extra special case. Maybe you have a function
+/// which works on iterators, but you only need to process one value.
+///
+/// Unlike [`once`], this function will lazily generate the value on request.
+///
+/// [`once`]: fn.once.html
+/// [`chain`]: trait.Iterator.html#method.chain
+///
+/// # Examples
+///
+/// Basic usage:
+///
+/// ```
+/// #![feature(iter_once_with)]
+///
+/// use std::iter;
+///
+/// // one is the loneliest number
+/// let mut one = iter::once_with(|| 1);
+///
+/// assert_eq!(Some(1), one.next());
+///
+/// // just one, that's all we get
+/// assert_eq!(None, one.next());
+/// ```
+///
+/// Chaining together with another iterator. Let's say that we want to iterate
+/// over each file of the `.foo` directory, but also a configuration file,
+/// `.foorc`:
+///
+/// ```no_run
+/// #![feature(iter_once_with)]
+///
+/// use std::iter;
+/// use std::fs;
+/// use std::path::PathBuf;
+///
+/// let dirs = fs::read_dir(".foo").unwrap();
+///
+/// // we need to convert from an iterator of DirEntry-s to an iterator of
+/// // PathBufs, so we use map
+/// let dirs = dirs.map(|file| file.unwrap().path());
+///
+/// // now, our iterator just for our config file
+/// let config = iter::once_with(|| PathBuf::from(".foorc"));
+///
+/// // chain the two iterators together into one big iterator
+/// let files = dirs.chain(config);
+///
+/// // this will give us all of the files in .foo as well as .foorc
+/// for f in files {
+/// println!("{:?}", f);
+/// }
+/// ```
+#[inline]
+#[unstable(feature = "iter_once_with", issue = "57581")]
+pub fn once_with<A, F: FnOnce() -> A>(gen: F) -> OnceWith<F> {
+ OnceWith { gen: Some(gen) }
+}
+
/// Creates a new iterator where each iteration calls the provided closure
/// `F: FnMut(&mut St) -> Option<T>`.
///
diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs
index 8879112..33c0da8 100644
--- a/src/libcore/lib.rs
+++ b/src/libcore/lib.rs
@@ -79,6 +79,7 @@
#![feature(extern_types)]
#![feature(fundamental)]
#![feature(intrinsics)]
+#![feature(iter_once_with)]
#![feature(lang_items)]
#![feature(link_llvm_intrinsics)]
#![feature(never_type)]
diff --git a/src/libcore/ops/index.rs b/src/libcore/ops/index.rs
index 4f55c68..6cfa367 100644
--- a/src/libcore/ops/index.rs
+++ b/src/libcore/ops/index.rs
@@ -51,6 +51,21 @@
/// ```
#[lang = "index"]
#[rustc_on_unimplemented(
+ on(
+ _Self="&str",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
+ on(
+ _Self="str",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
+ on(
+ _Self="std::string::String",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
message="the type `{Self}` cannot be indexed by `{Idx}`",
label="`{Self}` cannot be indexed by `{Idx}`",
)]
@@ -141,6 +156,21 @@
/// ```
#[lang = "index_mut"]
#[rustc_on_unimplemented(
+ on(
+ _Self="&str",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
+ on(
+ _Self="str",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
+ on(
+ _Self="std::string::String",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
message="the type `{Self}` cannot be mutably indexed by `{Idx}`",
label="`{Self}` cannot be mutably indexed by `{Idx}`",
)]
diff --git a/src/libcore/pin.rs b/src/libcore/pin.rs
index 762e075..7c09a36 100644
--- a/src/libcore/pin.rs
+++ b/src/libcore/pin.rs
@@ -99,6 +99,7 @@
use fmt;
use marker::{Sized, Unpin};
+use cmp::{self, PartialEq, PartialOrd};
use ops::{Deref, DerefMut, Receiver, CoerceUnsized, DispatchFromDyn};
/// A pinned pointer.
@@ -112,16 +113,57 @@
/// [`Unpin`]: ../../std/marker/trait.Unpin.html
/// [`pin` module]: ../../std/pin/index.html
//
-// Note: the derives below are allowed because they all only use `&P`, so they
-// cannot move the value behind `pointer`.
+// Note: the derives below, and the explicit `PartialEq` and `PartialOrd`
+// implementations, are allowed because they all only use `&P`, so they cannot move
+// the value behind `pointer`.
#[stable(feature = "pin", since = "1.33.0")]
#[fundamental]
#[repr(transparent)]
-#[derive(Copy, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
+#[derive(Copy, Clone, Hash, Eq, Ord)]
pub struct Pin<P> {
pointer: P,
}
+#[stable(feature = "pin_partialeq_partialord_impl_applicability", since = "1.34.0")]
+impl<P, Q> PartialEq<Pin<Q>> for Pin<P>
+where
+ P: PartialEq<Q>,
+{
+ fn eq(&self, other: &Pin<Q>) -> bool {
+ self.pointer == other.pointer
+ }
+
+ fn ne(&self, other: &Pin<Q>) -> bool {
+ self.pointer != other.pointer
+ }
+}
+
+#[stable(feature = "pin_partialeq_partialord_impl_applicability", since = "1.34.0")]
+impl<P, Q> PartialOrd<Pin<Q>> for Pin<P>
+where
+ P: PartialOrd<Q>,
+{
+ fn partial_cmp(&self, other: &Pin<Q>) -> Option<cmp::Ordering> {
+ self.pointer.partial_cmp(&other.pointer)
+ }
+
+ fn lt(&self, other: &Pin<Q>) -> bool {
+ self.pointer < other.pointer
+ }
+
+ fn le(&self, other: &Pin<Q>) -> bool {
+ self.pointer <= other.pointer
+ }
+
+ fn gt(&self, other: &Pin<Q>) -> bool {
+ self.pointer > other.pointer
+ }
+
+ fn ge(&self, other: &Pin<Q>) -> bool {
+ self.pointer >= other.pointer
+ }
+}
+
impl<P: Deref> Pin<P>
where
P::Target: Unpin,
diff --git a/src/libcore/slice/memchr.rs b/src/libcore/slice/memchr.rs
index 0f1bc41..312838a 100644
--- a/src/libcore/slice/memchr.rs
+++ b/src/libcore/slice/memchr.rs
@@ -1,5 +1,4 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
use cmp;
@@ -8,13 +7,13 @@
const LO_U64: u64 = 0x0101010101010101;
const HI_U64: u64 = 0x8080808080808080;
-// use truncation
+// Use truncation.
const LO_USIZE: usize = LO_U64 as usize;
const HI_USIZE: usize = HI_U64 as usize;
-/// Return `true` if `x` contains any zero byte.
+/// Returns whether `x` contains any zero byte.
///
-/// From *Matters Computational*, J. Arndt
+/// From *Matters Computational*, J. Arndt:
///
/// "The idea is to subtract one from each of the bytes and then look for
/// bytes where the borrow propagated all the way to the most significant
@@ -36,7 +35,7 @@
(b as usize) * (::usize::MAX / 255)
}
-/// Return the first index matching the byte `x` in `text`.
+/// Returns the first index matching the byte `x` in `text`.
pub fn memchr(x: u8, text: &[u8]) -> Option<usize> {
// Scan for a single byte value by reading two `usize` words at a time.
//
@@ -77,18 +76,18 @@
}
}
- // find the byte after the point the body loop stopped
+ // Find the byte after the point the body loop stopped.
text[offset..].iter().position(|elt| *elt == x).map(|i| offset + i)
}
-/// Return the last index matching the byte `x` in `text`.
+/// Returns the last index matching the byte `x` in `text`.
pub fn memrchr(x: u8, text: &[u8]) -> Option<usize> {
// Scan for a single byte value by reading two `usize` words at a time.
//
- // Split `text` in three parts
- // - unaligned tail, after the last word aligned address in text
- // - body, scan by 2 words at a time
- // - the first remaining bytes, < 2 word size
+ // Split `text` in three parts:
+ // - unaligned tail, after the last word aligned address in text,
+ // - body, scanned by 2 words at a time,
+ // - the first remaining bytes, < 2 word size.
let len = text.len();
let ptr = text.as_ptr();
type Chunk = usize;
@@ -105,7 +104,7 @@
return Some(offset + index);
}
- // search the body of the text, make sure we don't cross min_aligned_offset.
+ // Search the body of the text, make sure we don't cross min_aligned_offset.
// offset is always aligned, so just testing `>` is sufficient and avoids possible
// overflow.
let repeated_x = repeat_byte(x);
@@ -116,7 +115,7 @@
let u = *(ptr.offset(offset as isize - 2 * chunk_bytes as isize) as *const Chunk);
let v = *(ptr.offset(offset as isize - chunk_bytes as isize) as *const Chunk);
- // break if there is a matching byte
+ // Break if there is a matching byte.
let zu = contains_zero_byte(u ^ repeated_x);
let zv = contains_zero_byte(v ^ repeated_x);
if zu || zv {
@@ -126,6 +125,6 @@
offset -= 2 * chunk_bytes;
}
- // find the byte before the point the body loop stopped
+ // Find the byte before the point the body loop stopped.
text[..offset].iter().rposition(|elt| *elt == x)
}
diff --git a/src/libcore/sync/atomic.rs b/src/libcore/sync/atomic.rs
index 99e6365..8992e51 100644
--- a/src/libcore/sync/atomic.rs
+++ b/src/libcore/sync/atomic.rs
@@ -84,6 +84,8 @@
use cell::UnsafeCell;
use fmt;
+use hint::spin_loop;
+
/// Save power or switch hyperthreads in a busy-wait spin-loop.
///
/// This function is deliberately more primitive than
@@ -96,15 +98,7 @@
#[inline]
#[stable(feature = "spin_loop_hint", since = "1.24.0")]
pub fn spin_loop_hint() {
- #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
- unsafe {
- asm!("pause" ::: "memory" : "volatile");
- }
-
- #[cfg(target_arch = "aarch64")]
- unsafe {
- asm!("yield" ::: "memory" : "volatile");
- }
+ spin_loop()
}
/// A boolean type which can be safely shared between threads.
diff --git a/src/libcore/tests/iter.rs b/src/libcore/tests/iter.rs
index cf19851..3944bc7 100644
--- a/src/libcore/tests/iter.rs
+++ b/src/libcore/tests/iter.rs
@@ -1,3 +1,4 @@
+use core::cell::Cell;
use core::iter::*;
use core::{i8, i16, isize};
use core::usize;
@@ -1907,6 +1908,23 @@
}
#[test]
+fn test_once_with() {
+ let count = Cell::new(0);
+ let mut it = once_with(|| {
+ count.set(count.get() + 1);
+ 42
+ });
+
+ assert_eq!(count.get(), 0);
+ assert_eq!(it.next(), Some(42));
+ assert_eq!(count.get(), 1);
+ assert_eq!(it.next(), None);
+ assert_eq!(count.get(), 1);
+ assert_eq!(it.next(), None);
+ assert_eq!(count.get(), 1);
+}
+
+#[test]
fn test_empty() {
let mut it = empty::<i32>();
assert_eq!(it.next(), None);
diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs
index 72846da..a9b8dec 100644
--- a/src/libcore/tests/lib.rs
+++ b/src/libcore/tests/lib.rs
@@ -12,6 +12,7 @@
#![feature(hashmap_internals)]
#![feature(iter_copied)]
#![feature(iter_nth_back)]
+#![feature(iter_once_with)]
#![feature(iter_unfold)]
#![feature(pattern)]
#![feature(range_is_empty)]
diff --git a/src/libpanic_abort/lib.rs b/src/libpanic_abort/lib.rs
index d8dd2e0..8832a16 100644
--- a/src/libpanic_abort/lib.rs
+++ b/src/libpanic_abort/lib.rs
@@ -12,7 +12,7 @@
#![panic_runtime]
#![allow(unused_features)]
-#![feature(cfg_target_vendor)]
+#![cfg_attr(stage0, feature(cfg_target_vendor))]
#![feature(core_intrinsics)]
#![feature(libc)]
#![feature(nll)]
diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs
index 3156f17..4cfebaa 100644
--- a/src/librustc/dep_graph/dep_node.rs
+++ b/src/librustc/dep_graph/dep_node.rs
@@ -472,6 +472,15 @@
[] UnsafetyCheckResult(DefId),
[] UnsafeDeriveOnReprPacked(DefId),
+ [] CheckModAttrs(DefId),
+ [] CheckModLoops(DefId),
+ [] CheckModUnstableApiUsage(DefId),
+ [] CheckModItemTypes(DefId),
+ [] CheckModPrivacy(DefId),
+ [] CheckModIntrinsics(DefId),
+ [] CheckModLiveness(DefId),
+ [] CollectModItemTypes(DefId),
+
[] Reachability,
[] MirKeys,
[eval_always] CrateVariances,
@@ -577,6 +586,7 @@
[] CheckImplItemWellFormed(DefId),
[] ReachableNonGenerics(CrateNum),
[] NativeLibraries(CrateNum),
+ [] EntryFn(CrateNum),
[] PluginRegistrarFn(CrateNum),
[] ProcMacroDeclsStatic(CrateNum),
[input] CrateDisambiguator(CrateNum),
@@ -624,6 +634,7 @@
[input] Freevars(DefId),
[input] MaybeUnusedTraitImport(DefId),
[input] MaybeUnusedExternCrates,
+ [input] NamesImportedByGlobUse(DefId),
[eval_always] StabilityIndex,
[eval_always] AllTraits,
[input] AllCrateNums,
diff --git a/src/librustc/dep_graph/graph.rs b/src/librustc/dep_graph/graph.rs
index 71cacfe..a9e80dd 100644
--- a/src/librustc/dep_graph/graph.rs
+++ b/src/librustc/dep_graph/graph.rs
@@ -3,7 +3,7 @@
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
use smallvec::SmallVec;
-use rustc_data_structures::sync::{Lrc, Lock};
+use rustc_data_structures::sync::{Lrc, Lock, AtomicU32, Ordering};
use std::env;
use std::hash::Hash;
use std::collections::hash_map::Entry;
@@ -58,7 +58,7 @@
/// nodes and edges as well as all fingerprints of nodes that have them.
previous: PreviousDepGraph,
- colors: Lock<DepNodeColorMap>,
+ colors: DepNodeColorMap,
/// When we load, there may be `.o` files, cached mir, or other such
/// things available to us. If we find that they are not dirty, we
@@ -84,7 +84,7 @@
dep_node_debug: Default::default(),
current: Lock::new(CurrentDepGraph::new(prev_graph_node_count)),
previous: prev_graph,
- colors: Lock::new(DepNodeColorMap::new(prev_graph_node_count)),
+ colors: DepNodeColorMap::new(prev_graph_node_count),
loaded_from_cache: Default::default(),
})),
}
@@ -282,12 +282,11 @@
DepNodeColor::Red
};
- let mut colors = data.colors.borrow_mut();
- debug_assert!(colors.get(prev_index).is_none(),
+ debug_assert!(data.colors.get(prev_index).is_none(),
"DepGraph::with_task() - Duplicate DepNodeColor \
insertion for {:?}", key);
- colors.insert(prev_index, color);
+ data.colors.insert(prev_index, color);
}
(result, dep_node_index)
@@ -502,7 +501,7 @@
pub fn node_color(&self, dep_node: &DepNode) -> Option<DepNodeColor> {
if let Some(ref data) = self.data {
if let Some(prev_index) = data.previous.node_to_index_opt(dep_node) {
- return data.colors.borrow().get(prev_index)
+ return data.colors.get(prev_index)
} else {
// This is a node that did not exist in the previous compilation
// session, so we consider it to be red.
@@ -513,56 +512,89 @@
None
}
- pub fn try_mark_green<'tcx>(&self,
- tcx: TyCtxt<'_, 'tcx, 'tcx>,
- dep_node: &DepNode)
- -> Option<DepNodeIndex> {
- debug!("try_mark_green({:?}) - BEGIN", dep_node);
- let data = self.data.as_ref().unwrap();
+ /// Try to read a node index for the node dep_node.
+ /// A node will have an index, when it's already been marked green, or when we can mark it
+ /// green. This function will mark the current task as a reader of the specified node, when
+ /// a node index can be found for that node.
+ pub fn try_mark_green_and_read(
+ &self,
+ tcx: TyCtxt<'_, '_, '_>,
+ dep_node: &DepNode
+ ) -> Option<(SerializedDepNodeIndex, DepNodeIndex)> {
+ self.try_mark_green(tcx, dep_node).map(|(prev_index, dep_node_index)| {
+ debug_assert!(self.is_green(&dep_node));
+ self.read_index(dep_node_index);
+ (prev_index, dep_node_index)
+ })
+ }
- #[cfg(not(parallel_queries))]
- debug_assert!(!data.current.borrow().node_to_node_index.contains_key(dep_node));
+ pub fn try_mark_green(
+ &self,
+ tcx: TyCtxt<'_, '_, '_>,
+ dep_node: &DepNode
+ ) -> Option<(SerializedDepNodeIndex, DepNodeIndex)> {
+ debug_assert!(!dep_node.kind.is_input());
- if dep_node.kind.is_input() {
- // We should only hit try_mark_green() for inputs that do not exist
- // anymore in the current compilation session. Existing inputs are
- // eagerly marked as either red/green before any queries are
- // executed.
- debug_assert!(dep_node.extract_def_id(tcx).is_none());
- debug!("try_mark_green({:?}) - END - DepNode is deleted input", dep_node);
- return None;
- }
+ // Return None if the dep graph is disabled
+ let data = self.data.as_ref()?;
- let (prev_deps, prev_dep_node_index) = match data.previous.edges_from(dep_node) {
- Some(prev) => {
+ // Return None if the dep node didn't exist in the previous session
+ let prev_index = data.previous.node_to_index_opt(dep_node)?;
+
+ match data.colors.get(prev_index) {
+ Some(DepNodeColor::Green(dep_node_index)) => Some((prev_index, dep_node_index)),
+ Some(DepNodeColor::Red) => None,
+ None => {
// This DepNode and the corresponding query invocation existed
// in the previous compilation session too, so we can try to
// mark it as green by recursively marking all of its
// dependencies green.
- prev
+ self.try_mark_previous_green(
+ tcx.global_tcx(),
+ data,
+ prev_index,
+ &dep_node
+ ).map(|dep_node_index| {
+ (prev_index, dep_node_index)
+ })
}
- None => {
- // This DepNode did not exist in the previous compilation session,
- // so we cannot mark it as green.
- debug!("try_mark_green({:?}) - END - DepNode does not exist in \
- current compilation session anymore", dep_node);
- return None
- }
- };
+ }
+ }
- debug_assert!(data.colors.borrow().get(prev_dep_node_index).is_none());
+ /// Try to mark a dep-node which existed in the previous compilation session as green
+ fn try_mark_previous_green<'tcx>(
+ &self,
+ tcx: TyCtxt<'_, 'tcx, 'tcx>,
+ data: &DepGraphData,
+ prev_dep_node_index: SerializedDepNodeIndex,
+ dep_node: &DepNode
+ ) -> Option<DepNodeIndex> {
+ debug!("try_mark_previous_green({:?}) - BEGIN", dep_node);
+
+ #[cfg(not(parallel_queries))]
+ {
+ debug_assert!(!data.current.borrow().node_to_node_index.contains_key(dep_node));
+ debug_assert!(data.colors.get(prev_dep_node_index).is_none());
+ }
+
+ // We never try to mark inputs as green
+ debug_assert!(!dep_node.kind.is_input());
+
+ debug_assert_eq!(data.previous.index_to_node(prev_dep_node_index), *dep_node);
+
+ let prev_deps = data.previous.edge_targets_from(prev_dep_node_index);
let mut current_deps = SmallVec::new();
for &dep_dep_node_index in prev_deps {
- let dep_dep_node_color = data.colors.borrow().get(dep_dep_node_index);
+ let dep_dep_node_color = data.colors.get(dep_dep_node_index);
match dep_dep_node_color {
Some(DepNodeColor::Green(node_index)) => {
// This dependency has been marked as green before, we are
// still fine and can continue with checking the other
// dependencies.
- debug!("try_mark_green({:?}) --- found dependency {:?} to \
+ debug!("try_mark_previous_green({:?}) --- found dependency {:?} to \
be immediately green",
dep_node,
data.previous.index_to_node(dep_dep_node_index));
@@ -573,7 +605,7 @@
// compared to the previous compilation session. We cannot
// mark the DepNode as green and also don't need to bother
// with checking any of the other dependencies.
- debug!("try_mark_green({:?}) - END - dependency {:?} was \
+ debug!("try_mark_previous_green({:?}) - END - dependency {:?} was \
immediately red",
dep_node,
data.previous.index_to_node(dep_dep_node_index));
@@ -585,12 +617,18 @@
// We don't know the state of this dependency. If it isn't
// an input node, let's try to mark it green recursively.
if !dep_dep_node.kind.is_input() {
- debug!("try_mark_green({:?}) --- state of dependency {:?} \
+ debug!("try_mark_previous_green({:?}) --- state of dependency {:?} \
is unknown, trying to mark it green", dep_node,
dep_dep_node);
- if let Some(node_index) = self.try_mark_green(tcx, dep_dep_node) {
- debug!("try_mark_green({:?}) --- managed to MARK \
+ let node_index = self.try_mark_previous_green(
+ tcx,
+ data,
+ dep_dep_node_index,
+ dep_dep_node
+ );
+ if let Some(node_index) = node_index {
+ debug!("try_mark_previous_green({:?}) --- managed to MARK \
dependency {:?} as green", dep_node, dep_dep_node);
current_deps.push(node_index);
continue;
@@ -600,7 +638,7 @@
DepKind::Hir |
DepKind::HirBody |
DepKind::CrateMetadata => {
- if dep_node.extract_def_id(tcx).is_none() {
+ if dep_dep_node.extract_def_id(tcx).is_none() {
// If the node does not exist anymore, we
// just fail to mark green.
return None
@@ -620,20 +658,20 @@
}
// We failed to mark it green, so we try to force the query.
- debug!("try_mark_green({:?}) --- trying to force \
+ debug!("try_mark_previous_green({:?}) --- trying to force \
dependency {:?}", dep_node, dep_dep_node);
if ::ty::query::force_from_dep_node(tcx, dep_dep_node) {
- let dep_dep_node_color = data.colors.borrow().get(dep_dep_node_index);
+ let dep_dep_node_color = data.colors.get(dep_dep_node_index);
match dep_dep_node_color {
Some(DepNodeColor::Green(node_index)) => {
- debug!("try_mark_green({:?}) --- managed to \
+ debug!("try_mark_previous_green({:?}) --- managed to \
FORCE dependency {:?} to green",
dep_node, dep_dep_node);
current_deps.push(node_index);
}
Some(DepNodeColor::Red) => {
- debug!("try_mark_green({:?}) - END - \
+ debug!("try_mark_previous_green({:?}) - END - \
dependency {:?} was red after forcing",
dep_node,
dep_dep_node);
@@ -641,7 +679,7 @@
}
None => {
if !tcx.sess.has_errors() {
- bug!("try_mark_green() - Forcing the DepNode \
+ bug!("try_mark_previous_green() - Forcing the DepNode \
should have set its color")
} else {
// If the query we just forced has resulted
@@ -653,7 +691,7 @@
}
} else {
// The DepNode could not be forced.
- debug!("try_mark_green({:?}) - END - dependency {:?} \
+ debug!("try_mark_previous_green({:?}) - END - dependency {:?} \
could not be forced", dep_node, dep_dep_node);
return None
}
@@ -696,7 +734,7 @@
// Promote the previous diagnostics to the current session.
tcx.queries.on_disk_cache
- .store_diagnostics(dep_node_index, diagnostics.clone());
+ .store_diagnostics(dep_node_index, diagnostics.clone().into());
for diagnostic in diagnostics {
DiagnosticBuilder::new_diagnostic(handle, diagnostic).emit();
@@ -705,16 +743,15 @@
}
// ... and finally storing a "Green" entry in the color map.
- let mut colors = data.colors.borrow_mut();
// Multiple threads can all write the same color here
#[cfg(not(parallel_queries))]
- debug_assert!(colors.get(prev_dep_node_index).is_none(),
- "DepGraph::try_mark_green() - Duplicate DepNodeColor \
+ debug_assert!(data.colors.get(prev_dep_node_index).is_none(),
+ "DepGraph::try_mark_previous_green() - Duplicate DepNodeColor \
insertion for {:?}", dep_node);
- colors.insert(prev_dep_node_index, DepNodeColor::Green(dep_node_index));
+ data.colors.insert(prev_dep_node_index, DepNodeColor::Green(dep_node_index));
- debug!("try_mark_green({:?}) - END - successfully marked as green", dep_node);
+ debug!("try_mark_previous_green({:?}) - END - successfully marked as green", dep_node);
Some(dep_node_index)
}
@@ -735,9 +772,8 @@
pub fn exec_cache_promotions<'a, 'tcx>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>) {
let green_nodes: Vec<DepNode> = {
let data = self.data.as_ref().unwrap();
- let colors = data.colors.borrow();
- colors.values.indices().filter_map(|prev_index| {
- match colors.get(prev_index) {
+ data.colors.values.indices().filter_map(|prev_index| {
+ match data.colors.get(prev_index) {
Some(DepNodeColor::Green(_)) => {
let dep_node = data.previous.index_to_node(prev_index);
if dep_node.cache_on_disk(tcx) {
@@ -1035,7 +1071,7 @@
// A data structure that stores Option<DepNodeColor> values as a contiguous
// array, using one u32 per entry.
struct DepNodeColorMap {
- values: IndexVec<SerializedDepNodeIndex, u32>,
+ values: IndexVec<SerializedDepNodeIndex, AtomicU32>,
}
const COMPRESSED_NONE: u32 = 0;
@@ -1045,12 +1081,12 @@
impl DepNodeColorMap {
fn new(size: usize) -> DepNodeColorMap {
DepNodeColorMap {
- values: IndexVec::from_elem_n(COMPRESSED_NONE, size)
+ values: (0..size).map(|_| AtomicU32::new(COMPRESSED_NONE)).collect(),
}
}
fn get(&self, index: SerializedDepNodeIndex) -> Option<DepNodeColor> {
- match self.values[index] {
+ match self.values[index].load(Ordering::Acquire) {
COMPRESSED_NONE => None,
COMPRESSED_RED => Some(DepNodeColor::Red),
value => Some(DepNodeColor::Green(DepNodeIndex::from_u32(
@@ -1059,10 +1095,10 @@
}
}
- fn insert(&mut self, index: SerializedDepNodeIndex, color: DepNodeColor) {
- self.values[index] = match color {
+ fn insert(&self, index: SerializedDepNodeIndex, color: DepNodeColor) {
+ self.values[index].store(match color {
DepNodeColor::Red => COMPRESSED_RED,
DepNodeColor::Green(index) => index.as_u32() + COMPRESSED_FIRST_GREEN,
- }
+ }, Ordering::Release)
}
}
diff --git a/src/librustc/dep_graph/prev.rs b/src/librustc/dep_graph/prev.rs
index 76d2954..ea5350a 100644
--- a/src/librustc/dep_graph/prev.rs
+++ b/src/librustc/dep_graph/prev.rs
@@ -19,14 +19,11 @@
}
#[inline]
- pub fn edges_from(&self,
- dep_node: &DepNode)
- -> Option<(&[SerializedDepNodeIndex], SerializedDepNodeIndex)> {
- self.index
- .get(dep_node)
- .map(|&node_index| {
- (self.data.edge_targets_from(node_index), node_index)
- })
+ pub fn edge_targets_from(
+ &self,
+ dep_node_index: SerializedDepNodeIndex
+ ) -> &[SerializedDepNodeIndex] {
+ self.data.edge_targets_from(dep_node_index)
}
#[inline]
diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs
index 4bc52e8..287a45a 100644
--- a/src/librustc/diagnostics.rs
+++ b/src/librustc/diagnostics.rs
@@ -1180,27 +1180,6 @@
```
"##,
-E0296: r##"
-This error indicates that the given recursion limit could not be parsed. Ensure
-that the value provided is a positive integer between quotes.
-
-Erroneous code example:
-
-```compile_fail,E0296
-#![recursion_limit]
-
-fn main() {}
-```
-
-And a working example:
-
-```
-#![recursion_limit="1000"]
-
-fn main() {}
-```
-"##,
-
E0308: r##"
This error occurs when the compiler was unable to infer the concrete type of a
variable. It can occur for several cases, the most common of which is a
@@ -2093,20 +2072,6 @@
```
"##,
-E0702: r##"
-This error indicates that a `#[non_exhaustive]` attribute had a value. The
-`#[non_exhaustive]` should be empty.
-
-Examples of erroneous code:
-
-```compile_fail,E0702
-# #![feature(non_exhaustive)]
-
-#[non_exhaustive(anything)]
-struct Foo;
-```
-"##,
-
E0718: r##"
This error indicates that a `#[lang = ".."]` attribute was placed
on the wrong type of item.
@@ -2138,6 +2103,7 @@
E0280, // requirement is not satisfied
E0284, // cannot resolve type
// E0285, // overflow evaluation builtin bounds
+// E0296, // replaced with a generic attribute input check
// E0300, // unexpanded macro
// E0304, // expected signed integer constant
// E0305, // expected constant
@@ -2180,4 +2146,5 @@
E0709, // multiple different lifetimes used in arguments of `async fn`
E0710, // an unknown tool name found in scoped lint
E0711, // a feature has been declared with conflicting stability attributes
+// E0702, // replaced with a generic attribute input check
}
diff --git a/src/librustc/hir/check_attr.rs b/src/librustc/hir/check_attr.rs
index 2e0e967..b4a0071 100644
--- a/src/librustc/hir/check_attr.rs
+++ b/src/librustc/hir/check_attr.rs
@@ -4,9 +4,14 @@
//! conflicts between multiple such attributes attached to the same
//! item.
-use hir;
-use hir::intravisit::{self, Visitor, NestedVisitorMap};
+
use ty::TyCtxt;
+use ty::query::Providers;
+use ty::query::queries;
+
+use hir;
+use hir::def_id::DefId;
+use hir::intravisit::{self, Visitor, NestedVisitorMap};
use std::fmt::{self, Display};
use syntax_pos::Span;
@@ -137,15 +142,6 @@
return;
}
}
-
- if attr.meta_item_list().is_some() || attr.value_str().is_some() {
- struct_span_err!(self.tcx.sess,
- attr.span,
- E0702,
- "attribute should be empty")
- .span_label(item.span, "not empty")
- .emit();
- }
}
/// Check if the `#[marker]` attribute on an `item` is valid.
@@ -160,12 +156,6 @@
return;
}
}
-
- if !attr.is_word() {
- self.tcx.sess
- .struct_span_err(attr.span, "attribute should be empty")
- .emit();
- }
}
/// Check if the `#[repr]` attributes on `item` are valid.
@@ -364,8 +354,9 @@
}
pub fn check_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
- let mut checker = CheckAttrVisitor { tcx };
- tcx.hir().krate().visit_all_item_likes(&mut checker.as_deep_visitor());
+ for &module in tcx.hir().krate().modules.keys() {
+ queries::check_mod_attrs::ensure(tcx, tcx.hir().local_def_id(module));
+ }
}
fn is_c_like_enum(item: &hir::Item) -> bool {
@@ -381,3 +372,17 @@
false
}
}
+
+fn check_mod_attrs<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
+ tcx.hir().visit_item_likes_in_module(
+ module_def_id,
+ &mut CheckAttrVisitor { tcx }.as_deep_visitor()
+ );
+}
+
+pub(crate) fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ check_mod_attrs,
+ ..*providers
+ };
+}
diff --git a/src/librustc/hir/def.rs b/src/librustc/hir/def.rs
index 2382a2e..8a74c51 100644
--- a/src/librustc/hir/def.rs
+++ b/src/librustc/hir/def.rs
@@ -284,7 +284,7 @@
}
}
- /// A human readable kind name
+ /// A human readable name for the def kind ("function", "module", etc.).
pub fn kind_name(&self) -> &'static str {
match *self {
Def::Fn(..) => "function",
@@ -324,6 +324,7 @@
}
}
+ /// An English article for the def.
pub fn article(&self) -> &'static str {
match *self {
Def::AssociatedTy(..) | Def::AssociatedConst(..) | Def::AssociatedExistential(..) |
diff --git a/src/librustc/hir/def_id.rs b/src/librustc/hir/def_id.rs
index 0a8c72a..9181076 100644
--- a/src/librustc/hir/def_id.rs
+++ b/src/librustc/hir/def_id.rs
@@ -1,4 +1,5 @@
use ty;
+use ty::TyCtxt;
use hir::map::definitions::FIRST_FREE_HIGH_DEF_INDEX;
use rustc_data_structures::indexed_vec::Idx;
use serialize;
@@ -243,6 +244,14 @@
pub fn to_local(self) -> LocalDefId {
LocalDefId::from_def_id(self)
}
+
+ pub fn describe_as_module(&self, tcx: TyCtxt<'_, '_, '_>) -> String {
+ if self.is_local() && self.index == CRATE_DEF_INDEX {
+ format!("top-level module")
+ } else {
+ format!("module `{}`", tcx.item_path_str(*self))
+ }
+ }
}
impl serialize::UseSpecializedEncodable for DefId {}
diff --git a/src/librustc/hir/intravisit.rs b/src/librustc/hir/intravisit.rs
index d4f891c..041291e 100644
--- a/src/librustc/hir/intravisit.rs
+++ b/src/librustc/hir/intravisit.rs
@@ -35,20 +35,18 @@
use syntax_pos::Span;
use hir::*;
use hir::def::Def;
-use hir::map::{self, Map};
+use hir::map::Map;
use super::itemlikevisit::DeepVisitor;
-use std::cmp;
-
#[derive(Copy, Clone)]
pub enum FnKind<'a> {
- /// #[xxx] pub async/const/extern "Abi" fn foo()
- ItemFn(Name, &'a Generics, FnHeader, &'a Visibility, &'a [Attribute]),
+ /// `#[xxx] pub async/const/extern "Abi" fn foo()`
+ ItemFn(Ident, &'a Generics, FnHeader, &'a Visibility, &'a [Attribute]),
- /// fn foo(&self)
+ /// `fn foo(&self)`
Method(Ident, &'a MethodSig, Option<&'a Visibility>, &'a [Attribute]),
- /// |x, y| {}
+ /// `|x, y| {}`
Closure(&'a [Attribute]),
}
@@ -472,7 +470,7 @@
visitor.visit_nested_body(body);
}
ItemKind::Fn(ref declaration, header, ref generics, body_id) => {
- visitor.visit_fn(FnKind::ItemFn(item.ident.name,
+ visitor.visit_fn(FnKind::ItemFn(item.ident,
generics,
header,
&item.vis,
@@ -1133,57 +1131,3 @@
// the right thing to do, should content be added in the future,
// would be to walk it.
}
-
-#[derive(Copy, Clone, RustcEncodable, RustcDecodable, Debug)]
-pub struct IdRange {
- pub min: NodeId,
- pub max: NodeId,
-}
-
-impl IdRange {
- pub fn max() -> IdRange {
- IdRange {
- min: NodeId::MAX,
- max: NodeId::from_u32(0),
- }
- }
-
- pub fn empty(&self) -> bool {
- self.min >= self.max
- }
-
- pub fn contains(&self, id: NodeId) -> bool {
- id >= self.min && id < self.max
- }
-
- pub fn add(&mut self, id: NodeId) {
- self.min = cmp::min(self.min, id);
- self.max = cmp::max(self.max, NodeId::from_u32(id.as_u32() + 1));
- }
-}
-
-
-pub struct IdRangeComputingVisitor<'a, 'hir: 'a> {
- result: IdRange,
- map: &'a map::Map<'hir>,
-}
-
-impl<'a, 'hir> IdRangeComputingVisitor<'a, 'hir> {
- pub fn new(map: &'a map::Map<'hir>) -> IdRangeComputingVisitor<'a, 'hir> {
- IdRangeComputingVisitor { result: IdRange::max(), map: map }
- }
-
- pub fn result(&self) -> IdRange {
- self.result
- }
-}
-
-impl<'a, 'hir> Visitor<'hir> for IdRangeComputingVisitor<'a, 'hir> {
- fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'hir> {
- NestedVisitorMap::OnlyBodies(&self.map)
- }
-
- fn visit_id(&mut self, id: NodeId) {
- self.result.add(id);
- }
-}
diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs
index 359bd37..8cdc493 100644
--- a/src/librustc/hir/lowering.rs
+++ b/src/librustc/hir/lowering.rs
@@ -48,7 +48,7 @@
use util::common::FN_OUTPUT_NAME;
use util::nodemap::{DefIdMap, NodeMap};
-use std::collections::BTreeMap;
+use std::collections::{BTreeSet, BTreeMap};
use std::fmt::Debug;
use std::mem;
use smallvec::SmallVec;
@@ -90,6 +90,8 @@
trait_impls: BTreeMap<DefId, Vec<NodeId>>,
trait_auto_impl: BTreeMap<DefId, NodeId>,
+ modules: BTreeMap<NodeId, hir::ModuleItems>,
+
is_generator: bool,
catch_scopes: Vec<NodeId>,
@@ -124,6 +126,8 @@
// needs to be created for it.
in_scope_lifetimes: Vec<Ident>,
+ current_module: NodeId,
+
type_def_lifetime_params: DefIdMap<usize>,
current_hir_id_owner: Vec<(DefIndex, u32)>,
@@ -228,12 +232,14 @@
bodies: BTreeMap::new(),
trait_impls: BTreeMap::new(),
trait_auto_impl: BTreeMap::new(),
+ modules: BTreeMap::new(),
exported_macros: Vec::new(),
catch_scopes: Vec::new(),
loop_scopes: Vec::new(),
is_in_loop_condition: false,
anonymous_lifetime_mode: AnonymousLifetimeMode::PassThrough,
type_def_lifetime_params: Default::default(),
+ current_module: CRATE_NODE_ID,
current_hir_id_owner: vec![(CRATE_DEF_INDEX, 0)],
item_local_id_counters: Default::default(),
node_id_to_hir_id: IndexVec::new(),
@@ -414,11 +420,24 @@
}
impl<'lcx, 'interner> Visitor<'lcx> for ItemLowerer<'lcx, 'interner> {
+ fn visit_mod(&mut self, m: &'lcx Mod, _s: Span, _attrs: &[Attribute], n: NodeId) {
+ self.lctx.modules.insert(n, hir::ModuleItems {
+ items: BTreeSet::new(),
+ trait_items: BTreeSet::new(),
+ impl_items: BTreeSet::new(),
+ });
+
+ let old = self.lctx.current_module;
+ self.lctx.current_module = n;
+ visit::walk_mod(self, m);
+ self.lctx.current_module = old;
+ }
+
fn visit_item(&mut self, item: &'lcx Item) {
let mut item_lowered = true;
self.lctx.with_hir_id_owner(item.id, |lctx| {
if let Some(hir_item) = lctx.lower_item(item) {
- lctx.items.insert(item.id, hir_item);
+ lctx.insert_item(item.id, hir_item);
} else {
item_lowered = false;
}
@@ -451,6 +470,7 @@
let id = hir::TraitItemId { node_id: item.id };
let hir_item = lctx.lower_trait_item(item);
lctx.trait_items.insert(id, hir_item);
+ lctx.modules.get_mut(&lctx.current_module).unwrap().trait_items.insert(id);
});
visit::walk_trait_item(self, item);
@@ -461,6 +481,7 @@
let id = hir::ImplItemId { node_id: item.id };
let hir_item = lctx.lower_impl_item(item);
lctx.impl_items.insert(id, hir_item);
+ lctx.modules.get_mut(&lctx.current_module).unwrap().impl_items.insert(id);
});
visit::walk_impl_item(self, item);
}
@@ -492,9 +513,15 @@
body_ids,
trait_impls: self.trait_impls,
trait_auto_impl: self.trait_auto_impl,
+ modules: self.modules,
}
}
+ fn insert_item(&mut self, id: NodeId, item: hir::Item) {
+ self.items.insert(id, item);
+ self.modules.get_mut(&self.current_module).unwrap().items.insert(id);
+ }
+
fn allocate_hir_id_counter<T: Debug>(&mut self, owner: NodeId, debug: &T) -> LoweredNodeId {
if self.item_local_id_counters.insert(owner, 0).is_some() {
bug!(
@@ -1370,7 +1397,7 @@
// Insert the item into the global list. This usually happens
// automatically for all AST items. But this existential type item
// does not actually exist in the AST.
- lctx.items.insert(exist_ty_id.node_id, exist_ty_item);
+ lctx.insert_item(exist_ty_id.node_id, exist_ty_item);
// `impl Trait` now just becomes `Foo<'a, 'b, ..>`.
hir::TyKind::Def(hir::ItemId { id: exist_ty_id.node_id }, lifetimes)
@@ -3026,7 +3053,7 @@
};
let vis = respan(vis.span, vis_kind);
- this.items.insert(
+ this.insert_item(
new_id.node_id,
hir::Item {
id: new_id.node_id,
@@ -3133,7 +3160,7 @@
};
let vis = respan(vis.span, vis_kind);
- this.items.insert(
+ this.insert_item(
new_id,
hir::Item {
id: new_id,
@@ -3748,7 +3775,7 @@
let ohs = P(self.lower_expr(ohs));
hir::ExprKind::Unary(op, ohs)
}
- ExprKind::Lit(ref l) => hir::ExprKind::Lit(P((*l).clone())),
+ ExprKind::Lit(ref l) => hir::ExprKind::Lit((*l).clone()),
ExprKind::Cast(ref expr, ref ty) => {
let expr = P(self.lower_expr(expr));
hir::ExprKind::Cast(expr, self.lower_ty(ty, ImplTraitContext::disallowed()))
diff --git a/src/librustc/hir/map/blocks.rs b/src/librustc/hir/map/blocks.rs
index 837a20a..f61b855 100644
--- a/src/librustc/hir/map/blocks.rs
+++ b/src/librustc/hir/map/blocks.rs
@@ -15,7 +15,7 @@
use hir::map;
use hir::{Expr, FnDecl, Node};
use hir::intravisit::FnKind;
-use syntax::ast::{Attribute, Ident, Name, NodeId};
+use syntax::ast::{Attribute, Ident, NodeId};
use syntax_pos::Span;
/// An FnLikeNode is a Node that is like a fn, in that it has a decl
@@ -98,7 +98,7 @@
/// These are all the components one can extract from a fn item for
/// use when implementing FnLikeNode operations.
struct ItemFnParts<'a> {
- name: Name,
+ ident: Ident,
decl: &'a ast::FnDecl,
header: ast::FnHeader,
vis: &'a ast::Visibility,
@@ -200,7 +200,7 @@
pub fn kind(self) -> FnKind<'a> {
let item = |p: ItemFnParts<'a>| -> FnKind<'a> {
- FnKind::ItemFn(p.name, p.generics, p.header, p.vis, p.attrs)
+ FnKind::ItemFn(p.ident, p.generics, p.header, p.vis, p.attrs)
};
let closure = |c: ClosureParts<'a>| {
FnKind::Closure(c.attrs)
@@ -228,7 +228,7 @@
ast::ItemKind::Fn(ref decl, header, ref generics, block) =>
item_fn(ItemFnParts {
id: i.id,
- name: i.ident.name,
+ ident: i.ident,
decl: &decl,
body: block,
vis: &i.vis,
diff --git a/src/librustc/hir/map/collector.rs b/src/librustc/hir/map/collector.rs
index 78acea9..ae9bb37 100644
--- a/src/librustc/hir/map/collector.rs
+++ b/src/librustc/hir/map/collector.rs
@@ -6,6 +6,7 @@
use ich::Fingerprint;
use middle::cstore::CrateStore;
use session::CrateDisambiguator;
+use session::Session;
use std::iter::repeat;
use syntax::ast::{NodeId, CRATE_NODE_ID};
use syntax::source_map::SourceMap;
@@ -92,11 +93,11 @@
}
impl<'a, 'hir> NodeCollector<'a, 'hir> {
- pub(super) fn root(krate: &'hir Crate,
+ pub(super) fn root(sess: &'a Session,
+ krate: &'hir Crate,
dep_graph: &'a DepGraph,
definitions: &'a definitions::Definitions,
- mut hcx: StableHashingContext<'a>,
- source_map: &'a SourceMap)
+ mut hcx: StableHashingContext<'a>)
-> NodeCollector<'a, 'hir> {
let root_mod_def_path_hash = definitions.def_path_hash(CRATE_DEF_INDEX);
@@ -119,6 +120,7 @@
trait_impls: _,
trait_auto_impl: _,
body_ids: _,
+ modules: _,
} = *krate;
alloc_hir_dep_nodes(
@@ -140,8 +142,8 @@
let mut collector = NodeCollector {
krate,
- source_map,
- map: vec![],
+ source_map: sess.source_map(),
+ map: repeat(None).take(sess.current_node_id_count()).collect(),
parent_node: CRATE_NODE_ID,
current_signature_dep_index: root_mod_sig_dep_index,
current_full_dep_index: root_mod_full_dep_index,
@@ -218,10 +220,6 @@
fn insert_entry(&mut self, id: NodeId, entry: Entry<'hir>) {
debug!("hir_map: {:?} => {:?}", id, entry);
- let len = self.map.len();
- if id.as_usize() >= len {
- self.map.extend(repeat(None).take(id.as_usize() - len + 1));
- }
self.map[id.as_usize()] = Some(entry);
}
diff --git a/src/librustc/hir/map/hir_id_validator.rs b/src/librustc/hir/map/hir_id_validator.rs
index a8f5f93..91c8c29 100644
--- a/src/librustc/hir/map/hir_id_validator.rs
+++ b/src/librustc/hir/map/hir_id_validator.rs
@@ -3,19 +3,24 @@
use syntax::ast::NodeId;
use hir::itemlikevisit::ItemLikeVisitor;
use rustc_data_structures::fx::FxHashMap;
+use rustc_data_structures::sync::{Lock, ParallelIterator, par_iter};
pub fn check_crate<'hir>(hir_map: &hir::map::Map<'hir>) {
- let mut outer_visitor = OuterVisitor {
- hir_map,
- errors: vec![],
- };
-
hir_map.dep_graph.assert_ignored();
- hir_map.krate().visit_all_item_likes(&mut outer_visitor);
- if !outer_visitor.errors.is_empty() {
- let message = outer_visitor
- .errors
+ let errors = Lock::new(Vec::new());
+
+ par_iter(&hir_map.krate().modules).for_each(|(module_id, _)| {
+ hir_map.visit_item_likes_in_module(hir_map.local_def_id(*module_id), &mut OuterVisitor {
+ hir_map,
+ errors: &errors,
+ });
+ });
+
+ let errors = errors.into_inner();
+
+ if !errors.is_empty() {
+ let message = errors
.iter()
.fold(String::new(), |s1, s2| s1 + "\n" + s2);
bug!("{}", message);
@@ -26,12 +31,12 @@
hir_map: &'a hir::map::Map<'hir>,
owner_def_index: Option<DefIndex>,
hir_ids_seen: FxHashMap<ItemLocalId, NodeId>,
- errors: Vec<String>,
+ errors: &'a Lock<Vec<String>>,
}
struct OuterVisitor<'a, 'hir: 'a> {
hir_map: &'a hir::map::Map<'hir>,
- errors: Vec<String>,
+ errors: &'a Lock<Vec<String>>,
}
impl<'a, 'hir: 'a> OuterVisitor<'a, 'hir> {
@@ -42,7 +47,7 @@
hir_map,
owner_def_index: None,
hir_ids_seen: Default::default(),
- errors: Vec::new(),
+ errors: self.errors,
}
}
}
@@ -51,23 +56,25 @@
fn visit_item(&mut self, i: &'hir hir::Item) {
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
inner_visitor.check(i.id, |this| intravisit::walk_item(this, i));
- self.errors.extend(inner_visitor.errors.drain(..));
}
fn visit_trait_item(&mut self, i: &'hir hir::TraitItem) {
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
inner_visitor.check(i.id, |this| intravisit::walk_trait_item(this, i));
- self.errors.extend(inner_visitor.errors.drain(..));
}
fn visit_impl_item(&mut self, i: &'hir hir::ImplItem) {
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
inner_visitor.check(i.id, |this| intravisit::walk_impl_item(this, i));
- self.errors.extend(inner_visitor.errors.drain(..));
}
}
impl<'a, 'hir: 'a> HirIdValidator<'a, 'hir> {
+ #[cold]
+ #[inline(never)]
+ fn error(&self, f: impl FnOnce() -> String) {
+ self.errors.lock().push(f());
+ }
fn check<F: FnOnce(&mut HirIdValidator<'a, 'hir>)>(&mut self,
node_id: NodeId,
@@ -119,7 +126,7 @@
local_id,
self.hir_map.node_to_string(node_id)));
}
- self.errors.push(format!(
+ self.error(|| format!(
"ItemLocalIds not assigned densely in {}. \
Max ItemLocalId = {}, missing IDs = {:?}; seens IDs = {:?}",
self.hir_map.def_path(DefId::local(owner_def_index)).to_string_no_crate(),
@@ -145,14 +152,14 @@
let stable_id = self.hir_map.definitions().node_to_hir_id[node_id];
if stable_id == hir::DUMMY_HIR_ID {
- self.errors.push(format!("HirIdValidator: No HirId assigned for NodeId {}: {:?}",
+ self.error(|| format!("HirIdValidator: No HirId assigned for NodeId {}: {:?}",
node_id,
self.hir_map.node_to_string(node_id)));
return;
}
if owner != stable_id.owner {
- self.errors.push(format!(
+ self.error(|| format!(
"HirIdValidator: The recorded owner of {} is {} instead of {}",
self.hir_map.node_to_string(node_id),
self.hir_map.def_path(DefId::local(stable_id.owner)).to_string_no_crate(),
@@ -161,7 +168,7 @@
if let Some(prev) = self.hir_ids_seen.insert(stable_id.local_id, node_id) {
if prev != node_id {
- self.errors.push(format!(
+ self.error(|| format!(
"HirIdValidator: Same HirId {}/{} assigned for nodes {} and {}",
self.hir_map.def_path(DefId::local(stable_id.owner)).to_string_no_crate(),
stable_id.local_id.as_usize(),
diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs
index 5bcbeee..d9ca37c 100644
--- a/src/librustc/hir/map/mod.rs
+++ b/src/librustc/hir/map/mod.rs
@@ -7,18 +7,21 @@
use hir::def_id::{CRATE_DEF_INDEX, DefId, LocalDefId, DefIndexAddressSpace};
-use middle::cstore::CrateStore;
+use middle::cstore::CrateStoreDyn;
use rustc_target::spec::abi::Abi;
use rustc_data_structures::svh::Svh;
+use rustc_data_structures::sync::join;
use syntax::ast::{self, Name, NodeId, CRATE_NODE_ID};
use syntax::source_map::Spanned;
use syntax::ext::base::MacroKind;
use syntax_pos::{Span, DUMMY_SP};
use hir::*;
+use hir::itemlikevisit::ItemLikeVisitor;
use hir::print::Nested;
use util::nodemap::FxHashMap;
+use util::common::time;
use std::io;
use std::result::Result::Err;
@@ -506,6 +509,47 @@
&self.forest.krate.attrs
}
+ pub fn get_module(&self, module: DefId) -> (&'hir Mod, Span, NodeId)
+ {
+ let node_id = self.as_local_node_id(module).unwrap();
+ self.read(node_id);
+ match self.find_entry(node_id).unwrap().node {
+ Node::Item(&Item {
+ span,
+ node: ItemKind::Mod(ref m),
+ ..
+ }) => (m, span, node_id),
+ Node::Crate => (&self.forest.krate.module, self.forest.krate.span, node_id),
+ _ => panic!("not a module")
+ }
+ }
+
+ pub fn visit_item_likes_in_module<V>(&self, module: DefId, visitor: &mut V)
+ where V: ItemLikeVisitor<'hir>
+ {
+ let node_id = self.as_local_node_id(module).unwrap();
+
+ // Read the module so we'll be re-executed if new items
+ // appear immediately under in the module. If some new item appears
+ // in some nested item in the module, we'll be re-executed due to reads
+ // in the expect_* calls the loops below
+ self.read(node_id);
+
+ let module = &self.forest.krate.modules[&node_id];
+
+ for id in &module.items {
+ visitor.visit_item(self.expect_item(*id));
+ }
+
+ for id in &module.trait_items {
+ visitor.visit_trait_item(self.expect_trait_item(id.node_id));
+ }
+
+ for id in &module.impl_items {
+ visitor.visit_impl_item(self.expect_impl_item(id.node_id));
+ }
+ }
+
/// Retrieve the Node corresponding to `id`, panicking if it cannot
/// be found.
pub fn get(&self, id: NodeId) -> Node<'hir> {
@@ -1018,26 +1062,32 @@
impl Named for ImplItem { fn name(&self) -> Name { self.ident.name } }
pub fn map_crate<'hir>(sess: &::session::Session,
- cstore: &dyn CrateStore,
- forest: &'hir mut Forest,
+ cstore: &CrateStoreDyn,
+ forest: &'hir Forest,
definitions: &'hir Definitions)
-> Map<'hir> {
- let (map, crate_hash) = {
+ let ((map, crate_hash), hir_to_node_id) = join(|| {
let hcx = ::ich::StableHashingContext::new(sess, &forest.krate, definitions, cstore);
- let mut collector = NodeCollector::root(&forest.krate,
+ let mut collector = NodeCollector::root(sess,
+ &forest.krate,
&forest.dep_graph,
&definitions,
- hcx,
- sess.source_map());
+ hcx);
intravisit::walk_crate(&mut collector, &forest.krate);
let crate_disambiguator = sess.local_crate_disambiguator();
let cmdline_args = sess.opts.dep_tracking_hash();
- collector.finalize_and_compute_crate_hash(crate_disambiguator,
- cstore,
- cmdline_args)
- };
+ collector.finalize_and_compute_crate_hash(
+ crate_disambiguator,
+ cstore,
+ cmdline_args
+ )
+ }, || {
+ // Build the reverse mapping of `node_to_hir_id`.
+ definitions.node_to_hir_id.iter_enumerated()
+ .map(|(node_id, &hir_id)| (hir_id, node_id)).collect()
+ });
if log_enabled!(::log::Level::Debug) {
// This only makes sense for ordered stores; note the
@@ -1051,10 +1101,6 @@
entries, vector_length, (entries as f64 / vector_length as f64) * 100.);
}
- // Build the reverse mapping of `node_to_hir_id`.
- let hir_to_node_id = definitions.node_to_hir_id.iter_enumerated()
- .map(|(node_id, &hir_id)| (hir_id, node_id)).collect();
-
let map = Map {
forest,
dep_graph: forest.dep_graph.clone(),
@@ -1064,7 +1110,9 @@
definitions,
};
- hir_id_validator::check_crate(&map);
+ time(sess, "validate hir map", || {
+ hir_id_validator::check_crate(&map);
+ });
map
}
diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs
index 7e87171..aaef1c7 100644
--- a/src/librustc/hir/mod.rs
+++ b/src/librustc/hir/mod.rs
@@ -19,7 +19,7 @@
use syntax::source_map::{self, Spanned};
use rustc_target::spec::abi::Abi;
use syntax::ast::{self, CrateSugar, Ident, Name, NodeId, DUMMY_NODE_ID, AsmDialect};
-use syntax::ast::{Attribute, Lit, StrStyle, FloatTy, IntTy, UintTy};
+use syntax::ast::{Attribute, Label, Lit, StrStyle, FloatTy, IntTy, UintTy};
use syntax::attr::InlineAttr;
use syntax::ext::hygiene::SyntaxContext;
use syntax::ptr::P;
@@ -33,7 +33,7 @@
use rustc_data_structures::thin_vec::ThinVec;
use serialize::{self, Encoder, Encodable, Decoder, Decodable};
-use std::collections::BTreeMap;
+use std::collections::{BTreeSet, BTreeMap};
use std::fmt;
/// HIR doesn't commit to a concrete storage type and has its own alias for a vector.
@@ -143,17 +143,6 @@
pub const DUMMY_ITEM_LOCAL_ID: ItemLocalId = ItemLocalId::MAX;
#[derive(Clone, RustcEncodable, RustcDecodable, Copy)]
-pub struct Label {
- pub ident: Ident,
-}
-
-impl fmt::Debug for Label {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "label({:?})", self.ident)
- }
-}
-
-#[derive(Clone, RustcEncodable, RustcDecodable, Copy)]
pub struct Lifetime {
pub id: NodeId,
pub span: Span,
@@ -676,6 +665,15 @@
pub rhs_ty: P<Ty>,
}
+#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
+pub struct ModuleItems {
+ // Use BTreeSets here so items are in the same order as in the
+ // list of all items in Crate
+ pub items: BTreeSet<NodeId>,
+ pub trait_items: BTreeSet<TraitItemId>,
+ pub impl_items: BTreeSet<ImplItemId>,
+}
+
/// The top-level data structure that stores the entire contents of
/// the crate currently being compiled.
///
@@ -708,6 +706,10 @@
/// in the crate, you should iterate over this list rather than the keys
/// of bodies.
pub body_ids: Vec<BodyId>,
+
+ /// A list of modules written out in the order in which they
+ /// appear in the crate. This includes the main crate module.
+ pub modules: BTreeMap<NodeId, ModuleItems>,
}
impl Crate {
@@ -1453,7 +1455,7 @@
/// A unary operation (For example: `!x`, `*x`)
Unary(UnOp, P<Expr>),
/// A literal (For example: `1`, `"foo"`)
- Lit(P<Lit>),
+ Lit(Lit),
/// A cast (`foo as f64`)
Cast(P<Expr>, P<Ty>),
Type(P<Expr>, P<Ty>),
@@ -2408,6 +2410,7 @@
pub fn provide(providers: &mut Providers<'_>) {
+ check_attr::provide(providers);
providers.describe_def = map::describe_def;
}
diff --git a/src/librustc/ich/impls_hir.rs b/src/librustc/ich/impls_hir.rs
index 8ff60e5..f48059b 100644
--- a/src/librustc/ich/impls_hir.rs
+++ b/src/librustc/ich/impls_hir.rs
@@ -153,7 +153,7 @@
Error,
});
-impl_stable_hash_for!(struct hir::Label {
+impl_stable_hash_for!(struct ast::Label {
ident
});
diff --git a/src/librustc/infer/error_reporting/mod.rs b/src/librustc/infer/error_reporting/mod.rs
index 4cce834..2995b25 100644
--- a/src/librustc/infer/error_reporting/mod.rs
+++ b/src/librustc/infer/error_reporting/mod.rs
@@ -487,6 +487,11 @@
fn note_error_origin(&self, err: &mut DiagnosticBuilder<'tcx>, cause: &ObligationCause<'tcx>) {
match cause.code {
+ ObligationCauseCode::MatchExpressionArmPattern { span, ty } => {
+ if ty.is_suggestable() { // don't show type `_`
+ err.span_label(span, format!("this match expression has type `{}`", ty));
+ }
+ }
ObligationCauseCode::MatchExpressionArm { arm_span, source } => match source {
hir::MatchSource::IfLetDesugar { .. } => {
let msg = "`if let` arm with an incompatible type";
@@ -506,6 +511,18 @@
}
}
},
+ ObligationCauseCode::IfExpression { then, outer, semicolon } => {
+ err.span_label(then, "expected because of this");
+ outer.map(|sp| err.span_label(sp, "if and else have incompatible types"));
+ if let Some(sp) = semicolon {
+ err.span_suggestion_short_with_applicability(
+ sp,
+ "consider removing this semicolon",
+ String::new(),
+ Applicability::MachineApplicable,
+ );
+ }
+ }
_ => (),
}
}
@@ -1455,7 +1472,7 @@
}
_ => "match arms have incompatible types",
}),
- IfExpression => Error0308("if and else have incompatible types"),
+ IfExpression { .. } => Error0308("if and else have incompatible types"),
IfExpressionWithNoElse => Error0317("if may be missing an else clause"),
MainFunctionType => Error0580("main function has wrong type"),
StartFunctionType => Error0308("start function has wrong type"),
@@ -1483,7 +1500,7 @@
hir::MatchSource::IfLetDesugar { .. } => "`if let` arms have compatible types",
_ => "match arms have compatible types",
},
- IfExpression => "if and else have compatible types",
+ IfExpression { .. } => "if and else have compatible types",
IfExpressionWithNoElse => "if missing an else returns ()",
MainFunctionType => "`main` function has the correct type",
StartFunctionType => "`start` function has the correct type",
diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs
index c428ff1..a0bd4f0 100644
--- a/src/librustc/lint/builtin.rs
+++ b/src/librustc/lint/builtin.rs
@@ -205,12 +205,6 @@
}
declare_lint! {
- pub BAD_REPR,
- Warn,
- "detects incorrect use of `repr` attribute"
-}
-
-declare_lint! {
pub DEPRECATED,
Warn,
"detects use of deprecated items",
@@ -359,6 +353,12 @@
Allow,
"detects the use of `?` as a macro separator"
}
+
+ declare_lint! {
+ pub ILL_FORMED_ATTRIBUTE_INPUT,
+ Warn,
+ "ill-formed attribute inputs that were previously accepted and used in practice"
+ }
}
declare_lint! {
@@ -368,6 +368,12 @@
report_in_external_macro: true
}
+declare_lint! {
+ pub AMBIGUOUS_ASSOCIATED_ITEMS,
+ Warn,
+ "ambiguous associated items"
+}
+
/// Does nothing as a lint pass, but registers some `Lint`s
/// that are used by other parts of the compiler.
#[derive(Copy, Clone)]
@@ -431,7 +437,9 @@
MACRO_USE_EXTERN_CRATE,
MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
parser::QUESTION_MARK_MACRO_SEP,
+ parser::ILL_FORMED_ATTRIBUTE_INPUT,
DEPRECATED_IN_FUTURE,
+ AMBIGUOUS_ASSOCIATED_ITEMS,
)
}
}
diff --git a/src/librustc/lint/levels.rs b/src/librustc/lint/levels.rs
index fe11349..8b45a5a 100644
--- a/src/librustc/lint/levels.rs
+++ b/src/librustc/lint/levels.rs
@@ -204,8 +204,6 @@
let mut metas = if let Some(metas) = meta.meta_item_list() {
metas
} else {
- let mut err = bad_attr(meta.span);
- err.emit();
continue;
};
diff --git a/src/librustc/lint/mod.rs b/src/librustc/lint/mod.rs
index a373faa..730ce91 100644
--- a/src/librustc/lint/mod.rs
+++ b/src/librustc/lint/mod.rs
@@ -28,7 +28,7 @@
use hir::intravisit;
use hir;
use lint::builtin::BuiltinLintDiagnostics;
-use lint::builtin::parser::QUESTION_MARK_MACRO_SEP;
+use lint::builtin::parser::{QUESTION_MARK_MACRO_SEP, ILL_FORMED_ATTRIBUTE_INPUT};
use session::{Session, DiagnosticMessageId};
use std::{hash, ptr};
use syntax::ast;
@@ -82,6 +82,7 @@
pub fn from_parser_lint_id(lint_id: BufferedEarlyLintId) -> &'static Self {
match lint_id {
BufferedEarlyLintId::QuestionMarkMacroSep => QUESTION_MARK_MACRO_SEP,
+ BufferedEarlyLintId::IllFormedAttributeInput => ILL_FORMED_ATTRIBUTE_INPUT,
}
}
diff --git a/src/librustc/middle/cstore.rs b/src/librustc/middle/cstore.rs
index c431dc7..9168bbf 100644
--- a/src/librustc/middle/cstore.rs
+++ b/src/librustc/middle/cstore.rs
@@ -140,7 +140,7 @@
),
// Crate is loaded by `use`.
Use,
- /// Crate is implicitly loaded by an absolute or an `extern::` path.
+ /// Crate is implicitly loaded by an absolute path.
Path,
}
diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs
index 0c769c9..abbf0ae 100644
--- a/src/librustc/middle/dead.rs
+++ b/src/librustc/middle/dead.rs
@@ -409,7 +409,7 @@
}
}).chain(
// Seed entry point
- tcx.sess.entry_fn.borrow().map(|(id, _, _)| id)
+ tcx.entry_fn(LOCAL_CRATE).map(|(def_id, _)| tcx.hir().as_local_node_id(def_id).unwrap())
).collect::<Vec<_>>();
// Seed implemented trait items
diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs
index 6b593a1..218ca3b 100644
--- a/src/librustc/middle/entry.rs
+++ b/src/librustc/middle/entry.rs
@@ -1,5 +1,5 @@
use hir::map as hir_map;
-use hir::def_id::{CRATE_DEF_INDEX};
+use hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId, LOCAL_CRATE};
use session::{config, Session};
use session::config::EntryFnType;
use syntax::ast::NodeId;
@@ -8,6 +8,8 @@
use syntax_pos::Span;
use hir::{Item, ItemKind, ImplItem, TraitItem};
use hir::itemlikevisit::ItemLikeVisitor;
+use ty::TyCtxt;
+use ty::query::Providers;
struct EntryContext<'a, 'tcx: 'a> {
session: &'a Session,
@@ -45,36 +47,34 @@
}
}
-pub fn find_entry_point(session: &Session,
- hir_map: &hir_map::Map<'_>,
- crate_name: &str) {
- let any_exe = session.crate_types.borrow().iter().any(|ty| {
+fn entry_fn(tcx: TyCtxt<'_, '_, '_>, cnum: CrateNum) -> Option<(DefId, EntryFnType)> {
+ assert_eq!(cnum, LOCAL_CRATE);
+
+ let any_exe = tcx.sess.crate_types.borrow().iter().any(|ty| {
*ty == config::CrateType::Executable
});
if !any_exe {
// No need to find a main function
- session.entry_fn.set(None);
- return
+ return None;
}
// If the user wants no main function at all, then stop here.
- if attr::contains_name(&hir_map.krate().attrs, "no_main") {
- session.entry_fn.set(None);
- return
+ if attr::contains_name(&tcx.hir().krate().attrs, "no_main") {
+ return None;
}
let mut ctxt = EntryContext {
- session,
- map: hir_map,
+ session: tcx.sess,
+ map: tcx.hir(),
main_fn: None,
attr_main_fn: None,
start_fn: None,
non_main_fns: Vec::new(),
};
- hir_map.krate().visit_all_item_likes(&mut ctxt);
+ tcx.hir().krate().visit_all_item_likes(&mut ctxt);
- configure_main(&mut ctxt, crate_name);
+ configure_main(tcx, &ctxt)
}
// Beware, this is duplicated in `libsyntax/entry.rs`, so make sure to keep
@@ -135,43 +135,58 @@
.span_label(item.span, "multiple `start` functions")
.emit();
}
- },
- EntryPointType::None => ()
+ }
+ EntryPointType::None => (),
}
}
-fn configure_main(this: &mut EntryContext<'_, '_>, crate_name: &str) {
- if let Some((node_id, span)) = this.start_fn {
- this.session.entry_fn.set(Some((node_id, span, EntryFnType::Start)));
- } else if let Some((node_id, span)) = this.attr_main_fn {
- this.session.entry_fn.set(Some((node_id, span, EntryFnType::Main)));
- } else if let Some((node_id, span)) = this.main_fn {
- this.session.entry_fn.set(Some((node_id, span, EntryFnType::Main)));
+fn configure_main(
+ tcx: TyCtxt<'_, '_, '_>,
+ visitor: &EntryContext<'_, '_>,
+) -> Option<(DefId, EntryFnType)> {
+ if let Some((node_id, _)) = visitor.start_fn {
+ Some((tcx.hir().local_def_id(node_id), EntryFnType::Start))
+ } else if let Some((node_id, _)) = visitor.attr_main_fn {
+ Some((tcx.hir().local_def_id(node_id), EntryFnType::Main))
+ } else if let Some((node_id, _)) = visitor.main_fn {
+ Some((tcx.hir().local_def_id(node_id), EntryFnType::Main))
} else {
// No main function
- this.session.entry_fn.set(None);
- let mut err = struct_err!(this.session, E0601,
- "`main` function not found in crate `{}`", crate_name);
- if !this.non_main_fns.is_empty() {
+ let mut err = struct_err!(tcx.sess, E0601,
+ "`main` function not found in crate `{}`", tcx.crate_name(LOCAL_CRATE));
+ if !visitor.non_main_fns.is_empty() {
// There were some functions named 'main' though. Try to give the user a hint.
err.note("the main function must be defined at the crate level \
but you have one or more functions named 'main' that are not \
defined at the crate level. Either move the definition or \
attach the `#[main]` attribute to override this behavior.");
- for &(_, span) in &this.non_main_fns {
+ for &(_, span) in &visitor.non_main_fns {
err.span_note(span, "here is a function named 'main'");
}
err.emit();
- this.session.abort_if_errors();
+ tcx.sess.abort_if_errors();
} else {
- if let Some(ref filename) = this.session.local_crate_source_file {
+ if let Some(ref filename) = tcx.sess.local_crate_source_file {
err.note(&format!("consider adding a `main` function to `{}`", filename.display()));
}
- if this.session.teach(&err.get_code().unwrap()) {
+ if tcx.sess.teach(&err.get_code().unwrap()) {
err.note("If you don't know the basics of Rust, you can go look to the Rust Book \
to get started: https://doc.rust-lang.org/book/");
}
err.emit();
}
+
+ None
}
}
+
+pub fn find_entry_point(tcx: TyCtxt<'_, '_, '_>) -> Option<(DefId, EntryFnType)> {
+ tcx.entry_fn(LOCAL_CRATE)
+}
+
+pub fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ entry_fn,
+ ..*providers
+ };
+}
diff --git a/src/librustc/middle/intrinsicck.rs b/src/librustc/middle/intrinsicck.rs
index 1716daa..a0f7954 100644
--- a/src/librustc/middle/intrinsicck.rs
+++ b/src/librustc/middle/intrinsicck.rs
@@ -2,6 +2,7 @@
use hir::def_id::DefId;
use ty::{self, Ty, TyCtxt};
use ty::layout::{LayoutError, Pointer, SizeSkeleton, VariantIdx};
+use ty::query::{Providers, queries};
use rustc_target::spec::abi::Abi::RustIntrinsic;
use rustc_data_structures::indexed_vec::Idx;
@@ -10,10 +11,23 @@
use hir;
pub fn check_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
- let mut visitor = ItemVisitor {
- tcx,
+ for &module in tcx.hir().krate().modules.keys() {
+ queries::check_mod_intrinsics::ensure(tcx, tcx.hir().local_def_id(module));
+ }
+}
+
+fn check_mod_intrinsics<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
+ tcx.hir().visit_item_likes_in_module(
+ module_def_id,
+ &mut ItemVisitor { tcx }.as_deep_visitor()
+ );
+}
+
+pub fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ check_mod_intrinsics,
+ ..*providers
};
- tcx.hir().krate().visit_all_item_likes(&mut visitor.as_deep_visitor());
}
struct ItemVisitor<'a, 'tcx: 'a> {
diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs
index a78cf1a..e73677d 100644
--- a/src/librustc/middle/liveness.rs
+++ b/src/librustc/middle/liveness.rs
@@ -100,6 +100,7 @@
use hir::def::*;
use hir::Node;
use ty::{self, TyCtxt};
+use ty::query::{Providers, queries};
use lint;
use errors::Applicability;
use util::nodemap::{NodeMap, HirIdMap, HirIdSet};
@@ -114,8 +115,9 @@
use syntax::symbol::keywords;
use syntax_pos::Span;
-use hir::{Expr, HirId};
use hir;
+use hir::{Expr, HirId};
+use hir::def_id::DefId;
use hir::intravisit::{self, Visitor, FnKind, NestedVisitorMap};
/// For use with `propagate_through_loop`.
@@ -179,11 +181,24 @@
fn visit_arm(&mut self, a: &'tcx hir::Arm) { visit_arm(self, a); }
}
+fn check_mod_liveness<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
+ tcx.hir().visit_item_likes_in_module(module_def_id, &mut IrMaps::new(tcx).as_deep_visitor());
+}
+
pub fn check_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
- tcx.hir().krate().visit_all_item_likes(&mut IrMaps::new(tcx).as_deep_visitor());
+ for &module in tcx.hir().krate().modules.keys() {
+ queries::check_mod_liveness::ensure(tcx, tcx.hir().local_def_id(module));
+ }
tcx.sess.abort_if_errors();
}
+pub fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ check_mod_liveness,
+ ..*providers
+ };
+}
+
impl fmt::Debug for LiveNode {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "ln({})", self.get())
@@ -911,17 +926,8 @@
}
fn compute(&mut self, body: &hir::Expr) -> LiveNode {
- // if there is a `break` or `again` at the top level, then it's
- // effectively a return---this only occurs in `for` loops,
- // where the body is really a closure.
-
debug!("compute: using id for body, {}", self.ir.tcx.hir().node_to_pretty_string(body.id));
- let exit_ln = self.s.exit_ln;
-
- self.break_ln.insert(body.id, exit_ln);
- self.cont_ln.insert(body.id, exit_ln);
-
// the fallthrough exit is only for those cases where we do not
// explicitly return:
let s = self.s;
@@ -1024,19 +1030,10 @@
self.propagate_through_expr(&e, succ)
}
- hir::ExprKind::Closure(.., blk_id, _, _) => {
+ hir::ExprKind::Closure(..) => {
debug!("{} is an ExprKind::Closure",
self.ir.tcx.hir().node_to_pretty_string(expr.id));
- // The next-node for a break is the successor of the entire
- // loop. The next-node for a continue is the top of this loop.
- let node = self.live_node(expr.hir_id, expr.span);
-
- let break_ln = succ;
- let cont_ln = node;
- self.break_ln.insert(blk_id.node_id, break_ln);
- self.cont_ln.insert(blk_id.node_id, cont_ln);
-
// the construction of a closure itself is not important,
// but we have to consider the closed over variables.
let caps = self.ir.capture_info_map.get(&expr.id).cloned().unwrap_or_else(||
@@ -1407,15 +1404,16 @@
debug!("propagate_through_loop: using id for loop body {} {}",
expr.id, self.ir.tcx.hir().node_to_pretty_string(body.id));
- let break_ln = succ;
- let cont_ln = ln;
- self.break_ln.insert(expr.id, break_ln);
- self.cont_ln.insert(expr.id, cont_ln);
+
+ self.break_ln.insert(expr.id, succ);
let cond_ln = match kind {
LoopLoop => ln,
WhileLoop(ref cond) => self.propagate_through_expr(&cond, ln),
};
+
+ self.cont_ln.insert(expr.id, cond_ln);
+
let body_ln = self.propagate_through_block(body, cond_ln);
// repeat until fixed point is reached:
diff --git a/src/librustc/middle/recursion_limit.rs b/src/librustc/middle/recursion_limit.rs
index ea83432..1eabd7f 100644
--- a/src/librustc/middle/recursion_limit.rs
+++ b/src/librustc/middle/recursion_limit.rs
@@ -11,14 +11,11 @@
use rustc_data_structures::sync::Once;
pub fn update_limits(sess: &Session, krate: &ast::Crate) {
- update_limit(sess, krate, &sess.recursion_limit, "recursion_limit",
- "recursion limit", 64);
- update_limit(sess, krate, &sess.type_length_limit, "type_length_limit",
- "type length limit", 1048576);
+ update_limit(krate, &sess.recursion_limit, "recursion_limit", 64);
+ update_limit(krate, &sess.type_length_limit, "type_length_limit", 1048576);
}
-fn update_limit(sess: &Session, krate: &ast::Crate, limit: &Once<usize>,
- name: &str, description: &str, default: usize) {
+fn update_limit(krate: &ast::Crate, limit: &Once<usize>, name: &str, default: usize) {
for attr in &krate.attrs {
if !attr.check_name(name) {
continue;
@@ -30,10 +27,6 @@
return;
}
}
-
- span_err!(sess, attr.span, E0296,
- "malformed {} attribute, expected #![{}=\"N\"]",
- description, name);
}
limit.set(default);
}
diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs
index 43cb89c..918e286 100644
--- a/src/librustc/middle/stability.rs
+++ b/src/librustc/middle/stability.rs
@@ -8,6 +8,8 @@
use hir::def::Def;
use hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId, LOCAL_CRATE};
use hir::intravisit::{self, Visitor, NestedVisitorMap};
+use ty::query::Providers;
+use ty::query::queries;
use middle::privacy::AccessLevels;
use session::{DiagnosticMessageId, Session};
use syntax::symbol::Symbol;
@@ -454,11 +456,23 @@
}
}
+pub fn check_unstable_api_usage<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
+ for &module in tcx.hir().krate().modules.keys() {
+ queries::check_mod_unstable_api_usage::ensure(tcx, tcx.hir().local_def_id(module));
+ }
+}
+
/// Cross-references the feature names of unstable APIs with enabled
/// features and possibly prints errors.
-pub fn check_unstable_api_usage<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
- let mut checker = Checker { tcx };
- tcx.hir().krate().visit_all_item_likes(&mut checker.as_deep_visitor());
+fn check_mod_unstable_api_usage<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
+ tcx.hir().visit_item_likes_in_module(module_def_id, &mut Checker { tcx }.as_deep_visitor());
+}
+
+pub fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ check_mod_unstable_api_usage,
+ ..*providers
+ };
}
/// Check whether an item marked with `deprecated(since="X")` is currently
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 42adc6a..0f14049 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -6,7 +6,7 @@
use session::{early_error, early_warn, Session};
use session::search_paths::SearchPath;
-use rustc_target::spec::{LinkerFlavor, PanicStrategy, RelroLevel};
+use rustc_target::spec::{LinkerFlavor, MergeFunctions, PanicStrategy, RelroLevel};
use rustc_target::spec::{Target, TargetTriple};
use lint;
use middle::cstore;
@@ -649,15 +649,15 @@
}
}
-// The type of entry function, so
-// users can have their own entry
-// functions
-#[derive(Copy, Clone, PartialEq)]
+// The type of entry function, so users can have their own entry functions
+#[derive(Copy, Clone, PartialEq, Hash, Debug)]
pub enum EntryFnType {
Main,
Start,
}
+impl_stable_hash_via_hash!(EntryFnType);
+
#[derive(Copy, PartialEq, PartialOrd, Clone, Ord, Eq, Hash, Debug)]
pub enum CrateType {
Executable,
@@ -808,13 +808,16 @@
pub const parse_cross_lang_lto: Option<&str> =
Some("either a boolean (`yes`, `no`, `on`, `off`, etc), \
or the path to the linker plugin");
+ pub const parse_merge_functions: Option<&str> =
+ Some("one of: `disabled`, `trampolines`, or `aliases`");
}
#[allow(dead_code)]
mod $mod_set {
use super::{$struct_name, Passes, Sanitizer, LtoCli, CrossLangLto};
- use rustc_target::spec::{LinkerFlavor, PanicStrategy, RelroLevel};
+ use rustc_target::spec::{LinkerFlavor, MergeFunctions, PanicStrategy, RelroLevel};
use std::path::PathBuf;
+ use std::str::FromStr;
$(
pub fn $opt(cg: &mut $struct_name, v: Option<&str>) -> bool {
@@ -1046,6 +1049,14 @@
};
true
}
+
+ fn parse_merge_functions(slot: &mut Option<MergeFunctions>, v: Option<&str>) -> bool {
+ match v.and_then(|s| MergeFunctions::from_str(s).ok()) {
+ Some(mergefunc) => *slot = Some(mergefunc),
+ _ => return false,
+ }
+ true
+ }
}
) }
@@ -1376,6 +1387,9 @@
"whether to use the PLT when calling into shared libraries;
only has effect for PIC code on systems with ELF binaries
(default: PLT is disabled if full relro is enabled)"),
+ merge_functions: Option<MergeFunctions> = (None, parse_merge_functions, [TRACKED],
+ "control the operation of the MergeFunctions LLVM pass, taking
+ the same values as the target option of the same name"),
}
pub fn default_lib_output() -> CrateType {
@@ -2394,7 +2408,7 @@
use super::{CrateType, DebugInfo, ErrorOutputType, OptLevel, OutputTypes,
Passes, Sanitizer, LtoCli, CrossLangLto};
use syntax::feature_gate::UnstableFeatures;
- use rustc_target::spec::{PanicStrategy, RelroLevel, TargetTriple};
+ use rustc_target::spec::{MergeFunctions, PanicStrategy, RelroLevel, TargetTriple};
use syntax::edition::Edition;
pub trait DepTrackingHash {
@@ -2437,12 +2451,14 @@
impl_dep_tracking_hash_via_hash!(Option<usize>);
impl_dep_tracking_hash_via_hash!(Option<String>);
impl_dep_tracking_hash_via_hash!(Option<(String, u64)>);
+ impl_dep_tracking_hash_via_hash!(Option<MergeFunctions>);
impl_dep_tracking_hash_via_hash!(Option<PanicStrategy>);
impl_dep_tracking_hash_via_hash!(Option<RelroLevel>);
impl_dep_tracking_hash_via_hash!(Option<lint::Level>);
impl_dep_tracking_hash_via_hash!(Option<PathBuf>);
impl_dep_tracking_hash_via_hash!(Option<cstore::NativeLibraryKind>);
impl_dep_tracking_hash_via_hash!(CrateType);
+ impl_dep_tracking_hash_via_hash!(MergeFunctions);
impl_dep_tracking_hash_via_hash!(PanicStrategy);
impl_dep_tracking_hash_via_hash!(RelroLevel);
impl_dep_tracking_hash_via_hash!(Passes);
@@ -2528,7 +2544,7 @@
use std::iter::FromIterator;
use std::path::PathBuf;
use super::{Externs, OutputType, OutputTypes};
- use rustc_target::spec::{PanicStrategy, RelroLevel};
+ use rustc_target::spec::{MergeFunctions, PanicStrategy, RelroLevel};
use syntax::symbol::Symbol;
use syntax::edition::{Edition, DEFAULT_EDITION};
use syntax;
@@ -3183,6 +3199,10 @@
opts = reference.clone();
opts.debugging_opts.cross_lang_lto = CrossLangLto::LinkerPluginAuto;
assert!(reference.dep_tracking_hash() != opts.dep_tracking_hash());
+
+ opts = reference.clone();
+ opts.debugging_opts.merge_functions = Some(MergeFunctions::Disabled);
+ assert!(reference.dep_tracking_hash() != opts.dep_tracking_hash());
}
#[test]
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs
index ba09480..cf00bf3 100644
--- a/src/librustc/session/mod.rs
+++ b/src/librustc/session/mod.rs
@@ -67,10 +67,6 @@
/// This is `None` if the host and target are the same.
pub target_tlib_path: Option<SearchPath>,
pub parse_sess: ParseSess,
- /// For a library crate, this is always none
- pub entry_fn: Once<Option<(NodeId, Span, config::EntryFnType)>>,
- pub plugin_registrar_fn: Once<Option<ast::NodeId>>,
- pub proc_macro_decls_static: Once<Option<ast::NodeId>>,
pub sysroot: PathBuf,
/// The name of the root source file of the crate, in the local file system.
/// `None` means that there is no source file.
@@ -407,6 +403,9 @@
pub fn next_node_id(&self) -> NodeId {
self.reserve_node_ids(1)
}
+ pub(crate) fn current_node_id_count(&self) -> usize {
+ self.next_node_id.get().as_u32() as usize
+ }
pub fn diagnostic<'a>(&'a self) -> &'a errors::Handler {
&self.parse_sess.span_diagnostic
}
@@ -1172,10 +1171,6 @@
host_tlib_path,
target_tlib_path,
parse_sess: p_s,
- // For a library crate, this is always none
- entry_fn: Once::new(),
- plugin_registrar_fn: Once::new(),
- proc_macro_decls_static: Once::new(),
sysroot,
local_crate_source_file,
working_dir,
diff --git a/src/librustc/traits/error_reporting.rs b/src/librustc/traits/error_reporting.rs
index 7ce5960..367a7ea 100644
--- a/src/librustc/traits/error_reporting.rs
+++ b/src/librustc/traits/error_reporting.rs
@@ -1444,15 +1444,15 @@
match *cause_code {
ObligationCauseCode::ExprAssignable |
ObligationCauseCode::MatchExpressionArm { .. } |
- ObligationCauseCode::IfExpression |
+ ObligationCauseCode::MatchExpressionArmPattern { .. } |
+ ObligationCauseCode::IfExpression { .. } |
ObligationCauseCode::IfExpressionWithNoElse |
ObligationCauseCode::MainFunctionType |
ObligationCauseCode::StartFunctionType |
ObligationCauseCode::IntrinsicType |
ObligationCauseCode::MethodReceiver |
ObligationCauseCode::ReturnNoExpression |
- ObligationCauseCode::MiscObligation => {
- }
+ ObligationCauseCode::MiscObligation => {}
ObligationCauseCode::SliceOrArrayElem => {
err.note("slice and array elements must have `Sized` type");
}
diff --git a/src/librustc/traits/mod.rs b/src/librustc/traits/mod.rs
index b42d742..68383be 100644
--- a/src/librustc/traits/mod.rs
+++ b/src/librustc/traits/mod.rs
@@ -220,11 +220,20 @@
ExprAssignable,
/// Computing common supertype in the arms of a match expression
- MatchExpressionArm { arm_span: Span,
- source: hir::MatchSource },
+ MatchExpressionArm {
+ arm_span: Span,
+ source: hir::MatchSource,
+ },
+
+ /// Computing common supertype in the pattern guard for the arms of a match expression
+ MatchExpressionArmPattern { span: Span, ty: Ty<'tcx> },
/// Computing common supertype in an if expression
- IfExpression,
+ IfExpression {
+ then: Span,
+ outer: Option<Span>,
+ semicolon: Option<Span>,
+ },
/// Computing common supertype of an if expression with no else counter-part
IfExpressionWithNoElse,
diff --git a/src/librustc/traits/on_unimplemented.rs b/src/librustc/traits/on_unimplemented.rs
index 4b188d2..3ec901f 100644
--- a/src/librustc/traits/on_unimplemented.rs
+++ b/src/librustc/traits/on_unimplemented.rs
@@ -157,10 +157,7 @@
note: None,
}))
} else {
- return Err(parse_error(tcx, attr.span,
- "`#[rustc_on_unimplemented]` requires a value",
- "value required here",
- Some(r#"eg `#[rustc_on_unimplemented(message="foo")]`"#)));
+ return Err(ErrorReported);
};
debug!("of_item({:?}/{:?}) = {:?}", trait_def_id, impl_def_id, result);
result
diff --git a/src/librustc/traits/select.rs b/src/librustc/traits/select.rs
index 6db6fe3..05a6cce 100644
--- a/src/librustc/traits/select.rs
+++ b/src/librustc/traits/select.rs
@@ -42,7 +42,7 @@
use rustc_data_structures::sync::Lock;
use rustc_target::spec::abi::Abi;
use std::cmp;
-use std::fmt;
+use std::fmt::{self, Display};
use std::iter;
use std::rc::Rc;
use util::nodemap::{FxHashMap, FxHashSet};
@@ -629,7 +629,8 @@
obligation: &PredicateObligation<'tcx>,
) -> Result<EvaluationResult, OverflowError> {
self.evaluation_probe(|this| {
- this.evaluate_predicate_recursively(TraitObligationStackList::empty(), obligation)
+ this.evaluate_predicate_recursively(TraitObligationStackList::empty(),
+ obligation.clone())
})
}
@@ -655,12 +656,12 @@
predicates: I,
) -> Result<EvaluationResult, OverflowError>
where
- I: IntoIterator<Item = &'a PredicateObligation<'tcx>>,
+ I: IntoIterator<Item = PredicateObligation<'tcx>>,
'tcx: 'a,
{
let mut result = EvaluatedToOk;
for obligation in predicates {
- let eval = self.evaluate_predicate_recursively(stack, obligation)?;
+ let eval = self.evaluate_predicate_recursively(stack, obligation.clone())?;
debug!(
"evaluate_predicate_recursively({:?}) = {:?}",
obligation, eval
@@ -679,9 +680,19 @@
fn evaluate_predicate_recursively<'o>(
&mut self,
previous_stack: TraitObligationStackList<'o, 'tcx>,
- obligation: &PredicateObligation<'tcx>,
+ obligation: PredicateObligation<'tcx>,
) -> Result<EvaluationResult, OverflowError> {
- debug!("evaluate_predicate_recursively({:?})", obligation);
+ debug!("evaluate_predicate_recursively(previous_stack={:?}, obligation={:?})",
+ previous_stack.head(), obligation);
+
+ // Previous_stack stores a TraitObligatiom, while 'obligation' is
+ // a PredicateObligation. These are distinct types, so we can't
+ // use any Option combinator method that would force them to be
+ // the same
+ match previous_stack.head() {
+ Some(h) => self.check_recursion_limit(&obligation, h.obligation)?,
+ None => self.check_recursion_limit(&obligation, &obligation)?
+ }
match obligation.predicate {
ty::Predicate::Trait(ref t) => {
@@ -695,8 +706,9 @@
match self.infcx
.subtype_predicate(&obligation.cause, obligation.param_env, p)
{
- Some(Ok(InferOk { obligations, .. })) => {
- self.evaluate_predicates_recursively(previous_stack, &obligations)
+ Some(Ok(InferOk { mut obligations, .. })) => {
+ self.add_depth(obligations.iter_mut(), obligation.recursion_depth);
+ self.evaluate_predicates_recursively(previous_stack,obligations.into_iter())
}
Some(Err(_)) => Ok(EvaluatedToErr),
None => Ok(EvaluatedToAmbig),
@@ -710,8 +722,9 @@
ty,
obligation.cause.span,
) {
- Some(obligations) => {
- self.evaluate_predicates_recursively(previous_stack, obligations.iter())
+ Some(mut obligations) => {
+ self.add_depth(obligations.iter_mut(), obligation.recursion_depth);
+ self.evaluate_predicates_recursively(previous_stack, obligations.into_iter())
}
None => Ok(EvaluatedToAmbig),
},
@@ -733,10 +746,11 @@
ty::Predicate::Projection(ref data) => {
let project_obligation = obligation.with(data.clone());
match project::poly_project_and_unify_type(self, &project_obligation) {
- Ok(Some(subobligations)) => {
+ Ok(Some(mut subobligations)) => {
+ self.add_depth(subobligations.iter_mut(), obligation.recursion_depth);
let result = self.evaluate_predicates_recursively(
previous_stack,
- subobligations.iter(),
+ subobligations.into_iter(),
);
if let Some(key) =
ProjectionCacheKey::from_poly_projection_predicate(self, data)
@@ -1005,7 +1019,7 @@
match this.confirm_candidate(stack.obligation, candidate) {
Ok(selection) => this.evaluate_predicates_recursively(
stack.list(),
- selection.nested_obligations().iter(),
+ selection.nested_obligations().into_iter()
),
Err(..) => Ok(EvaluatedToErr),
}
@@ -1080,6 +1094,45 @@
.insert(trait_ref, WithDepNode::new(dep_node, result));
}
+ // For various reasons, it's possible for a subobligation
+ // to have a *lower* recursion_depth than the obligation used to create it.
+ // Projection sub-obligations may be returned from the projection cache,
+ // which results in obligations with an 'old' recursion_depth.
+ // Additionally, methods like ty::wf::obligations and
+ // InferCtxt.subtype_predicate produce subobligations without
+ // taking in a 'parent' depth, causing the generated subobligations
+ // to have a recursion_depth of 0
+ //
+ // To ensure that obligation_depth never decreasees, we force all subobligations
+ // to have at least the depth of the original obligation.
+ fn add_depth<T: 'cx, I: Iterator<Item = &'cx mut Obligation<'tcx, T>>>(&self, it: I,
+ min_depth: usize) {
+ it.for_each(|o| o.recursion_depth = cmp::max(min_depth, o.recursion_depth) + 1);
+ }
+
+ // Check that the recursion limit has not been exceeded.
+ //
+ // The weird return type of this function allows it to be used with the 'try' (?)
+ // operator within certain functions
+ fn check_recursion_limit<T: Display + TypeFoldable<'tcx>, V: Display + TypeFoldable<'tcx>>(
+ &self,
+ obligation: &Obligation<'tcx, T>,
+ error_obligation: &Obligation<'tcx, V>
+ ) -> Result<(), OverflowError> {
+ let recursion_limit = *self.infcx.tcx.sess.recursion_limit.get();
+ if obligation.recursion_depth >= recursion_limit {
+ match self.query_mode {
+ TraitQueryMode::Standard => {
+ self.infcx().report_overflow_error(error_obligation, true);
+ }
+ TraitQueryMode::Canonical => {
+ return Err(OverflowError);
+ }
+ }
+ }
+ Ok(())
+ }
+
///////////////////////////////////////////////////////////////////////////
// CANDIDATE ASSEMBLY
//
@@ -1096,17 +1149,8 @@
) -> SelectionResult<'tcx, SelectionCandidate<'tcx>> {
// Watch out for overflow. This intentionally bypasses (and does
// not update) the cache.
- let recursion_limit = *self.infcx.tcx.sess.recursion_limit.get();
- if stack.obligation.recursion_depth >= recursion_limit {
- match self.query_mode {
- TraitQueryMode::Standard => {
- self.infcx().report_overflow_error(&stack.obligation, true);
- }
- TraitQueryMode::Canonical => {
- return Err(Overflow);
- }
- }
- }
+ self.check_recursion_limit(&stack.obligation, &stack.obligation)?;
+
// Check the cache. Note that we freshen the trait-ref
// separately rather than using `stack.fresh_trait_ref` --
@@ -1767,7 +1811,7 @@
self.evaluation_probe(|this| {
match this.match_where_clause_trait_ref(stack.obligation, where_clause_trait_ref) {
Ok(obligations) => {
- this.evaluate_predicates_recursively(stack.list(), obligations.iter())
+ this.evaluate_predicates_recursively(stack.list(), obligations.into_iter())
}
Err(()) => Ok(EvaluatedToErr),
}
@@ -3802,6 +3846,10 @@
fn with(r: &'o TraitObligationStack<'o, 'tcx>) -> TraitObligationStackList<'o, 'tcx> {
TraitObligationStackList { head: Some(r) }
}
+
+ fn head(&self) -> Option<&'o TraitObligationStack<'o, 'tcx>> {
+ self.head
+ }
}
impl<'o, 'tcx> Iterator for TraitObligationStackList<'o, 'tcx> {
diff --git a/src/librustc/traits/structural_impls.rs b/src/librustc/traits/structural_impls.rs
index ae2b83e..2f5df02 100644
--- a/src/librustc/traits/structural_impls.rs
+++ b/src/librustc/traits/structural_impls.rs
@@ -517,7 +517,14 @@
arm_span,
source: source,
}),
- super::IfExpression => Some(super::IfExpression),
+ super::MatchExpressionArmPattern { span, ty } => {
+ tcx.lift(&ty).map(|ty| super::MatchExpressionArmPattern { span, ty })
+ }
+ super::IfExpression { then, outer, semicolon } => Some(super::IfExpression {
+ then,
+ outer,
+ semicolon,
+ }),
super::IfExpressionWithNoElse => Some(super::IfExpressionWithNoElse),
super::MainFunctionType => Some(super::MainFunctionType),
super::StartFunctionType => Some(super::StartFunctionType),
diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs
index 032a162..e37eab6 100644
--- a/src/librustc/ty/context.rs
+++ b/src/librustc/ty/context.rs
@@ -983,6 +983,9 @@
maybe_unused_trait_imports: FxHashSet<DefId>,
maybe_unused_extern_crates: Vec<(DefId, Span)>,
+ /// A map of glob use to a set of names it actually imports. Currently only
+ /// used in save-analysis.
+ glob_map: FxHashMap<DefId, FxHashSet<ast::Name>>,
/// Extern prelude entries. The value is `true` if the entry was introduced
/// via `extern crate` item and not `--extern` option or compiler built-in.
pub extern_prelude: FxHashMap<ast::Name, bool>,
@@ -1232,6 +1235,9 @@
.into_iter()
.map(|(id, sp)| (hir.local_def_id(id), sp))
.collect(),
+ glob_map: resolutions.glob_map.into_iter().map(|(id, names)| {
+ (hir.local_def_id(id), names)
+ }).collect(),
extern_prelude: resolutions.extern_prelude,
hir_map: hir,
def_path_hash_to_def_id,
@@ -1682,6 +1688,7 @@
let new_icx = ty::tls::ImplicitCtxt {
tcx,
query: icx.query.clone(),
+ diagnostics: icx.diagnostics,
layout_depth: icx.layout_depth,
task_deps: icx.task_deps,
};
@@ -1792,6 +1799,7 @@
use errors::{Diagnostic, TRACK_DIAGNOSTICS};
use rustc_data_structures::OnDrop;
use rustc_data_structures::sync::{self, Lrc, Lock};
+ use rustc_data_structures::thin_vec::ThinVec;
use dep_graph::TaskDeps;
#[cfg(not(parallel_queries))]
@@ -1811,10 +1819,14 @@
/// by `enter_local` with a new local interner
pub tcx: TyCtxt<'tcx, 'gcx, 'tcx>,
- /// The current query job, if any. This is updated by start_job in
+ /// The current query job, if any. This is updated by JobOwner::start in
/// ty::query::plumbing when executing a query
pub query: Option<Lrc<query::QueryJob<'gcx>>>,
+ /// Where to store diagnostics for the current query job, if any.
+ /// This is updated by JobOwner::start in ty::query::plumbing when executing a query
+ pub diagnostics: Option<&'a Lock<ThinVec<Diagnostic>>>,
+
/// Used to prevent layout from recursing too deeply.
pub layout_depth: usize,
@@ -1880,8 +1892,9 @@
fn track_diagnostic(diagnostic: &Diagnostic) {
with_context_opt(|icx| {
if let Some(icx) = icx {
- if let Some(ref query) = icx.query {
- query.diagnostics.lock().push(diagnostic.clone());
+ if let Some(ref diagnostics) = icx.diagnostics {
+ let mut diagnostics = diagnostics.lock();
+ diagnostics.extend(Some(diagnostic.clone()));
}
}
})
@@ -1948,6 +1961,7 @@
let icx = ImplicitCtxt {
tcx,
query: None,
+ diagnostics: None,
layout_depth: 0,
task_deps: None,
};
@@ -1977,6 +1991,7 @@
};
let icx = ImplicitCtxt {
query: None,
+ diagnostics: None,
tcx,
layout_depth: 0,
task_deps: None,
@@ -2963,6 +2978,10 @@
assert_eq!(cnum, LOCAL_CRATE);
Lrc::new(tcx.maybe_unused_extern_crates.clone())
};
+ providers.names_imported_by_glob_use = |tcx, id| {
+ assert_eq!(id.krate, LOCAL_CRATE);
+ Lrc::new(tcx.glob_map.get(&id).cloned().unwrap_or_default())
+ };
providers.stability_index = |tcx, cnum| {
assert_eq!(cnum, LOCAL_CRATE);
diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs
index cfd9994..f1b36e8 100644
--- a/src/librustc/ty/mod.rs
+++ b/src/librustc/ty/mod.rs
@@ -4,7 +4,7 @@
pub use self::IntVarValue::*;
pub use self::fold::TypeFoldable;
-use hir::{map as hir_map, FreevarMap, TraitMap};
+use hir::{map as hir_map, FreevarMap, GlobMap, TraitMap};
use hir::Node;
use hir::def::{Def, CtorKind, ExportMap};
use hir::def_id::{CrateNum, DefId, LocalDefId, CRATE_DEF_INDEX, LOCAL_CRATE};
@@ -115,16 +115,6 @@
// Data types
-/// The complete set of all analyses described in this module. This is
-/// produced by the driver and fed to codegen and later passes.
-///
-/// N.B., these contents are being migrated into queries using the
-/// *on-demand* infrastructure.
-#[derive(Clone)]
-pub struct CrateAnalysis {
- pub glob_map: Option<hir::GlobMap>,
-}
-
#[derive(Clone)]
pub struct Resolutions {
pub freevars: FreevarMap,
@@ -132,6 +122,7 @@
pub maybe_unused_trait_imports: NodeSet,
pub maybe_unused_extern_crates: Vec<(NodeId, Span)>,
pub export_map: ExportMap,
+ pub glob_map: GlobMap,
/// Extern prelude entries. The value is `true` if the entry was introduced
/// via `extern crate` item and not `--extern` option or compiler built-in.
pub extern_prelude: FxHashMap<Name, bool>,
diff --git a/src/librustc/ty/query/config.rs b/src/librustc/ty/query/config.rs
index 3464464..ae41ca0 100644
--- a/src/librustc/ty/query/config.rs
+++ b/src/librustc/ty/query/config.rs
@@ -68,11 +68,83 @@
format!("processing `{}`", tcx.item_path_str(def_id)).into()
} else {
let name = unsafe { ::std::intrinsics::type_name::<M>() };
- format!("processing `{}` applied to `{:?}`", name, def_id).into()
+ format!("processing {:?} with query `{}`", def_id, name).into()
}
}
}
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_attrs<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking attributes in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_unstable_api_usage<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking for unstable API usage in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_loops<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking loops in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_item_types<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking item types in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_privacy<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking privacy in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_intrinsics<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking intrinsics in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_liveness<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking liveness of variables in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
+impl<'tcx> QueryDescription<'tcx> for queries::collect_mod_item_types<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("collecting item types in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
impl<'tcx> QueryDescription<'tcx> for queries::normalize_projection_ty<'tcx> {
fn describe(
_tcx: TyCtxt<'_, '_, '_>,
@@ -584,6 +656,12 @@
}
}
+impl<'tcx> QueryDescription<'tcx> for queries::entry_fn<'tcx> {
+ fn describe(_tcx: TyCtxt<'_, '_, '_>, _: CrateNum) -> Cow<'static, str> {
+ "looking up the entry function of a crate".into()
+ }
+}
+
impl<'tcx> QueryDescription<'tcx> for queries::plugin_registrar_fn<'tcx> {
fn describe(_tcx: TyCtxt<'_, '_, '_>, _: CrateNum) -> Cow<'static, str> {
"looking up the plugin registrar for a crate".into()
diff --git a/src/librustc/ty/query/job.rs b/src/librustc/ty/query/job.rs
index 0063794..d794429 100644
--- a/src/librustc/ty/query/job.rs
+++ b/src/librustc/ty/query/job.rs
@@ -14,7 +14,6 @@
config::QueryDescription,
};
use ty::context::TyCtxt;
-use errors::Diagnostic;
use std::process;
use std::{fmt, ptr};
@@ -54,9 +53,6 @@
/// The parent query job which created this job and is implicitly waiting on it.
pub parent: Option<Lrc<QueryJob<'tcx>>>,
- /// Diagnostic messages which are emitted while the query executes
- pub diagnostics: Lock<Vec<Diagnostic>>,
-
/// The latch which is used to wait on this job
#[cfg(parallel_queries)]
latch: QueryLatch<'tcx>,
@@ -66,7 +62,6 @@
/// Creates a new query job
pub fn new(info: QueryInfo<'tcx>, parent: Option<Lrc<QueryJob<'tcx>>>) -> Self {
QueryJob {
- diagnostics: Lock::new(Vec::new()),
info,
parent,
#[cfg(parallel_queries)]
diff --git a/src/librustc/ty/query/mod.rs b/src/librustc/ty/query/mod.rs
index d9cabb3..10f3571 100644
--- a/src/librustc/ty/query/mod.rs
+++ b/src/librustc/ty/query/mod.rs
@@ -22,7 +22,7 @@
use mir;
use mir::interpret::GlobalId;
use session::{CompileResult, CrateDisambiguator};
-use session::config::OutputFilenames;
+use session::config::{EntryFnType, OutputFilenames};
use traits::{self, Vtable};
use traits::query::{
CanonicalPredicateGoal, CanonicalProjectionGoal,
@@ -254,6 +254,24 @@
},
Other {
+ /// Checks the attributes in the module
+ [] fn check_mod_attrs: CheckModAttrs(DefId) -> (),
+
+ [] fn check_mod_unstable_api_usage: CheckModUnstableApiUsage(DefId) -> (),
+
+ /// Checks the loops in the module
+ [] fn check_mod_loops: CheckModLoops(DefId) -> (),
+
+ [] fn check_mod_item_types: CheckModItemTypes(DefId) -> (),
+
+ [] fn check_mod_privacy: CheckModPrivacy(DefId) -> (),
+
+ [] fn check_mod_intrinsics: CheckModIntrinsics(DefId) -> (),
+
+ [] fn check_mod_liveness: CheckModLiveness(DefId) -> (),
+
+ [] fn collect_mod_item_types: CollectModItemTypes(DefId) -> (),
+
/// Caches CoerceUnsized kinds for impls on custom types.
[] fn coerce_unsized_info: CoerceUnsizedInfo(DefId)
-> ty::adjustment::CoerceUnsizedInfo,
@@ -464,6 +482,9 @@
[] fn foreign_modules: ForeignModules(CrateNum) -> Lrc<Vec<ForeignModule>>,
+ /// Identifies the entry-point (e.g. the `main` function) for a given
+ /// crate, returning `None` if there is no entry point (such as for library crates).
+ [] fn entry_fn: EntryFn(CrateNum) -> Option<(DefId, EntryFnType)>,
[] fn plugin_registrar_fn: PluginRegistrarFn(CrateNum) -> Option<DefId>,
[] fn proc_macro_decls_static: ProcMacroDeclsStatic(CrateNum) -> Option<DefId>,
[] fn crate_disambiguator: CrateDisambiguator(CrateNum) -> CrateDisambiguator,
@@ -529,6 +550,8 @@
[] fn maybe_unused_trait_import: MaybeUnusedTraitImport(DefId) -> bool,
[] fn maybe_unused_extern_crates: maybe_unused_extern_crates_node(CrateNum)
-> Lrc<Vec<(DefId, Span)>>,
+ [] fn names_imported_by_glob_use: NamesImportedByGlobUse(DefId)
+ -> Lrc<FxHashSet<ast::Name>>,
[] fn stability_index: stability_index_node(CrateNum) -> Lrc<stability::Index<'tcx>>,
[] fn all_crate_nums: all_crate_nums_node(CrateNum) -> Lrc<Vec<CrateNum>>,
diff --git a/src/librustc/ty/query/on_disk_cache.rs b/src/librustc/ty/query/on_disk_cache.rs
index 3432aba..a674e94 100644
--- a/src/librustc/ty/query/on_disk_cache.rs
+++ b/src/librustc/ty/query/on_disk_cache.rs
@@ -7,6 +7,7 @@
use mir::{self, interpret};
use mir::interpret::{AllocDecodingSession, AllocDecodingState};
use rustc_data_structures::fx::FxHashMap;
+use rustc_data_structures::thin_vec::ThinVec;
use rustc_data_structures::sync::{Lrc, Lock, HashMapExt, Once};
use rustc_data_structures::indexed_vec::{IndexVec, Idx};
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder, opaque,
@@ -341,11 +342,13 @@
/// Store a diagnostic emitted during the current compilation session.
/// Anything stored like this will be available via `load_diagnostics` in
/// the next compilation session.
+ #[inline(never)]
+ #[cold]
pub fn store_diagnostics(&self,
dep_node_index: DepNodeIndex,
- diagnostics: Vec<Diagnostic>) {
+ diagnostics: ThinVec<Diagnostic>) {
let mut current_diagnostics = self.current_diagnostics.borrow_mut();
- let prev = current_diagnostics.insert(dep_node_index, diagnostics);
+ let prev = current_diagnostics.insert(dep_node_index, diagnostics.into());
debug_assert!(prev.is_none());
}
@@ -367,16 +370,16 @@
/// Since many anonymous queries can share the same `DepNode`, we aggregate
/// them -- as opposed to regular queries where we assume that there is a
/// 1:1 relationship between query-key and `DepNode`.
+ #[inline(never)]
+ #[cold]
pub fn store_diagnostics_for_anon_node(&self,
dep_node_index: DepNodeIndex,
- mut diagnostics: Vec<Diagnostic>) {
+ diagnostics: ThinVec<Diagnostic>) {
let mut current_diagnostics = self.current_diagnostics.borrow_mut();
- let x = current_diagnostics.entry(dep_node_index).or_insert_with(|| {
- mem::replace(&mut diagnostics, Vec::new())
- });
+ let x = current_diagnostics.entry(dep_node_index).or_insert(Vec::new());
- x.extend(diagnostics.into_iter());
+ x.extend(Into::<Vec<_>>::into(diagnostics));
}
fn load_indexed<'tcx, T>(&self,
diff --git a/src/librustc/ty/query/plumbing.rs b/src/librustc/ty/query/plumbing.rs
index 2d619d1..1cc9bbd 100644
--- a/src/librustc/ty/query/plumbing.rs
+++ b/src/librustc/ty/query/plumbing.rs
@@ -2,7 +2,7 @@
//! that generate the actual methods on tcx which find and execute the
//! provider, manage the caches, and so forth.
-use dep_graph::{DepNodeIndex, DepNode, DepKind, DepNodeColor};
+use dep_graph::{DepNodeIndex, DepNode, DepKind, SerializedDepNodeIndex};
use errors::DiagnosticBuilder;
use errors::Level;
use errors::Diagnostic;
@@ -18,6 +18,7 @@
use rustc_data_structures::fx::{FxHashMap};
use rustc_data_structures::sync::{Lrc, Lock};
+use rustc_data_structures::thin_vec::ThinVec;
use std::mem;
use std::ptr;
use std::collections::hash_map::Entry;
@@ -195,19 +196,21 @@
pub(super) fn start<'lcx, F, R>(
&self,
tcx: TyCtxt<'_, 'tcx, 'lcx>,
+ diagnostics: Option<&Lock<ThinVec<Diagnostic>>>,
compute: F)
- -> (R, Vec<Diagnostic>)
+ -> R
where
F: for<'b> FnOnce(TyCtxt<'b, 'tcx, 'lcx>) -> R
{
// The TyCtxt stored in TLS has the same global interner lifetime
// as `tcx`, so we use `with_related_context` to relate the 'gcx lifetimes
// when accessing the ImplicitCtxt
- let r = tls::with_related_context(tcx, move |current_icx| {
+ tls::with_related_context(tcx, move |current_icx| {
// Update the ImplicitCtxt to point to our new query job
let new_icx = tls::ImplicitCtxt {
tcx: tcx.global_tcx(),
query: Some(self.job.clone()),
+ diagnostics,
layout_depth: current_icx.layout_depth,
task_deps: current_icx.task_deps,
};
@@ -216,13 +219,19 @@
tls::enter_context(&new_icx, |_| {
compute(tcx)
})
- });
-
- // Extract the diagnostic from the job
- let diagnostics = mem::replace(&mut *self.job.diagnostics.lock(), Vec::new());
-
- (r, diagnostics)
+ })
}
+
+}
+
+#[inline(always)]
+fn with_diagnostics<F, R>(f: F) -> (R, ThinVec<Diagnostic>)
+where
+ F: FnOnce(Option<&Lock<ThinVec<Diagnostic>>>) -> R
+{
+ let diagnostics = Lock::new(ThinVec::new());
+ let result = f(Some(&diagnostics));
+ (result, diagnostics.into_inner())
}
impl<'a, 'tcx, Q: QueryDescription<'tcx>> Drop for JobOwner<'a, 'tcx, Q> {
@@ -326,40 +335,6 @@
eprintln!("end of query stack");
}
- /// Try to read a node index for the node dep_node.
- /// A node will have an index, when it's already been marked green, or when we can mark it
- /// green. This function will mark the current task as a reader of the specified node, when
- /// a node index can be found for that node.
- pub(super) fn try_mark_green_and_read(self, dep_node: &DepNode) -> Option<DepNodeIndex> {
- match self.dep_graph.node_color(dep_node) {
- Some(DepNodeColor::Green(dep_node_index)) => {
- self.dep_graph.read_index(dep_node_index);
- Some(dep_node_index)
- }
- Some(DepNodeColor::Red) => {
- None
- }
- None => {
- // try_mark_green (called below) will panic when full incremental
- // compilation is disabled. If that's the case, we can't try to mark nodes
- // as green anyway, so we can safely return None here.
- if !self.dep_graph.is_fully_enabled() {
- return None;
- }
- match self.dep_graph.try_mark_green(self.global_tcx(), &dep_node) {
- Some(dep_node_index) => {
- debug_assert!(self.dep_graph.is_green(&dep_node));
- self.dep_graph.read_index(dep_node_index);
- Some(dep_node_index)
- }
- None => {
- None
- }
- }
- }
- }
- }
-
#[inline(never)]
fn try_get_with<Q: QueryDescription<'gcx>>(
self,
@@ -393,7 +368,7 @@
// expensive for some DepKinds.
if !self.dep_graph.is_fully_enabled() {
let null_dep_node = DepNode::new_no_params(::dep_graph::DepKind::Null);
- return self.force_query_with_job::<Q>(key, job, null_dep_node).map(|(v, _)| v);
+ return Ok(self.force_query_with_job::<Q>(key, job, null_dep_node).0);
}
let dep_node = Q::to_dep_node(self, &key);
@@ -402,20 +377,23 @@
profq_msg!(self, ProfileQueriesMsg::ProviderBegin);
self.sess.profiler(|p| p.start_activity(Q::CATEGORY));
- let res = job.start(self, |tcx| {
- tcx.dep_graph.with_anon_task(dep_node.kind, || {
- Q::compute(tcx.global_tcx(), key)
+ let ((result, dep_node_index), diagnostics) = with_diagnostics(|diagnostics| {
+ job.start(self, diagnostics, |tcx| {
+ tcx.dep_graph.with_anon_task(dep_node.kind, || {
+ Q::compute(tcx.global_tcx(), key)
+ })
})
});
self.sess.profiler(|p| p.end_activity(Q::CATEGORY));
profq_msg!(self, ProfileQueriesMsg::ProviderEnd);
- let ((result, dep_node_index), diagnostics) = res;
self.dep_graph.read_index(dep_node_index);
- self.queries.on_disk_cache
- .store_diagnostics_for_anon_node(dep_node_index, diagnostics);
+ if unlikely!(!diagnostics.is_empty()) {
+ self.queries.on_disk_cache
+ .store_diagnostics_for_anon_node(dep_node_index, diagnostics);
+ }
job.complete(&result, dep_node_index);
@@ -423,30 +401,32 @@
}
if !dep_node.kind.is_input() {
- if let Some(dep_node_index) = self.try_mark_green_and_read(&dep_node) {
- return self.load_from_disk_and_cache_in_memory::<Q>(key,
- job,
- dep_node_index,
- &dep_node)
+ if let Some((prev_dep_node_index,
+ dep_node_index)) = self.dep_graph.try_mark_green_and_read(self,
+ &dep_node) {
+ return Ok(self.load_from_disk_and_cache_in_memory::<Q>(
+ key,
+ job,
+ prev_dep_node_index,
+ dep_node_index,
+ &dep_node
+ ))
}
}
- match self.force_query_with_job::<Q>(key, job, dep_node) {
- Ok((result, dep_node_index)) => {
- self.dep_graph.read_index(dep_node_index);
- Ok(result)
- }
- Err(e) => Err(e)
- }
+ let (result, dep_node_index) = self.force_query_with_job::<Q>(key, job, dep_node);
+ self.dep_graph.read_index(dep_node_index);
+ Ok(result)
}
fn load_from_disk_and_cache_in_memory<Q: QueryDescription<'gcx>>(
self,
key: Q::Key,
job: JobOwner<'a, 'gcx, Q>,
+ prev_dep_node_index: SerializedDepNodeIndex,
dep_node_index: DepNodeIndex,
dep_node: &DepNode
- ) -> Result<Q::Value, Box<CycleError<'gcx>>>
+ ) -> Q::Value
{
// Note this function can be called concurrently from the same query
// We must ensure that this is handled correctly
@@ -456,10 +436,7 @@
// First we try to load the result from the on-disk cache
let result = if Q::cache_on_disk(key.clone()) &&
self.sess.opts.debugging_opts.incremental_queries {
- let prev_dep_node_index =
- self.dep_graph.prev_dep_node_index_of(dep_node);
- let result = Q::try_load_from_disk(self.global_tcx(),
- prev_dep_node_index);
+ let result = Q::try_load_from_disk(self.global_tcx(), prev_dep_node_index);
// We always expect to find a cached result for things that
// can be forced from DepNode.
@@ -487,7 +464,7 @@
// The diagnostics for this query have already been
// promoted to the current session during
// try_mark_green(), so we can ignore them here.
- let (result, _) = job.start(self, |tcx| {
+ let result = job.start(self, None, |tcx| {
// The dep-graph for this computation is already in
// place
tcx.dep_graph.with_ignore(|| {
@@ -511,7 +488,7 @@
job.complete(&result, dep_node_index);
- Ok(result)
+ result
}
#[inline(never)]
@@ -551,7 +528,7 @@
key: Q::Key,
job: JobOwner<'_, 'gcx, Q>,
dep_node: DepNode)
- -> Result<(Q::Value, DepNodeIndex), Box<CycleError<'gcx>>> {
+ -> (Q::Value, DepNodeIndex) {
// If the following assertion triggers, it can have two reasons:
// 1. Something is wrong with DepNode creation, either here or
// in DepGraph::try_mark_green()
@@ -566,37 +543,39 @@
profq_msg!(self, ProfileQueriesMsg::ProviderBegin);
self.sess.profiler(|p| p.start_activity(Q::CATEGORY));
- let res = job.start(self, |tcx| {
- if dep_node.kind.is_eval_always() {
- tcx.dep_graph.with_eval_always_task(dep_node,
- tcx,
- key,
- Q::compute)
- } else {
- tcx.dep_graph.with_task(dep_node,
- tcx,
- key,
- Q::compute)
- }
+ let ((result, dep_node_index), diagnostics) = with_diagnostics(|diagnostics| {
+ job.start(self, diagnostics, |tcx| {
+ if dep_node.kind.is_eval_always() {
+ tcx.dep_graph.with_eval_always_task(dep_node,
+ tcx,
+ key,
+ Q::compute)
+ } else {
+ tcx.dep_graph.with_task(dep_node,
+ tcx,
+ key,
+ Q::compute)
+ }
+ })
});
self.sess.profiler(|p| p.end_activity(Q::CATEGORY));
profq_msg!(self, ProfileQueriesMsg::ProviderEnd);
- let ((result, dep_node_index), diagnostics) = res;
-
if unlikely!(self.sess.opts.debugging_opts.query_dep_graph) {
self.dep_graph.mark_loaded_from_cache(dep_node_index, false);
}
if dep_node.kind != ::dep_graph::DepKind::Null {
- self.queries.on_disk_cache
- .store_diagnostics(dep_node_index, diagnostics);
+ if unlikely!(!diagnostics.is_empty()) {
+ self.queries.on_disk_cache
+ .store_diagnostics(dep_node_index, diagnostics);
+ }
}
job.complete(&result, dep_node_index);
- Ok((result, dep_node_index))
+ (result, dep_node_index)
}
/// Ensure that either this query has all green inputs or been executed.
@@ -612,7 +591,7 @@
// Ensuring an "input" or anonymous query makes no sense
assert!(!dep_node.kind.is_anon());
assert!(!dep_node.kind.is_input());
- if self.try_mark_green_and_read(&dep_node).is_none() {
+ if self.dep_graph.try_mark_green_and_read(self, &dep_node).is_none() {
// A None return from `try_mark_green_and_read` means that this is either
// a new dep node or that the dep node has already been marked red.
// Either way, we can't call `dep_graph.read()` as we don't have the
@@ -643,11 +622,14 @@
// Ensure that only one of them runs the query
let job = match JobOwner::try_get(self, span, &key) {
TryGetJob::NotYetStarted(job) => job,
- TryGetJob::JobCompleted(_) => return,
+ TryGetJob::JobCompleted(result) => {
+ if let Err(e) = result {
+ self.report_cycle(e).emit();
+ }
+ return
+ }
};
- if let Err(e) = self.force_query_with_job::<Q>(key, job, dep_node) {
- self.report_cycle(e).emit();
- }
+ self.force_query_with_job::<Q>(key, job, dep_node);
}
pub(super) fn try_get_query<Q: QueryDescription<'gcx>>(
@@ -1262,6 +1244,14 @@
DepKind::MirBorrowCheck => { force!(mir_borrowck, def_id!()); }
DepKind::UnsafetyCheckResult => { force!(unsafety_check_result, def_id!()); }
DepKind::UnsafeDeriveOnReprPacked => { force!(unsafe_derive_on_repr_packed, def_id!()); }
+ DepKind::CheckModAttrs => { force!(check_mod_attrs, def_id!()); }
+ DepKind::CheckModLoops => { force!(check_mod_loops, def_id!()); }
+ DepKind::CheckModUnstableApiUsage => { force!(check_mod_unstable_api_usage, def_id!()); }
+ DepKind::CheckModItemTypes => { force!(check_mod_item_types, def_id!()); }
+ DepKind::CheckModPrivacy => { force!(check_mod_privacy, def_id!()); }
+ DepKind::CheckModIntrinsics => { force!(check_mod_intrinsics, def_id!()); }
+ DepKind::CheckModLiveness => { force!(check_mod_liveness, def_id!()); }
+ DepKind::CollectModItemTypes => { force!(collect_mod_item_types, def_id!()); }
DepKind::Reachability => { force!(reachable_set, LOCAL_CRATE); }
DepKind::MirKeys => { force!(mir_keys, LOCAL_CRATE); }
DepKind::CrateVariances => { force!(crate_variances, LOCAL_CRATE); }
@@ -1342,6 +1332,7 @@
DepKind::CheckImplItemWellFormed => { force!(check_impl_item_well_formed, def_id!()); }
DepKind::ReachableNonGenerics => { force!(reachable_non_generics, krate!()); }
DepKind::NativeLibraries => { force!(native_libraries, krate!()); }
+ DepKind::EntryFn => { force!(entry_fn, krate!()); }
DepKind::PluginRegistrarFn => { force!(plugin_registrar_fn, krate!()); }
DepKind::ProcMacroDeclsStatic => { force!(proc_macro_decls_static, krate!()); }
DepKind::CrateDisambiguator => { force!(crate_disambiguator, krate!()); }
@@ -1393,6 +1384,7 @@
DepKind::MaybeUnusedTraitImport => {
force!(maybe_unused_trait_import, def_id!());
}
+ DepKind::NamesImportedByGlobUse => { force!(names_imported_by_glob_use, def_id!()); }
DepKind::MaybeUnusedExternCrates => { force!(maybe_unused_extern_crates, LOCAL_CRATE); }
DepKind::StabilityIndex => { force!(stability_index, LOCAL_CRATE); }
DepKind::AllTraits => { force!(all_traits, LOCAL_CRATE); }
diff --git a/src/librustc_borrowck/borrowck/mod.rs b/src/librustc_borrowck/borrowck/mod.rs
index 66303ab..72963cb 100644
--- a/src/librustc_borrowck/borrowck/mod.rs
+++ b/src/librustc_borrowck/borrowck/mod.rs
@@ -39,7 +39,6 @@
use errors::{Applicability, DiagnosticBuilder, DiagnosticId};
use rustc::hir;
-use rustc::hir::intravisit::{self, Visitor};
use dataflow::{DataFlowContext, BitwiseOperator, DataFlowOperator, KillFrom};
@@ -157,12 +156,6 @@
where F: FnOnce(&mut BorrowckCtxt<'a, 'tcx>) -> &'c cfg::CFG
{
// Check the body of fn items.
- let tcx = this.tcx;
- let id_range = {
- let mut visitor = intravisit::IdRangeComputingVisitor::new(&tcx.hir());
- visitor.visit_body(this.body);
- visitor.result()
- };
let (all_loans, move_data) =
gather_loans::gather_loans_in_fn(this, body_id);
@@ -184,7 +177,6 @@
Some(this.body),
cfg,
LoanDataFlowOperator,
- id_range,
all_loans.len());
for (loan_idx, loan) in all_loans.iter().enumerate() {
loan_dfcx.add_gen(loan.gen_scope.item_local_id(), loan_idx);
@@ -198,7 +190,6 @@
let flowed_moves = move_data::FlowedMoveData::new(move_data,
this,
cfg,
- id_range,
this.body);
Some(AnalysisData { all_loans,
diff --git a/src/librustc_borrowck/borrowck/move_data.rs b/src/librustc_borrowck/borrowck/move_data.rs
index c5bee87..56c9f92 100644
--- a/src/librustc_borrowck/borrowck/move_data.rs
+++ b/src/librustc_borrowck/borrowck/move_data.rs
@@ -15,7 +15,6 @@
use std::usize;
use syntax_pos::Span;
use rustc::hir;
-use rustc::hir::intravisit::IdRange;
#[derive(Default)]
pub struct MoveData<'tcx> {
@@ -559,7 +558,6 @@
pub fn new(move_data: MoveData<'tcx>,
bccx: &BorrowckCtxt<'a, 'tcx>,
cfg: &cfg::CFG,
- id_range: IdRange,
body: &hir::Body)
-> FlowedMoveData<'a, 'tcx> {
let tcx = bccx.tcx;
@@ -570,7 +568,6 @@
Some(body),
cfg,
MoveDataFlowOperator,
- id_range,
move_data.moves.borrow().len());
let mut dfcx_assign =
DataFlowContext::new(tcx,
@@ -578,7 +575,6 @@
Some(body),
cfg,
AssignDataFlowOperator,
- id_range,
move_data.var_assignments.borrow().len());
move_data.add_gen_kills(bccx,
diff --git a/src/librustc_borrowck/dataflow.rs b/src/librustc_borrowck/dataflow.rs
index 56e25bd..8cf6205 100644
--- a/src/librustc_borrowck/dataflow.rs
+++ b/src/librustc_borrowck/dataflow.rs
@@ -15,7 +15,7 @@
use rustc::util::nodemap::FxHashMap;
use rustc::hir;
-use rustc::hir::intravisit::{self, IdRange};
+use rustc::hir::intravisit;
use rustc::hir::print as pprust;
@@ -230,16 +230,15 @@
body: Option<&hir::Body>,
cfg: &cfg::CFG,
oper: O,
- id_range: IdRange,
bits_per_id: usize) -> DataFlowContext<'a, 'tcx, O> {
let usize_bits = mem::size_of::<usize>() * 8;
let words_per_id = (bits_per_id + usize_bits - 1) / usize_bits;
let num_nodes = cfg.graph.all_nodes().len();
- debug!("DataFlowContext::new(analysis_name: {}, id_range={:?}, \
+ debug!("DataFlowContext::new(analysis_name: {}, \
bits_per_id={}, words_per_id={}) \
num_nodes: {}",
- analysis_name, id_range, bits_per_id, words_per_id,
+ analysis_name, bits_per_id, words_per_id,
num_nodes);
let entry = if oper.initial_value() { usize::MAX } else {0};
diff --git a/src/librustc_codegen_llvm/debuginfo/mod.rs b/src/librustc_codegen_llvm/debuginfo/mod.rs
index 2eab626..b504aa5 100644
--- a/src/librustc_codegen_llvm/debuginfo/mod.rs
+++ b/src/librustc_codegen_llvm/debuginfo/mod.rs
@@ -14,7 +14,7 @@
use llvm::debuginfo::{DIFile, DIType, DIScope, DIBuilder, DISubprogram, DIArray, DIFlags,
DILexicalBlock};
use rustc::hir::CodegenFnAttrFlags;
-use rustc::hir::def_id::{DefId, CrateNum};
+use rustc::hir::def_id::{DefId, CrateNum, LOCAL_CRATE};
use rustc::ty::subst::{Substs, UnpackedKind};
use abi::Abi;
@@ -290,9 +290,8 @@
let mut flags = DIFlags::FlagPrototyped;
- let local_id = self.tcx().hir().as_local_node_id(def_id);
- if let Some((id, _, _)) = *self.sess().entry_fn.borrow() {
- if local_id == Some(id) {
+ if let Some((id, _)) = self.tcx.entry_fn(LOCAL_CRATE) {
+ if id == def_id {
flags |= DIFlags::FlagMainSubprogram;
}
}
diff --git a/src/librustc_codegen_llvm/intrinsic.rs b/src/librustc_codegen_llvm/intrinsic.rs
index f5680b2..eeb6a64 100644
--- a/src/librustc_codegen_llvm/intrinsic.rs
+++ b/src/librustc_codegen_llvm/intrinsic.rs
@@ -1,7 +1,6 @@
#![allow(non_upper_case_globals)]
use attributes;
-use intrinsics::{self, Intrinsic};
use llvm;
use llvm_util;
use abi::{Abi, FnType, LlvmType, PassMode};
@@ -658,142 +657,7 @@
return;
}
- _ => {
- let intr = match Intrinsic::find(&name) {
- Some(intr) => intr,
- None => bug!("unknown intrinsic '{}'", name),
- };
- fn one<T>(x: Vec<T>) -> T {
- assert_eq!(x.len(), 1);
- x.into_iter().next().unwrap()
- }
- fn ty_to_type<'ll>(
- cx: &CodegenCx<'ll, '_>,
- t: &intrinsics::Type
- ) -> Vec<&'ll Type> {
- use intrinsics::Type::*;
- match *t {
- Void => vec![cx.type_void()],
- Integer(_signed, _width, llvm_width) => {
- vec![cx.type_ix( llvm_width as u64)]
- }
- Float(x) => {
- match x {
- 32 => vec![cx.type_f32()],
- 64 => vec![cx.type_f64()],
- _ => bug!()
- }
- }
- Pointer(ref t, ref llvm_elem, _const) => {
- let t = llvm_elem.as_ref().unwrap_or(t);
- let elem = one(ty_to_type(cx, t));
- vec![cx.type_ptr_to(elem)]
- }
- Vector(ref t, ref llvm_elem, length) => {
- let t = llvm_elem.as_ref().unwrap_or(t);
- let elem = one(ty_to_type(cx, t));
- vec![cx.type_vector(elem, length as u64)]
- }
- Aggregate(false, ref contents) => {
- let elems = contents.iter()
- .map(|t| one(ty_to_type(cx, t)))
- .collect::<Vec<_>>();
- vec![cx.type_struct( &elems, false)]
- }
- Aggregate(true, ref contents) => {
- contents.iter()
- .flat_map(|t| ty_to_type(cx, t))
- .collect()
- }
- }
- }
-
- // This allows an argument list like `foo, (bar, baz),
- // qux` to be converted into `foo, bar, baz, qux`, integer
- // arguments to be truncated as needed and pointers to be
- // cast.
- fn modify_as_needed<'ll, 'tcx>(
- bx: &mut Builder<'_, 'll, 'tcx>,
- t: &intrinsics::Type,
- arg: &OperandRef<'tcx, &'ll Value>,
- ) -> Vec<&'ll Value> {
- match *t {
- intrinsics::Type::Aggregate(true, ref contents) => {
- // We found a tuple that needs squishing! So
- // run over the tuple and load each field.
- //
- // This assumes the type is "simple", i.e., no
- // destructors, and the contents are SIMD
- // etc.
- assert!(!bx.type_needs_drop(arg.layout.ty));
- let (ptr, align) = match arg.val {
- OperandValue::Ref(ptr, None, align) => (ptr, align),
- _ => bug!()
- };
- let arg = PlaceRef::new_sized(ptr, arg.layout, align);
- (0..contents.len()).map(|i| {
- let field = arg.project_field(bx, i);
- bx.load_operand(field).immediate()
- }).collect()
- }
- intrinsics::Type::Pointer(_, Some(ref llvm_elem), _) => {
- let llvm_elem = one(ty_to_type(bx, llvm_elem));
- vec![bx.pointercast(arg.immediate(), bx.type_ptr_to(llvm_elem))]
- }
- intrinsics::Type::Vector(_, Some(ref llvm_elem), length) => {
- let llvm_elem = one(ty_to_type(bx, llvm_elem));
- vec![
- bx.bitcast(arg.immediate(),
- bx.type_vector(llvm_elem, length as u64))
- ]
- }
- intrinsics::Type::Integer(_, width, llvm_width) if width != llvm_width => {
- // the LLVM intrinsic uses a smaller integer
- // size than the C intrinsic's signature, so
- // we have to trim it down here.
- vec![bx.trunc(arg.immediate(), bx.type_ix(llvm_width as u64))]
- }
- _ => vec![arg.immediate()],
- }
- }
-
-
- let inputs = intr.inputs.iter()
- .flat_map(|t| ty_to_type(self, t))
- .collect::<Vec<_>>();
-
- let outputs = one(ty_to_type(self, &intr.output));
-
- let llargs: Vec<_> = intr.inputs.iter().zip(args).flat_map(|(t, arg)| {
- modify_as_needed(self, t, arg)
- }).collect();
- assert_eq!(inputs.len(), llargs.len());
-
- let val = match intr.definition {
- intrinsics::IntrinsicDef::Named(name) => {
- let f = self.declare_cfn(
- name,
- self.type_func(&inputs, outputs),
- );
- self.call(f, &llargs, None)
- }
- };
-
- match *intr.output {
- intrinsics::Type::Aggregate(flatten, ref elems) => {
- // the output is a tuple so we need to munge it properly
- assert!(!flatten);
-
- for i in 0..elems.len() {
- let dest = result.project_field(self, i);
- let val = self.extract_value(val, i as u64);
- self.store(val, dest.llval, dest.align);
- }
- return;
- }
- _ => val,
- }
- }
+ _ => bug!("unknown intrinsic '{}'", name),
};
if !fn_ty.ret.is_ignore() {
diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs
index 3205348..272f34b 100644
--- a/src/librustc_codegen_llvm/lib.rs
+++ b/src/librustc_codegen_llvm/lib.rs
@@ -43,7 +43,6 @@
extern crate rustc_demangle;
extern crate rustc_incremental;
extern crate rustc_llvm;
-extern crate rustc_platform_intrinsics as intrinsics;
extern crate rustc_codegen_utils;
extern crate rustc_codegen_ssa;
extern crate rustc_fs_util;
diff --git a/src/librustc_codegen_llvm/llvm_util.rs b/src/librustc_codegen_llvm/llvm_util.rs
index ad9ebbc..dc70ebc 100644
--- a/src/librustc_codegen_llvm/llvm_util.rs
+++ b/src/librustc_codegen_llvm/llvm_util.rs
@@ -3,6 +3,7 @@
use llvm;
use rustc::session::Session;
use rustc::session::config::PrintRequest;
+use rustc_target::spec::MergeFunctions;
use libc::c_int;
use std::ffi::CString;
use syntax::feature_gate::UnstableFeatures;
@@ -61,7 +62,14 @@
add("-disable-preinline");
}
if llvm::LLVMRustIsRustLLVM() {
- add("-mergefunc-use-aliases");
+ match sess.opts.debugging_opts.merge_functions
+ .unwrap_or(sess.target.target.options.merge_functions) {
+ MergeFunctions::Disabled |
+ MergeFunctions::Trampolines => {}
+ MergeFunctions::Aliases => {
+ add("-mergefunc-use-aliases");
+ }
+ }
}
// HACK(eddyb) LLVM inserts `llvm.assume` calls to preserve align attributes
diff --git a/src/librustc_codegen_ssa/back/symbol_export.rs b/src/librustc_codegen_ssa/back/symbol_export.rs
index 928e171..c372892 100644
--- a/src/librustc_codegen_ssa/back/symbol_export.rs
+++ b/src/librustc_codegen_ssa/back/symbol_export.rs
@@ -147,14 +147,12 @@
})
.collect();
- if let Some(id) = *tcx.sess.proc_macro_decls_static.get() {
- let def_id = tcx.hir().local_def_id(id);
- reachable_non_generics.insert(def_id, SymbolExportLevel::C);
+ if let Some(id) = tcx.proc_macro_decls_static(LOCAL_CRATE) {
+ reachable_non_generics.insert(id, SymbolExportLevel::C);
}
- if let Some(id) = *tcx.sess.plugin_registrar_fn.get() {
- let def_id = tcx.hir().local_def_id(id);
- reachable_non_generics.insert(def_id, SymbolExportLevel::C);
+ if let Some(id) = tcx.plugin_registrar_fn(LOCAL_CRATE) {
+ reachable_non_generics.insert(id, SymbolExportLevel::C);
}
Lrc::new(reachable_non_generics)
@@ -196,7 +194,7 @@
})
.collect();
- if tcx.sess.entry_fn.borrow().is_some() {
+ if tcx.entry_fn(LOCAL_CRATE).is_some() {
let exported_symbol = ExportedSymbol::NoDefId(SymbolName::new("main"));
symbols.push((exported_symbol, SymbolExportLevel::C));
diff --git a/src/librustc_codegen_ssa/back/write.rs b/src/librustc_codegen_ssa/back/write.rs
index fb3e7ea..39bdc70 100644
--- a/src/librustc_codegen_ssa/back/write.rs
+++ b/src/librustc_codegen_ssa/back/write.rs
@@ -24,6 +24,7 @@
use rustc_data_structures::svh::Svh;
use rustc_errors::{Handler, Level, DiagnosticBuilder, FatalError, DiagnosticId};
use rustc_errors::emitter::{Emitter};
+use rustc_target::spec::MergeFunctions;
use syntax::attr;
use syntax::ext::hygiene::Mark;
use syntax_pos::MultiSpan;
@@ -152,8 +153,24 @@
sess.opts.optimize == config::OptLevel::Aggressive &&
!sess.target.target.options.is_like_emscripten;
- self.merge_functions = sess.opts.optimize == config::OptLevel::Default ||
- sess.opts.optimize == config::OptLevel::Aggressive;
+ // Some targets (namely, NVPTX) interact badly with the MergeFunctions
+ // pass. This is because MergeFunctions can generate new function calls
+ // which may interfere with the target calling convention; e.g. for the
+ // NVPTX target, PTX kernels should not call other PTX kernels.
+ // MergeFunctions can also be configured to generate aliases instead,
+ // but aliases are not supported by some backends (again, NVPTX).
+ // Therefore, allow targets to opt out of the MergeFunctions pass,
+ // but otherwise keep the pass enabled (at O2 and O3) since it can be
+ // useful for reducing code size.
+ self.merge_functions = match sess.opts.debugging_opts.merge_functions
+ .unwrap_or(sess.target.target.options.merge_functions) {
+ MergeFunctions::Disabled => false,
+ MergeFunctions::Trampolines |
+ MergeFunctions::Aliases => {
+ sess.opts.optimize == config::OptLevel::Default ||
+ sess.opts.optimize == config::OptLevel::Aggressive
+ }
+ };
}
pub fn bitcode_needed(&self) -> bool {
diff --git a/src/librustc_codegen_ssa/base.rs b/src/librustc_codegen_ssa/base.rs
index b88ec07..38caacb 100644
--- a/src/librustc_codegen_ssa/base.rs
+++ b/src/librustc_codegen_ssa/base.rs
@@ -441,10 +441,8 @@
pub fn maybe_create_entry_wrapper<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
cx: &'a Bx::CodegenCx
) {
- let (main_def_id, span) = match *cx.sess().entry_fn.borrow() {
- Some((id, span, _)) => {
- (cx.tcx().hir().local_def_id(id), span)
- }
+ let (main_def_id, span) = match cx.tcx().entry_fn(LOCAL_CRATE) {
+ Some((def_id, _)) => { (def_id, cx.tcx().def_span(def_id)) },
None => return,
};
@@ -458,7 +456,7 @@
let main_llfn = cx.get_fn(instance);
- let et = cx.sess().entry_fn.get().map(|e| e.2);
+ let et = cx.tcx().entry_fn(LOCAL_CRATE).map(|e| e.1);
match et {
Some(EntryFnType::Main) => create_entry_fn::<Bx>(cx, span, main_llfn, main_def_id, true),
Some(EntryFnType::Start) => create_entry_fn::<Bx>(cx, span, main_llfn, main_def_id, false),
diff --git a/src/librustc_codegen_utils/codegen_backend.rs b/src/librustc_codegen_utils/codegen_backend.rs
index 09adaf8..8981c54 100644
--- a/src/librustc_codegen_utils/codegen_backend.rs
+++ b/src/librustc_codegen_utils/codegen_backend.rs
@@ -31,7 +31,6 @@
use rustc::middle::cstore::MetadataLoader;
use rustc::dep_graph::DepGraph;
use rustc_target::spec::Target;
-use rustc_mir::monomorphize::collector;
use link::out_filename;
pub use rustc_data_structures::sync::MetadataRef;
@@ -136,25 +135,15 @@
::symbol_names_test::report_symbol_names(tcx);
::rustc_incremental::assert_dep_graph(tcx);
::rustc_incremental::assert_module_sources::assert_module_sources(tcx);
- ::rustc_mir::monomorphize::assert_symbols_are_distinct(tcx,
- collector::collect_crate_mono_items(
- tcx,
- collector::MonoItemCollectionMode::Eager
- ).0.iter()
- );
// FIXME: Fix this
// ::rustc::middle::dependency_format::calculate(tcx);
let _ = tcx.link_args(LOCAL_CRATE);
let _ = tcx.native_libraries(LOCAL_CRATE);
- for mono_item in
- collector::collect_crate_mono_items(
- tcx,
- collector::MonoItemCollectionMode::Eager
- ).0 {
+ let (_, cgus) = tcx.collect_and_partition_mono_items(LOCAL_CRATE);
+ for (mono_item, _) in cgus.iter().flat_map(|cgu| cgu.items().iter()) {
if let MonoItem::Fn(inst) = mono_item {
let def_id = inst.def_id();
- if def_id.is_local() {
- let _ = inst.def.is_inline(tcx);
+ if def_id.is_local() {
let _ = tcx.codegen_fn_attrs(def_id);
}
}
diff --git a/src/librustc_codegen_utils/lib.rs b/src/librustc_codegen_utils/lib.rs
index b59bca0..5f61852 100644
--- a/src/librustc_codegen_utils/lib.rs
+++ b/src/librustc_codegen_utils/lib.rs
@@ -31,6 +31,7 @@
#[macro_use] extern crate rustc_data_structures;
use rustc::ty::TyCtxt;
+use rustc::hir::def_id::LOCAL_CRATE;
pub mod link;
pub mod codegen_backend;
@@ -42,11 +43,9 @@
/// that actually test that compilation succeeds without
/// reporting an error.
pub fn check_for_rustc_errors_attr(tcx: TyCtxt) {
- if let Some((id, span, _)) = *tcx.sess.entry_fn.borrow() {
- let main_def_id = tcx.hir().local_def_id(id);
-
- if tcx.has_attr(main_def_id, "rustc_error") {
- tcx.sess.span_fatal(span, "compilation successful");
+ if let Some((def_id, _)) = tcx.entry_fn(LOCAL_CRATE) {
+ if tcx.has_attr(def_id, "rustc_error") {
+ tcx.sess.span_fatal(tcx.def_span(def_id), "compilation successful");
}
}
}
diff --git a/src/librustc_codegen_utils/symbol_names.rs b/src/librustc_codegen_utils/symbol_names.rs
index 5a5d1b2..9267f14 100644
--- a/src/librustc_codegen_utils/symbol_names.rs
+++ b/src/librustc_codegen_utils/symbol_names.rs
@@ -242,12 +242,12 @@
let node_id = tcx.hir().as_local_node_id(def_id);
- if let Some(id) = node_id {
- if *tcx.sess.plugin_registrar_fn.get() == Some(id) {
+ if def_id.is_local() {
+ if tcx.plugin_registrar_fn(LOCAL_CRATE) == Some(def_id) {
let disambiguator = tcx.sess.local_crate_disambiguator();
return tcx.sess.generate_plugin_registrar_symbol(disambiguator);
}
- if *tcx.sess.proc_macro_decls_static.get() == Some(id) {
+ if tcx.proc_macro_decls_static(LOCAL_CRATE) == Some(def_id) {
let disambiguator = tcx.sess.local_crate_disambiguator();
return tcx.sess.generate_proc_macro_decls_symbol(disambiguator);
}
diff --git a/src/librustc_data_structures/sync.rs b/src/librustc_data_structures/sync.rs
index f9f94f0..0253eef 100644
--- a/src/librustc_data_structures/sync.rs
+++ b/src/librustc_data_structures/sync.rs
@@ -70,6 +70,7 @@
pub struct Atomic<T: Copy>(Cell<T>);
impl<T: Copy> Atomic<T> {
+ #[inline]
pub fn new(v: T) -> Self {
Atomic(Cell::new(v))
}
@@ -80,10 +81,12 @@
self.0.into_inner()
}
+ #[inline]
pub fn load(&self, _: Ordering) -> T {
self.0.get()
}
+ #[inline]
pub fn store(&self, val: T, _: Ordering) {
self.0.set(val)
}
@@ -118,6 +121,7 @@
pub type AtomicUsize = Atomic<usize>;
pub type AtomicBool = Atomic<bool>;
+ pub type AtomicU32 = Atomic<u32>;
pub type AtomicU64 = Atomic<u64>;
pub use self::serial_join as join;
@@ -223,7 +227,7 @@
pub use parking_lot::MutexGuard as LockGuard;
pub use parking_lot::MappedMutexGuard as MappedLockGuard;
- pub use std::sync::atomic::{AtomicBool, AtomicUsize, AtomicU64};
+ pub use std::sync::atomic::{AtomicBool, AtomicUsize, AtomicU32, AtomicU64};
pub use std::sync::Arc as Lrc;
pub use std::sync::Weak as Weak;
diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs
index bfff592..d23d8b8 100644
--- a/src/librustc_driver/driver.rs
+++ b/src/librustc_driver/driver.rs
@@ -26,7 +26,7 @@
use rustc_plugin as plugin;
use rustc_plugin::registry::Registry;
use rustc_privacy;
-use rustc_resolve::{MakeGlobMap, Resolver, ResolverArenas};
+use rustc_resolve::{Resolver, ResolverArenas};
use rustc_traits;
use rustc_typeck as typeck;
use syntax::{self, ast, attr, diagnostics, visit};
@@ -168,7 +168,6 @@
let ExpansionResult {
expanded_crate,
defs,
- analysis,
resolutions,
mut hir_forest,
} = {
@@ -179,7 +178,6 @@
registry,
&crate_name,
addl_plugins,
- control.make_glob_map,
|expanded_crate| {
let mut state = CompileState::state_after_expand(
input,
@@ -252,7 +250,6 @@
output,
&cstore,
&hir_map,
- &analysis,
&resolutions,
&expanded_crate,
&hir_map.krate(),
@@ -278,12 +275,11 @@
sess,
cstore,
hir_map,
- analysis,
resolutions,
&mut arenas,
&crate_name,
&outputs,
- |tcx, analysis, rx, result| {
+ |tcx, rx, result| {
{
// Eventually, we will want to track plugins.
tcx.dep_graph.with_ignore(|| {
@@ -294,7 +290,6 @@
output,
opt_crate,
tcx.hir().krate(),
- &analysis,
tcx,
&crate_name,
);
@@ -394,7 +389,6 @@
// FIXME we probably want to group the below options together and offer a
// better API, rather than this ad-hoc approach.
- pub make_glob_map: MakeGlobMap,
// Whether the compiler should keep the ast beyond parsing.
pub keep_ast: bool,
// -Zcontinue-parse-after-error
@@ -417,7 +411,6 @@
after_hir_lowering: PhaseController::basic(),
after_analysis: PhaseController::basic(),
compilation_done: PhaseController::basic(),
- make_glob_map: MakeGlobMap::No,
keep_ast: false,
continue_parse_after_error: false,
provide: box |_| {},
@@ -530,7 +523,6 @@
pub hir_crate: Option<&'a hir::Crate>,
pub hir_map: Option<&'a hir_map::Map<'tcx>>,
pub resolutions: Option<&'a Resolutions>,
- pub analysis: Option<&'a ty::CrateAnalysis>,
pub tcx: Option<TyCtxt<'a, 'tcx, 'tcx>>,
}
@@ -550,7 +542,6 @@
hir_crate: None,
hir_map: None,
resolutions: None,
- analysis: None,
tcx: None,
}
}
@@ -598,7 +589,6 @@
out_file: &'a Option<PathBuf>,
cstore: &'tcx CStore,
hir_map: &'a hir_map::Map<'tcx>,
- analysis: &'a ty::CrateAnalysis,
resolutions: &'a Resolutions,
krate: &'a ast::Crate,
hir_crate: &'a hir::Crate,
@@ -609,7 +599,6 @@
crate_name: Some(crate_name),
cstore: Some(cstore),
hir_map: Some(hir_map),
- analysis: Some(analysis),
resolutions: Some(resolutions),
expanded_crate: Some(krate),
hir_crate: Some(hir_crate),
@@ -626,12 +615,10 @@
out_file: &'a Option<PathBuf>,
krate: Option<&'a ast::Crate>,
hir_crate: &'a hir::Crate,
- analysis: &'a ty::CrateAnalysis,
tcx: TyCtxt<'a, 'tcx, 'tcx>,
crate_name: &'a str,
) -> Self {
CompileState {
- analysis: Some(analysis),
tcx: Some(tcx),
expanded_crate: krate,
hir_crate: Some(hir_crate),
@@ -714,7 +701,6 @@
pub struct ExpansionResult {
pub expanded_crate: ast::Crate,
pub defs: hir_map::Definitions,
- pub analysis: ty::CrateAnalysis,
pub resolutions: Resolutions,
pub hir_forest: hir_map::Forest,
}
@@ -739,7 +725,6 @@
registry: Option<Registry>,
crate_name: &str,
addl_plugins: Option<Vec<String>>,
- make_glob_map: MakeGlobMap,
after_expand: F,
) -> Result<ExpansionResult, CompileIncomplete>
where
@@ -759,7 +744,6 @@
registry,
crate_name,
addl_plugins,
- make_glob_map,
&resolver_arenas,
&mut crate_loader,
after_expand,
@@ -777,20 +761,13 @@
freevars: resolver.freevars,
export_map: resolver.export_map,
trait_map: resolver.trait_map,
+ glob_map: resolver.glob_map,
maybe_unused_trait_imports: resolver.maybe_unused_trait_imports,
maybe_unused_extern_crates: resolver.maybe_unused_extern_crates,
extern_prelude: resolver.extern_prelude.iter().map(|(ident, entry)| {
(ident.name, entry.introduced_by_item)
}).collect(),
},
-
- analysis: ty::CrateAnalysis {
- glob_map: if resolver.make_glob_map {
- Some(resolver.glob_map)
- } else {
- None
- },
- },
}),
Err(x) => Err(x),
}
@@ -805,7 +782,6 @@
registry: Option<Registry>,
crate_name: &str,
addl_plugins: Option<Vec<String>>,
- make_glob_map: MakeGlobMap,
resolver_arenas: &'a ResolverArenas<'a>,
crate_loader: &'a mut CrateLoader<'a>,
after_expand: F,
@@ -937,7 +913,6 @@
cstore,
&krate,
crate_name,
- make_glob_map,
crate_loader,
&resolver_arenas,
);
@@ -1070,15 +1045,6 @@
)
});
- // Add all buffered lints from the `ParseSess` to the `Session`.
- sess.parse_sess.buffered_lints.with_lock(|buffered_lints| {
- info!("{} parse sess buffered_lints", buffered_lints.len());
- for BufferedEarlyLint{id, span, msg, lint_id} in buffered_lints.drain(..) {
- let lint = lint::Lint::from_parser_lint_id(lint_id);
- sess.buffer_lint(lint, id, span, &msg);
- }
- });
-
// Done with macro expansion!
after_expand(&krate)?;
@@ -1114,6 +1080,15 @@
);
});
+ // Add all buffered lints from the `ParseSess` to the `Session`.
+ sess.parse_sess.buffered_lints.with_lock(|buffered_lints| {
+ info!("{} parse sess buffered_lints", buffered_lints.len());
+ for BufferedEarlyLint{id, span, msg, lint_id} in buffered_lints.drain(..) {
+ let lint = lint::Lint::from_parser_lint_id(lint_id);
+ sess.buffer_lint(lint, id, span, &msg);
+ }
+ });
+
// Lower ast -> hir.
// First, we need to collect the dep_graph.
let dep_graph = match future_dep_graph {
@@ -1158,6 +1133,8 @@
}
pub fn default_provide(providers: &mut ty::query::Providers) {
+ proc_macro_decls::provide(providers);
+ plugin::build::provide(providers);
hir::provide(providers);
borrowck::provide(providers);
mir::provide(providers);
@@ -1167,10 +1144,14 @@
typeck::provide(providers);
ty::provide(providers);
traits::provide(providers);
+ stability::provide(providers);
+ middle::intrinsicck::provide(providers);
+ middle::liveness::provide(providers);
reachable::provide(providers);
rustc_passes::provide(providers);
rustc_traits::provide(providers);
middle::region::provide(providers);
+ middle::entry::provide(providers);
cstore::provide(providers);
lint::provide(providers);
}
@@ -1188,7 +1169,6 @@
sess: &'tcx Session,
cstore: &'tcx CStore,
hir_map: hir_map::Map<'tcx>,
- analysis: ty::CrateAnalysis,
resolutions: Resolutions,
arenas: &'tcx mut AllArenas<'tcx>,
name: &str,
@@ -1198,7 +1178,6 @@
where
F: for<'a> FnOnce(
TyCtxt<'a, 'tcx, 'tcx>,
- ty::CrateAnalysis,
mpsc::Receiver<Box<dyn Any + Send>>,
CompileResult,
) -> R,
@@ -1207,19 +1186,6 @@
rustc_incremental::load_query_result_cache(sess)
});
- time(sess, "looking for entry point", || {
- middle::entry::find_entry_point(sess, &hir_map, name)
- });
-
- sess.plugin_registrar_fn
- .set(time(sess, "looking for plugin registrar", || {
- plugin::build::find_plugin_registrar(sess.diagnostic(), &hir_map)
- }));
- sess.proc_macro_decls_static
- .set(proc_macro_decls::find(&hir_map));
-
- time(sess, "loop checking", || loops::check_crate(sess, &hir_map));
-
let mut local_providers = ty::query::Providers::default();
default_provide(&mut local_providers);
codegen_backend.provide(&mut local_providers);
@@ -1247,7 +1213,21 @@
|tcx| {
// Do some initialization of the DepGraph that can only be done with the
// tcx available.
- rustc_incremental::dep_graph_tcx_init(tcx);
+ time(sess, "dep graph tcx init", || rustc_incremental::dep_graph_tcx_init(tcx));
+
+ time(sess, "looking for entry point", || {
+ middle::entry::find_entry_point(tcx)
+ });
+
+ time(sess, "looking for plugin registrar", || {
+ plugin::build::find_plugin_registrar(tcx)
+ });
+
+ time(sess, "looking for derive registrar", || {
+ proc_macro_decls::find(tcx)
+ });
+
+ time(sess, "loop checking", || loops::check_crate(tcx));
time(sess, "attribute checking", || {
hir::check_attr::check_crate(tcx)
@@ -1261,7 +1241,7 @@
match typeck::check_crate(tcx) {
Ok(x) => x,
Err(x) => {
- f(tcx, analysis, rx, Err(x));
+ f(tcx, rx, Err(x));
return Err(x);
}
}
@@ -1314,7 +1294,7 @@
// lint warnings and so on -- kindck used to do this abort, but
// kindck is gone now). -nmatsakis
if sess.err_count() > 0 {
- return Ok(f(tcx, analysis, rx, sess.compile_status()));
+ return Ok(f(tcx, rx, sess.compile_status()));
}
time(sess, "death checking", || middle::dead::check_crate(tcx));
@@ -1325,7 +1305,7 @@
time(sess, "lint checking", || lint::check_crate(tcx));
- return Ok(f(tcx, analysis, rx, tcx.sess.compile_status()));
+ return Ok(f(tcx, rx, tcx.sess.compile_status()));
},
)
}
@@ -1526,13 +1506,7 @@
}
None
}
- None => {
- session
- .struct_span_err(a.span, "`crate_type` requires a value")
- .note("for example: `#![crate_type=\"lib\"]`")
- .emit();
- None
- }
+ None => None
}
} else {
None
diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs
index 889e1ec..c8a5bbe 100644
--- a/src/librustc_driver/lib.rs
+++ b/src/librustc_driver/lib.rs
@@ -57,7 +57,6 @@
use driver::CompileController;
use pretty::{PpMode, UserIdentifiedItem};
-use rustc_resolve as resolve;
use rustc_save_analysis as save;
use rustc_save_analysis::DumpHandler;
use rustc_data_structures::sync::{self, Lrc, Ordering::SeqCst};
@@ -880,7 +879,6 @@
pretty::print_after_hir_lowering(state.session,
state.cstore.unwrap(),
state.hir_map.unwrap(),
- state.analysis.unwrap(),
state.resolutions.unwrap(),
state.input,
&state.expanded_crate.take().unwrap(),
@@ -941,7 +939,6 @@
time(state.session, "save analysis", || {
save::process_crate(state.tcx.unwrap(),
state.expanded_crate.unwrap(),
- state.analysis.unwrap(),
state.crate_name.unwrap(),
state.input,
None,
@@ -950,7 +947,6 @@
});
};
control.after_analysis.run_callback_on_error = true;
- control.make_glob_map = resolve::MakeGlobMap::Yes;
}
impl RustcDefaultCalls {
diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs
index a9ec993..d110830 100644
--- a/src/librustc_driver/pretty.rs
+++ b/src/librustc_driver/pretty.rs
@@ -190,7 +190,6 @@
sess: &'tcx Session,
cstore: &'tcx CStore,
hir_map: &hir_map::Map<'tcx>,
- analysis: &ty::CrateAnalysis,
resolutions: &Resolutions,
output_filenames: &OutputFilenames,
id: &str,
@@ -223,12 +222,11 @@
sess,
cstore,
hir_map.clone(),
- analysis.clone(),
resolutions.clone(),
&mut arenas,
id,
output_filenames,
- |tcx, _, _, _| {
+ |tcx, _, _| {
let empty_tables = ty::TypeckTables::empty(None);
let annotation = TypedAnnotation {
tcx,
@@ -959,7 +957,6 @@
pub fn print_after_hir_lowering<'tcx, 'a: 'tcx>(sess: &'a Session,
cstore: &'tcx CStore,
hir_map: &hir_map::Map<'tcx>,
- analysis: &ty::CrateAnalysis,
resolutions: &Resolutions,
input: &Input,
krate: &ast::Crate,
@@ -972,7 +969,6 @@
print_with_analysis(sess,
cstore,
hir_map,
- analysis,
resolutions,
crate_name,
output_filenames,
@@ -1010,7 +1006,6 @@
s.call_with_pp_support_hir(sess,
cstore,
hir_map,
- analysis,
resolutions,
output_filenames,
crate_name,
@@ -1033,7 +1028,6 @@
s.call_with_pp_support_hir(sess,
cstore,
hir_map,
- analysis,
resolutions,
output_filenames,
crate_name,
@@ -1048,7 +1042,6 @@
s.call_with_pp_support_hir(sess,
cstore,
hir_map,
- analysis,
resolutions,
output_filenames,
crate_name,
@@ -1081,7 +1074,6 @@
s.call_with_pp_support_hir(sess,
cstore,
hir_map,
- analysis,
resolutions,
output_filenames,
crate_name,
@@ -1103,13 +1095,12 @@
}
// In an ideal world, this would be a public function called by the driver after
-// analsysis is performed. However, we want to call `phase_3_run_analysis_passes`
+// analysis is performed. However, we want to call `phase_3_run_analysis_passes`
// with a different callback than the standard driver, so that isn't easy.
// Instead, we call that function ourselves.
fn print_with_analysis<'tcx, 'a: 'tcx>(sess: &'a Session,
cstore: &'a CStore,
hir_map: &hir_map::Map<'tcx>,
- analysis: &ty::CrateAnalysis,
resolutions: &Resolutions,
crate_name: &str,
output_filenames: &OutputFilenames,
@@ -1134,12 +1125,11 @@
sess,
cstore,
hir_map.clone(),
- analysis.clone(),
resolutions.clone(),
&mut arenas,
crate_name,
output_filenames,
- |tcx, _, _, _| {
+ |tcx, _, _| {
match ppm {
PpmMir | PpmMirCFG => {
if let Some(nodeid) = nodeid {
diff --git a/src/librustc_driver/proc_macro_decls.rs b/src/librustc_driver/proc_macro_decls.rs
index bb2ea6c..093d15b 100644
--- a/src/librustc_driver/proc_macro_decls.rs
+++ b/src/librustc_driver/proc_macro_decls.rs
@@ -1,15 +1,25 @@
use rustc::hir::itemlikevisit::ItemLikeVisitor;
-use rustc::hir::map::Map;
+use rustc::hir::def_id::{CrateNum, DefId, LOCAL_CRATE};
use rustc::hir;
+use rustc::ty::TyCtxt;
+use rustc::ty::query::Providers;
use syntax::ast;
use syntax::attr;
-pub fn find(hir_map: &Map) -> Option<ast::NodeId> {
- let krate = hir_map.krate();
+pub fn find<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>) -> Option<DefId> {
+ tcx.proc_macro_decls_static(LOCAL_CRATE)
+}
+
+fn proc_macro_decls_static<'tcx>(
+ tcx: TyCtxt<'_, 'tcx, 'tcx>,
+ cnum: CrateNum,
+) -> Option<DefId> {
+ assert_eq!(cnum, LOCAL_CRATE);
let mut finder = Finder { decls: None };
- krate.visit_all_item_likes(&mut finder);
- finder.decls
+ tcx.hir().krate().visit_all_item_likes(&mut finder);
+
+ finder.decls.map(|id| tcx.hir().local_def_id(id))
}
struct Finder {
@@ -30,3 +40,9 @@
}
}
+pub(crate) fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ proc_macro_decls_static,
+ ..*providers
+ };
+}
diff --git a/src/librustc_driver/test.rs b/src/librustc_driver/test.rs
index 9c027f1..afcf086 100644
--- a/src/librustc_driver/test.rs
+++ b/src/librustc_driver/test.rs
@@ -18,7 +18,6 @@
use rustc_data_structures::sync::{self, Lrc};
use rustc_lint;
use rustc_metadata::cstore::CStore;
-use rustc_resolve::MakeGlobMap;
use rustc_target::spec::abi::Abi;
use syntax;
use syntax::ast;
@@ -134,7 +133,6 @@
None,
"test",
None,
- MakeGlobMap::No,
|_| Ok(()),
).expect("phase 2 aborted")
};
diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs
index a074441..3e25f98 100644
--- a/src/librustc_errors/lib.rs
+++ b/src/librustc_errors/lib.rs
@@ -135,10 +135,11 @@
if let Some(line) = line_opt {
if let Some(lo) = line.char_indices().map(|(i, _)| i).nth(lo) {
let hi_opt = hi_opt.and_then(|hi| line.char_indices().map(|(i, _)| i).nth(hi));
- buf.push_str(match hi_opt {
- Some(hi) => &line[lo..hi],
- None => &line[lo..],
- });
+ match hi_opt {
+ Some(hi) if hi > lo => buf.push_str(&line[lo..hi]),
+ Some(_) => (),
+ None => buf.push_str(&line[lo..]),
+ }
}
if let None = hi_opt {
buf.push('\n');
diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs
index 0fce166..f6c381f 100644
--- a/src/librustc_lint/builtin.rs
+++ b/src/librustc_lint/builtin.rs
@@ -19,7 +19,7 @@
//! a `pub fn new()`.
use rustc::hir::def::Def;
-use rustc::hir::def_id::DefId;
+use rustc::hir::def_id::{DefId, LOCAL_CRATE};
use rustc::ty::{self, Ty};
use hir::Node;
use util::nodemap::NodeSet;
@@ -35,14 +35,15 @@
use syntax::attr;
use syntax::source_map::Spanned;
use syntax::edition::Edition;
-use syntax::feature_gate::{AttributeGate, AttributeType, Stability, deprecated_attributes};
+use syntax::feature_gate::{AttributeGate, AttributeTemplate, AttributeType};
+use syntax::feature_gate::{Stability, deprecated_attributes};
use syntax_pos::{BytePos, Span, SyntaxContext};
use syntax::symbol::keywords;
use syntax::errors::{Applicability, DiagnosticBuilder};
use syntax::print::pprust::expr_to_string;
+use syntax::visit::FnKind;
use rustc::hir::{self, GenericParamKind, PatKind};
-use rustc::hir::intravisit::FnKind;
use nonstandard_style::{MethodLateContext, method_context};
@@ -216,7 +217,7 @@
}
impl UnsafeCode {
- fn report_unsafe(&self, cx: &LateContext, span: Span, desc: &'static str) {
+ fn report_unsafe(&self, cx: &EarlyContext, span: Span, desc: &'static str) {
// This comes from a macro that has #[allow_internal_unsafe].
if span.allows_unsafe() {
return;
@@ -226,23 +227,31 @@
}
}
-impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnsafeCode {
- fn check_expr(&mut self, cx: &LateContext, e: &hir::Expr) {
- if let hir::ExprKind::Block(ref blk, _) = e.node {
+impl EarlyLintPass for UnsafeCode {
+ fn check_attribute(&mut self, cx: &EarlyContext, attr: &ast::Attribute) {
+ if attr.check_name("allow_internal_unsafe") {
+ self.report_unsafe(cx, attr.span, "`allow_internal_unsafe` allows defining \
+ macros using unsafe without triggering \
+ the `unsafe_code` lint at their call site");
+ }
+ }
+
+ fn check_expr(&mut self, cx: &EarlyContext, e: &ast::Expr) {
+ if let ast::ExprKind::Block(ref blk, _) = e.node {
// Don't warn about generated blocks, that'll just pollute the output.
- if blk.rules == hir::UnsafeBlock(hir::UserProvided) {
+ if blk.rules == ast::BlockCheckMode::Unsafe(ast::UserProvided) {
self.report_unsafe(cx, blk.span, "usage of an `unsafe` block");
}
}
}
- fn check_item(&mut self, cx: &LateContext, it: &hir::Item) {
+ fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) {
match it.node {
- hir::ItemKind::Trait(_, hir::Unsafety::Unsafe, ..) => {
+ ast::ItemKind::Trait(_, ast::Unsafety::Unsafe, ..) => {
self.report_unsafe(cx, it.span, "declaration of an `unsafe` trait")
}
- hir::ItemKind::Impl(hir::Unsafety::Unsafe, ..) => {
+ ast::ItemKind::Impl(ast::Unsafety::Unsafe, ..) => {
self.report_unsafe(cx, it.span, "implementation of an `unsafe` trait")
}
@@ -251,19 +260,18 @@
}
fn check_fn(&mut self,
- cx: &LateContext,
- fk: FnKind<'tcx>,
- _: &hir::FnDecl,
- _: &hir::Body,
+ cx: &EarlyContext,
+ fk: FnKind,
+ _: &ast::FnDecl,
span: Span,
_: ast::NodeId) {
match fk {
- FnKind::ItemFn(_, _, hir::FnHeader { unsafety: hir::Unsafety::Unsafe, .. }, ..) => {
+ FnKind::ItemFn(_, ast::FnHeader { unsafety: ast::Unsafety::Unsafe, .. }, ..) => {
self.report_unsafe(cx, span, "declaration of an `unsafe` function")
}
FnKind::Method(_, sig, ..) => {
- if sig.header.unsafety == hir::Unsafety::Unsafe {
+ if sig.header.unsafety == ast::Unsafety::Unsafe {
self.report_unsafe(cx, span, "implementation of an `unsafe` method")
}
}
@@ -272,9 +280,9 @@
}
}
- fn check_trait_item(&mut self, cx: &LateContext, item: &hir::TraitItem) {
- if let hir::TraitItemKind::Method(ref sig, hir::TraitMethod::Required(_)) = item.node {
- if sig.header.unsafety == hir::Unsafety::Unsafe {
+ fn check_trait_item(&mut self, cx: &EarlyContext, item: &ast::TraitItem) {
+ if let ast::TraitItemKind::Method(ref sig, None) = item.node {
+ if sig.header.unsafety == ast::Unsafety::Unsafe {
self.report_unsafe(cx, item.span, "declaration of an `unsafe` method")
}
}
@@ -682,86 +690,12 @@
}
}
-/// Checks for incorrect use of `repr` attributes.
-#[derive(Clone)]
-pub struct BadRepr;
-
-impl LintPass for BadRepr {
- fn get_lints(&self) -> LintArray {
- lint_array!()
- }
-}
-
-impl EarlyLintPass for BadRepr {
- fn check_attribute(&mut self, cx: &EarlyContext, attr: &ast::Attribute) {
- if attr.name() == "repr" {
- let list = attr.meta_item_list();
-
- let repr_str = |lit: &str| { format!("#[repr({})]", lit) };
-
- // Emit warnings with `repr` either has a literal assignment (`#[repr = "C"]`) or
- // no hints (``#[repr]`)
- let has_hints = list.as_ref().map(|ref list| !list.is_empty()).unwrap_or(false);
- if !has_hints {
- let mut suggested = false;
- let mut warn = if let Some(ref lit) = attr.value_str() {
- // avoid warning about empty `repr` on `#[repr = "foo"]`
- let mut warn = cx.struct_span_lint(
- BAD_REPR,
- attr.span,
- "`repr` attribute isn't configurable with a literal",
- );
- match lit.to_string().as_ref() {
- | "C" | "packed" | "rust" | "transparent"
- | "u8" | "u16" | "u32" | "u64" | "u128" | "usize"
- | "i8" | "i16" | "i32" | "i64" | "i128" | "isize" => {
- // if the literal could have been a valid `repr` arg,
- // suggest the correct syntax
- warn.span_suggestion_with_applicability(
- attr.span,
- "give `repr` a hint",
- repr_str(&lit.as_str()),
- Applicability::MachineApplicable
- );
- suggested = true;
- }
- _ => { // the literal wasn't a valid `repr` arg
- warn.span_label(attr.span, "needs a hint");
- }
- };
- warn
- } else {
- let mut warn = cx.struct_span_lint(
- BAD_REPR,
- attr.span,
- "`repr` attribute must have a hint",
- );
- warn.span_label(attr.span, "needs a hint");
- warn
- };
- if !suggested {
- warn.help(&format!(
- "valid hints include `{}`, `{}`, `{}` and `{}`",
- repr_str("C"),
- repr_str("packed"),
- repr_str("rust"),
- repr_str("transparent"),
- ));
- warn.note("for more information, visit \
- <https://doc.rust-lang.org/reference/type-layout.html>");
- }
- warn.emit();
- }
- }
- }
-}
-
/// Checks for use of attributes which have been deprecated.
#[derive(Clone)]
pub struct DeprecatedAttr {
// This is not free to compute, so we want to keep it around, rather than
// compute it for every attribute.
- depr_attrs: Vec<&'static (&'static str, AttributeType, AttributeGate)>,
+ depr_attrs: Vec<&'static (&'static str, AttributeType, AttributeTemplate, AttributeGate)>,
}
impl DeprecatedAttr {
@@ -780,7 +714,7 @@
impl EarlyLintPass for DeprecatedAttr {
fn check_attribute(&mut self, cx: &EarlyContext, attr: &ast::Attribute) {
- for &&(n, _, ref g) in &self.depr_attrs {
+ for &&(n, _, _, ref g) in &self.depr_attrs {
if attr.name() == n {
if let &AttributeGate::Gated(Stability::Deprecated(link, suggestion),
ref name,
@@ -860,7 +794,7 @@
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for PluginAsLibrary {
fn check_item(&mut self, cx: &LateContext, it: &hir::Item) {
- if cx.sess().plugin_registrar_fn.get().is_some() {
+ if cx.tcx.plugin_registrar_fn(LOCAL_CRATE).is_some() {
// We're compiling a plugin; it's fine to link other plugins.
return;
}
diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs
index 4dfb664..71c859d 100644
--- a/src/librustc_lint/lib.rs
+++ b/src/librustc_lint/lib.rs
@@ -48,7 +48,8 @@
INTRA_DOC_LINK_RESOLUTION_FAILURE,
MISSING_DOC_CODE_EXAMPLES,
PRIVATE_DOC_TESTS,
- parser::QUESTION_MARK_MACRO_SEP
+ parser::QUESTION_MARK_MACRO_SEP,
+ parser::ILL_FORMED_ATTRIBUTE_INPUT,
};
use rustc::session;
use rustc::util;
@@ -111,9 +112,9 @@
add_early_builtin!(sess,
UnusedParens,
UnusedImportBraces,
+ UnsafeCode,
AnonymousParameters,
UnusedDocComment,
- BadRepr,
EllipsisInclusiveRangePatterns,
NonCamelCaseTypes,
);
@@ -134,7 +135,6 @@
NonSnakeCase: NonSnakeCase,
NonUpperCaseGlobals: NonUpperCaseGlobals,
NonShorthandFieldPatterns: NonShorthandFieldPatterns,
- UnsafeCode: UnsafeCode,
UnusedAllocation: UnusedAllocation,
MissingCopyImplementations: MissingCopyImplementations,
UnstableFeatures: UnstableFeatures,
@@ -336,6 +336,16 @@
reference: "issue #52234 <https://github.com/rust-lang/rust/issues/52234>",
edition: None,
},
+ FutureIncompatibleInfo {
+ id: LintId::of(ILL_FORMED_ATTRIBUTE_INPUT),
+ reference: "issue #57571 <https://github.com/rust-lang/rust/issues/57571>",
+ edition: None,
+ },
+ FutureIncompatibleInfo {
+ id: LintId::of(AMBIGUOUS_ASSOCIATED_ITEMS),
+ reference: "issue #57644 <https://github.com/rust-lang/rust/issues/57644>",
+ edition: None,
+ },
]);
// Register renamed and removed lints.
@@ -385,4 +395,6 @@
"no longer a warning, #[no_mangle] functions always exported");
store.register_removed("private_no_mangle_statics",
"no longer a warning, #[no_mangle] statics always exported");
+ store.register_removed("bad_repr",
+ "replaced with a generic attribute input check");
}
diff --git a/src/librustc_lint/nonstandard_style.rs b/src/librustc_lint/nonstandard_style.rs
index 2694a04..a4a3fa5 100644
--- a/src/librustc_lint/nonstandard_style.rs
+++ b/src/librustc_lint/nonstandard_style.rs
@@ -7,7 +7,8 @@
use lint::{EarlyLintPass, LintPass, LateLintPass};
use syntax::ast;
use syntax::attr;
-use syntax_pos::Span;
+use syntax::errors::Applicability;
+use syntax_pos::{BytePos, symbol::Ident, Span};
#[derive(PartialEq)]
pub enum MethodLateContext {
@@ -40,13 +41,12 @@
pub struct NonCamelCaseTypes;
impl NonCamelCaseTypes {
- fn check_case(&self, cx: &EarlyContext, sort: &str, name: ast::Name, span: Span) {
+ fn check_case(&self, cx: &EarlyContext, sort: &str, ident: &Ident) {
fn char_has_case(c: char) -> bool {
c.is_lowercase() || c.is_uppercase()
}
- fn is_camel_case(name: ast::Name) -> bool {
- let name = name.as_str();
+ fn is_camel_case(name: &str) -> bool {
let name = name.trim_matches('_');
if name.is_empty() {
return true;
@@ -86,14 +86,20 @@
}).0
}
+ let name = &ident.name.as_str();
+
if !is_camel_case(name) {
- let c = to_camel_case(&name.as_str());
- let m = if c.is_empty() {
- format!("{} `{}` should have a camel case name such as `CamelCase`", sort, name)
- } else {
- format!("{} `{}` should have a camel case name such as `{}`", sort, name, c)
- };
- cx.span_lint(NON_CAMEL_CASE_TYPES, span, &m);
+ let c = to_camel_case(name);
+
+ let msg = format!("{} `{}` should have a camel case name", sort, name);
+ cx.struct_span_lint(NON_CAMEL_CASE_TYPES, ident.span, &msg)
+ .span_suggestion_with_applicability(
+ ident.span,
+ "convert the identifier to camel case",
+ c,
+ Applicability::MaybeIncorrect,
+ )
+ .emit();
}
}
}
@@ -122,19 +128,19 @@
ast::ItemKind::Ty(..) |
ast::ItemKind::Enum(..) |
ast::ItemKind::Struct(..) |
- ast::ItemKind::Union(..) => self.check_case(cx, "type", it.ident.name, it.span),
- ast::ItemKind::Trait(..) => self.check_case(cx, "trait", it.ident.name, it.span),
+ ast::ItemKind::Union(..) => self.check_case(cx, "type", &it.ident),
+ ast::ItemKind::Trait(..) => self.check_case(cx, "trait", &it.ident),
_ => (),
}
}
fn check_variant(&mut self, cx: &EarlyContext, v: &ast::Variant, _: &ast::Generics) {
- self.check_case(cx, "variant", v.node.ident.name, v.span);
+ self.check_case(cx, "variant", &v.node.ident);
}
fn check_generic_param(&mut self, cx: &EarlyContext, param: &ast::GenericParam) {
if let ast::GenericParamKind::Type { .. } = param.kind {
- self.check_case(cx, "type parameter", param.ident.name, param.ident.span);
+ self.check_case(cx, "type parameter", ¶m.ident);
}
}
}
@@ -179,7 +185,8 @@
words.join("_")
}
- fn check_snake_case(&self, cx: &LateContext, sort: &str, name: &str, span: Option<Span>) {
+ /// Checks if a given identifier is snake case, and reports a diagnostic if not.
+ fn check_snake_case(&self, cx: &LateContext, sort: &str, ident: &Ident) {
fn is_snake_case(ident: &str) -> bool {
if ident.is_empty() {
return true;
@@ -201,20 +208,28 @@
})
}
+ let name = &ident.name.as_str();
+
if !is_snake_case(name) {
let sc = NonSnakeCase::to_snake_case(name);
- let msg = if sc != name {
- format!("{} `{}` should have a snake case name such as `{}`",
- sort,
- name,
- sc)
+
+ let msg = format!("{} `{}` should have a snake case name", sort, name);
+ let mut err = cx.struct_span_lint(NON_SNAKE_CASE, ident.span, &msg);
+
+ // We have a valid span in almost all cases, but we don't have one when linting a crate
+ // name provided via the command line.
+ if !ident.span.is_dummy() {
+ err.span_suggestion_with_applicability(
+ ident.span,
+ "convert the identifier to snake case",
+ sc,
+ Applicability::MaybeIncorrect,
+ );
} else {
- format!("{} `{}` should have a snake case name", sort, name)
- };
- match span {
- Some(span) => cx.span_lint(NON_SNAKE_CASE, span, &msg),
- None => cx.lint(NON_SNAKE_CASE, &msg),
+ err.help(&format!("convert the identifier to snake case: `{}`", sc));
}
+
+ err.emit();
}
}
}
@@ -227,50 +242,75 @@
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NonSnakeCase {
fn check_crate(&mut self, cx: &LateContext, cr: &hir::Crate) {
- let attr_crate_name = attr::find_by_name(&cr.attrs, "crate_name")
- .and_then(|at| at.value_str().map(|s| (at, s)));
- if let Some(ref name) = cx.tcx.sess.opts.crate_name {
- self.check_snake_case(cx, "crate", name, None);
- } else if let Some((attr, name)) = attr_crate_name {
- self.check_snake_case(cx, "crate", &name.as_str(), Some(attr.span));
+ let crate_ident = if let Some(name) = &cx.tcx.sess.opts.crate_name {
+ Some(Ident::from_str(name))
+ } else {
+ attr::find_by_name(&cr.attrs, "crate_name")
+ .and_then(|attr| attr.meta())
+ .and_then(|meta| {
+ meta.name_value_literal().and_then(|lit| {
+ if let ast::LitKind::Str(name, ..) = lit.node {
+ // Discard the double quotes surrounding the literal.
+ let sp = cx.sess().source_map().span_to_snippet(lit.span)
+ .ok()
+ .and_then(|snippet| {
+ let left = snippet.find('"')?;
+ let right = snippet.rfind('"').map(|pos| snippet.len() - pos)?;
+
+ Some(
+ lit.span
+ .with_lo(lit.span.lo() + BytePos(left as u32 + 1))
+ .with_hi(lit.span.hi() - BytePos(right as u32)),
+ )
+ })
+ .unwrap_or_else(|| lit.span);
+
+ Some(Ident::new(name, sp))
+ } else {
+ None
+ }
+ })
+ })
+ };
+
+ if let Some(ident) = &crate_ident {
+ self.check_snake_case(cx, "crate", ident);
}
}
fn check_generic_param(&mut self, cx: &LateContext, param: &hir::GenericParam) {
- match param.kind {
- GenericParamKind::Lifetime { .. } => {
- let name = param.name.ident().as_str();
- self.check_snake_case(cx, "lifetime", &name, Some(param.span));
- }
- GenericParamKind::Type { .. } => {}
+ if let GenericParamKind::Lifetime { .. } = param.kind {
+ self.check_snake_case(cx, "lifetime", ¶m.name.ident());
}
}
- fn check_fn(&mut self,
- cx: &LateContext,
- fk: FnKind,
- _: &hir::FnDecl,
- _: &hir::Body,
- span: Span,
- id: ast::NodeId) {
- match fk {
- FnKind::Method(name, ..) => {
+ fn check_fn(
+ &mut self,
+ cx: &LateContext,
+ fk: FnKind,
+ _: &hir::FnDecl,
+ _: &hir::Body,
+ _: Span,
+ id: ast::NodeId,
+ ) {
+ match &fk {
+ FnKind::Method(ident, ..) => {
match method_context(cx, id) {
MethodLateContext::PlainImpl => {
- self.check_snake_case(cx, "method", &name.as_str(), Some(span))
+ self.check_snake_case(cx, "method", ident);
}
MethodLateContext::TraitAutoImpl => {
- self.check_snake_case(cx, "trait method", &name.as_str(), Some(span))
+ self.check_snake_case(cx, "trait method", ident);
}
_ => (),
}
}
- FnKind::ItemFn(name, _, header, _, attrs) => {
+ FnKind::ItemFn(ident, _, header, _, attrs) => {
// Skip foreign-ABI #[no_mangle] functions (Issue #31924)
- if header.abi != Abi::Rust && attr::find_by_name(attrs, "no_mangle").is_some() {
+ if header.abi != Abi::Rust && attr::contains_name(attrs, "no_mangle") {
return;
}
- self.check_snake_case(cx, "function", &name.as_str(), Some(span))
+ self.check_snake_case(cx, "function", ident);
}
FnKind::Closure(_) => (),
}
@@ -278,36 +318,35 @@
fn check_item(&mut self, cx: &LateContext, it: &hir::Item) {
if let hir::ItemKind::Mod(_) = it.node {
- self.check_snake_case(cx, "module", &it.ident.as_str(), Some(it.span));
+ self.check_snake_case(cx, "module", &it.ident);
}
}
fn check_trait_item(&mut self, cx: &LateContext, item: &hir::TraitItem) {
- if let hir::TraitItemKind::Method(_, hir::TraitMethod::Required(ref pnames)) = item.node {
- self.check_snake_case(cx,
- "trait method",
- &item.ident.as_str(),
- Some(item.span));
+ if let hir::TraitItemKind::Method(_, hir::TraitMethod::Required(pnames)) = &item.node {
+ self.check_snake_case(cx, "trait method", &item.ident);
for param_name in pnames {
- self.check_snake_case(cx, "variable", ¶m_name.as_str(), Some(param_name.span));
+ self.check_snake_case(cx, "variable", param_name);
}
}
}
fn check_pat(&mut self, cx: &LateContext, p: &hir::Pat) {
- if let &PatKind::Binding(_, _, ref ident, _) = &p.node {
- self.check_snake_case(cx, "variable", &ident.as_str(), Some(p.span));
+ if let &PatKind::Binding(_, _, ident, _) = &p.node {
+ self.check_snake_case(cx, "variable", &ident);
}
}
- fn check_struct_def(&mut self,
- cx: &LateContext,
- s: &hir::VariantData,
- _: ast::Name,
- _: &hir::Generics,
- _: ast::NodeId) {
+ fn check_struct_def(
+ &mut self,
+ cx: &LateContext,
+ s: &hir::VariantData,
+ _: ast::Name,
+ _: &hir::Generics,
+ _: ast::NodeId,
+ ) {
for sf in s.fields() {
- self.check_snake_case(cx, "structure field", &sf.ident.as_str(), Some(sf.span));
+ self.check_snake_case(cx, "structure field", &sf.ident);
}
}
}
@@ -322,21 +361,21 @@
pub struct NonUpperCaseGlobals;
impl NonUpperCaseGlobals {
- fn check_upper_case(cx: &LateContext, sort: &str, name: ast::Name, span: Span) {
- if name.as_str().chars().any(|c| c.is_lowercase()) {
- let uc = NonSnakeCase::to_snake_case(&name.as_str()).to_uppercase();
- if name != &*uc {
- cx.span_lint(NON_UPPER_CASE_GLOBALS,
- span,
- &format!("{} `{}` should have an upper case name such as `{}`",
- sort,
- name,
- uc));
- } else {
- cx.span_lint(NON_UPPER_CASE_GLOBALS,
- span,
- &format!("{} `{}` should have an upper case name", sort, name));
- }
+ fn check_upper_case(cx: &LateContext, sort: &str, ident: &Ident) {
+ let name = &ident.name.as_str();
+
+ if name.chars().any(|c| c.is_lowercase()) {
+ let uc = NonSnakeCase::to_snake_case(&name).to_uppercase();
+
+ let msg = format!("{} `{}` should have an upper case name", sort, name);
+ cx.struct_span_lint(NON_UPPER_CASE_GLOBALS, ident.span, &msg)
+ .span_suggestion_with_applicability(
+ ident.span,
+ "convert the identifier to upper case",
+ uc,
+ Applicability::MaybeIncorrect,
+ )
+ .emit();
}
}
}
@@ -350,38 +389,25 @@
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NonUpperCaseGlobals {
fn check_item(&mut self, cx: &LateContext, it: &hir::Item) {
match it.node {
- hir::ItemKind::Static(..) => {
- if attr::find_by_name(&it.attrs, "no_mangle").is_some() {
- return;
- }
- NonUpperCaseGlobals::check_upper_case(cx, "static variable", it.ident.name,
- it.span);
+ hir::ItemKind::Static(..) if !attr::contains_name(&it.attrs, "no_mangle") => {
+ NonUpperCaseGlobals::check_upper_case(cx, "static variable", &it.ident);
}
hir::ItemKind::Const(..) => {
- NonUpperCaseGlobals::check_upper_case(cx, "constant", it.ident.name,
- it.span);
+ NonUpperCaseGlobals::check_upper_case(cx, "constant", &it.ident);
}
_ => {}
}
}
fn check_trait_item(&mut self, cx: &LateContext, ti: &hir::TraitItem) {
- match ti.node {
- hir::TraitItemKind::Const(..) => {
- NonUpperCaseGlobals::check_upper_case(cx, "associated constant",
- ti.ident.name, ti.span);
- }
- _ => {}
+ if let hir::TraitItemKind::Const(..) = ti.node {
+ NonUpperCaseGlobals::check_upper_case(cx, "associated constant", &ti.ident);
}
}
fn check_impl_item(&mut self, cx: &LateContext, ii: &hir::ImplItem) {
- match ii.node {
- hir::ImplItemKind::Const(..) => {
- NonUpperCaseGlobals::check_upper_case(cx, "associated constant",
- ii.ident.name, ii.span);
- }
- _ => {}
+ if let hir::ImplItemKind::Const(..) = ii.node {
+ NonUpperCaseGlobals::check_upper_case(cx, "associated constant", &ii.ident);
}
}
@@ -390,10 +416,11 @@
if let PatKind::Path(hir::QPath::Resolved(None, ref path)) = p.node {
if let Def::Const(..) = path.def {
if path.segments.len() == 1 {
- NonUpperCaseGlobals::check_upper_case(cx,
- "constant in pattern",
- path.segments[0].ident.name,
- path.span);
+ NonUpperCaseGlobals::check_upper_case(
+ cx,
+ "constant in pattern",
+ &path.segments[0].ident
+ );
}
}
}
diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs
index 205f894..bc29020 100644
--- a/src/librustc_lint/unused.rs
+++ b/src/librustc_lint/unused.rs
@@ -232,7 +232,7 @@
fn check_attribute(&mut self, cx: &LateContext, attr: &ast::Attribute) {
debug!("checking attribute: {:?}", attr);
// Note that check_name() marks the attribute as used if it matches.
- for &(ref name, ty, _) in BUILTIN_ATTRIBUTES {
+ for &(name, ty, ..) in BUILTIN_ATTRIBUTES {
match ty {
AttributeType::Whitelisted if attr.check_name(name) => {
debug!("{:?} is Whitelisted", name);
@@ -256,7 +256,7 @@
cx.span_lint(UNUSED_ATTRIBUTES, attr.span, "unused attribute");
// Is it a builtin attribute that must be used at the crate level?
let known_crate = BUILTIN_ATTRIBUTES.iter()
- .find(|&&(builtin, ty, _)| name == builtin && ty == AttributeType::CrateLevel)
+ .find(|&&(builtin, ty, ..)| name == builtin && ty == AttributeType::CrateLevel)
.is_some();
// Has a plugin registered this attribute as one that must be used at
diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs
index 032a465..2de1637 100644
--- a/src/librustc_metadata/encoder.rs
+++ b/src/librustc_metadata/encoder.rs
@@ -482,13 +482,10 @@
has_global_allocator: has_global_allocator,
has_panic_handler: has_panic_handler,
has_default_lib_allocator: has_default_lib_allocator,
- plugin_registrar_fn: tcx.sess
- .plugin_registrar_fn
- .get()
- .map(|id| tcx.hir().local_def_id(id).index),
+ plugin_registrar_fn: tcx.plugin_registrar_fn(LOCAL_CRATE).map(|id| id.index),
proc_macro_decls_static: if is_proc_macro {
- let id = tcx.sess.proc_macro_decls_static.get().unwrap();
- Some(tcx.hir().local_def_id(id).index)
+ let id = tcx.proc_macro_decls_static(LOCAL_CRATE).unwrap();
+ Some(id.index)
} else {
None
},
diff --git a/src/librustc_metadata/native_libs.rs b/src/librustc_metadata/native_libs.rs
index d35d649..1f00086 100644
--- a/src/librustc_metadata/native_libs.rs
+++ b/src/librustc_metadata/native_libs.rs
@@ -163,7 +163,7 @@
!self.tcx.features().static_nobundle {
feature_gate::emit_feature_err(&self.tcx.sess.parse_sess,
"static_nobundle",
- span.unwrap(),
+ span.unwrap_or_else(|| syntax_pos::DUMMY_SP),
GateIssue::Language,
"kind=\"static-nobundle\" is feature gated");
}
diff --git a/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/mod.rs b/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/mod.rs
index 77c8a89..2a858bd 100644
--- a/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/mod.rs
+++ b/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/mod.rs
@@ -505,7 +505,7 @@
) {
let mut diag = infcx.tcx.sess.struct_span_err(
span,
- "unsatisfied lifetime constraints", // FIXME
+ "lifetime may not live long enough"
);
let counter = &mut 1;
diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs
index 65ae111..2bf2824 100644
--- a/src/librustc_mir/build/mod.rs
+++ b/src/librustc_mir/build/mod.rs
@@ -910,6 +910,13 @@
let place = Place::Local(local);
let &ArgInfo(ty, opt_ty_info, pattern, ref self_binding) = arg_info;
+ // Make sure we drop (parts of) the argument even when not matched on.
+ self.schedule_drop(
+ pattern.as_ref().map_or(ast_body.span, |pat| pat.span),
+ argument_scope, &place, ty,
+ DropKind::Value { cached_block: CachedBlock::default() },
+ );
+
if let Some(pattern) = pattern {
let pattern = self.hir.pattern_from_hir(pattern);
let span = pattern.span;
@@ -941,13 +948,6 @@
}
}
}
-
- // Make sure we drop (parts of) the argument even when not matched on.
- self.schedule_drop(
- pattern.as_ref().map_or(ast_body.span, |pat| pat.span),
- argument_scope, &place, ty,
- DropKind::Value { cached_block: CachedBlock::default() },
- );
}
// Enter the argument pattern bindings source scope, if it exists.
diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs
index b25d47b..188a112 100644
--- a/src/librustc_mir/hair/pattern/_match.rs
+++ b/src/librustc_mir/hair/pattern/_match.rs
@@ -1372,7 +1372,14 @@
let is_visible = adt.is_enum()
|| field.vis.is_accessible_from(cx.module, cx.tcx);
if is_visible {
- field.ty(cx.tcx, substs)
+ let ty = field.ty(cx.tcx, substs);
+ match ty.sty {
+ // If the field type returned is an array of an unknown
+ // size return an TyErr.
+ ty::Array(_, len) if len.assert_usize(cx.tcx).is_none() =>
+ cx.tcx.types.err,
+ _ => ty,
+ }
} else {
// Treat all non-visible fields as TyErr. They
// can't appear in any other pattern from
diff --git a/src/librustc_mir/monomorphize/collector.rs b/src/librustc_mir/monomorphize/collector.rs
index a6a8fe5..eb49547 100644
--- a/src/librustc_mir/monomorphize/collector.rs
+++ b/src/librustc_mir/monomorphize/collector.rs
@@ -177,13 +177,13 @@
use rustc::hir::{self, CodegenFnAttrFlags};
use rustc::hir::itemlikevisit::ItemLikeVisitor;
-use rustc::hir::def_id::DefId;
+use rustc::hir::def_id::{DefId, LOCAL_CRATE};
use rustc::mir::interpret::{AllocId, ConstValue};
use rustc::middle::lang_items::{ExchangeMallocFnLangItem, StartFnLangItem};
use rustc::ty::subst::Substs;
use rustc::ty::{self, TypeFoldable, Ty, TyCtxt, GenericParamDefKind};
use rustc::ty::adjustment::CustomCoerceUnsized;
-use rustc::session::config;
+use rustc::session::config::EntryFnType;
use rustc::mir::{self, Location, Promoted};
use rustc::mir::visit::Visitor as MirVisitor;
use rustc::mir::mono::MonoItem;
@@ -321,9 +321,7 @@
let mut roots = Vec::new();
{
- let entry_fn = tcx.sess.entry_fn.borrow().map(|(node_id, _, _)| {
- tcx.hir().local_def_id(node_id)
- });
+ let entry_fn = tcx.entry_fn(LOCAL_CRATE);
debug!("collect_roots: entry_fn = {:?}", entry_fn);
@@ -924,7 +922,7 @@
tcx: TyCtxt<'a, 'tcx, 'tcx>,
mode: MonoItemCollectionMode,
output: &'b mut Vec<MonoItem<'tcx>>,
- entry_fn: Option<DefId>,
+ entry_fn: Option<(DefId, EntryFnType)>,
}
impl<'b, 'a, 'v> ItemLikeVisitor<'v> for RootCollector<'b, 'a, 'v> {
@@ -1023,7 +1021,7 @@
true
}
MonoItemCollectionMode::Lazy => {
- self.entry_fn == Some(def_id) ||
+ self.entry_fn.map(|(id, _)| id) == Some(def_id) ||
self.tcx.is_reachable_non_generic(def_id) ||
self.tcx.codegen_fn_attrs(def_id).flags.contains(
CodegenFnAttrFlags::RUSTC_STD_INTERNAL_SYMBOL)
@@ -1048,14 +1046,9 @@
/// the return type of `main`. This is not needed when
/// the user writes their own `start` manually.
fn push_extra_entry_roots(&mut self) {
- if self.tcx.sess.entry_fn.get().map(|e| e.2) != Some(config::EntryFnType::Main) {
- return
- }
-
- let main_def_id = if let Some(def_id) = self.entry_fn {
- def_id
- } else {
- return
+ let main_def_id = match self.entry_fn {
+ Some((def_id, EntryFnType::Main)) => def_id,
+ _ => return,
};
let start_def_id = match self.tcx.lang_items().require(StartFnLangItem) {
diff --git a/src/librustc_mir/monomorphize/item.rs b/src/librustc_mir/monomorphize/item.rs
index 7014f53..c831cbd 100644
--- a/src/librustc_mir/monomorphize/item.rs
+++ b/src/librustc_mir/monomorphize/item.rs
@@ -1,6 +1,6 @@
use monomorphize::Instance;
use rustc::hir;
-use rustc::hir::def_id::DefId;
+use rustc::hir::def_id::{DefId, LOCAL_CRATE};
use rustc::session::config::OptLevel;
use rustc::ty::{self, Ty, TyCtxt, ClosureSubsts, GeneratorSubsts};
use rustc::ty::subst::Substs;
@@ -75,8 +75,7 @@
match *self.as_mono_item() {
MonoItem::Fn(ref instance) => {
- let entry_def_id =
- tcx.sess.entry_fn.borrow().map(|(id, _, _)| tcx.hir().local_def_id(id));
+ let entry_def_id = tcx.entry_fn(LOCAL_CRATE).map(|(id, _)| id);
// If this function isn't inlined or otherwise has explicit
// linkage, then we'll be creating a globally shared version.
if self.explicit_linkage(tcx).is_some() ||
diff --git a/src/librustc_passes/lib.rs b/src/librustc_passes/lib.rs
index 0b394d8..829d4b3 100644
--- a/src/librustc_passes/lib.rs
+++ b/src/librustc_passes/lib.rs
@@ -38,4 +38,5 @@
pub fn provide(providers: &mut Providers) {
rvalue_promotion::provide(providers);
+ loops::provide(providers);
}
diff --git a/src/librustc_passes/loops.rs b/src/librustc_passes/loops.rs
index 7a37a35..7d9165a 100644
--- a/src/librustc_passes/loops.rs
+++ b/src/librustc_passes/loops.rs
@@ -2,6 +2,10 @@
use rustc::session::Session;
+use rustc::ty::query::Providers;
+use rustc::ty::query::queries;
+use rustc::ty::TyCtxt;
+use rustc::hir::def_id::DefId;
use rustc::hir::map::Map;
use rustc::hir::intravisit::{self, Visitor, NestedVisitorMap};
use rustc::hir::{self, Node, Destination};
@@ -42,28 +46,32 @@
cx: Context,
}
-pub fn check_crate(sess: &Session, map: &Map) {
- let krate = map.krate();
- krate.visit_all_item_likes(&mut CheckLoopVisitor {
- sess,
- hir_map: map,
+pub fn check_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
+ for &module in tcx.hir().krate().modules.keys() {
+ queries::check_mod_loops::ensure(tcx, tcx.hir().local_def_id(module));
+ }
+}
+
+fn check_mod_loops<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
+ tcx.hir().visit_item_likes_in_module(module_def_id, &mut CheckLoopVisitor {
+ sess: &tcx.sess,
+ hir_map: &tcx.hir(),
cx: Normal,
}.as_deep_visitor());
}
+pub(crate) fn provide(providers: &mut Providers) {
+ *providers = Providers {
+ check_mod_loops,
+ ..*providers
+ };
+}
+
impl<'a, 'hir> Visitor<'hir> for CheckLoopVisitor<'a, 'hir> {
fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'hir> {
NestedVisitorMap::OnlyBodies(&self.hir_map)
}
- fn visit_item(&mut self, i: &'hir hir::Item) {
- self.with_context(Normal, |v| intravisit::walk_item(v, i));
- }
-
- fn visit_impl_item(&mut self, i: &'hir hir::ImplItem) {
- self.with_context(Normal, |v| intravisit::walk_impl_item(v, i));
- }
-
fn visit_anon_const(&mut self, c: &'hir hir::AnonConst) {
self.with_context(AnonConst, |v| intravisit::walk_anon_const(v, c));
}
diff --git a/src/librustc_platform_intrinsics/Cargo.toml b/src/librustc_platform_intrinsics/Cargo.toml
deleted file mode 100644
index 92f37f9..0000000
--- a/src/librustc_platform_intrinsics/Cargo.toml
+++ /dev/null
@@ -1,9 +0,0 @@
-[package]
-authors = ["The Rust Project Developers"]
-name = "rustc_platform_intrinsics"
-version = "0.0.0"
-
-[lib]
-name = "rustc_platform_intrinsics"
-path = "lib.rs"
-crate-type = ["dylib"]
diff --git a/src/librustc_platform_intrinsics/aarch64.rs b/src/librustc_platform_intrinsics/aarch64.rs
deleted file mode 100644
index 833a312..0000000
--- a/src/librustc_platform_intrinsics/aarch64.rs
+++ /dev/null
@@ -1,3404 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("aarch64_v") { return None }
- Some(match &name["aarch64_v".len()..] {
- "hadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.shadd.v8i8")
- },
- "hadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uhadd.v8i8")
- },
- "hadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.shadd.v4i16")
- },
- "hadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uhadd.v4i16")
- },
- "hadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.shadd.v2i32")
- },
- "hadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uhadd.v2i32")
- },
- "haddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.shadd.v16i8")
- },
- "haddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uhadd.v16i8")
- },
- "haddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.shadd.v8i16")
- },
- "haddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uhadd.v8i16")
- },
- "haddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.shadd.v4i32")
- },
- "haddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uhadd.v4i32")
- },
- "rhadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.srhadd.v8i8")
- },
- "rhadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.urhadd.v8i8")
- },
- "rhadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.srhadd.v4i16")
- },
- "rhadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.urhadd.v4i16")
- },
- "rhadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.srhadd.v2i32")
- },
- "rhadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.urhadd.v2i32")
- },
- "rhaddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.srhadd.v16i8")
- },
- "rhaddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.urhadd.v16i8")
- },
- "rhaddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.srhadd.v8i16")
- },
- "rhaddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.urhadd.v8i16")
- },
- "rhaddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.srhadd.v4i32")
- },
- "rhaddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.urhadd.v4i32")
- },
- "qadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqadd.v8i8")
- },
- "qadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqadd.v8i8")
- },
- "qadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqadd.v4i16")
- },
- "qadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqadd.v4i16")
- },
- "qadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqadd.v2i32")
- },
- "qadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqadd.v2i32")
- },
- "qadd_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqadd.v1i64")
- },
- "qadd_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uqadd.v1i64")
- },
- "qaddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqadd.v16i8")
- },
- "qaddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uqadd.v16i8")
- },
- "qaddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqadd.v8i16")
- },
- "qaddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uqadd.v8i16")
- },
- "qaddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqadd.v4i32")
- },
- "qaddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uqadd.v4i32")
- },
- "qaddq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqadd.v2i64")
- },
- "qaddq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uqadd.v2i64")
- },
- "uqadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.suqadd.v16i8")
- },
- "uqadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.suqadd.v8i16")
- },
- "uqadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.suqadd.v4i32")
- },
- "uqadd_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.suqadd.v2i64")
- },
- "sqadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.usqadd.v16i8")
- },
- "sqadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.usqadd.v8i16")
- },
- "sqadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.usqadd.v4i32")
- },
- "sqadd_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.usqadd.v2i64")
- },
- "raddhn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.raddhn.v8i8")
- },
- "raddhn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.raddhn.v8i8")
- },
- "raddhn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.raddhn.v4i16")
- },
- "raddhn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.raddhn.v4i16")
- },
- "raddhn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.raddhn.v2i32")
- },
- "raddhn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.raddhn.v2i32")
- },
- "fmulx_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmulx.v2f32")
- },
- "fmulx_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fmulx.v1f64")
- },
- "fmulxq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmulx.v4f32")
- },
- "fmulxq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmulx.v2f64")
- },
- "fma_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.fma.v2f32")
- },
- "fma_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.fma.v1f64")
- },
- "fmaq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.fma.v4f32")
- },
- "fmaq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.fma.v2f64")
- },
- "qdmulh_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqdmulh.v4i16")
- },
- "qdmulh_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqdmulh.v2i32")
- },
- "qdmulhq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqdmulh.v8i16")
- },
- "qdmulhq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqdmulh.v4i32")
- },
- "qrdmulh_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqrdmulh.v4i16")
- },
- "qrdmulh_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqrdmulh.v2i32")
- },
- "qrdmulhq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqrdmulh.v8i16")
- },
- "qrdmulhq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqrdmulh.v4i32")
- },
- "mull_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smull.v8i16")
- },
- "mull_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umull.v8i16")
- },
- "mull_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smull.v4i32")
- },
- "mull_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umull.v4i32")
- },
- "mull_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.smull.v2i64")
- },
- "mull_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.umull.v2i64")
- },
- "qdmullq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqdmull.v8i16")
- },
- "qdmullq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqdmull.v4i32")
- },
- "hsub_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.shsub.v8i8")
- },
- "hsub_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uhsub.v8i8")
- },
- "hsub_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.shsub.v4i16")
- },
- "hsub_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uhsub.v4i16")
- },
- "hsub_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.shsub.v2i32")
- },
- "hsub_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uhsub.v2i32")
- },
- "hsubq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.shsub.v16i8")
- },
- "hsubq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uhsub.v16i8")
- },
- "hsubq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.shsub.v8i16")
- },
- "hsubq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uhsub.v8i16")
- },
- "hsubq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.shsub.v4i32")
- },
- "hsubq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uhsub.v4i32")
- },
- "qsub_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqsub.v8i8")
- },
- "qsub_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqsub.v8i8")
- },
- "qsub_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqsub.v4i16")
- },
- "qsub_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqsub.v4i16")
- },
- "qsub_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqsub.v2i32")
- },
- "qsub_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqsub.v2i32")
- },
- "qsub_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqsub.v1i64")
- },
- "qsub_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uqsub.v1i64")
- },
- "qsubq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqsub.v16i8")
- },
- "qsubq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uqsub.v16i8")
- },
- "qsubq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqsub.v8i16")
- },
- "qsubq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uqsub.v8i16")
- },
- "qsubq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqsub.v4i32")
- },
- "qsubq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uqsub.v4i32")
- },
- "qsubq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqsub.v2i64")
- },
- "qsubq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uqsub.v2i64")
- },
- "rsubhn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.rsubhn.v8i8")
- },
- "rsubhn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.rsubhn.v8i8")
- },
- "rsubhn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.rsubhn.v4i16")
- },
- "rsubhn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.rsubhn.v4i16")
- },
- "rsubhn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.rsubhn.v2i32")
- },
- "rsubhn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.rsubhn.v2i32")
- },
- "abd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sabd.v8i8")
- },
- "abd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uabd.v8i8")
- },
- "abd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sabd.v4i16")
- },
- "abd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uabd.v4i16")
- },
- "abd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sabd.v2i32")
- },
- "abd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uabd.v2i32")
- },
- "abd_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fabd.v2f32")
- },
- "abd_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fabd.v1f64")
- },
- "abdq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sabd.v16i8")
- },
- "abdq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uabd.v16i8")
- },
- "abdq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sabd.v8i16")
- },
- "abdq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uabd.v8i16")
- },
- "abdq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sabd.v4i32")
- },
- "abdq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uabd.v4i32")
- },
- "abdq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fabd.v4f32")
- },
- "abdq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fabd.v2f64")
- },
- "max_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.smax.v8i8")
- },
- "max_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.umax.v8i8")
- },
- "max_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.smax.v4i16")
- },
- "max_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.umax.v4i16")
- },
- "max_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.smax.v2i32")
- },
- "max_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.umax.v2i32")
- },
- "max_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmax.v2f32")
- },
- "max_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fmax.v1f64")
- },
- "maxq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.smax.v16i8")
- },
- "maxq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.umax.v16i8")
- },
- "maxq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smax.v8i16")
- },
- "maxq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umax.v8i16")
- },
- "maxq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smax.v4i32")
- },
- "maxq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umax.v4i32")
- },
- "maxq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmax.v4f32")
- },
- "maxq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmax.v2f64")
- },
- "min_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.smin.v8i8")
- },
- "min_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.umin.v8i8")
- },
- "min_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.smin.v4i16")
- },
- "min_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.umin.v4i16")
- },
- "min_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.smin.v2i32")
- },
- "min_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.umin.v2i32")
- },
- "min_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmin.v2f32")
- },
- "min_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fmin.v1f64")
- },
- "minq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.smin.v16i8")
- },
- "minq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.umin.v16i8")
- },
- "minq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smin.v8i16")
- },
- "minq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umin.v8i16")
- },
- "minq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smin.v4i32")
- },
- "minq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umin.v4i32")
- },
- "minq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmin.v4f32")
- },
- "minq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmin.v2f64")
- },
- "maxnm_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmaxnm.v2f32")
- },
- "maxnm_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fmaxnm.v1f64")
- },
- "maxnmq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmaxnm.v4f32")
- },
- "maxnmq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmaxnm.v2f64")
- },
- "minnm_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fminnm.v2f32")
- },
- "minnm_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fminnm.v1f64")
- },
- "minnmq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fminnm.v4f32")
- },
- "minnmq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fminnm.v2f64")
- },
- "shl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sshl.v8i8")
- },
- "shl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.ushl.v8i8")
- },
- "shl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sshl.v4i16")
- },
- "shl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.ushl.v4i16")
- },
- "shl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sshl.v2i32")
- },
- "shl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.ushl.v2i32")
- },
- "shl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sshl.v1i64")
- },
- "shl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.ushl.v1i64")
- },
- "shlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sshl.v16i8")
- },
- "shlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.ushl.v16i8")
- },
- "shlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sshl.v8i16")
- },
- "shlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.ushl.v8i16")
- },
- "shlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sshl.v4i32")
- },
- "shlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.ushl.v4i32")
- },
- "shlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sshl.v2i64")
- },
- "shlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.ushl.v2i64")
- },
- "qshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqshl.v8i8")
- },
- "qshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqshl.v8i8")
- },
- "qshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqshl.v4i16")
- },
- "qshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqshl.v4i16")
- },
- "qshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqshl.v2i32")
- },
- "qshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqshl.v2i32")
- },
- "qshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqshl.v1i64")
- },
- "qshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uqshl.v1i64")
- },
- "qshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqshl.v16i8")
- },
- "qshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uqshl.v16i8")
- },
- "qshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqshl.v8i16")
- },
- "qshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uqshl.v8i16")
- },
- "qshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqshl.v4i32")
- },
- "qshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uqshl.v4i32")
- },
- "qshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqshl.v2i64")
- },
- "qshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uqshl.v2i64")
- },
- "rshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.srshl.v8i8")
- },
- "rshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.urshl.v8i8")
- },
- "rshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.srshl.v4i16")
- },
- "rshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.urshl.v4i16")
- },
- "rshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.srshl.v2i32")
- },
- "rshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.urshl.v2i32")
- },
- "rshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.srshl.v1i64")
- },
- "rshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.urshl.v1i64")
- },
- "rshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.srshl.v16i8")
- },
- "rshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.urshl.v16i8")
- },
- "rshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.srshl.v8i16")
- },
- "rshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.urshl.v8i16")
- },
- "rshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.srshl.v4i32")
- },
- "rshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.urshl.v4i32")
- },
- "rshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.srshl.v2i64")
- },
- "rshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.urshl.v2i64")
- },
- "qrshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqrshl.v8i8")
- },
- "qrshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqrshl.v8i8")
- },
- "qrshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqrshl.v4i16")
- },
- "qrshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqrshl.v4i16")
- },
- "qrshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqrshl.v2i32")
- },
- "qrshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqrshl.v2i32")
- },
- "qrshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqrshl.v1i64")
- },
- "qrshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uqrshl.v1i64")
- },
- "qrshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqrshl.v16i8")
- },
- "qrshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uqrshl.v16i8")
- },
- "qrshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqrshl.v8i16")
- },
- "qrshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uqrshl.v8i16")
- },
- "qrshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqrshl.v4i32")
- },
- "qrshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uqrshl.v4i32")
- },
- "qrshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqrshl.v2i64")
- },
- "qrshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uqrshl.v2i64")
- },
- "qshrun_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqshrun.v8i8")
- },
- "qshrun_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqshrun.v4i16")
- },
- "qshrun_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqshrun.v2i32")
- },
- "qrshrun_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqrshrun.v8i8")
- },
- "qrshrun_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqrshrun.v4i16")
- },
- "qrshrun_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqrshrun.v2i32")
- },
- "qshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqshrn.v8i8")
- },
- "qshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqshrn.v8i8")
- },
- "qshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqshrn.v4i16")
- },
- "qshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqshrn.v4i16")
- },
- "qshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqshrn.v2i32")
- },
- "qshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqshrn.v2i32")
- },
- "rshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.rshrn.v8i8")
- },
- "rshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.rshrn.v8i8")
- },
- "rshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.rshrn.v4i16")
- },
- "rshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.rshrn.v4i16")
- },
- "rshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.rshrn.v2i32")
- },
- "rshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.rshrn.v2i32")
- },
- "qrshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqrshrn.v8i8")
- },
- "qrshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqrshrn.v8i8")
- },
- "qrshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqrshrn.v4i16")
- },
- "qrshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqrshrn.v4i16")
- },
- "qrshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqrshrn.v2i32")
- },
- "qrshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqrshrn.v2i32")
- },
- "sri_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.vsri.v8i8")
- },
- "sri_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.vsri.v8i8")
- },
- "sri_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.vsri.v4i16")
- },
- "sri_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.vsri.v4i16")
- },
- "sri_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.vsri.v2i32")
- },
- "sri_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.vsri.v2i32")
- },
- "sri_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.vsri.v1i64")
- },
- "sri_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.vsri.v1i64")
- },
- "sriq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.vsri.v16i8")
- },
- "sriq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.vsri.v16i8")
- },
- "sriq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.vsri.v8i16")
- },
- "sriq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.vsri.v8i16")
- },
- "sriq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.vsri.v4i32")
- },
- "sriq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.vsri.v4i32")
- },
- "sriq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.vsri.v2i64")
- },
- "sriq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.vsri.v2i64")
- },
- "sli_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.vsli.v8i8")
- },
- "sli_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.vsli.v8i8")
- },
- "sli_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.vsli.v4i16")
- },
- "sli_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.vsli.v4i16")
- },
- "sli_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.vsli.v2i32")
- },
- "sli_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.vsli.v2i32")
- },
- "sli_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.vsli.v1i64")
- },
- "sli_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.vsli.v1i64")
- },
- "sliq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.vsli.v16i8")
- },
- "sliq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.vsli.v16i8")
- },
- "sliq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.vsli.v8i16")
- },
- "sliq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.vsli.v8i16")
- },
- "sliq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.vsli.v4i32")
- },
- "sliq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.vsli.v4i32")
- },
- "sliq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.vsli.v2i64")
- },
- "sliq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.vsli.v2i64")
- },
- "vqmovn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqxtn.v8i8")
- },
- "vqmovn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqxtn.v8i8")
- },
- "vqmovn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqxtn.v4i16")
- },
- "vqmovn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqxtn.v4i16")
- },
- "vqmovn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqxtn.v2i32")
- },
- "vqmovn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqxtn.v2i32")
- },
- "abs_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.abs.v8i8")
- },
- "abs_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.abs.v4i16")
- },
- "abs_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.abs.v2i32")
- },
- "abs_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.abs.v1i64")
- },
- "absq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.abs.v16i8")
- },
- "absq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.abs.v8i16")
- },
- "absq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.abs.v4i32")
- },
- "absq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.abs.v2i64")
- },
- "abs_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.fabs.v2f32")
- },
- "abs_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.fabs.v1f64")
- },
- "absq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.fabs.v4f32")
- },
- "absq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.fabs.v2f64")
- },
- "qabs_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqabs.v8i8")
- },
- "qabs_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqabs.v4i16")
- },
- "qabs_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqabs.v2i32")
- },
- "qabs_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqabs.v1i64")
- },
- "qabsq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqabs.v16i8")
- },
- "qabsq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqabs.v8i16")
- },
- "qabsq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqabs.v4i32")
- },
- "qabsq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqabs.v2i64")
- },
- "qneg_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqneg.v8i8")
- },
- "qneg_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqneg.v4i16")
- },
- "qneg_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqneg.v2i32")
- },
- "qneg_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqneg.v1i64")
- },
- "qnegq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqneg.v16i8")
- },
- "qnegq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqneg.v8i16")
- },
- "qnegq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqneg.v4i32")
- },
- "qnegq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqneg.v2i64")
- },
- "clz_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.ctlz.v8i8")
- },
- "clz_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.ctlz.v8i8")
- },
- "clz_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.ctlz.v4i16")
- },
- "clz_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.ctlz.v4i16")
- },
- "clz_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.ctlz.v2i32")
- },
- "clz_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.ctlz.v2i32")
- },
- "clzq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ctlz.v16i8")
- },
- "clzq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ctlz.v16i8")
- },
- "clzq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ctlz.v8i16")
- },
- "clzq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ctlz.v8i16")
- },
- "clzq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ctlz.v4i32")
- },
- "clzq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ctlz.v4i32")
- },
- "cls_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.cls.v8i8")
- },
- "cls_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.cls.v8i8")
- },
- "cls_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.cls.v4i16")
- },
- "cls_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.cls.v4i16")
- },
- "cls_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.cls.v2i32")
- },
- "cls_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.cls.v2i32")
- },
- "clsq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.cls.v16i8")
- },
- "clsq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.cls.v16i8")
- },
- "clsq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.cls.v8i16")
- },
- "clsq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.cls.v8i16")
- },
- "clsq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.cls.v4i32")
- },
- "clsq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.cls.v4i32")
- },
- "cnt_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.ctpop.v8i8")
- },
- "cnt_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.ctpop.v8i8")
- },
- "cntq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ctpop.v16i8")
- },
- "cntq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ctpop.v16i8")
- },
- "recpe_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.urecpe.v2i32")
- },
- "recpe_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.frecpe.v2f32")
- },
- "recpe_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.frecpe.v1f64")
- },
- "recpeq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.urecpe.v4i32")
- },
- "recpeq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.frecpe.v4f32")
- },
- "recpeq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.frecpe.v2f64")
- },
- "recps_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.frecps.v2f32")
- },
- "recps_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.frecps.v1f64")
- },
- "recpsq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.frecps.v4f32")
- },
- "recpsq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.frecps.v2f64")
- },
- "sqrt_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.sqrt.v2f32")
- },
- "sqrt_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.sqrt.v1f64")
- },
- "sqrtq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.sqrt.v4f32")
- },
- "sqrtq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.sqrt.v2f64")
- },
- "rsqrte_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.ursqrte.v2i32")
- },
- "rsqrte_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.frsqrte.v2f32")
- },
- "rsqrte_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.frsqrte.v1f64")
- },
- "rsqrteq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.ursqrte.v4i32")
- },
- "rsqrteq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.frsqrte.v4f32")
- },
- "rsqrteq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.frsqrte.v2f64")
- },
- "rsqrts_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.frsqrts.v2f32")
- },
- "rsqrts_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.frsqrts.v1f64")
- },
- "rsqrtsq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.frsqrts.v4f32")
- },
- "rsqrtsq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.frsqrts.v2f64")
- },
- "rbit_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.rbit.v8i8")
- },
- "rbit_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.rbit.v8i8")
- },
- "rbitq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.rbit.v16i8")
- },
- "rbitq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.rbit.v16i8")
- },
- "ld2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i8.p0v8i8")
- },
- "ld2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i8.p0v8i8")
- },
- "ld2_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i16.p0v4i16")
- },
- "ld2_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i16.p0v4i16")
- },
- "ld2_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i32.p0v2i32")
- },
- "ld2_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i32.p0v2i32")
- },
- "ld2_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1i64.p0v1i64")
- },
- "ld2_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1i64.p0v1i64")
- },
- "ld2_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2f32.p0v2f32")
- },
- "ld2_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1f64.p0v1f64")
- },
- "ld2q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v16i8.p0v16i8")
- },
- "ld2q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v16i8.p0v16i8")
- },
- "ld2q_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i16.p0v8i16")
- },
- "ld2q_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i16.p0v8i16")
- },
- "ld2q_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i32.p0v4i32")
- },
- "ld2q_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i32.p0v4i32")
- },
- "ld2q_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i64.p0v2i64")
- },
- "ld2q_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i64.p0v2i64")
- },
- "ld2q_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4f32.p0v4f32")
- },
- "ld2q_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2f64.p0v2f64")
- },
- "ld3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i8.p0v8i8")
- },
- "ld3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i8.p0v8i8")
- },
- "ld3_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I16x4, &::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i16.p0v4i16")
- },
- "ld3_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U16x4, &::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i16.p0v4i16")
- },
- "ld3_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I32x2, &::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i32.p0v2i32")
- },
- "ld3_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U32x2, &::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i32.p0v2i32")
- },
- "ld3_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I64x1, &::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1i64.p0v1i64")
- },
- "ld3_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U64x1, &::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1i64.p0v1i64")
- },
- "ld3_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F32x2, &::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2f32.p0v2f32")
- },
- "ld3_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F64x1, &::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1f64.p0v1f64")
- },
- "ld3q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v16i8.p0v16i8")
- },
- "ld3q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v16i8.p0v16i8")
- },
- "ld3q_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i16.p0v8i16")
- },
- "ld3q_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U16x8, &::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i16.p0v8i16")
- },
- "ld3q_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I32x4, &::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i32.p0v4i32")
- },
- "ld3q_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U32x4, &::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i32.p0v4i32")
- },
- "ld3q_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I64x2, &::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i64.p0v2i64")
- },
- "ld3q_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U64x2, &::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i64.p0v2i64")
- },
- "ld3q_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4f32.p0v4f32")
- },
- "ld3q_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2f64.p0v2f64")
- },
- "ld4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I8x8, &::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i8.p0v8i8")
- },
- "ld4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U8x8, &::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i8.p0v8i8")
- },
- "ld4_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I16x4, &::I16x4, &::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i16.p0v4i16")
- },
- "ld4_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U16x4, &::U16x4, &::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i16.p0v4i16")
- },
- "ld4_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I32x2, &::I32x2, &::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i32.p0v2i32")
- },
- "ld4_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U32x2, &::U32x2, &::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i32.p0v2i32")
- },
- "ld4_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I64x1, &::I64x1, &::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1i64.p0v1i64")
- },
- "ld4_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U64x1, &::U64x1, &::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1i64.p0v1i64")
- },
- "ld4_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F32x2, &::F32x2, &::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2f32.p0v2f32")
- },
- "ld4_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F64x1, &::F64x1, &::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1f64.p0v1f64")
- },
- "ld4q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v16i8.p0v16i8")
- },
- "ld4q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v16i8.p0v16i8")
- },
- "ld4q_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I16x8, &::I16x8, &::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i16.p0v8i16")
- },
- "ld4q_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U16x8, &::U16x8, &::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i16.p0v8i16")
- },
- "ld4q_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I32x4, &::I32x4, &::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i32.p0v4i32")
- },
- "ld4q_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U32x4, &::U32x4, &::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i32.p0v4i32")
- },
- "ld4q_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I64x2, &::I64x2, &::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i64.p0v2i64")
- },
- "ld4q_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U64x2, &::U64x2, &::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i64.p0v2i64")
- },
- "ld4q_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F32x4, &::F32x4, &::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4f32.p0v4f32")
- },
- "ld4q_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F64x2, &::F64x2, &::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2f64.p0v2f64")
- },
- "ld2_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i8.p0i8")
- },
- "ld2_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i8.p0i8")
- },
- "ld2_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i16.p0i16")
- },
- "ld2_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i16.p0i16")
- },
- "ld2_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i32.p0i32")
- },
- "ld2_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i32.p0i32")
- },
- "ld2_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1i64.p0i64")
- },
- "ld2_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1i64.p0i64")
- },
- "ld2_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2f32.p0f32")
- },
- "ld2_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1f64.p0f64")
- },
- "ld2q_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v16i8.p0i8")
- },
- "ld2q_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v16i8.p0i8")
- },
- "ld2q_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i16.p0i16")
- },
- "ld2q_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i16.p0i16")
- },
- "ld2q_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i32.p0i32")
- },
- "ld2q_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i32.p0i32")
- },
- "ld2q_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i64.p0i64")
- },
- "ld2q_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i64.p0i64")
- },
- "ld2q_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4f32.p0f32")
- },
- "ld2q_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2f64.p0f64")
- },
- "ld3_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i8.p0i8")
- },
- "ld3_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i8.p0i8")
- },
- "ld3_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I16x4, &::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i16.p0i16")
- },
- "ld3_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U16x4, &::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i16.p0i16")
- },
- "ld3_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I32x2, &::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i32.p0i32")
- },
- "ld3_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U32x2, &::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i32.p0i32")
- },
- "ld3_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I64x1, &::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1i64.p0i64")
- },
- "ld3_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U64x1, &::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1i64.p0i64")
- },
- "ld3_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F32x2, &::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2f32.p0f32")
- },
- "ld3_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F64x1, &::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1f64.p0f64")
- },
- "ld3q_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v16i8.p0i8")
- },
- "ld3q_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v16i8.p0i8")
- },
- "ld3q_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i16.p0i16")
- },
- "ld3q_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U16x8, &::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i16.p0i16")
- },
- "ld3q_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I32x4, &::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i32.p0i32")
- },
- "ld3q_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U32x4, &::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i32.p0i32")
- },
- "ld3q_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I64x2, &::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i64.p0i64")
- },
- "ld3q_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U64x2, &::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i64.p0i64")
- },
- "ld3q_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4f32.p0f32")
- },
- "ld3q_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2f64.p0f64")
- },
- "ld4_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I8x8, &::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i8.p0i8")
- },
- "ld4_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U8x8, &::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i8.p0i8")
- },
- "ld4_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I16x4, &::I16x4, &::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i16.p0i16")
- },
- "ld4_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U16x4, &::U16x4, &::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i16.p0i16")
- },
- "ld4_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I32x2, &::I32x2, &::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i32.p0i32")
- },
- "ld4_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U32x2, &::U32x2, &::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i32.p0i32")
- },
- "ld4_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I64x1, &::I64x1, &::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1i64.p0i64")
- },
- "ld4_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U64x1, &::U64x1, &::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1i64.p0i64")
- },
- "ld4_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F32x2, &::F32x2, &::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2f32.p0f32")
- },
- "ld4_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F64x1, &::F64x1, &::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1f64.p0f64")
- },
- "ld4q_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v16i8.p0i8")
- },
- "ld4q_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v16i8.p0i8")
- },
- "ld4q_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I16x8, &::I16x8, &::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i16.p0i16")
- },
- "ld4q_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U16x8, &::U16x8, &::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i16.p0i16")
- },
- "ld4q_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I32x4, &::I32x4, &::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i32.p0i32")
- },
- "ld4q_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U32x4, &::U32x4, &::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i32.p0i32")
- },
- "ld4q_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I64x2, &::I64x2, &::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i64.p0i64")
- },
- "ld4q_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U64x2, &::U64x2, &::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i64.p0i64")
- },
- "ld4q_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F32x4, &::F32x4, &::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4f32.p0f32")
- },
- "ld4q_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F64x2, &::F64x2, &::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2f64.p0f64")
- },
- "padd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.addp.v8i8")
- },
- "padd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.addp.v8i8")
- },
- "padd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.addp.v4i16")
- },
- "padd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.addp.v4i16")
- },
- "padd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.addp.v2i32")
- },
- "padd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.addp.v2i32")
- },
- "padd_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.addp.v2f32")
- },
- "paddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.addp.v16i8")
- },
- "paddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.addp.v16i8")
- },
- "paddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.addp.v8i16")
- },
- "paddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.addp.v8i16")
- },
- "paddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.addp.v4i32")
- },
- "paddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.addp.v4i32")
- },
- "paddq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.addp.v4f32")
- },
- "paddq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.addp.v2i64")
- },
- "paddq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.addp.v2i64")
- },
- "paddq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.addp.v2f64")
- },
- "paddl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.saddlp.v4i16.v8i8")
- },
- "paddl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uaddlp.v4i16.v8i8")
- },
- "paddl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.saddlp.v2i32.v4i16")
- },
- "paddl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uaddlp.v2i32.v4i16")
- },
- "paddl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.saddlp.v1i64.v2i32")
- },
- "paddl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uaddlp.v1i64.v2i32")
- },
- "paddlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.saddlp.v8i16.v16i8")
- },
- "paddlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uaddlp.v8i16.v16i8")
- },
- "paddlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.saddlp.v4i32.v8i16")
- },
- "paddlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uaddlp.v4i32.v8i16")
- },
- "paddlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.saddlp.v2i64.v4i32")
- },
- "paddlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uaddlp.v2i64.v4i32")
- },
- "pmax_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.smaxp.v8i8")
- },
- "pmax_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.umaxp.v8i8")
- },
- "pmax_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.smaxp.v4i16")
- },
- "pmax_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.umaxp.v4i16")
- },
- "pmax_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.smaxp.v2i32")
- },
- "pmax_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.umaxp.v2i32")
- },
- "pmax_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmaxp.v2f32")
- },
- "pmaxq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.smaxp.v16i8")
- },
- "pmaxq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.umaxp.v16i8")
- },
- "pmaxq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smaxp.v8i16")
- },
- "pmaxq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umaxp.v8i16")
- },
- "pmaxq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smaxp.v4i32")
- },
- "pmaxq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umaxp.v4i32")
- },
- "pmaxq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmaxp.v4f32")
- },
- "pmaxq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.smaxp.v2i64")
- },
- "pmaxq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.umaxp.v2i64")
- },
- "pmaxq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmaxp.v2f64")
- },
- "pmin_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sminp.v8i8")
- },
- "pmin_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uminp.v8i8")
- },
- "pmin_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sminp.v4i16")
- },
- "pmin_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uminp.v4i16")
- },
- "pmin_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sminp.v2i32")
- },
- "pmin_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uminp.v2i32")
- },
- "pmin_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fminp.v2f32")
- },
- "pminq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sminp.v16i8")
- },
- "pminq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uminp.v16i8")
- },
- "pminq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sminp.v8i16")
- },
- "pminq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uminp.v8i16")
- },
- "pminq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sminp.v4i32")
- },
- "pminq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uminp.v4i32")
- },
- "pminq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fminp.v4f32")
- },
- "pminq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sminp.v2i64")
- },
- "pminq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uminp.v2i64")
- },
- "pminq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fminp.v2f64")
- },
- "pmaxnm_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.smaxnmp.v8i8")
- },
- "pmaxnm_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.umaxnmp.v8i8")
- },
- "pmaxnm_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.smaxnmp.v4i16")
- },
- "pmaxnm_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.umaxnmp.v4i16")
- },
- "pmaxnm_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.smaxnmp.v2i32")
- },
- "pmaxnm_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.umaxnmp.v2i32")
- },
- "pmaxnm_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmaxnmp.v2f32")
- },
- "pmaxnmq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.smaxnmp.v16i8")
- },
- "pmaxnmq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.umaxnmp.v16i8")
- },
- "pmaxnmq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smaxnmp.v8i16")
- },
- "pmaxnmq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umaxnmp.v8i16")
- },
- "pmaxnmq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smaxnmp.v4i32")
- },
- "pmaxnmq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umaxnmp.v4i32")
- },
- "pmaxnmq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmaxnmp.v4f32")
- },
- "pmaxnmq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.smaxnmp.v2i64")
- },
- "pmaxnmq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.umaxnmp.v2i64")
- },
- "pmaxnmq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmaxnmp.v2f64")
- },
- "pminnm_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fminnmp.v2f32")
- },
- "pminnmq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fminnmp.v4f32")
- },
- "pminnmq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fminnmp.v2f64")
- },
- "addv_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.saddv.i8.v8i8")
- },
- "addv_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.uaddv.i8.v8i8")
- },
- "addv_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.saddv.i16.v4i16")
- },
- "addv_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uaddv.i16.v4i16")
- },
- "addv_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.saddv.i32.v2i32")
- },
- "addv_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uaddv.i32.v2i32")
- },
- "addv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.faddv.f32.v2f32")
- },
- "addvq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.saddv.i8.v16i8")
- },
- "addvq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.uaddv.i8.v16i8")
- },
- "addvq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.saddv.i16.v8i16")
- },
- "addvq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uaddv.i16.v8i16")
- },
- "addvq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.saddv.i32.v4i32")
- },
- "addvq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uaddv.i32.v4i32")
- },
- "addvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.faddv.f32.v4f32")
- },
- "addvq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I64,
- definition: Named("llvm.aarch64.neon.saddv.i64.v2i64")
- },
- "addvq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U64x2]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.aarch64.neon.uaddv.i64.v2i64")
- },
- "addvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.faddv.f64.v2f64")
- },
- "addlv_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.saddlv.i16.v8i8")
- },
- "addlv_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uaddlv.i16.v8i8")
- },
- "addlv_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.saddlv.i32.v4i16")
- },
- "addlv_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uaddlv.i32.v4i16")
- },
- "addlv_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I64,
- definition: Named("llvm.aarch64.neon.saddlv.i64.v2i32")
- },
- "addlv_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.aarch64.neon.uaddlv.i64.v2i32")
- },
- "addlvq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.saddlv.i16.v16i8")
- },
- "addlvq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uaddlv.i16.v16i8")
- },
- "addlvq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.saddlv.i32.v8i16")
- },
- "addlvq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uaddlv.i32.v8i16")
- },
- "addlvq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I64,
- definition: Named("llvm.aarch64.neon.saddlv.i64.v4i32")
- },
- "addlvq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.aarch64.neon.uaddlv.i64.v4i32")
- },
- "maxv_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.smaxv.i8.v8i8")
- },
- "maxv_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.umaxv.i8.v8i8")
- },
- "maxv_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.smaxv.i16.v4i16")
- },
- "maxv_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.umaxv.i16.v4i16")
- },
- "maxv_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.smaxv.i32.v2i32")
- },
- "maxv_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.umaxv.i32.v2i32")
- },
- "maxv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fmaxv.f32.v2f32")
- },
- "maxvq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.smaxv.i8.v16i8")
- },
- "maxvq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.umaxv.i8.v16i8")
- },
- "maxvq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.smaxv.i16.v8i16")
- },
- "maxvq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.umaxv.i16.v8i16")
- },
- "maxvq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.smaxv.i32.v4i32")
- },
- "maxvq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.umaxv.i32.v4i32")
- },
- "maxvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fmaxv.f32.v4f32")
- },
- "maxvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.fmaxv.f64.v2f64")
- },
- "minv_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.sminv.i8.v8i8")
- },
- "minv_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.uminv.i8.v8i8")
- },
- "minv_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.sminv.i16.v4i16")
- },
- "minv_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uminv.i16.v4i16")
- },
- "minv_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.sminv.i32.v2i32")
- },
- "minv_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uminv.i32.v2i32")
- },
- "minv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fminv.f32.v2f32")
- },
- "minvq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.sminv.i8.v16i8")
- },
- "minvq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.uminv.i8.v16i8")
- },
- "minvq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.sminv.i16.v8i16")
- },
- "minvq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uminv.i16.v8i16")
- },
- "minvq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.sminv.i32.v4i32")
- },
- "minvq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uminv.i32.v4i32")
- },
- "minvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fminv.f32.v4f32")
- },
- "minvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.fminv.f64.v2f64")
- },
- "maxnmv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fmaxnmv.f32.v2f32")
- },
- "maxnmvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fmaxnmv.f32.v4f32")
- },
- "maxnmvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.fmaxnmv.f64.v2f64")
- },
- "minnmv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fminnmv.f32.v2f32")
- },
- "minnmvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fminnmv.f32.v4f32")
- },
- "minnmvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.fminnmv.f64.v2f64")
- },
- "qtbl1_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbl1.v8i8")
- },
- "qtbl1_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbl1.v8i8")
- },
- "qtbl1q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbl1.v16i8")
- },
- "qtbl1q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbl1.v16i8")
- },
- "qtbx1_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, &::I8x16, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbx1.v8i8")
- },
- "qtbx1_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, &::U8x16, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbx1.v8i8")
- },
- "qtbx1q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbx1.v16i8")
- },
- "qtbx1q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbx1.v16i8")
- },
- "qtbl2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbl2.v8i8")
- },
- "qtbl2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbl2.v8i8")
- },
- "qtbl2q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbl2.v16i8")
- },
- "qtbl2q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbl2.v16i8")
- },
- "qtbx2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbx2.v8i8")
- },
- "qtbx2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbx2.v8i8")
- },
- "qtbx2q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbx2.v16i8")
- },
- "qtbx2q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbx2.v16i8")
- },
- "qtbl3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbl3.v8i8")
- },
- "qtbl3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbl3.v8i8")
- },
- "qtbl3q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbl3.v16i8")
- },
- "qtbl3q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbl3.v16i8")
- },
- "qtbx3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbx3.v8i8")
- },
- "qtbx3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbx3.v8i8")
- },
- "qtbx3q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbx3.v16i8")
- },
- "qtbx3q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbx3.v16i8")
- },
- "qtbl4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbl4.v8i8")
- },
- "qtbl4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbl4.v8i8")
- },
- "qtbl4q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbl4.v16i8")
- },
- "qtbl4q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbl4.v16i8")
- },
- "qtbx4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbx4.v8i8")
- },
- "qtbx4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbx4.v8i8")
- },
- "qtbx4q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbx4.v16i8")
- },
- "qtbx4q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbx4.v16i8")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/arm.rs b/src/librustc_platform_intrinsics/arm.rs
deleted file mode 100644
index 2d19293..0000000
--- a/src/librustc_platform_intrinsics/arm.rs
+++ /dev/null
@@ -1,2074 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("arm_v") { return None }
- Some(match &name["arm_v".len()..] {
- "hadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vhadds.v8i8")
- },
- "hadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vhaddu.v8i8")
- },
- "hadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vhadds.v4i16")
- },
- "hadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vhaddu.v4i16")
- },
- "hadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vhadds.v2i32")
- },
- "hadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vhaddu.v2i32")
- },
- "haddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vhadds.v16i8")
- },
- "haddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vhaddu.v16i8")
- },
- "haddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vhadds.v8i16")
- },
- "haddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vhaddu.v8i16")
- },
- "haddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vhadds.v4i32")
- },
- "haddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vhaddu.v4i32")
- },
- "rhadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vrhadds.v8i8")
- },
- "rhadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vrhaddu.v8i8")
- },
- "rhadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vrhadds.v4i16")
- },
- "rhadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vrhaddu.v4i16")
- },
- "rhadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vrhadds.v2i32")
- },
- "rhadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrhaddu.v2i32")
- },
- "rhaddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vrhadds.v16i8")
- },
- "rhaddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vrhaddu.v16i8")
- },
- "rhaddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vrhadds.v8i16")
- },
- "rhaddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vrhaddu.v8i16")
- },
- "rhaddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vrhadds.v4i32")
- },
- "rhaddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vrhaddu.v4i32")
- },
- "qadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqadds.v8i8")
- },
- "qadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqaddu.v8i8")
- },
- "qadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqadds.v4i16")
- },
- "qadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqaddu.v4i16")
- },
- "qadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqadds.v2i32")
- },
- "qadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqaddu.v2i32")
- },
- "qadd_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vqadds.v1i64")
- },
- "qadd_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vqaddu.v1i64")
- },
- "qaddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vqadds.v16i8")
- },
- "qaddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vqaddu.v16i8")
- },
- "qaddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vqadds.v8i16")
- },
- "qaddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vqaddu.v8i16")
- },
- "qaddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vqadds.v4i32")
- },
- "qaddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vqaddu.v4i32")
- },
- "qaddq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vqadds.v2i64")
- },
- "qaddq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vqaddu.v2i64")
- },
- "raddhn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vraddhn.v8i8")
- },
- "raddhn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vraddhn.v8i8")
- },
- "raddhn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vraddhn.v4i16")
- },
- "raddhn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vraddhn.v4i16")
- },
- "raddhn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vraddhn.v2i32")
- },
- "raddhn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vraddhn.v2i32")
- },
- "fma_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.fma.v2f32")
- },
- "fmaq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.fma.v4f32")
- },
- "qdmulh_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqdmulh.v4i16")
- },
- "qdmulh_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqdmulh.v2i32")
- },
- "qdmulhq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqdmulh.v8i16")
- },
- "qdmulhq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqdmulh.v4i32")
- },
- "qrdmulh_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqrdmulh.v4i16")
- },
- "qrdmulh_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqrdmulh.v2i32")
- },
- "qrdmulhq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqrdmulh.v8i16")
- },
- "qrdmulhq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqrdmulh.v4i32")
- },
- "mull_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vmulls.v8i16")
- },
- "mull_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vmullu.v8i16")
- },
- "mull_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vmulls.v4i32")
- },
- "mull_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vmullu.v4i32")
- },
- "mull_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vmulls.v2i64")
- },
- "mull_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vmullu.v2i64")
- },
- "qdmullq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqdmull.v8i16")
- },
- "qdmullq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqdmull.v4i32")
- },
- "hsub_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vhsubs.v8i8")
- },
- "hsub_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vhsubu.v8i8")
- },
- "hsub_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vhsubs.v4i16")
- },
- "hsub_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vhsubu.v4i16")
- },
- "hsub_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vhsubs.v2i32")
- },
- "hsub_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vhsubu.v2i32")
- },
- "hsubq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vhsubs.v16i8")
- },
- "hsubq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vhsubu.v16i8")
- },
- "hsubq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vhsubs.v8i16")
- },
- "hsubq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vhsubu.v8i16")
- },
- "hsubq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vhsubs.v4i32")
- },
- "hsubq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vhsubu.v4i32")
- },
- "qsub_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqsubs.v8i8")
- },
- "qsub_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqsubu.v8i8")
- },
- "qsub_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqsubs.v4i16")
- },
- "qsub_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqsubu.v4i16")
- },
- "qsub_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqsubs.v2i32")
- },
- "qsub_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqsubu.v2i32")
- },
- "qsub_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vqsubs.v1i64")
- },
- "qsub_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vqsubu.v1i64")
- },
- "qsubq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vqsubs.v16i8")
- },
- "qsubq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vqsubu.v16i8")
- },
- "qsubq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vqsubs.v8i16")
- },
- "qsubq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vqsubu.v8i16")
- },
- "qsubq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vqsubs.v4i32")
- },
- "qsubq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vqsubu.v4i32")
- },
- "qsubq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vqsubs.v2i64")
- },
- "qsubq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vqsubu.v2i64")
- },
- "rsubhn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vrsubhn.v8i8")
- },
- "rsubhn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vrsubhn.v8i8")
- },
- "rsubhn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vrsubhn.v4i16")
- },
- "rsubhn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vrsubhn.v4i16")
- },
- "rsubhn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vrsubhn.v2i32")
- },
- "rsubhn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrsubhn.v2i32")
- },
- "abd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vabds.v8i8")
- },
- "abd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vabdu.v8i8")
- },
- "abd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vabds.v4i16")
- },
- "abd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vabdu.v4i16")
- },
- "abd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vabds.v2i32")
- },
- "abd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vabdu.v2i32")
- },
- "abd_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vabdf.v2f32")
- },
- "abdq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vabds.v16i8")
- },
- "abdq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vabdu.v16i8")
- },
- "abdq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vabds.v8i16")
- },
- "abdq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vabdu.v8i16")
- },
- "abdq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vabds.v4i32")
- },
- "abdq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vabdu.v4i32")
- },
- "abdq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vabdf.v4f32")
- },
- "max_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vmaxs.v8i8")
- },
- "max_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vmaxu.v8i8")
- },
- "max_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vmaxs.v4i16")
- },
- "max_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vmaxu.v4i16")
- },
- "max_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vmaxs.v2i32")
- },
- "max_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vmaxu.v2i32")
- },
- "max_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vmaxf.v2f32")
- },
- "maxq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vmaxs.v16i8")
- },
- "maxq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vmaxu.v16i8")
- },
- "maxq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vmaxs.v8i16")
- },
- "maxq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vmaxu.v8i16")
- },
- "maxq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vmaxs.v4i32")
- },
- "maxq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vmaxu.v4i32")
- },
- "maxq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vmaxf.v4f32")
- },
- "min_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vmins.v8i8")
- },
- "min_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vminu.v8i8")
- },
- "min_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vmins.v4i16")
- },
- "min_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vminu.v4i16")
- },
- "min_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vmins.v2i32")
- },
- "min_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vminu.v2i32")
- },
- "min_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vminf.v2f32")
- },
- "minq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vmins.v16i8")
- },
- "minq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vminu.v16i8")
- },
- "minq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vmins.v8i16")
- },
- "minq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vminu.v8i16")
- },
- "minq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vmins.v4i32")
- },
- "minq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vminu.v4i32")
- },
- "minq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vminf.v4f32")
- },
- "shl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vshls.v8i8")
- },
- "shl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vshlu.v8i8")
- },
- "shl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vshls.v4i16")
- },
- "shl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vshlu.v4i16")
- },
- "shl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vshls.v2i32")
- },
- "shl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vshlu.v2i32")
- },
- "shl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vshls.v1i64")
- },
- "shl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vshlu.v1i64")
- },
- "shlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vshls.v16i8")
- },
- "shlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vshlu.v16i8")
- },
- "shlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vshls.v8i16")
- },
- "shlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vshlu.v8i16")
- },
- "shlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vshls.v4i32")
- },
- "shlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vshlu.v4i32")
- },
- "shlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vshls.v2i64")
- },
- "shlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vshlu.v2i64")
- },
- "qshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqshls.v8i8")
- },
- "qshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqshlu.v8i8")
- },
- "qshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqshls.v4i16")
- },
- "qshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqshlu.v4i16")
- },
- "qshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqshls.v2i32")
- },
- "qshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqshlu.v2i32")
- },
- "qshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vqshls.v1i64")
- },
- "qshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vqshlu.v1i64")
- },
- "qshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vqshls.v16i8")
- },
- "qshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vqshlu.v16i8")
- },
- "qshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vqshls.v8i16")
- },
- "qshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vqshlu.v8i16")
- },
- "qshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vqshls.v4i32")
- },
- "qshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vqshlu.v4i32")
- },
- "qshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vqshls.v2i64")
- },
- "qshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vqshlu.v2i64")
- },
- "rshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vrshls.v8i8")
- },
- "rshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vrshlu.v8i8")
- },
- "rshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vrshls.v4i16")
- },
- "rshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vrshlu.v4i16")
- },
- "rshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vrshls.v2i32")
- },
- "rshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrshlu.v2i32")
- },
- "rshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vrshls.v1i64")
- },
- "rshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vrshlu.v1i64")
- },
- "rshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vrshls.v16i8")
- },
- "rshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vrshlu.v16i8")
- },
- "rshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vrshls.v8i16")
- },
- "rshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vrshlu.v8i16")
- },
- "rshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vrshls.v4i32")
- },
- "rshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vrshlu.v4i32")
- },
- "rshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vrshls.v2i64")
- },
- "rshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vrshlu.v2i64")
- },
- "qrshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqrshls.v8i8")
- },
- "qrshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqrshlu.v8i8")
- },
- "qrshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqrshls.v4i16")
- },
- "qrshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqrshlu.v4i16")
- },
- "qrshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqrshls.v2i32")
- },
- "qrshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqrshlu.v2i32")
- },
- "qrshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vqrshls.v1i64")
- },
- "qrshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vqrshlu.v1i64")
- },
- "qrshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vqrshls.v16i8")
- },
- "qrshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vqrshlu.v16i8")
- },
- "qrshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vqrshls.v8i16")
- },
- "qrshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vqrshlu.v8i16")
- },
- "qrshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vqrshls.v4i32")
- },
- "qrshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vqrshlu.v4i32")
- },
- "qrshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vqrshls.v2i64")
- },
- "qrshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vqrshlu.v2i64")
- },
- "qshrun_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vsqshrun.v8i8")
- },
- "qshrun_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqshrun.v4i16")
- },
- "qshrun_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqshrun.v2i32")
- },
- "qrshrun_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vsqrshrun.v8i8")
- },
- "qrshrun_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqrshrun.v4i16")
- },
- "qrshrun_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqrshrun.v2i32")
- },
- "qshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqshrns.v8i8")
- },
- "qshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqshrnu.v8i8")
- },
- "qshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqshrns.v4i16")
- },
- "qshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqshrnu.v4i16")
- },
- "qshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqshrns.v2i32")
- },
- "qshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqshrnu.v2i32")
- },
- "rshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vrshrn.v8i8")
- },
- "rshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vrshrn.v8i8")
- },
- "rshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vrshrn.v4i16")
- },
- "rshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vrshrn.v4i16")
- },
- "rshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vrshrn.v2i32")
- },
- "rshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrshrn.v2i32")
- },
- "qrshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqrshrns.v8i8")
- },
- "qrshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqrshrnu.v8i8")
- },
- "qrshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqrshrns.v4i16")
- },
- "qrshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqrshrnu.v4i16")
- },
- "qrshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqrshrns.v2i32")
- },
- "qrshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqrshrnu.v2i32")
- },
- "sri_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vvsri.v8i8")
- },
- "sri_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vvsri.v8i8")
- },
- "sri_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vvsri.v4i16")
- },
- "sri_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vvsri.v4i16")
- },
- "sri_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vvsri.v2i32")
- },
- "sri_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vvsri.v2i32")
- },
- "sri_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vvsri.v1i64")
- },
- "sri_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vvsri.v1i64")
- },
- "sriq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vvsri.v16i8")
- },
- "sriq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vvsri.v16i8")
- },
- "sriq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vvsri.v8i16")
- },
- "sriq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vvsri.v8i16")
- },
- "sriq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vvsri.v4i32")
- },
- "sriq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vvsri.v4i32")
- },
- "sriq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vvsri.v2i64")
- },
- "sriq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vvsri.v2i64")
- },
- "sli_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vvsli.v8i8")
- },
- "sli_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vvsli.v8i8")
- },
- "sli_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vvsli.v4i16")
- },
- "sli_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vvsli.v4i16")
- },
- "sli_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vvsli.v2i32")
- },
- "sli_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vvsli.v2i32")
- },
- "sli_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vvsli.v1i64")
- },
- "sli_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vvsli.v1i64")
- },
- "sliq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vvsli.v16i8")
- },
- "sliq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vvsli.v16i8")
- },
- "sliq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vvsli.v8i16")
- },
- "sliq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vvsli.v8i16")
- },
- "sliq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vvsli.v4i32")
- },
- "sliq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vvsli.v4i32")
- },
- "sliq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vvsli.v2i64")
- },
- "sliq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vvsli.v2i64")
- },
- "vqmovn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqxtns.v8i8")
- },
- "vqmovn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqxtnu.v8i8")
- },
- "vqmovn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqxtns.v4i16")
- },
- "vqmovn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqxtnu.v4i16")
- },
- "vqmovn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqxtns.v2i32")
- },
- "vqmovn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqxtnu.v2i32")
- },
- "abs_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vabs.v8i8")
- },
- "abs_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vabs.v4i16")
- },
- "abs_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vabs.v2i32")
- },
- "absq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vabs.v16i8")
- },
- "absq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vabs.v8i16")
- },
- "absq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vabs.v4i32")
- },
- "abs_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.fabs.v2f32")
- },
- "absq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.fabs.v4f32")
- },
- "qabs_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vsqabs.v8i8")
- },
- "qabs_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqabs.v4i16")
- },
- "qabs_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqabs.v2i32")
- },
- "qabsq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vsqabs.v16i8")
- },
- "qabsq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqabs.v8i16")
- },
- "qabsq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqabs.v4i32")
- },
- "qneg_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vsqneg.v8i8")
- },
- "qneg_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqneg.v4i16")
- },
- "qneg_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqneg.v2i32")
- },
- "qnegq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vsqneg.v16i8")
- },
- "qnegq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqneg.v8i16")
- },
- "qnegq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqneg.v4i32")
- },
- "clz_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.ctlz.v8i8")
- },
- "clz_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.ctlz.v8i8")
- },
- "clz_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.ctlz.v4i16")
- },
- "clz_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.ctlz.v4i16")
- },
- "clz_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.ctlz.v2i32")
- },
- "clz_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.ctlz.v2i32")
- },
- "clzq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ctlz.v16i8")
- },
- "clzq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ctlz.v16i8")
- },
- "clzq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ctlz.v8i16")
- },
- "clzq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ctlz.v8i16")
- },
- "clzq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ctlz.v4i32")
- },
- "clzq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ctlz.v4i32")
- },
- "cls_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vcls.v8i8")
- },
- "cls_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vcls.v8i8")
- },
- "cls_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vcls.v4i16")
- },
- "cls_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vcls.v4i16")
- },
- "cls_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vcls.v2i32")
- },
- "cls_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vcls.v2i32")
- },
- "clsq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vcls.v16i8")
- },
- "clsq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vcls.v16i8")
- },
- "clsq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vcls.v8i16")
- },
- "clsq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vcls.v8i16")
- },
- "clsq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vcls.v4i32")
- },
- "clsq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vcls.v4i32")
- },
- "cnt_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.ctpop.v8i8")
- },
- "cnt_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.ctpop.v8i8")
- },
- "cntq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ctpop.v16i8")
- },
- "cntq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ctpop.v16i8")
- },
- "recpe_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrecpe.v2i32")
- },
- "recpe_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vrecpe.v2f32")
- },
- "recpeq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vrecpe.v4i32")
- },
- "recpeq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vrecpe.v4f32")
- },
- "recps_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vfrecps.v2f32")
- },
- "recpsq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vfrecps.v4f32")
- },
- "sqrt_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.sqrt.v2f32")
- },
- "sqrtq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.sqrt.v4f32")
- },
- "rsqrte_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrsqrte.v2i32")
- },
- "rsqrte_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vrsqrte.v2f32")
- },
- "rsqrteq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vrsqrte.v4i32")
- },
- "rsqrteq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vrsqrte.v4f32")
- },
- "rsqrts_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vrsqrts.v2f32")
- },
- "rsqrtsq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vrsqrts.v4f32")
- },
- "bsl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vbsl.v8i8")
- },
- "bsl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vbsl.v8i8")
- },
- "bsl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vbsl.v4i16")
- },
- "bsl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vbsl.v4i16")
- },
- "bsl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vbsl.v2i32")
- },
- "bsl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vbsl.v2i32")
- },
- "bsl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vbsl.v1i64")
- },
- "bsl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vbsl.v1i64")
- },
- "bslq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vbsl.v16i8")
- },
- "bslq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vbsl.v16i8")
- },
- "bslq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vbsl.v8i16")
- },
- "bslq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vbsl.v8i16")
- },
- "bslq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vbsl.v4i32")
- },
- "bslq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vbsl.v4i32")
- },
- "bslq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vbsl.v2i64")
- },
- "bslq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vbsl.v2i64")
- },
- "padd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vpadd.v8i8")
- },
- "padd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vpadd.v8i8")
- },
- "padd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpadd.v4i16")
- },
- "padd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpadd.v4i16")
- },
- "padd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpadd.v2i32")
- },
- "padd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpadd.v2i32")
- },
- "padd_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vpadd.v2f32")
- },
- "paddl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpaddls.v4i16.v8i8")
- },
- "paddl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpaddlu.v4i16.v8i8")
- },
- "paddl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpaddls.v2i32.v4i16")
- },
- "paddl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpaddlu.v2i32.v4i16")
- },
- "paddl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vpaddls.v1i64.v2i32")
- },
- "paddl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vpaddlu.v1i64.v2i32")
- },
- "paddlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vpaddls.v8i16.v16i8")
- },
- "paddlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vpaddlu.v8i16.v16i8")
- },
- "paddlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vpaddls.v4i32.v8i16")
- },
- "paddlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vpaddlu.v4i32.v8i16")
- },
- "paddlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vpaddls.v2i64.v4i32")
- },
- "paddlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vpaddlu.v2i64.v4i32")
- },
- "padal_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I8x8]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpadals.v4i16.v4i16")
- },
- "padal_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U8x8]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpadalu.v4i16.v4i16")
- },
- "padal_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I16x4]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpadals.v2i32.v2i32")
- },
- "padal_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U16x4]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpadalu.v2i32.v2i32")
- },
- "padal_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I32x2]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vpadals.v1i64.v1i64")
- },
- "padal_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U32x2]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vpadalu.v1i64.v1i64")
- },
- "padalq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vpadals.v8i16.v8i16")
- },
- "padalq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vpadalu.v8i16.v8i16")
- },
- "padalq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vpadals.v4i32.v4i32")
- },
- "padalq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vpadalu.v4i32.v4i32")
- },
- "padalq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I32x4]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vpadals.v2i64.v2i64")
- },
- "padalq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32x4]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vpadalu.v2i64.v2i64")
- },
- "pmax_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vpmaxs.v8i8")
- },
- "pmax_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vpmaxu.v8i8")
- },
- "pmax_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpmaxs.v4i16")
- },
- "pmax_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpmaxu.v4i16")
- },
- "pmax_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpmaxs.v2i32")
- },
- "pmax_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpmaxu.v2i32")
- },
- "pmax_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vpmaxf.v2f32")
- },
- "pmin_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vpmins.v8i8")
- },
- "pmin_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vpminu.v8i8")
- },
- "pmin_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpmins.v4i16")
- },
- "pmin_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpminu.v4i16")
- },
- "pmin_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpmins.v2i32")
- },
- "pmin_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpminu.v2i32")
- },
- "pmin_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vpminf.v2f32")
- },
- "pminq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vpmins.v16i8")
- },
- "pminq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vpminu.v16i8")
- },
- "pminq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vpmins.v8i16")
- },
- "pminq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vpminu.v8i16")
- },
- "pminq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vpmins.v4i32")
- },
- "pminq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vpminu.v4i32")
- },
- "pminq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vpminf.v4f32")
- },
- "tbl1_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbl1")
- },
- "tbl1_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbl1")
- },
- "tbx1_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbx1")
- },
- "tbx1_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbx1")
- },
- "tbl2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbl2")
- },
- "tbl2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbl2")
- },
- "tbx2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbx2")
- },
- "tbx2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbx2")
- },
- "tbl3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbl3")
- },
- "tbl3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbl3")
- },
- "tbx3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbx3")
- },
- "tbx3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbx3")
- },
- "tbl4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x8, &::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbl4")
- },
- "tbl4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x8, &::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbl4")
- },
- "tbx4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x8, &::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbx4")
- },
- "tbx4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x8, &::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbx4")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/hexagon.rs b/src/librustc_platform_intrinsics/hexagon.rs
deleted file mode 100644
index fd0f3a4..0000000
--- a/src/librustc_platform_intrinsics/hexagon.rs
+++ /dev/null
@@ -1,2924 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("Q6_") { return None }
- Some(match &name["Q6_".len()..] {
- "R_vextract64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x16, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.hexagon.V6.extractw")
- },
- "R_vextract128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.hexagon.V6.extractw.128B")
- },
- "V_lo64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.lo")
- },
- "V_lo128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x64]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.lo.128B")
- },
- "V_hi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.hi")
- },
- "V_hi128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x64]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.hi.128B")
- },
- "V_vsplat_R64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.lvsplatuw")
- },
- "V_vsplat_R128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.lvsplatuw.128B")
- },
- "Q_and_QQ64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.pred.and")
- },
- "Q_and_QQ128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.pred.and.128B")
- },
- "Q_not_Q64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.pred.not")
- },
- "Q_not_Q128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.pred.not.128B")
- },
- "Q_or_QQ64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.pred.or")
- },
- "Q_or_QQ128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.pred.or.128B")
- },
- "Q_xor_QQ64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.pred.xor")
- },
- "Q_xor_QQ128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.pred.xor.128B")
- },
- "Vub_vabsdiff_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vabsdiffub")
- },
- "Vuh_vabsdiff_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vabsdiffuh")
- },
- "Vub_vabsdiff_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vabsdiffub.128B")
- },
- "Vuh_vabsdiff_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vabsdiffuh.128B")
- },
- "Vuh_vabsdiff_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vabsdiffh")
- },
- "Vuw_vabsdiff_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vabsdiffw")
- },
- "Vuh_vabsdiff_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vabsdiffh.128B")
- },
- "Vuw_vabsdiff_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vabsdiffw.128B")
- },
- "Vh_vabs_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vabsh")
- },
- "Vw_vabs_Vw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vabsw")
- },
- "Vh_vabs_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vabsh.128B")
- },
- "Vw_vabs_Vw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vabsw.128B")
- },
- "Vh_vabs_Vh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vabsh.sat")
- },
- "Vw_vabs_Vw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vabsw.sat")
- },
- "Vh_vabs_Vh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vabsh.sat.128B")
- },
- "Vw_vabs_Vw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vabsw.sat.128B")
- },
- "Vb_vadd_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vaddb")
- },
- "Vh_vadd_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaddh")
- },
- "Vw_vadd_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaddw")
- },
- "Vb_vadd_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vaddb.128B")
- },
- "Vh_vadd_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddh.128B")
- },
- "Vw_vadd_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddw.128B")
- },
- "Vh_vadd_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaddhsat")
- },
- "Vw_vadd_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaddwsat")
- },
- "Vh_vadd_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddhsat.128B")
- },
- "Vw_vadd_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddwsat.128B")
- },
- "Vub_vadd_VubVub_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vaddubsat")
- },
- "Vuh_vadd_VuhVuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vadduhsat")
- },
- "Vub_vadd_VubVub_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vaddubsat.128B")
- },
- "Vuh_vadd_VuhVuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vadduhsat.128B")
- },
- "Wb_vadd_WbWb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vaddb.dv")
- },
- "Wh_vadd_WhWh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddh.dv")
- },
- "Ww_vadd_WwWw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddw.dv")
- },
- "Wb_vadd_WbWb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x256, &::I8x256]; &INPUTS },
- output: &::I8x256,
- definition: Named("llvm.hexagon.V6.vaddb.dv.128B")
- },
- "Wh_vadd_WhWh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I16x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vaddh.dv.128B")
- },
- "Ww_vadd_WwWw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I32x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vaddw.dv.128B")
- },
- "Wh_vadd_WhWh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddhsat.dv")
- },
- "Ww_vadd_WwWw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddwsat.dv")
- },
- "Wh_vadd_WhWh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I16x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vaddhsat.dv.128B")
- },
- "Ww_vadd_WwWw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I32x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vaddwsat.dv.128B")
- },
- "Wub_vadd_WubWub_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vaddubsat.dv")
- },
- "Wuh_vadd_WuhWuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vadduhsat.dv")
- },
- "Wub_vadd_WubWub_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U8x256]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vaddubsat.dv.128B")
- },
- "Wuh_vadd_WuhWuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x128, &::U16x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vadduhsat.dv.128B")
- },
- "V_valign_VVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.valignb")
- },
- "V_valign_VVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.valignb.128B")
- },
- "V_valign_VVI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.valignbi")
- },
- "V_valign_VVI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.valignbi.128B")
- },
- "V_vlalign_VVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vlalignb")
- },
- "V_vlalign_VVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vlalignb.128B")
- },
- "V_vlalign_VVI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vlalignbi")
- },
- "V_vlalign_VVI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vlalignbi.128B")
- },
- "V_vand_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vand")
- },
- "V_vand_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vand.128B")
- },
- "V_vand_QR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vandqrt")
- },
- "V_vand_QR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vandqrt.128B")
- },
- "V_vandor_VQR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U32x2, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vandqrt.acc")
- },
- "V_vandor_VQR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U32x4, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vandqrt.acc.128B")
- },
- "Q_vand_VR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vandvrt")
- },
- "Q_vand_VR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vandvrt.128B")
- },
- "Q_vandor_QVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vandvrt")
- },
- "Q_vandor_QVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vandvrt.128B")
- },
- "Vh_vasl_VhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaslh")
- },
- "Vw_vasl_VwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaslw")
- },
- "Vh_vasl_VhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaslh.128B")
- },
- "Vw_vasl_VwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaslw.128B")
- },
- "Vh_vasl_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaslhv")
- },
- "Vw_vasl_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaslwv")
- },
- "Vh_vasl_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaslhv.128B")
- },
- "Vw_vasl_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaslwv.128B")
- },
- "Vw_vaslacc_VwVwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaslw.acc")
- },
- "Vw_vaslacc_VwVwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaslw.acc.128B")
- },
- "Vh_vasr_VhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrh")
- },
- "Vw_vasr_VwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vasrw")
- },
- "Vh_vasr_VhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrh.128B")
- },
- "Vw_vasr_VwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vasrw.128B")
- },
- "Vh_vasr_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrhv")
- },
- "Vw_vasr_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vasrwv")
- },
- "Vh_vasr_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrhv.128B")
- },
- "Vw_vasr_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vasrwv.128B")
- },
- "Vw_vasracc_VwVwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vasrw.acc")
- },
- "Vw_vasracc_VwVwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vasrw.acc.128B")
- },
- "Vh_vasr_VwVwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrhw")
- },
- "Vh_vasr_VwVwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrhw.128B")
- },
- "Vb_vasr_VhVhR_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vasrhbsat")
- },
- "Vub_vasr_VhVhR_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vasrhbsat")
- },
- "Vh_vasr_VwVwR_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrwhsat")
- },
- "Vuh_vasr_VwVwR_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vasrwhsat")
- },
- "Vb_vasr_VhVhR_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vasrhbsat.128B")
- },
- "Vub_vasr_VhVhR_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vasrhbsat.128B")
- },
- "Vh_vasr_VwVwR_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrwhsat.128B")
- },
- "Vuh_vasr_VwVwR_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vasrwhsat.128B")
- },
- "Vb_vasr_VhVhR_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vasrhbrndsat")
- },
- "Vub_vasr_VhVhR_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vasrhbrndsat")
- },
- "Vh_vasr_VwVwR_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrwhrndsat")
- },
- "Vuh_vasr_VwVwR_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vasrwhrndsat")
- },
- "Vb_vasr_VhVhR_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vasrhbrndsat.128B")
- },
- "Vub_vasr_VhVhR_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vasrhbrndsat.128B")
- },
- "Vh_vasr_VwVwR_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrwhrndsat.128B")
- },
- "Vuh_vasr_VwVwR_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vasrwhrndsat.128B")
- },
- "V_equals_V64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vassign")
- },
- "V_equals_V128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vassign.128B")
- },
- "W_equals_W64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vassignp")
- },
- "W_equals_W128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vassignp.128B")
- },
- "Vh_vavg_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vavgh")
- },
- "Vw_vavg_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vavgw")
- },
- "Vh_vavg_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vavgh.128B")
- },
- "Vw_vavg_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vavgw.128B")
- },
- "Vub_vavg_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vavgub")
- },
- "Vuh_vavg_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vavguh")
- },
- "Vub_vavg_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vavgub.128B")
- },
- "Vuh_vavg_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vavguh.128B")
- },
- "Vh_vavg_VhVh_rnd64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vavgrndh")
- },
- "Vw_vavg_VwVw_rnd64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vavgrndw")
- },
- "Vh_vavg_VhVh_rnd128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vavgrndh.128B")
- },
- "Vw_vavg_VwVw_rnd128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vavgrndw.128B")
- },
- "Vub_vavg_VubVub_rnd64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vavgrndub")
- },
- "Vuh_vavg_VuhVuh_rnd64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vavgrnduh")
- },
- "Vub_vavg_VubVub_rnd128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vavgrndub.128B")
- },
- "Vuh_vavg_VuhVuh_rnd128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vavgrnduh.128B")
- },
- "Vuh_vcl0_Vuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vcl0h")
- },
- "Vuw_vcl0_Vuw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vcl0w")
- },
- "Vuh_vcl0_Vuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vcl0h.128B")
- },
- "Vuw_vcl0_Vuw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vcl0w.128B")
- },
- "W_vcombine_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vcombine")
- },
- "W_vcombine_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vcombine.128B")
- },
- "V_vzero64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vd0")
- },
- "V_vzero128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vd0.128B")
- },
- "Vb_vdeal_Vb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vdealb")
- },
- "Vh_vdeal_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vdealh")
- },
- "Vb_vdeal_Vb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vdealb.128B")
- },
- "Vh_vdeal_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdealh.128B")
- },
- "Vb_vdeale_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vdealb4w")
- },
- "Vb_vdeale_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vdealb4w.128B")
- },
- "W_vdeal_VVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vdealvdd")
- },
- "W_vdeal_VVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vdealvdd.128B")
- },
- "V_vdelta_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vdelta")
- },
- "V_vdelta_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vdelta.128B")
- },
- "Vh_vdmpy_VubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vdmpybus")
- },
- "Vh_vdmpy_VubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdmpybus.128B")
- },
- "Vh_vdmpyacc_VhVubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::U8x64, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vdmpybus.acc")
- },
- "Vh_vdmpyacc_VhVubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdmpybus.acc.128B")
- },
- "Wh_vdmpy_WubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdmpybus.dv")
- },
- "Wh_vdmpy_WubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vdmpybus.dv.128B")
- },
- "Wh_vdmpyacc_WhWubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdmpybus.dv.acc")
- },
- "Wh_vdmpyacc_WhWubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vdmpybus.dv.acc.128B")
- },
- "Vw_vdmpy_VhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhb")
- },
- "Vw_vdmpy_VhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhb.128B")
- },
- "Vw_vdmpyacc_VwVhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhb.acc")
- },
- "Vw_vdmpyacc_VwVhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhb.acc.128B")
- },
- "Ww_vdmpy_WhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhb.dv")
- },
- "Ww_vdmpy_WhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vdmpyhb.dv.128B")
- },
- "Ww_vdmpyacc_WwWhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhb.dv.acc")
- },
- "Ww_vdmpyacc_WwWhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vdmpyhb.dv.acc.128B")
- },
- "Vw_vdmpy_WwRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhisat")
- },
- "Vw_vdmpy_WwRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhisat.128B")
- },
- "Vw_vdmpy_VhRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsat")
- },
- "Vw_vdmpy_VhRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsat.128B")
- },
- "Vw_vdmpy_WhRuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsuisat")
- },
- "Vw_vdmpy_WhRuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsuisat.128B")
- },
- "Vw_vdmpy_VhRuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsusat")
- },
- "Vw_vdmpy_VhRuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsusat.128B")
- },
- "Vw_vdmpy_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhvsat")
- },
- "Vw_vdmpy_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhvsat.128B")
- },
- "Vw_vdmpyacc_VwWwRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhisat_acc")
- },
- "Vw_vdmpyacc_VwWwRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhisat_acc.128B")
- },
- "Wuw_vdsad_WuhRuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vdsaduh")
- },
- "Wuw_vdsad_WuhRuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x128, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vdsaduh.128B")
- },
- "Wuw_vdsadacc_WuwWuhRuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U16x64, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vdsaduh.acc")
- },
- "Wuw_vdsadacc_WuwWuhRuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U16x128, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vdsaduh.acc.128B")
- },
- "Vw_vdmpyacc_VwVhRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsat_acc")
- },
- "Vw_vdmpyacc_VwVhRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsat_acc.128B")
- },
- "Vw_vdmpyacc_VwWhRuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsuisat_acc")
- },
- "Vw_vdmpyacc_VwWhRuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsuisat_acc.128B")
- },
- "Vw_vdmpyacc_VwVhRuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsusat_acc")
- },
- "Vw_vdmpyacc_VwVhRuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsusat_acc.128B")
- },
- "Vw_vdmpyacc_VwVhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhvsat_acc")
- },
- "Vw_vdmpyacc_VwVhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhvsat_acc.128B")
- },
- "Q_vcmp_eq_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqb")
- },
- "Q_vcmp_eq_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqh")
- },
- "Q_vcmp_eq_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqw")
- },
- "Q_vcmp_eq_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqb.128B")
- },
- "Q_vcmp_eq_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqh.128B")
- },
- "Q_vcmp_eq_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqw.128B")
- },
- "Q_vcmp_eqand_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqb.and")
- },
- "Q_vcmp_eqand_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqh.and")
- },
- "Q_vcmp_eqand_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqw.and")
- },
- "Q_vcmp_eqand_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqb.and.128B")
- },
- "Q_vcmp_eqand_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqh.and.128B")
- },
- "Q_vcmp_eqand_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqw.and.128B")
- },
- "Q_vcmp_eqor_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqb.or")
- },
- "Q_vcmp_eqor_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqh.or")
- },
- "Q_vcmp_eqor_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqw.or")
- },
- "Q_vcmp_eqor_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqb.or.128B")
- },
- "Q_vcmp_eqor_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqh.or.128B")
- },
- "Q_vcmp_eqor_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqw.or.128B")
- },
- "Q_vcmp_eqxacc_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqb.xor")
- },
- "Q_vcmp_eqxacc_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqh.xor")
- },
- "Q_vcmp_eqxacc_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqw.xor")
- },
- "Q_vcmp_eqxacc_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqb.xor.128B")
- },
- "Q_vcmp_eqxacc_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqh.xor.128B")
- },
- "Q_vcmp_eqxacc_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqw.xor.128B")
- },
- "Q_vcmp_gt_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtb")
- },
- "Q_vcmp_gt_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgth")
- },
- "Q_vcmp_gt_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtw")
- },
- "Q_vcmp_gt_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtb.128B")
- },
- "Q_vcmp_gt_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgth.128B")
- },
- "Q_vcmp_gt_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtw.128B")
- },
- "Q_vcmp_gt_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtub")
- },
- "Q_vcmp_gt_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtuh")
- },
- "Q_vcmp_gt_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtub.128B")
- },
- "Q_vcmp_gt_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtuh.128B")
- },
- "Q_vcmp_gtand_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtb.and")
- },
- "Q_vcmp_gtand_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgth.and")
- },
- "Q_vcmp_gtand_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtw.and")
- },
- "Q_vcmp_gtand_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtb.and.128B")
- },
- "Q_vcmp_gtand_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgth.and.128B")
- },
- "Q_vcmp_gtand_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtw.and.128B")
- },
- "Q_vcmp_gtand_QVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtub.and")
- },
- "Q_vcmp_gtand_QVuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtuh.and")
- },
- "Q_vcmp_gtand_QVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtub.and.128B")
- },
- "Q_vcmp_gtand_QVuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtuh.and.128B")
- },
- "Q_vcmp_gtor_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtb.or")
- },
- "Q_vcmp_gtor_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgth.or")
- },
- "Q_vcmp_gtor_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtw.or")
- },
- "Q_vcmp_gtor_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtb.or.128B")
- },
- "Q_vcmp_gtor_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgth.or.128B")
- },
- "Q_vcmp_gtor_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtw.or.128B")
- },
- "Q_vcmp_gtor_QVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtub.or")
- },
- "Q_vcmp_gtor_QVuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtuh.or")
- },
- "Q_vcmp_gtor_QVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtub.or.128B")
- },
- "Q_vcmp_gtor_QVuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtuh.or.128B")
- },
- "Q_vcmp_gtxacc_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtb.xor")
- },
- "Q_vcmp_gtxacc_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgth.xor")
- },
- "Q_vcmp_gtxacc_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtw.xor")
- },
- "Q_vcmp_gtxacc_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtb.xor.128B")
- },
- "Q_vcmp_gtxacc_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgth.xor.128B")
- },
- "Q_vcmp_gtxacc_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtw.xor.128B")
- },
- "Q_vcmp_gtxacc_QVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtub.xor")
- },
- "Q_vcmp_gtxacc_QVuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtuh.xor")
- },
- "Q_vcmp_gtxacc_QVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtub.xor.128B")
- },
- "Q_vcmp_gtxacc_QVuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtuh.xor.128B")
- },
- "Vw_vinsert_VwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vinsertwr")
- },
- "Vw_vinsert_VwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vinsertwr.128B")
- },
- "Vuh_vlsr_VuhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vlsrh")
- },
- "Vuw_vlsr_VuwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x16, &::U32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vlsrw")
- },
- "Vuh_vlsr_VuhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vlsrh.128B")
- },
- "Vuw_vlsr_VuwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x32, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vlsrw.128B")
- },
- "Vh_vlsr_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vlsrhv")
- },
- "Vw_vlsr_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vlsrwv")
- },
- "Vh_vlsr_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vlsrhv.128B")
- },
- "Vw_vlsr_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vlsrwv.128B")
- },
- "Vb_vlut32_VbVbR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x64, &::I8x64, &::U32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vlutvvb")
- },
- "Vb_vlut32_VbVbR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x128, &::I8x128, &::U32]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vlutvvb.128B")
- },
- "Wh_vlut16_VbVhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x64, &::I16x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vlutvwh")
- },
- "Wh_vlut16_VbVhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x128, &::I16x64, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vlutvwh.128B")
- },
- "Vb_vlut32or_VbVbVbR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 4] = [&::I8x64, &::I8x64, &::I8x64, &::U32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vlutvvb.oracc")
- },
- "Vb_vlut32or_VbVbVbR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 4] = [&::I8x128, &::I8x128, &::I8x128, &::U32]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vlutvvb.oracc.128B")
- },
- "Wh_vlut16or_WhVbVhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 4] = [&::I16x64, &::I8x64, &::I16x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vlutvwh.oracc")
- },
- "Wh_vlut16or_WhVbVhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 4] = [&::I16x128, &::I8x128, &::I16x64, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vlutvwh.oracc.128B")
- },
- "Vh_vmax_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmaxh")
- },
- "Vw_vmax_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmaxw")
- },
- "Vh_vmax_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmaxh.128B")
- },
- "Vw_vmax_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmaxw.128B")
- },
- "Vub_vmax_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vmaxub")
- },
- "Vuh_vmax_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vmaxuh")
- },
- "Vub_vmax_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vmaxub.128B")
- },
- "Vuh_vmax_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmaxuh.128B")
- },
- "Vh_vmin_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vminh")
- },
- "Vw_vmin_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vminw")
- },
- "Vh_vmin_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vminh.128B")
- },
- "Vw_vmin_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vminw.128B")
- },
- "Vub_vmin_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vminub")
- },
- "Vuh_vmin_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vminuh")
- },
- "Vub_vmin_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vminub.128B")
- },
- "Vuh_vmin_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vminuh.128B")
- },
- "Wh_vmpa_WubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpabus")
- },
- "Wh_vmpa_WubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpabus.128B")
- },
- "Wh_vmpaacc_WhWubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpabus.acc")
- },
- "Wh_vmpaacc_WhWubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpabus.acc.128B")
- },
- "Wh_vmpa_WubWb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::I8x128]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpabusv")
- },
- "Wh_vmpa_WubWub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpabuuv")
- },
- "Wh_vmpa_WubWb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::I8x256]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpabusv.128B")
- },
- "Wh_vmpa_WubWub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U8x256]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpabuuv.128B")
- },
- "Ww_vmpa_WhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpahb")
- },
- "Ww_vmpa_WhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpahb.128B")
- },
- "Ww_vmpaacc_WwWhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpahb.acc")
- },
- "Ww_vmpaacc_WwWhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpahb.acc.128B")
- },
- "Wh_vmpy_VbVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::U8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybus")
- },
- "Ww_vmpy_VhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhus")
- },
- "Wh_vmpy_VbVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::U8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybus.128B")
- },
- "Ww_vmpy_VhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhus.128B")
- },
- "Wh_vmpyacc_WhVbVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I8x64, &::U8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybus.acc")
- },
- "Ww_vmpyacc_WwVhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x32, &::U16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhus.acc")
- },
- "Wh_vmpyacc_WhVbVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::I8x128, &::U8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybus.acc.128B")
- },
- "Ww_vmpyacc_WwVhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x64, &::U16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhus.acc.128B")
- },
- "Wh_vmpy_VubVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybusv")
- },
- "Wh_vmpy_VubVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybusv.128B")
- },
- "Wh_vmpyacc_WhVubVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybusv.acc")
- },
- "Wh_vmpyacc_WhVubVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::U8x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybusv.acc.128B")
- },
- "Wh_vmpy_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybv")
- },
- "Wuh_vmpy_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmpyubv")
- },
- "Ww_vmpy_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhv")
- },
- "Wuw_vmpy_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmpyuhv")
- },
- "Wh_vmpy_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybv.128B")
- },
- "Wuh_vmpy_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vmpyubv.128B")
- },
- "Ww_vmpy_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhv.128B")
- },
- "Wuw_vmpy_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vmpyuhv.128B")
- },
- "Wh_vmpyacc_WhVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybv.acc")
- },
- "Wuh_vmpyacc_WuhVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x64, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmpyubv.acc")
- },
- "Ww_vmpyacc_WwVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhv.acc")
- },
- "Wuw_vmpyacc_WuwVuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmpyuhv.acc")
- },
- "Wh_vmpyacc_WhVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybv.acc.128B")
- },
- "Wuh_vmpyacc_WuhVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x128, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vmpyubv.acc.128B")
- },
- "Ww_vmpyacc_WwVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhv.acc.128B")
- },
- "Wuw_vmpyacc_WuwVuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vmpyuhv.acc.128B")
- },
- "Vw_vmpye_VwVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyewuh")
- },
- "Vw_vmpye_VwVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyewuh.128B")
- },
- "Ww_vmpy_VhRh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyh")
- },
- "Wuw_vmpy_VuhRuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmpyuh")
- },
- "Ww_vmpy_VhRh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyh.128B")
- },
- "Wuw_vmpy_VuhRuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vmpyuh.128B")
- },
- "Ww_vmpyacc_WwVhRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhsat.acc")
- },
- "Ww_vmpyacc_WwVhRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhsat.acc.128B")
- },
- "Vw_vmpy_VhRh_s1_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyhsrs")
- },
- "Vw_vmpy_VhRh_s1_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhsrs.128B")
- },
- "Vw_vmpy_VhRh_s1_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyhss")
- },
- "Vw_vmpy_VhRh_s1_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhss.128B")
- },
- "Vh_vmpy_VhVh_s1_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyhvsrs")
- },
- "Vh_vmpy_VhVh_s1_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyhvsrs.128B")
- },
- "Vw_vmpyieo_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyieoh")
- },
- "Vw_vmpyieo_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyieoh.128B")
- },
- "Vw_vmpyieacc_VwVwVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiewh.acc")
- },
- "Vw_vmpyieacc_VwVwVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiewuh.acc")
- },
- "Vw_vmpyieacc_VwVwVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiewh.acc.128B")
- },
- "Vw_vmpyieacc_VwVwVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiewuh.acc.128B")
- },
- "Vw_vmpyie_VwVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiewuh")
- },
- "Vw_vmpyie_VwVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiewuh.128B")
- },
- "Vh_vmpyi_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyih")
- },
- "Vh_vmpyi_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyih.128B")
- },
- "Vh_vmpyiacc_VhVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyih.acc")
- },
- "Vh_vmpyiacc_VhVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyih.acc.128B")
- },
- "Vh_vmpyi_VhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyihb")
- },
- "Vw_vmpyi_VwRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwb")
- },
- "Vh_vmpyi_VhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyihb.128B")
- },
- "Vw_vmpyi_VwRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwb.128B")
- },
- "Vh_vmpyiacc_VhVhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyihb.acc")
- },
- "Vw_vmpyiacc_VwVwRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwb.acc")
- },
- "Vh_vmpyiacc_VhVhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyihb.acc.128B")
- },
- "Vw_vmpyiacc_VwVwRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwb.acc.128B")
- },
- "Vw_vmpyi_VwRh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwh")
- },
- "Vw_vmpyi_VwRh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwh.128B")
- },
- "Vw_vmpyiacc_VwVwRh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwh.acc")
- },
- "Vw_vmpyiacc_VwVwRh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwh.acc.128B")
- },
- "Vw_vmpyi_VwRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwub")
- },
- "Vw_vmpyi_VwRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwub.128B")
- },
- "Vw_vmpyiacc_VwVwRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwub.acc")
- },
- "Vw_vmpyiacc_VwVwRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwub.acc.128B")
- },
- "Vw_vmpyo_VwVh_s1_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyowh")
- },
- "Vw_vmpyo_VwVh_s1_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyowh.128B")
- },
- "Vw_vmpyo_VwVh_s1_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyowh.rnd")
- },
- "Vw_vmpyo_VwVh_s1_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyowh.rnd.128B")
- },
- "Vw_vmpyo_VwVh_s1_rnd_sat_shift64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyowh.rnd.sacc")
- },
- "Vw_vmpyo_VwVh_s1_rnd_sat_shift128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyowh.rnd.sacc.128B")
- },
- "Vw_vmpyo_VwVh_s1_sat_shift64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyowh.sacc")
- },
- "Vw_vmpyo_VwVh_s1_sat_shift128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyowh.sacc.128B")
- },
- "Vw_vmpyio_VwVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiowh")
- },
- "Vw_vmpyio_VwVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiowh.128B")
- },
- "Wuh_vmpy_VubRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmpyub")
- },
- "Wuh_vmpy_VubRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vmpyub.128B")
- },
- "Wuh_vmpyacc_WuhVubRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmpyub.acc")
- },
- "Wuw_vmpyacc_WuwVuhRuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U16x32, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmpyuh.acc")
- },
- "Wuh_vmpyacc_WuhVubRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vmpyub.acc.128B")
- },
- "Wuw_vmpyacc_WuwVuhRuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U16x64, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vmpyuh.acc.128B")
- },
- "Vuw_vmux_QVV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U32x16, &::U32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vmux")
- },
- "Vuw_vmux_QVV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U32x32, &::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmux.128B")
- },
- "Vh_vnavg_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vnavgh")
- },
- "Vuh_vnavg_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vnavguh")
- },
- "Vw_vnavg_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vnavgw")
- },
- "Vuw_vnavg_VuwVuw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x16, &::U32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vnavguw")
- },
- "Vh_vnavg_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vnavgh.128B")
- },
- "Vuh_vnavg_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vnavguh.128B")
- },
- "Vw_vnavg_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vnavgw.128B")
- },
- "Vuw_vnavg_VuwVuw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x32, &::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vnavguw.128B")
- },
- "Vub_vnavg_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vnavgub")
- },
- "Vub_vnavg_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vnavgub.128B")
- },
- "Vh_vnormamt_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vnormamth")
- },
- "Vw_vnormamt_Vw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vnormamtw")
- },
- "Vh_vnormamt_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vnormamth.128B")
- },
- "Vw_vnormamt_Vw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vnormamtw.128B")
- },
- "V_vnot_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vnot")
- },
- "V_vnot_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vnot.128B")
- },
- "V_vor_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vor")
- },
- "V_vor_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vor.128B")
- },
- "Vb_vpacke_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vpackhe")
- },
- "Vh_vpacke_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vpackwe")
- },
- "Vb_vpacke_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vpackhe.128B")
- },
- "Vh_vpacke_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vpackwe.128B")
- },
- "Vb_vpacko_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vpackho")
- },
- "Vh_vpacko_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vpackwo")
- },
- "Vb_vpacko_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vpackho.128B")
- },
- "Vh_vpacko_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vpackwo.128B")
- },
- "Vb_vpack_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vpackhb.sat")
- },
- "Vub_vpack_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vpackhub.sat")
- },
- "Vh_vpack_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vpackwh.sat")
- },
- "Vuh_vpack_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vpackwuh.sat")
- },
- "Vb_vpack_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vpackhb.sat.128B")
- },
- "Vub_vpack_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vpackhub.sat.128B")
- },
- "Vh_vpack_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vpackwh.sat.128B")
- },
- "Vuh_vpack_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vpackwuh.sat.128B")
- },
- "Vh_vpopcount_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vpopcounth")
- },
- "Vh_vpopcount_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vpopcounth.128B")
- },
- "V_vrdelta_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vrdelta")
- },
- "V_vrdelta_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vrdelta.128B")
- },
- "Vw_vrmpy_VubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybus")
- },
- "Vw_vrmpy_VubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybus.128B")
- },
- "Vw_vrmpyacc_VwVubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::U8x64, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybus.acc")
- },
- "Vw_vrmpyacc_VwVubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybus.acc.128B")
- },
- "Ww_vrmpy_WubRbI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybusi")
- },
- "Ww_vrmpy_WubRbI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vrmpybusi.128B")
- },
- "Ww_vrmpyacc_WwWubRbI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybusi.acc")
- },
- "Ww_vrmpyacc_WwWubRbI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::U8x256, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vrmpybusi.acc.128B")
- },
- "Vw_vrmpy_VubVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::I8x64]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybusv")
- },
- "Vw_vrmpy_VubVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::I8x128]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybusv.128B")
- },
- "Vw_vrmpyacc_VwVubVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::U8x64, &::I8x64]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybusv.acc")
- },
- "Vw_vrmpyacc_VwVubVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::U8x128, &::I8x128]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybusv.acc.128B")
- },
- "Vw_vrmpy_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybv")
- },
- "Vuw_vrmpy_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vrmpyubv")
- },
- "Vw_vrmpy_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybv.128B")
- },
- "Vuw_vrmpy_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyubv.128B")
- },
- "Vw_vrmpyacc_VwVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpywv.acc")
- },
- "Vuw_vrmpyacc_VuwVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x16, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vrmpyuwv.acc")
- },
- "Vw_vrmpyacc_VwVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpywv.acc.128B")
- },
- "Vuw_vrmpyacc_VuwVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyuwv.acc.128B")
- },
- "Vuw_vrmpy_VubRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vrmpyub")
- },
- "Vuw_vrmpy_VubRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyub.128B")
- },
- "Vuw_vrmpyacc_VuwVubRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x16, &::U8x64, &::U32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vrmpyub.acc")
- },
- "Vuw_vrmpyacc_VuwVubRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyub.acc.128B")
- },
- "Wuw_vrmpy_WubRubI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyubi")
- },
- "Wuw_vrmpy_WubRubI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vrmpyubi.128B")
- },
- "Wuw_vrmpyacc_WuwWubRubI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyubi.acc")
- },
- "Wuw_vrmpyacc_WuwWubRubI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U8x256, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vrmpyubi.acc.128B")
- },
- "V_vror_VR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vror")
- },
- "V_vror_VR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vror.128B")
- },
- "Vb_vround_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vroundhb")
- },
- "Vub_vround_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vroundhub")
- },
- "Vh_vround_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vroundwh")
- },
- "Vuh_vround_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vroundwuh")
- },
- "Vb_vround_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vroundhb.128B")
- },
- "Vub_vround_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vroundhub.128B")
- },
- "Vh_vround_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vroundwh.128B")
- },
- "Vuh_vround_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vroundwuh.128B")
- },
- "Wuw_vrsad_WubRubI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrsadubi")
- },
- "Wuw_vrsad_WubRubI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vrsadubi.128B")
- },
- "Wuw_vrsadacc_WuwWubRubI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrsadubi.acc")
- },
- "Wuw_vrsadacc_WuwWubRubI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U8x256, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vrsadubi.acc.128B")
- },
- "Vub_vsat_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vsathub")
- },
- "Vub_vsat_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vsathub.128B")
- },
- "Vh_vsat_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsatwh")
- },
- "Vh_vsat_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsatwh.128B")
- },
- "Wh_vsxt_Vb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsb")
- },
- "Ww_vsxt_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsh")
- },
- "Wh_vsxt_Vb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vsb.128B")
- },
- "Ww_vsxt_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vsh.128B")
- },
- "Wuh_vzxt_Vub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vzb")
- },
- "Wuw_vzxt_Vuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vzh")
- },
- "Wuh_vzxt_Vub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vzb.128B")
- },
- "Wuw_vzxt_Vuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vzh.128B")
- },
- "Vb_condacc_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vaddbq")
- },
- "Vh_condacc_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaddhq")
- },
- "Vw_condacc_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaddwq")
- },
- "Vb_condacc_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vaddbq.128B")
- },
- "Vh_condacc_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddhq.128B")
- },
- "Vw_condacc_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddwq.128B")
- },
- "Vb_condacc_QnVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vaddbnq")
- },
- "Vh_condacc_QnVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaddhnq")
- },
- "Vw_condacc_QnVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaddwnq")
- },
- "Vb_condacc_QnVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vaddbnq.128B")
- },
- "Vh_condacc_QnVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddhnq.128B")
- },
- "Vw_condacc_QnVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddwnq.128B")
- },
- "Vb_condnac_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vsubbq")
- },
- "Vh_condnac_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsubhq")
- },
- "Vw_condnac_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vsubwq")
- },
- "Vb_condnac_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vsubbq.128B")
- },
- "Vh_condnac_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubhq.128B")
- },
- "Vw_condnac_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubwq.128B")
- },
- "Vb_condnac_QnVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vsubbnq")
- },
- "Vh_condnac_QnVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsubhnq")
- },
- "Vw_condnac_QnVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vsubwnq")
- },
- "Vb_condnac_QnVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vsubbnq.128B")
- },
- "Vh_condnac_QnVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubhnq.128B")
- },
- "Vw_condnac_QnVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubwnq.128B")
- },
- "Vh_vshuffe_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vshufeh")
- },
- "Vh_vshuffe_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vshufeh.128B")
- },
- "Vh_vshuffo_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vshufoh")
- },
- "Vh_vshuffo_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vshufoh.128B")
- },
- "Vb_vshuff_Vb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vshuffb")
- },
- "Vh_vshuff_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vshuffh")
- },
- "Vb_vshuff_Vb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vshuffb.128B")
- },
- "Vh_vshuff_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vshuffh.128B")
- },
- "Vb_vshuffe_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vshuffeb")
- },
- "Vb_vshuffe_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vshuffeb.128B")
- },
- "Vb_vshuffo_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vshuffob")
- },
- "Vb_vshuffo_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vshuffob.128B")
- },
- "Vb_vshuffoe_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vshuffoeb")
- },
- "Vh_vshuffoe_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vshuffoeh")
- },
- "Vb_vshuffoe_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vshuffoeb.128B")
- },
- "Vh_vshuffoe_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vshuffoeh.128B")
- },
- "W_vshuff_VVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vshufvvd")
- },
- "W_vshuff_VVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vshufvvd.128B")
- },
- "Vb_vsub_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vsubb")
- },
- "Vh_vsub_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsubh")
- },
- "Vw_vsub_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vsubw")
- },
- "Vb_vsub_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vsubb.128B")
- },
- "Vh_vsub_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubh.128B")
- },
- "Vw_vsub_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubw.128B")
- },
- "Vh_vsub_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsubhsat")
- },
- "Vw_vsub_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vsubwsat")
- },
- "Vh_vsub_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubhsat.128B")
- },
- "Vw_vsub_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubwsat.128B")
- },
- "Vub_vsub_VubVub_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vsububsat")
- },
- "Vuh_vsub_VuhVuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vsubuhsat")
- },
- "Vub_vsub_VubVub_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vsububsat.128B")
- },
- "Vuh_vsub_VuhVuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vsubuhsat.128B")
- },
- "Wb_vsub_WbWb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vsubb.dv")
- },
- "Wh_vsub_WhWh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubh.dv")
- },
- "Ww_vsub_WwWw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubw.dv")
- },
- "Wb_vsub_WbWb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x256, &::I8x256]; &INPUTS },
- output: &::I8x256,
- definition: Named("llvm.hexagon.V6.vsubb.dv.128B")
- },
- "Wh_vsub_WhWh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I16x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vsubh.dv.128B")
- },
- "Ww_vsub_WwWw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I32x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vsubw.dv.128B")
- },
- "Wh_vsub_WhWh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubhsat.dv")
- },
- "Ww_vsub_WwWw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubwsat.dv")
- },
- "Wh_vsub_WhWh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I16x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vsubhsat.dv.128B")
- },
- "Ww_vsub_WwWw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I32x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vsubwsat.dv.128B")
- },
- "Wub_vsub_WubWub_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vsububsat.dv")
- },
- "Wuh_vsub_WuhWuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vsubuhsat.dv")
- },
- "Wub_vsub_WubWub_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U8x256]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vsububsat.dv.128B")
- },
- "Wuh_vsub_WuhWuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x128, &::U16x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vsubuhsat.dv.128B")
- },
- "W_vswap_QVV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vswap")
- },
- "W_vswap_QVV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vswap.128B")
- },
- "Wh_vtmpy_WbRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vtmpyb")
- },
- "Wh_vtmpy_WbRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vtmpyb.128B")
- },
- "Wh_vtmpyacc_WhWbRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vtmpyb.acc")
- },
- "Wh_vtmpyacc_WhWbRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::I8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vtmpyb.acc.128B")
- },
- "Wh_vtmpy_WubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vtmpybus")
- },
- "Wh_vtmpy_WubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vtmpybus.128B")
- },
- "Wh_vtmpyacc_WhWubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vtmpybus.acc")
- },
- "Wh_vtmpyacc_WhWubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vtmpybus.acc.128B")
- },
- "Ww_vtmpy_WhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vtmpyhb")
- },
- "Ww_vtmpy_WhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vtmpyhb.128B")
- },
- "Wh_vunpack_Vb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vunpackb")
- },
- "Wuh_vunpack_Vub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vunpackub")
- },
- "Ww_vunpack_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vunpackh")
- },
- "Wuw_vunpack_Vuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vunpackuh")
- },
- "Wh_vunpack_Vb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vunpackb.128B")
- },
- "Wuh_vunpack_Vub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vunpackub.128B")
- },
- "Ww_vunpack_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vunpackh.128B")
- },
- "Wuw_vunpack_Vuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vunpackuh.128B")
- },
- "Wh_vunpackoor_WhVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vunpackob")
- },
- "Ww_vunpackoor_WwVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vunpackoh")
- },
- "Wh_vunpackoor_WhVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vunpackob.128B")
- },
- "Ww_vunpackoor_WwVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vunpackoh.128B")
- },
- "Ww_vtmpyacc_WwWhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vtmpyhb.acc")
- },
- "Ww_vtmpyacc_WwWhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vtmpyhb.acc.128B")
- },
- "V_vxor_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vxor")
- },
- "V_vxor_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vxor.128B")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/lib.rs b/src/librustc_platform_intrinsics/lib.rs
deleted file mode 100644
index 9fbf168..0000000
--- a/src/librustc_platform_intrinsics/lib.rs
+++ /dev/null
@@ -1,124 +0,0 @@
-#![allow(nonstandard_style)]
-
-#![feature(nll)]
-
-pub struct Intrinsic {
- pub inputs: &'static [&'static Type],
- pub output: &'static Type,
-
- pub definition: IntrinsicDef,
-}
-
-#[derive(Clone, Hash, Eq, PartialEq)]
-pub enum Type {
- Void,
- Integer(/* signed */ bool, u8, /* llvm width */ u8),
- Float(u8),
- Pointer(&'static Type, Option<&'static Type>, /* const */ bool),
- Vector(&'static Type, Option<&'static Type>, u16),
- Aggregate(bool, &'static [&'static Type]),
-}
-
-pub enum IntrinsicDef {
- Named(&'static str),
-}
-
-static I8: Type = Type::Integer(true, 8, 8);
-static I16: Type = Type::Integer(true, 16, 16);
-static I32: Type = Type::Integer(true, 32, 32);
-static I64: Type = Type::Integer(true, 64, 64);
-static U8: Type = Type::Integer(false, 8, 8);
-static U16: Type = Type::Integer(false, 16, 16);
-static U32: Type = Type::Integer(false, 32, 32);
-static U64: Type = Type::Integer(false, 64, 64);
-static F32: Type = Type::Float(32);
-static F64: Type = Type::Float(64);
-
-static I32_8: Type = Type::Integer(true, 32, 8);
-
-static I8x8: Type = Type::Vector(&I8, None, 8);
-static U8x8: Type = Type::Vector(&U8, None, 8);
-static I8x16: Type = Type::Vector(&I8, None, 16);
-static U8x16: Type = Type::Vector(&U8, None, 16);
-static I8x32: Type = Type::Vector(&I8, None, 32);
-static U8x32: Type = Type::Vector(&U8, None, 32);
-static I8x64: Type = Type::Vector(&I8, None, 64);
-static U8x64: Type = Type::Vector(&U8, None, 64);
-static I8x128: Type = Type::Vector(&I8, None, 128);
-static U8x128: Type = Type::Vector(&U8, None, 128);
-static I8x256: Type = Type::Vector(&I8, None, 256);
-static U8x256: Type = Type::Vector(&U8, None, 256);
-
-static I16x4: Type = Type::Vector(&I16, None, 4);
-static U16x4: Type = Type::Vector(&U16, None, 4);
-static I16x8: Type = Type::Vector(&I16, None, 8);
-static U16x8: Type = Type::Vector(&U16, None, 8);
-static I16x16: Type = Type::Vector(&I16, None, 16);
-static U16x16: Type = Type::Vector(&U16, None, 16);
-static I16x32: Type = Type::Vector(&I16, None, 32);
-static U16x32: Type = Type::Vector(&U16, None, 32);
-static I16x64: Type = Type::Vector(&I16, None, 64);
-static U16x64: Type = Type::Vector(&U16, None, 64);
-static I16x128: Type = Type::Vector(&I16, None, 128);
-static U16x128: Type = Type::Vector(&U16, None, 128);
-
-static I32x2: Type = Type::Vector(&I32, None, 2);
-static U32x2: Type = Type::Vector(&U32, None, 2);
-static I32x4: Type = Type::Vector(&I32, None, 4);
-static U32x4: Type = Type::Vector(&U32, None, 4);
-static I32x8: Type = Type::Vector(&I32, None, 8);
-static U32x8: Type = Type::Vector(&U32, None, 8);
-static I32x16: Type = Type::Vector(&I32, None, 16);
-static U32x16: Type = Type::Vector(&U32, None, 16);
-static I32x32: Type = Type::Vector(&I32, None, 32);
-static U32x32: Type = Type::Vector(&U32, None, 32);
-static I32x64: Type = Type::Vector(&I32, None, 64);
-static U32x64: Type = Type::Vector(&U32, None, 64);
-
-static I64x1: Type = Type::Vector(&I64, None, 1);
-static U64x1: Type = Type::Vector(&U64, None, 1);
-static I64x2: Type = Type::Vector(&I64, None, 2);
-static U64x2: Type = Type::Vector(&U64, None, 2);
-static I64x4: Type = Type::Vector(&I64, None, 4);
-static U64x4: Type = Type::Vector(&U64, None, 4);
-
-static F32x2: Type = Type::Vector(&F32, None, 2);
-static F32x4: Type = Type::Vector(&F32, None, 4);
-static F32x8: Type = Type::Vector(&F32, None, 8);
-static F64x1: Type = Type::Vector(&F64, None, 1);
-static F64x2: Type = Type::Vector(&F64, None, 2);
-static F64x4: Type = Type::Vector(&F64, None, 4);
-
-static I32x4_F32: Type = Type::Vector(&I32, Some(&F32), 4);
-static I32x8_F32: Type = Type::Vector(&I32, Some(&F32), 8);
-static I64x2_F64: Type = Type::Vector(&I64, Some(&F64), 2);
-static I64x4_F64: Type = Type::Vector(&I64, Some(&F64), 4);
-
-static VOID: Type = Type::Void;
-
-mod x86;
-mod arm;
-mod aarch64;
-mod nvptx;
-mod hexagon;
-mod powerpc;
-
-impl Intrinsic {
- pub fn find(name: &str) -> Option<Intrinsic> {
- if name.starts_with("x86_") {
- x86::find(name)
- } else if name.starts_with("arm_") {
- arm::find(name)
- } else if name.starts_with("aarch64_") {
- aarch64::find(name)
- } else if name.starts_with("nvptx_") {
- nvptx::find(name)
- } else if name.starts_with("Q6_") {
- hexagon::find(name)
- } else if name.starts_with("powerpc_") {
- powerpc::find(name)
- } else {
- None
- }
- }
-}
diff --git a/src/librustc_platform_intrinsics/nvptx.rs b/src/librustc_platform_intrinsics/nvptx.rs
deleted file mode 100644
index 4127846..0000000
--- a/src/librustc_platform_intrinsics/nvptx.rs
+++ /dev/null
@@ -1,79 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("nvptx") { return None }
- Some(match &name["nvptx".len()..] {
- "_syncthreads" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.cuda.syncthreads")
- },
- "_block_dim_x" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ntid.x")
- },
- "_block_dim_y" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ntid.y")
- },
- "_block_dim_z" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ntid.z")
- },
- "_block_idx_x" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ctaid.x")
- },
- "_block_idx_y" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ctaid.y")
- },
- "_block_idx_z" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ctaid.z")
- },
- "_grid_dim_x" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.nctaid.x")
- },
- "_grid_dim_y" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.nctaid.y")
- },
- "_grid_dim_z" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.nctaid.z")
- },
- "_thread_idx_x" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.tid.x")
- },
- "_thread_idx_y" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.tid.y")
- },
- "_thread_idx_z" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.tid.z")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/powerpc.rs b/src/librustc_platform_intrinsics/powerpc.rs
deleted file mode 100644
index d745090..0000000
--- a/src/librustc_platform_intrinsics/powerpc.rs
+++ /dev/null
@@ -1,439 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("powerpc") { return None }
- Some(match &name["powerpc".len()..] {
- "_vec_perm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x4, &::I32x4, &::I8x16]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vperm")
- },
- "_vec_mradds" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmhraddshs")
- },
- "_vec_cmpb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vcmpbfp")
- },
- "_vec_cmpeqb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vcmpequb")
- },
- "_vec_cmpeqh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vcmpequh")
- },
- "_vec_cmpeqw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vcmpequw")
- },
- "_vec_cmpgtub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vcmpgtub")
- },
- "_vec_cmpgtuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vcmpgtuh")
- },
- "_vec_cmpgtuw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vcmpgtuw")
- },
- "_vec_cmpgtsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vcmpgtsb")
- },
- "_vec_cmpgtsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vcmpgtsh")
- },
- "_vec_cmpgtsw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vcmpgtsw")
- },
- "_vec_maxsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vmaxsb")
- },
- "_vec_maxub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vmaxub")
- },
- "_vec_maxsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmaxsh")
- },
- "_vec_maxuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vmaxuh")
- },
- "_vec_maxsw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmaxsw")
- },
- "_vec_maxuw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmaxuw")
- },
- "_vec_minsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vminsb")
- },
- "_vec_minub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vminub")
- },
- "_vec_minsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vminsh")
- },
- "_vec_minuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vminuh")
- },
- "_vec_minsw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vminsw")
- },
- "_vec_minuw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vminuw")
- },
- "_vec_subsbs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vsubsbs")
- },
- "_vec_sububs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vsububs")
- },
- "_vec_subshs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vsubshs")
- },
- "_vec_subuhs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vsubuhs")
- },
- "_vec_subsws" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsubsws")
- },
- "_vec_subuws" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vsubuws")
- },
- "_vec_subc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vsubcuw")
- },
- "_vec_addsbs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vaddsbs")
- },
- "_vec_addubs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vaddubs")
- },
- "_vec_addshs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vaddshs")
- },
- "_vec_adduhs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vadduhs")
- },
- "_vec_addsws" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vaddsws")
- },
- "_vec_adduws" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vadduws")
- },
- "_vec_addc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vaddcuw")
- },
- "_vec_mulesb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmulesb")
- },
- "_vec_muleub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vmuleub")
- },
- "_vec_mulesh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmulesh")
- },
- "_vec_muleuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmuleuh")
- },
- "_vec_mulosb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmulosb")
- },
- "_vec_muloub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vmuloub")
- },
- "_vec_mulosh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmulosh")
- },
- "_vec_mulouh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmulouh")
- },
- "_vec_avgsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vavgsb")
- },
- "_vec_avgub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vavgub")
- },
- "_vec_avgsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vavgsh")
- },
- "_vec_avguh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vavguh")
- },
- "_vec_avgsw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vavgsw")
- },
- "_vec_avguw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vavguw")
- },
- "_vec_packssh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vpkshss")
- },
- "_vec_packsuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vpkuhus")
- },
- "_vec_packssw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vpkswss")
- },
- "_vec_packsuw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vpkuwus")
- },
- "_vec_packsush" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vpkshus")
- },
- "_vec_packsusw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vpkswus")
- },
- "_vec_packpx" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vpkpx")
- },
- "_vec_unpacklsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vupklsb")
- },
- "_vec_unpacklsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vupklsh")
- },
- "_vec_unpackhsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vupkhsb")
- },
- "_vec_unpackhsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vupkhsh")
- },
- "_vec_madds" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmhaddshs")
- },
- "_vec_msumubm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmsumubm")
- },
- "_vec_msumuhm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x8, &::U16x8, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmsumuhm")
- },
- "_vec_msummbm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::U8x16, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmsummbm")
- },
- "_vec_msumshm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmsumshm")
- },
- "_vec_msumshs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmsumshs")
- },
- "_vec_msumuhs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x8, &::U16x8, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmsumuhs")
- },
- "_vec_sum2s" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsum2sws")
- },
- "_vec_sum4sbs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsum4sbs")
- },
- "_vec_sum4ubs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vsum4ubs")
- },
- "_vec_sum4shs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsum4shs")
- },
- "_vec_sums" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsumsws")
- },
- "_vec_madd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vmaddfp")
- },
- "_vec_nmsub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vnmsubfp")
- },
- "_vec_expte" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vexptefp")
- },
- "_vec_floor" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrfim")
- },
- "_vec_ceil" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrfip")
- },
- "_vec_round" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrfin")
- },
- "_vec_trunc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrfiz")
- },
- "_vec_loge" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vlogefp")
- },
- "_vec_re" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrefp")
- },
- "_vec_rsqrte" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrsqrtefp")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/x86.rs b/src/librustc_platform_intrinsics/x86.rs
deleted file mode 100644
index 3f1ba91..0000000
--- a/src/librustc_platform_intrinsics/x86.rs
+++ /dev/null
@@ -1,1369 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("x86") { return None }
- Some(match &name["x86".len()..] {
- "_mm256_abs_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.pabs.b")
- },
- "_mm256_abs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pabs.w")
- },
- "_mm256_abs_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.pabs.d")
- },
- "_mm256_adds_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.padds.b")
- },
- "_mm256_adds_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.paddus.b")
- },
- "_mm256_adds_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.padds.w")
- },
- "_mm256_adds_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.paddus.w")
- },
- "_mm256_avg_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.pavg.b")
- },
- "_mm256_avg_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.pavg.w")
- },
- "_mm256_hadd_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.phadd.w")
- },
- "_mm256_hadd_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.phadd.d")
- },
- "_mm256_hadds_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.phadd.sw")
- },
- "_mm256_hsub_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.phsub.w")
- },
- "_mm256_hsub_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.phsub.d")
- },
- "_mm256_hsubs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.phsub.sw")
- },
- "_mm256_madd_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.pmadd.wd")
- },
- "_mm256_maddubs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmadd.ub.sw")
- },
- "_mm_mask_i32gather_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I32x4, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I32x4, &::I32x4, &::I32_8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx2.gather.d.d")
- },
- "_mm_mask_i32gather_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F32x4, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x4, &::I32x4_F32, &::I32_8]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx2.gather.d.ps")
- },
- "_mm256_mask_i32gather_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I32x8, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I32x8, &::I32x8, &::I32_8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.gather.d.d.256")
- },
- "_mm256_mask_i32gather_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F32x8, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x8, &::I32x8_F32, &::I32_8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx2.gather.d.ps.256")
- },
- "_mm_mask_i32gather_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I64x2, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x2, &::I32_8]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.x86.avx2.gather.d.q")
- },
- "_mm_mask_i32gather_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F64x2, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x2_F64, &::I32_8]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.avx2.gather.d.pd")
- },
- "_mm256_mask_i32gather_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I64x4, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x4, &::I32_8]; &INPUTS },
- output: &::I64x4,
- definition: Named("llvm.x86.avx2.gather.d.q.256")
- },
- "_mm256_mask_i32gather_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F64x4, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x4_F64, &::I32_8]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx2.gather.d.pd.256")
- },
- "_mm_mask_i64gather_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I32x4, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I64x2, &::I32x4, &::I32_8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx2.gather.q.d")
- },
- "_mm_mask_i64gather_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F32x4, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I64x2, &::I32x4_F32, &::I32_8]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx2.gather.q.ps")
- },
- "_mm256_mask_i64gather_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I32x4, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I64x4, &::I32x4, &::I32_8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx2.gather.q.d")
- },
- "_mm256_mask_i64gather_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F32x4, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I64x4, &::I32x4_F32, &::I32_8]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx2.gather.q.ps")
- },
- "_mm_mask_i64gather_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I64x2, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I64x2, &::I64x2, &::I32_8]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.x86.avx2.gather.q.q")
- },
- "_mm_mask_i64gather_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F64x2, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x2, &::I64x2_F64, &::I32_8]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.avx2.gather.q.pd")
- },
- "_mm256_mask_i64gather_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I64x4, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I64x4, &::I64x4, &::I32_8]; &INPUTS },
- output: &::I64x4,
- definition: Named("llvm.x86.avx2.gather.q.q.256")
- },
- "_mm256_mask_i64gather_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F64x4, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x4, &::I64x4_F64, &::I32_8]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx2.gather.q.pd.256")
- },
- "_mm_maskload_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I32x4, Some(&::I8), true); &PTR }, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx2.maskload.d")
- },
- "_mm_maskload_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I64x2, Some(&::I8), true); &PTR }, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.x86.avx2.maskload.q")
- },
- "_mm256_maskload_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I32x8, Some(&::I8), true); &PTR }, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.maskload.d.256")
- },
- "_mm256_maskload_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I64x4, Some(&::I8), true); &PTR }, &::I64x4]; &INPUTS },
- output: &::I64x4,
- definition: Named("llvm.x86.avx2.maskload.q.256")
- },
- "_mm_maskstore_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I8), false); &PTR }, &::I32x4, &::I32x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx2.maskstore.d")
- },
- "_mm_maskstore_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I8), false); &PTR }, &::I64x2, &::I64x2]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx2.maskstore.q")
- },
- "_mm256_maskstore_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I8), false); &PTR }, &::I32x8, &::I32x8]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx2.maskstore.d.256")
- },
- "_mm256_maskstore_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I8), false); &PTR }, &::I64x4, &::I64x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx2.maskstore.q.256")
- },
- "_mm256_max_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.pmaxs.b")
- },
- "_mm256_max_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.pmaxu.b")
- },
- "_mm256_max_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmaxs.w")
- },
- "_mm256_max_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.pmaxu.w")
- },
- "_mm256_max_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.pmaxs.d")
- },
- "_mm256_max_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x8, &::U32x8]; &INPUTS },
- output: &::U32x8,
- definition: Named("llvm.x86.avx2.pmaxu.d")
- },
- "_mm256_min_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.pmins.b")
- },
- "_mm256_min_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.pminu.b")
- },
- "_mm256_min_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmins.w")
- },
- "_mm256_min_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.pminu.w")
- },
- "_mm256_min_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.pmins.d")
- },
- "_mm256_min_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x8, &::U32x8]; &INPUTS },
- output: &::U32x8,
- definition: Named("llvm.x86.avx2.pminu.d")
- },
- "_mm256_movemask_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x32]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx2.pmovmskb")
- },
- "_mm256_mpsadbw_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x32, &::U8x32, &::I32_8]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.mpsadbw")
- },
- "_mm256_mul_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I64x4,
- definition: Named("llvm.x86.avx2.pmulq.dq")
- },
- "_mm256_mul_epu64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x8, &::U32x8]; &INPUTS },
- output: &::U64x4,
- definition: Named("llvm.x86.avx2.pmulq.dq")
- },
- "_mm256_mulhi_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmulhw.w")
- },
- "_mm256_mulhi_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.pmulhw.w")
- },
- "_mm256_mulhrs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmul.hr.sw")
- },
- "_mm256_packs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.packsswb")
- },
- "_mm256_packus_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.packuswb")
- },
- "_mm256_packs_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.packssdw")
- },
- "_mm256_packus_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.packusdw")
- },
- "_mm256_permutevar8x32_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.permd")
- },
- "_mm256_permutevar8x32_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::I32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx2.permps")
- },
- "_mm256_sad_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U64x4,
- definition: Named("llvm.x86.avx2.psad.bw")
- },
- "_mm256_shuffle_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.pshuf.b")
- },
- "_mm256_sign_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.psign.b")
- },
- "_mm256_sign_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.psign.w")
- },
- "_mm256_sign_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.psign.d")
- },
- "_mm256_subs_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.psubs.b")
- },
- "_mm256_subs_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.psubus.b")
- },
- "_mm256_subs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.psubs.w")
- },
- "_mm256_subs_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.psubus.w")
- },
- "_mm256_addsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.addsub.ps.256")
- },
- "_mm256_addsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.addsub.pd.256")
- },
- "_mm256_blendv_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.blendv.ps.256")
- },
- "_mm256_blendv_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.blendv.pd.256")
- },
- "_mm256_broadcast_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.vbroadcastf128.ps.256")
- },
- "_mm256_broadcast_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.vbroadcastf128.pd.256")
- },
- "_mm256_cmp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::I8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.cmp.ps.256")
- },
- "_mm256_cmp_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::I8]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.cmp.pd.256")
- },
- "_mm256_cvtepi32_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.cvtdq2.pd.256")
- },
- "_mm256_cvtepi32_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.cvtdq2.ps.256")
- },
- "_mm256_cvtpd_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx.cvt.pd2dq.256")
- },
- "_mm256_cvtpd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx.cvt.pd2.ps.256")
- },
- "_mm256_cvtps_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx.cvt.ps2dq.256")
- },
- "_mm256_cvtps_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.cvt.ps2.pd.256")
- },
- "_mm256_cvttpd_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx.cvtt.pd2dq.256")
- },
- "_mm256_cvttps_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx.cvtt.ps2dq.256")
- },
- "_mm256_dp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::I32_8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.dp.ps.256")
- },
- "_mm256_hadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.hadd.ps.256")
- },
- "_mm256_hadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.hadd.pd.256")
- },
- "_mm256_hsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.hsub.ps.256")
- },
- "_mm256_hsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.hsub.pd.256")
- },
- "_mm256_max_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.max.ps.256")
- },
- "_mm256_max_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.max.pd.256")
- },
- "_mm_maskload_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x4_F32]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx.maskload.ps")
- },
- "_mm_maskload_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x2_F64]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.avx.maskload.pd")
- },
- "_mm256_maskload_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x8_F32]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.maskload.ps.256")
- },
- "_mm256_maskload_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x4_F64]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.maskload.pd.256")
- },
- "_mm_maskstore_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), false); &PTR }, &::I32x4_F32, &::F32x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.maskstore.ps")
- },
- "_mm_maskstore_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), false); &PTR }, &::I64x2_F64, &::F64x2]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.maskstore.pd")
- },
- "_mm256_maskstore_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), false); &PTR }, &::I32x8_F32, &::F32x8]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.maskstore.ps.256")
- },
- "_mm256_maskstore_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), false); &PTR }, &::I64x4_F64, &::F64x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.maskstore.pd.256")
- },
- "_mm256_min_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.min.ps.256")
- },
- "_mm256_min_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.min.pd.256")
- },
- "_mm256_movemask_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.movmsk.ps.256")
- },
- "_mm256_movemask_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.movmsk.pd.256")
- },
- "_mm_permutevar_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::I32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx.vpermilvar.ps")
- },
- "_mm_permutevar_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::I64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.avx.vpermilvar.pd")
- },
- "_mm256_permutevar_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::I32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.vpermilvar.ps.256")
- },
- "_mm256_permutevar_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::I64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.vpermilvar.pd.256")
- },
- "_mm256_rcp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.rcp.ps.256")
- },
- "_mm256_rsqrt_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.rsqrt.ps.256")
- },
- "_mm256_storeu_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32x8, Some(&::U8), false); &PTR }, &::F32x8]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.storeu.ps.256")
- },
- "_mm256_storeu_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64x4, Some(&::U8), false); &PTR }, &::F64x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.storeu.ps.256")
- },
- "_mm256_storeu_si256" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::U8x32, Some(&::U8), false); &PTR }, &::U8x32]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.storeu.dq.256")
- },
- "_mm256_sqrt_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.sqrt.v8f32")
- },
- "_mm256_sqrt_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.sqrt.v4f64")
- },
- "_mm_testc_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestc.ps")
- },
- "_mm256_testc_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestc.ps.256")
- },
- "_mm_testc_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestc.pd")
- },
- "_mm256_testc_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestc.pd.256")
- },
- "_mm256_testc_si256" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x4, &::U64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.ptestc.256")
- },
- "_mm_testnzc_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestnzc.ps")
- },
- "_mm256_testnzc_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestnzc.ps.256")
- },
- "_mm_testnzc_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestnzc.pd")
- },
- "_mm256_testnzc_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestnzc.pd.256")
- },
- "_mm256_testnzc_si256" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x4, &::U64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.ptestnzc.256")
- },
- "_mm_testz_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestz.ps")
- },
- "_mm256_testz_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestz.ps.256")
- },
- "_mm_testz_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestz.pd")
- },
- "_mm256_testz_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestz.pd.256")
- },
- "_mm256_testz_si256" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x4, &::U64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.ptestz.256")
- },
- "_mm256_zeroall" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.vzeroall")
- },
- "_mm256_zeroupper" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.vzeroupper")
- },
- "_bmi2_bzhi_32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.bmi.bzhi.32")
- },
- "_bmi2_bzhi_64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.bmi.bzhi.64")
- },
- "_bmi2_pdep_32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.bmi.pdep.32")
- },
- "_bmi2_pdep_64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.bmi.pdep.64")
- },
- "_bmi2_pext_32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.bmi.pext.32")
- },
- "_bmi2_pext_64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.bmi.pext.64")
- },
- "_bmi_bextr_32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.bmi.bextr.32")
- },
- "_bmi_bextr_64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.bmi.bextr.64")
- },
- "_mm_fmadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfmadd.ps")
- },
- "_mm_fmadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfmadd.pd")
- },
- "_mm256_fmadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfmadd.ps.256")
- },
- "_mm256_fmadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfmadd.pd.256")
- },
- "_mm_fmaddsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfmaddsub.ps")
- },
- "_mm_fmaddsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfmaddsub.pd")
- },
- "_mm256_fmaddsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfmaddsub.ps.256")
- },
- "_mm256_fmaddsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfmaddsub.pd.256")
- },
- "_mm_fmsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfmsub.ps")
- },
- "_mm_fmsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfmsub.pd")
- },
- "_mm256_fmsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfmsub.ps.256")
- },
- "_mm256_fmsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfmsub.pd.256")
- },
- "_mm_fmsubadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfmsubadd.ps")
- },
- "_mm_fmsubadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfmsubadd.pd")
- },
- "_mm256_fmsubadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfmsubadd.ps.256")
- },
- "_mm256_fmsubadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfmsubadd.pd.256")
- },
- "_mm_fnmadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfnmadd.ps")
- },
- "_mm_fnmadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfnmadd.pd")
- },
- "_mm256_fnmadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfnmadd.ps.256")
- },
- "_mm256_fnmadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfnmadd.pd.256")
- },
- "_mm_fnmsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfnmsub.ps")
- },
- "_mm_fnmsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfnmsub.pd")
- },
- "_mm256_fnmsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfnmsub.ps.256")
- },
- "_mm256_fnmsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfnmsub.pd.256")
- },
- "_rdrand16_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdrand.16")
- },
- "_rdrand32_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdrand.32")
- },
- "_rdrand64_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdrand.64")
- },
- "_rdseed16_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdseed.16")
- },
- "_rdseed32_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdseed.32")
- },
- "_rdseed64_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdseed.64")
- },
- "_mm_adds_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse2.padds.b")
- },
- "_mm_adds_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.paddus.b")
- },
- "_mm_adds_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.padds.w")
- },
- "_mm_adds_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse2.paddus.w")
- },
- "_mm_avg_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.pavg.b")
- },
- "_mm_avg_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse2.pavg.w")
- },
- "_mm_lfence" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.lfence")
- },
- "_mm_madd_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.sse2.pmadd.wd")
- },
- "_mm_maskmoveu_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, { static PTR: Type = Type::Pointer(&::U8, None, false); &PTR }]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.maskmov.dqu")
- },
- "_mm_max_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.pmaxs.w")
- },
- "_mm_max_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.pmaxu.b")
- },
- "_mm_max_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse2.max.pd")
- },
- "_mm_mfence" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.fence")
- },
- "_mm_min_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.pmins.w")
- },
- "_mm_min_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.pminu.b")
- },
- "_mm_min_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse2.min.pd")
- },
- "_mm_movemask_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse2.movmsk.pd")
- },
- "_mm_movemask_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse2.pmovmskb.128")
- },
- "_mm_mul_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.x86.sse2.pmulu.dq")
- },
- "_mm_mulhi_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.pmulh.w")
- },
- "_mm_mulhi_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse2.pmulhu.w")
- },
- "_mm_packs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse2.packsswb.128")
- },
- "_mm_packs_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.packssdw.128")
- },
- "_mm_packus_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.packuswb.128")
- },
- "_mm_sad_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.x86.sse2.psad.bw")
- },
- "_mm_sfence" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.sfence")
- },
- "_mm_sqrt_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.sqrt.v2f64")
- },
- "_mm_storeu_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::U8), false); &PTR }, &::F64x2]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.storeu.pd")
- },
- "_mm_storeu_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::U8x16, Some(&::U8), false); &PTR }, &::U8x16]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.storeu.dq")
- },
- "_mm_subs_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse2.psubs.b")
- },
- "_mm_subs_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.psubus.b")
- },
- "_mm_subs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.psubs.w")
- },
- "_mm_subs_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse2.psubus.w")
- },
- "_mm_addsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse3.addsub.ps")
- },
- "_mm_addsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse3.addsub.pd")
- },
- "_mm_hadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse3.hadd.ps")
- },
- "_mm_hadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse3.hadd.pd")
- },
- "_mm_hsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse3.hsub.ps")
- },
- "_mm_hsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse3.hsub.pd")
- },
- "_mm_lddqu_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8x16, Some(&::I8), true); &PTR }]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse3.ldu.dq")
- },
- "_mm_dp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::I32_8]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse41.dpps")
- },
- "_mm_dp_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::I32_8]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse41.dppd")
- },
- "_mm_max_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse41.pmaxsb")
- },
- "_mm_max_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.pmaxuw")
- },
- "_mm_max_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.sse41.pmaxsd")
- },
- "_mm_max_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.x86.sse41.pmaxud")
- },
- "_mm_min_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse41.pminsb")
- },
- "_mm_min_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.pminuw")
- },
- "_mm_min_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.sse41.pminsd")
- },
- "_mm_min_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.x86.sse41.pminud")
- },
- "_mm_minpos_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.phminposuw")
- },
- "_mm_mpsadbw_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::I32_8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.mpsadbw")
- },
- "_mm_mul_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.x86.sse41.pmuldq")
- },
- "_mm_packus_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.packusdw")
- },
- "_mm_testc_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse41.ptestc")
- },
- "_mm_testnzc_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse41.ptestnzc")
- },
- "_mm_testz_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse41.ptestz")
- },
- "_mm_cmpestra" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestria128")
- },
- "_mm_cmpestrc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestric128")
- },
- "_mm_cmpestri" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestri128")
- },
- "_mm_cmpestrm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse42.pcmpestrm128")
- },
- "_mm_cmpestro" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestrio128")
- },
- "_mm_cmpestrs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestris128")
- },
- "_mm_cmpestrz" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestriz128")
- },
- "_mm_cmpistra" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistria128")
- },
- "_mm_cmpistrc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistric128")
- },
- "_mm_cmpistri" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistri128")
- },
- "_mm_cmpistrm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse42.pcmpistrm128")
- },
- "_mm_cmpistro" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistrio128")
- },
- "_mm_cmpistrs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistris128")
- },
- "_mm_cmpistrz" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistriz128")
- },
- "_mm_movemask_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse.movmsk.ps")
- },
- "_mm_max_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse.max.ps")
- },
- "_mm_min_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse.min.ps")
- },
- "_mm_rsqrt_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse.rsqrt.ps")
- },
- "_mm_rcp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse.rcp.ps")
- },
- "_mm_sqrt_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.sqrt.v4f32")
- },
- "_mm_storeu_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), false); &PTR }, &::F32x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse.storeu.ps")
- },
- "_mm_abs_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.ssse3.pabs.b.128")
- },
- "_mm_abs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.pabs.w.128")
- },
- "_mm_abs_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.ssse3.pabs.d.128")
- },
- "_mm_hadd_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.phadd.w.128")
- },
- "_mm_hadd_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.ssse3.phadd.d.128")
- },
- "_mm_hadds_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.phadd.sw.128")
- },
- "_mm_hsub_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.phsub.w.128")
- },
- "_mm_hsub_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.ssse3.phsub.d.128")
- },
- "_mm_hsubs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.phsub.sw.128")
- },
- "_mm_maddubs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.pmadd.ub.sw.128")
- },
- "_mm_mulhrs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.pmul.hr.sw.128")
- },
- "_mm_shuffle_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.ssse3.pshuf.b.128")
- },
- "_mm_sign_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.ssse3.psign.b.128")
- },
- "_mm_sign_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.psign.w.128")
- },
- "_mm_sign_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.ssse3.psign.d.128")
- },
- "_tbm_bextri_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.tbm.bextri.u32")
- },
- "_tbm_bextri_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.tbm.bextri.u64")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_plugin/build.rs b/src/librustc_plugin/build.rs
index eca2736..46c4526 100644
--- a/src/librustc_plugin/build.rs
+++ b/src/librustc_plugin/build.rs
@@ -2,11 +2,12 @@
use syntax::ast;
use syntax::attr;
-use errors;
use syntax_pos::Span;
-use rustc::hir::map::Map;
use rustc::hir::itemlikevisit::ItemLikeVisitor;
use rustc::hir;
+use rustc::hir::def_id::{CrateNum, DefId, LOCAL_CRATE};
+use rustc::ty::TyCtxt;
+use rustc::ty::query::Providers;
struct RegistrarFinder {
registrars: Vec<(ast::NodeId, Span)> ,
@@ -30,21 +31,27 @@
}
/// Find the function marked with `#[plugin_registrar]`, if any.
-pub fn find_plugin_registrar(diagnostic: &errors::Handler,
- hir_map: &Map)
- -> Option<ast::NodeId> {
- let krate = hir_map.krate();
+pub fn find_plugin_registrar<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>) -> Option<DefId> {
+ tcx.plugin_registrar_fn(LOCAL_CRATE)
+}
+
+fn plugin_registrar_fn<'tcx>(
+ tcx: TyCtxt<'_, 'tcx, 'tcx>,
+ cnum: CrateNum,
+) -> Option<DefId> {
+ assert_eq!(cnum, LOCAL_CRATE);
let mut finder = RegistrarFinder { registrars: Vec::new() };
- krate.visit_all_item_likes(&mut finder);
+ tcx.hir().krate().visit_all_item_likes(&mut finder);
match finder.registrars.len() {
0 => None,
1 => {
let (node_id, _) = finder.registrars.pop().unwrap();
- Some(node_id)
+ Some(tcx.hir().local_def_id(node_id))
},
_ => {
+ let diagnostic = tcx.sess.diagnostic();
let mut e = diagnostic.struct_err("multiple plugin registration functions found");
for &(_, span) in &finder.registrars {
e.span_note(span, "one is here");
@@ -55,3 +62,11 @@
}
}
}
+
+
+pub fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ plugin_registrar_fn,
+ ..*providers
+ };
+}
diff --git a/src/librustc_plugin/load.rs b/src/librustc_plugin/load.rs
index 9e7839e..39f5804 100644
--- a/src/librustc_plugin/load.rs
+++ b/src/librustc_plugin/load.rs
@@ -50,10 +50,7 @@
let plugins = match attr.meta_item_list() {
Some(xs) => xs,
- None => {
- call_malformed_plugin_attribute(sess, attr.span);
- continue;
- }
+ None => continue,
};
for plugin in plugins {
diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs
index 5015ed0..698037e 100644
--- a/src/librustc_privacy/lib.rs
+++ b/src/librustc_privacy/lib.rs
@@ -22,12 +22,12 @@
use rustc::middle::privacy::{AccessLevel, AccessLevels};
use rustc::ty::{self, TyCtxt, Ty, TraitRef, TypeFoldable, GenericParamDefKind};
use rustc::ty::fold::TypeVisitor;
-use rustc::ty::query::Providers;
+use rustc::ty::query::{Providers, queries};
use rustc::ty::subst::Substs;
use rustc::util::nodemap::NodeSet;
use rustc_data_structures::fx::FxHashSet;
use rustc_data_structures::sync::Lrc;
-use syntax::ast::{self, CRATE_NODE_ID, Ident};
+use syntax::ast::{self, DUMMY_NODE_ID, Ident};
use syntax::attr;
use syntax::symbol::keywords;
use syntax_pos::Span;
@@ -48,7 +48,7 @@
/// Default type visitor (`TypeVisitor`) does most of the job, but it has some shortcomings.
/// First, it doesn't have overridable `fn visit_trait_ref`, so we have to catch trait def-ids
/// manually. Second, it doesn't visit some type components like signatures of fn types, or traits
-/// in `impl Trait`, see individual commits in `DefIdVisitorSkeleton::visit_ty`.
+/// in `impl Trait`, see individual comments in `DefIdVisitorSkeleton::visit_ty`.
trait DefIdVisitor<'a, 'tcx: 'a> {
fn tcx(&self) -> TyCtxt<'a, 'tcx, 'tcx>;
fn shallow(&self) -> bool { false }
@@ -782,6 +782,11 @@
NestedVisitorMap::All(&self.tcx.hir())
}
+ fn visit_mod(&mut self, _m: &'tcx hir::Mod, _s: Span, _n: ast::NodeId) {
+ // Don't visit nested modules, since we run a separate visitor walk
+ // for each module in `privacy_access_levels`
+ }
+
fn visit_nested_body(&mut self, body: hir::BodyId) {
let orig_tables = mem::replace(&mut self.tables, self.tcx.body_tables(body));
let body = self.tcx.hir().body(body);
@@ -917,6 +922,11 @@
NestedVisitorMap::All(&self.tcx.hir())
}
+ fn visit_mod(&mut self, _m: &'tcx hir::Mod, _s: Span, _n: ast::NodeId) {
+ // Don't visit nested modules, since we run a separate visitor walk
+ // for each module in `privacy_access_levels`
+ }
+
fn visit_nested_body(&mut self, body: hir::BodyId) {
let orig_tables = mem::replace(&mut self.tables, self.tcx.body_tables(body));
let orig_in_body = mem::replace(&mut self.in_body, true);
@@ -1579,10 +1589,15 @@
// No subitems.
hir::ItemKind::GlobalAsm(..) => {}
// Subitems of these items have inherited publicity.
- hir::ItemKind::Const(..) | hir::ItemKind::Static(..) | hir::ItemKind::Fn(..) |
- hir::ItemKind::Existential(..) | hir::ItemKind::Ty(..) => {
+ hir::ItemKind::Const(..) | hir::ItemKind::Static(..) |
+ hir::ItemKind::Fn(..) | hir::ItemKind::Ty(..) => {
self.check(item.id, item_visibility).generics().predicates().ty();
}
+ hir::ItemKind::Existential(..) => {
+ // `ty()` for existential types is the underlying type,
+ // it's not a part of interface, so we skip it.
+ self.check(item.id, item_visibility).generics().predicates();
+ }
hir::ItemKind::Trait(.., ref trait_item_refs) => {
self.check(item.id, item_visibility).generics().predicates();
@@ -1654,6 +1669,7 @@
pub fn provide(providers: &mut Providers) {
*providers = Providers {
privacy_access_levels,
+ check_mod_privacy,
..*providers
};
}
@@ -1662,34 +1678,43 @@
tcx.privacy_access_levels(LOCAL_CRATE)
}
-fn privacy_access_levels<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
- krate: CrateNum)
- -> Lrc<AccessLevels> {
- assert_eq!(krate, LOCAL_CRATE);
-
- let krate = tcx.hir().krate();
+fn check_mod_privacy<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
let empty_tables = ty::TypeckTables::empty(None);
// Check privacy of names not checked in previous compilation stages.
let mut visitor = NamePrivacyVisitor {
tcx,
tables: &empty_tables,
- current_item: CRATE_NODE_ID,
+ current_item: DUMMY_NODE_ID,
empty_tables: &empty_tables,
};
- intravisit::walk_crate(&mut visitor, krate);
+ let (module, span, node_id) = tcx.hir().get_module(module_def_id);
+ intravisit::walk_mod(&mut visitor, module, node_id);
// Check privacy of explicitly written types and traits as well as
// inferred types of expressions and patterns.
let mut visitor = TypePrivacyVisitor {
tcx,
tables: &empty_tables,
- current_item: DefId::local(CRATE_DEF_INDEX),
+ current_item: module_def_id,
in_body: false,
- span: krate.span,
+ span,
empty_tables: &empty_tables,
};
- intravisit::walk_crate(&mut visitor, krate);
+ intravisit::walk_mod(&mut visitor, module, node_id);
+}
+
+fn privacy_access_levels<'tcx>(
+ tcx: TyCtxt<'_, 'tcx, 'tcx>,
+ krate: CrateNum,
+) -> Lrc<AccessLevels> {
+ assert_eq!(krate, LOCAL_CRATE);
+
+ let krate = tcx.hir().krate();
+
+ for &module in krate.modules.keys() {
+ queries::check_mod_privacy::ensure(tcx, tcx.hir().local_def_id(module));
+ }
// Build up a set of all exported items in the AST. This is a set of all
// items which are reachable from external crates based on visibility.
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index 39be3cb..a58d63e 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -120,6 +120,16 @@
target: BTreeSet<Span>,
}
+struct TypoSuggestion {
+ candidate: Symbol,
+
+ /// The kind of the binding ("crate", "module", etc.)
+ kind: &'static str,
+
+ /// An appropriate article to refer to the binding ("a", "an", etc.)
+ article: &'static str,
+}
+
impl PartialOrd for BindingError {
fn partial_cmp(&self, other: &BindingError) -> Option<cmp::Ordering> {
Some(self.cmp(other))
@@ -1005,7 +1015,7 @@
CrateRootAndExternPrelude,
/// Virtual module that denotes resolution in extern prelude.
- /// Used for paths starting with `::` on 2018 edition or `extern::`.
+ /// Used for paths starting with `::` on 2018 edition.
ExternPrelude,
/// Virtual module that denotes resolution in current scope.
@@ -1448,7 +1458,7 @@
}
}
-#[derive(Default, Clone)]
+#[derive(Debug, Default, Clone)]
pub struct ExternPreludeEntry<'a> {
extern_crate_item: Option<&'a NameBinding<'a>>,
pub introduced_by_item: bool,
@@ -1536,9 +1546,7 @@
extern_module_map: FxHashMap<(DefId, bool /* MacrosOnly? */), Module<'a>>,
binding_parent_modules: FxHashMap<PtrKey<'a, NameBinding<'a>>, Module<'a>>,
- pub make_glob_map: bool,
- /// Maps imports to the names of items actually imported (this actually maps
- /// all imports, but only glob imports are actually interesting).
+ /// Maps glob imports to the names of items actually imported.
pub glob_map: GlobMap,
used_imports: FxHashSet<(NodeId, Namespace)>,
@@ -1785,7 +1793,6 @@
cstore: &'a CStore,
krate: &Crate,
crate_name: &str,
- make_glob_map: MakeGlobMap,
crate_loader: &'a mut CrateLoader<'a>,
arenas: &'a ResolverArenas<'a>)
-> Resolver<'a> {
@@ -1869,7 +1876,6 @@
extern_module_map: FxHashMap::default(),
binding_parent_modules: FxHashMap::default(),
- make_glob_map: make_glob_map == MakeGlobMap::Yes,
glob_map: Default::default(),
used_imports: FxHashSet::default(),
@@ -1979,14 +1985,15 @@
used.set(true);
directive.used.set(true);
self.used_imports.insert((directive.id, ns));
- self.add_to_glob_map(directive.id, ident);
+ self.add_to_glob_map(&directive, ident);
self.record_use(ident, ns, binding, false);
}
}
- fn add_to_glob_map(&mut self, id: NodeId, ident: Ident) {
- if self.make_glob_map {
- self.glob_map.entry(id).or_default().insert(ident.name);
+ #[inline]
+ fn add_to_glob_map(&mut self, directive: &ImportDirective<'_>, ident: Ident) {
+ if directive.is_glob() {
+ self.glob_map.entry(directive.id).or_default().insert(ident.name);
}
}
@@ -3291,8 +3298,19 @@
let mut levenshtein_worked = false;
// Try Levenshtein algorithm.
- if let Some(candidate) = this.lookup_typo_candidate(path, ns, is_expected, span) {
- err.span_label(ident_span, format!("did you mean `{}`?", candidate));
+ let suggestion = this.lookup_typo_candidate(path, ns, is_expected, span);
+ if let Some(suggestion) = suggestion {
+ let msg = format!(
+ "{} {} with a similar name exists",
+ suggestion.article, suggestion.kind
+ );
+ err.span_suggestion_with_applicability(
+ ident_span,
+ &msg,
+ suggestion.candidate.to_string(),
+ Applicability::MaybeIncorrect,
+ );
+
levenshtein_worked = true;
}
@@ -3300,7 +3318,12 @@
if let Some(def) = def {
match (def, source) {
(Def::Macro(..), _) => {
- err.span_label(span, format!("did you mean `{}!(...)`?", path_str));
+ err.span_suggestion_with_applicability(
+ span,
+ "use `!` to invoke the macro",
+ format!("{}!", path_str),
+ Applicability::MaybeIncorrect,
+ );
return (err, candidates);
}
(Def::TyAlias(..), PathSource::Trait(_)) => {
@@ -3312,13 +3335,22 @@
}
(Def::Mod(..), PathSource::Expr(Some(parent))) => match parent.node {
ExprKind::Field(_, ident) => {
- err.span_label(parent.span, format!("did you mean `{}::{}`?",
- path_str, ident));
+ err.span_suggestion_with_applicability(
+ parent.span,
+ "use the path separator to refer to an item",
+ format!("{}::{}", path_str, ident),
+ Applicability::MaybeIncorrect,
+ );
return (err, candidates);
}
ExprKind::MethodCall(ref segment, ..) => {
- err.span_label(parent.span, format!("did you mean `{}::{}(...)`?",
- path_str, segment.ident));
+ let span = parent.span.with_hi(segment.ident.span.hi());
+ err.span_suggestion_with_applicability(
+ span,
+ "use the path separator to refer to an item",
+ format!("{}::{}", path_str, segment.ident),
+ Applicability::MaybeIncorrect,
+ );
return (err, candidates);
}
_ => {}
@@ -3369,6 +3401,29 @@
Ok(ref snippet) if snippet == "{" => true,
_ => false,
};
+ // In case this could be a struct literal that needs to be surrounded
+ // by parenthesis, find the appropriate span.
+ let mut i = 0;
+ let mut closing_brace = None;
+ loop {
+ sp = sm.next_point(sp);
+ match sm.span_to_snippet(sp) {
+ Ok(ref snippet) => {
+ if snippet == "}" {
+ let sp = span.to(sp);
+ if let Ok(snippet) = sm.span_to_snippet(sp) {
+ closing_brace = Some((sp, snippet));
+ }
+ break;
+ }
+ }
+ _ => break,
+ }
+ i += 1;
+ if i > 100 { // The bigger the span the more likely we're
+ break; // incorrect. Bound it to 100 chars long.
+ }
+ }
match source {
PathSource::Expr(Some(parent)) => {
match parent.node {
@@ -3395,11 +3450,20 @@
}
},
PathSource::Expr(None) if followed_by_brace == true => {
- err.span_label(
- span,
- format!("did you mean `({} {{ /* fields */ }})`?",
- path_str),
- );
+ if let Some((sp, snippet)) = closing_brace {
+ err.span_suggestion_with_applicability(
+ sp,
+ "surround the struct literal with parenthesis",
+ format!("({})", snippet),
+ Applicability::MaybeIncorrect,
+ );
+ } else {
+ err.span_label(
+ span,
+ format!("did you mean `({} {{ /* fields */ }})`?",
+ path_str),
+ );
+ }
return (err, candidates);
},
_ => {
@@ -3815,8 +3879,7 @@
self.resolve_self(&mut ctxt, self.current_module)));
continue;
}
- if name == keywords::Extern.name() ||
- name == keywords::PathRoot.name() && ident.span.rust_2018() {
+ if name == keywords::PathRoot.name() && ident.span.rust_2018() {
module = Some(ModuleOrUniformRoot::ExternPrelude);
continue;
}
@@ -3983,8 +4046,8 @@
};
// We're only interested in `use` paths which should start with
- // `{{root}}` or `extern` currently.
- if first_name != keywords::Extern.name() && first_name != keywords::PathRoot.name() {
+ // `{{root}}` currently.
+ if first_name != keywords::PathRoot.name() {
return
}
@@ -4183,19 +4246,25 @@
None
}
- fn lookup_typo_candidate<FilterFn>(&mut self,
- path: &[Segment],
- ns: Namespace,
- filter_fn: FilterFn,
- span: Span)
- -> Option<Symbol>
- where FilterFn: Fn(Def) -> bool
+ fn lookup_typo_candidate<FilterFn>(
+ &mut self,
+ path: &[Segment],
+ ns: Namespace,
+ filter_fn: FilterFn,
+ span: Span,
+ ) -> Option<TypoSuggestion>
+ where
+ FilterFn: Fn(Def) -> bool,
{
- let add_module_candidates = |module: Module, names: &mut Vec<Name>| {
+ let add_module_candidates = |module: Module, names: &mut Vec<TypoSuggestion>| {
for (&(ident, _), resolution) in module.resolutions.borrow().iter() {
if let Some(binding) = resolution.borrow().binding {
if filter_fn(binding.def()) {
- names.push(ident.name);
+ names.push(TypoSuggestion {
+ candidate: ident.name,
+ article: binding.def().article(),
+ kind: binding.def().kind_name(),
+ });
}
}
}
@@ -4209,7 +4278,11 @@
// Locals and type parameters
for (ident, def) in &rib.bindings {
if filter_fn(*def) {
- names.push(ident.name);
+ names.push(TypoSuggestion {
+ candidate: ident.name,
+ article: def.article(),
+ kind: def.kind_name(),
+ });
}
}
// Items in scope
@@ -4222,7 +4295,13 @@
} else {
// Items from the prelude
if !module.no_implicit_prelude {
- names.extend(self.extern_prelude.iter().map(|(ident, _)| ident.name));
+ names.extend(self.extern_prelude.iter().map(|(ident, _)| {
+ TypoSuggestion {
+ candidate: ident.name,
+ article: "a",
+ kind: "crate",
+ }
+ }));
if let Some(prelude) = self.prelude {
add_module_candidates(prelude, &mut names);
}
@@ -4234,7 +4313,13 @@
// Add primitive types to the mix
if filter_fn(Def::PrimTy(Bool)) {
names.extend(
- self.primitive_type_table.primitive_types.iter().map(|(name, _)| name)
+ self.primitive_type_table.primitive_types.iter().map(|(name, _)| {
+ TypoSuggestion {
+ candidate: *name,
+ article: "a",
+ kind: "primitive type",
+ }
+ })
)
}
} else {
@@ -4251,9 +4336,16 @@
let name = path[path.len() - 1].ident.name;
// Make sure error reporting is deterministic.
- names.sort_by_cached_key(|name| name.as_str());
- match find_best_match_for_name(names.iter(), &name.as_str(), None) {
- Some(found) if found != name => Some(found),
+ names.sort_by_cached_key(|suggestion| suggestion.candidate.as_str());
+
+ match find_best_match_for_name(
+ names.iter().map(|suggestion| &suggestion.candidate),
+ &name.as_str(),
+ None,
+ ) {
+ Some(found) if found != name => names
+ .into_iter()
+ .find(|suggestion| suggestion.candidate == found),
_ => None,
}
}
@@ -4549,7 +4641,7 @@
let import_id = match binding.kind {
NameBindingKind::Import { directive, .. } => {
self.maybe_unused_trait_imports.insert(directive.id);
- self.add_to_glob_map(directive.id, trait_name);
+ self.add_to_glob_map(&directive, trait_name);
Some(directive.id)
}
_ => None,
@@ -5256,12 +5348,6 @@
PathResolution::new(Def::Err)
}
-#[derive(PartialEq,Copy, Clone)]
-pub enum MakeGlobMap {
- Yes,
- No,
-}
-
#[derive(Copy, Clone, Debug)]
enum CrateLint {
/// Do not issue the lint
diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs
index bb679d3..286f9a7 100644
--- a/src/librustc_resolve/macros.rs
+++ b/src/librustc_resolve/macros.rs
@@ -1015,6 +1015,7 @@
};
let ident = Ident::new(Symbol::intern(name), span);
self.lookup_typo_candidate(&[Segment::from_ident(ident)], MacroNS, is_macro, span)
+ .map(|suggestion| suggestion.candidate)
});
if let Some(suggestion) = suggestion {
diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs
index 0c9e443..995df38 100644
--- a/src/librustc_save_analysis/dump_visitor.rs
+++ b/src/librustc_save_analysis/dump_visitor.rs
@@ -1238,13 +1238,9 @@
};
// Make a comma-separated list of names of imported modules.
- let glob_map = &self.save_ctxt.analysis.glob_map;
- let glob_map = glob_map.as_ref().unwrap();
- let names = if glob_map.contains_key(&id) {
- glob_map.get(&id).unwrap().iter().map(|n| n.to_string()).collect()
- } else {
- Vec::new()
- };
+ let def_id = self.tcx.hir().local_def_id(id);
+ let names = self.tcx.names_imported_by_glob_use(def_id);
+ let names: Vec<_> = names.iter().map(|n| n.to_string()).collect();
// Otherwise it's a span with wrong macro expansion info, which
// we don't want to track anyway, since it's probably macro-internal `use`
diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs
index 132bd4f..73eb5de 100644
--- a/src/librustc_save_analysis/lib.rs
+++ b/src/librustc_save_analysis/lib.rs
@@ -71,7 +71,6 @@
tcx: TyCtxt<'l, 'tcx, 'tcx>,
tables: &'l ty::TypeckTables<'tcx>,
access_levels: &'l AccessLevels,
- analysis: &'l ty::CrateAnalysis,
span_utils: SpanUtils<'tcx>,
config: Config,
impl_counter: Cell<u32>,
@@ -1120,15 +1119,12 @@
pub fn process_crate<'l, 'tcx, H: SaveHandler>(
tcx: TyCtxt<'l, 'tcx, 'tcx>,
krate: &ast::Crate,
- analysis: &'l ty::CrateAnalysis,
cratename: &str,
input: &'l Input,
config: Option<Config>,
mut handler: H,
) {
tcx.dep_graph.with_ignore(|| {
- assert!(analysis.glob_map.is_some());
-
info!("Dumping crate {}", cratename);
// Privacy checking requires and is done after type checking; use a
@@ -1141,7 +1137,6 @@
let save_ctxt = SaveContext {
tcx,
tables: &ty::TypeckTables::empty(None),
- analysis,
access_levels: &access_levels,
span_utils: SpanUtils::new(&tcx.sess),
config: find_config(config),
diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs
index f42b0a1..3a21ca1 100644
--- a/src/librustc_target/spec/mod.rs
+++ b/src/librustc_target/spec/mod.rs
@@ -217,6 +217,46 @@
}
}
+#[derive(Clone, Copy, Debug, PartialEq, Hash, RustcEncodable, RustcDecodable)]
+pub enum MergeFunctions {
+ Disabled,
+ Trampolines,
+ Aliases
+}
+
+impl MergeFunctions {
+ pub fn desc(&self) -> &str {
+ match *self {
+ MergeFunctions::Disabled => "disabled",
+ MergeFunctions::Trampolines => "trampolines",
+ MergeFunctions::Aliases => "aliases",
+ }
+ }
+}
+
+impl FromStr for MergeFunctions {
+ type Err = ();
+
+ fn from_str(s: &str) -> Result<MergeFunctions, ()> {
+ match s {
+ "disabled" => Ok(MergeFunctions::Disabled),
+ "trampolines" => Ok(MergeFunctions::Trampolines),
+ "aliases" => Ok(MergeFunctions::Aliases),
+ _ => Err(()),
+ }
+ }
+}
+
+impl ToJson for MergeFunctions {
+ fn to_json(&self) -> Json {
+ match *self {
+ MergeFunctions::Disabled => "disabled".to_json(),
+ MergeFunctions::Trampolines => "trampolines".to_json(),
+ MergeFunctions::Aliases => "aliases".to_json(),
+ }
+ }
+}
+
pub type LinkArgs = BTreeMap<LinkerFlavor, Vec<String>>;
pub type TargetResult = Result<Target, String>;
@@ -690,7 +730,15 @@
/// If set, have the linker export exactly these symbols, instead of using
/// the usual logic to figure this out from the crate itself.
- pub override_export_symbols: Option<Vec<String>>
+ pub override_export_symbols: Option<Vec<String>>,
+
+ /// Determines how or whether the MergeFunctions LLVM pass should run for
+ /// this target. Either "disabled", "trampolines", or "aliases".
+ /// The MergeFunctions pass is generally useful, but some targets may need
+ /// to opt out. The default is "aliases".
+ ///
+ /// Workaround for: https://github.com/rust-lang/rust/issues/57356
+ pub merge_functions: MergeFunctions
}
impl Default for TargetOptions {
@@ -773,6 +821,7 @@
requires_uwtable: false,
simd_types_indirect: true,
override_export_symbols: None,
+ merge_functions: MergeFunctions::Aliases,
}
}
}
@@ -875,6 +924,19 @@
.map(|o| o.as_u64()
.map(|s| base.options.$key_name = Some(s)));
} );
+ ($key_name:ident, MergeFunctions) => ( {
+ let name = (stringify!($key_name)).replace("_", "-");
+ obj.find(&name[..]).and_then(|o| o.as_string().and_then(|s| {
+ match s.parse::<MergeFunctions>() {
+ Ok(mergefunc) => base.options.$key_name = mergefunc,
+ _ => return Some(Err(format!("'{}' is not a valid value for \
+ merge-functions. Use 'disabled', \
+ 'trampolines', or 'aliases'.",
+ s))),
+ }
+ Some(Ok(()))
+ })).unwrap_or(Ok(()))
+ } );
($key_name:ident, PanicStrategy) => ( {
let name = (stringify!($key_name)).replace("_", "-");
obj.find(&name[..]).and_then(|o| o.as_string().and_then(|s| {
@@ -1064,6 +1126,7 @@
key!(requires_uwtable, bool);
key!(simd_types_indirect, bool);
key!(override_export_symbols, opt_list);
+ key!(merge_functions, MergeFunctions)?;
if let Some(array) = obj.find("abi-blacklist").and_then(Json::as_array) {
for name in array.iter().filter_map(|abi| abi.as_string()) {
@@ -1275,6 +1338,7 @@
target_option_val!(requires_uwtable);
target_option_val!(simd_types_indirect);
target_option_val!(override_export_symbols);
+ target_option_val!(merge_functions);
if default.abi_blacklist != self.options.abi_blacklist {
d.insert("abi-blacklist".to_string(), self.options.abi_blacklist.iter()
diff --git a/src/librustc_typeck/Cargo.toml b/src/librustc_typeck/Cargo.toml
index 87f11b0..68b28a6 100644
--- a/src/librustc_typeck/Cargo.toml
+++ b/src/librustc_typeck/Cargo.toml
@@ -15,7 +15,6 @@
rustc = { path = "../librustc" }
rustc_data_structures = { path = "../librustc_data_structures" }
rustc_errors = { path = "../librustc_errors" }
-rustc_platform_intrinsics = { path = "../librustc_platform_intrinsics" }
rustc_target = { path = "../librustc_target" }
smallvec = { version = "0.6.7", features = ["union", "may_dangle"] }
syntax = { path = "../libsyntax" }
diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs
index 8e5eaa1..534279e 100644
--- a/src/librustc_typeck/astconv.rs
+++ b/src/librustc_typeck/astconv.rs
@@ -10,6 +10,7 @@
use lint;
use middle::resolve_lifetime as rl;
use namespace::Namespace;
+use rustc::lint::builtin::AMBIGUOUS_ASSOCIATED_ITEMS;
use rustc::traits;
use rustc::ty::{self, Ty, TyCtxt, ToPredicate, TypeFoldable};
use rustc::ty::{GenericParamDef, GenericParamDefKind};
@@ -1278,29 +1279,50 @@
}
// Create a type from a path to an associated type.
- // For a path `A::B::C::D`, `ty` and `ty_path_def` are the type and def for `A::B::C`
+ // For a path `A::B::C::D`, `qself_ty` and `qself_def` are the type and def for `A::B::C`
// and item_segment is the path segment for `D`. We return a type and a def for
// the whole path.
- // Will fail except for `T::A` and `Self::A`; i.e., if `ty`/`ty_path_def` are not a type
+ // Will fail except for `T::A` and `Self::A`; i.e., if `qself_ty`/`qself_def` are not a type
// parameter or `Self`.
- pub fn associated_path_def_to_ty(&self,
- ref_id: ast::NodeId,
- span: Span,
- ty: Ty<'tcx>,
- ty_path_def: Def,
- item_segment: &hir::PathSegment)
- -> (Ty<'tcx>, Def)
- {
+ pub fn associated_path_to_ty(
+ &self,
+ ref_id: ast::NodeId,
+ span: Span,
+ qself_ty: Ty<'tcx>,
+ qself_def: Def,
+ assoc_segment: &hir::PathSegment,
+ permit_variants: bool,
+ ) -> (Ty<'tcx>, Def) {
let tcx = self.tcx();
- let assoc_name = item_segment.ident;
+ let assoc_ident = assoc_segment.ident;
- debug!("associated_path_def_to_ty: {:?}::{}", ty, assoc_name);
+ debug!("associated_path_to_ty: {:?}::{}", qself_ty, assoc_ident);
- self.prohibit_generics(slice::from_ref(item_segment));
+ self.prohibit_generics(slice::from_ref(assoc_segment));
+
+ // Check if we have an enum variant.
+ let mut variant_resolution = None;
+ if let ty::Adt(adt_def, _) = qself_ty.sty {
+ if adt_def.is_enum() {
+ let variant_def = adt_def.variants.iter().find(|vd| {
+ tcx.hygienic_eq(assoc_ident, vd.ident, adt_def.did)
+ });
+ if let Some(variant_def) = variant_def {
+ let def = Def::Variant(variant_def.did);
+ if permit_variants {
+ check_type_alias_enum_variants_enabled(tcx, span);
+ tcx.check_stability(variant_def.did, Some(ref_id), span);
+ return (qself_ty, def);
+ } else {
+ variant_resolution = Some(def);
+ }
+ }
+ }
+ }
// Find the type of the associated item, and the trait where the associated
// item is declared.
- let bound = match (&ty.sty, ty_path_def) {
+ let bound = match (&qself_ty.sty, qself_def) {
(_, Def::SelfTy(Some(_), Some(impl_def_id))) => {
// `Self` in an impl of a trait -- we have a concrete self type and a
// trait reference.
@@ -1313,77 +1335,61 @@
};
let candidates = traits::supertraits(tcx, ty::Binder::bind(trait_ref))
- .filter(|r| self.trait_defines_associated_type_named(r.def_id(), assoc_name));
+ .filter(|r| self.trait_defines_associated_type_named(r.def_id(), assoc_ident));
- match self.one_bound_for_assoc_type(candidates, "Self", assoc_name, span) {
+ match self.one_bound_for_assoc_type(candidates, "Self", assoc_ident, span) {
Ok(bound) => bound,
Err(ErrorReported) => return (tcx.types.err, Def::Err),
}
}
(&ty::Param(_), Def::SelfTy(Some(param_did), None)) |
(&ty::Param(_), Def::TyParam(param_did)) => {
- match self.find_bound_for_assoc_item(param_did, assoc_name, span) {
+ match self.find_bound_for_assoc_item(param_did, assoc_ident, span) {
Ok(bound) => bound,
Err(ErrorReported) => return (tcx.types.err, Def::Err),
}
}
- (&ty::Adt(adt_def, _substs), Def::Enum(_did)) => {
- let ty_str = ty.to_string();
- // Incorrect enum variant.
- let mut err = tcx.sess.struct_span_err(
- span,
- &format!("no variant `{}` on enum `{}`", &assoc_name.as_str(), ty_str),
- );
- // Check if it was a typo.
- let input = adt_def.variants.iter().map(|variant| &variant.ident.name);
- if let Some(suggested_name) = find_best_match_for_name(
- input,
- &assoc_name.as_str(),
- None,
- ) {
- err.span_suggestion_with_applicability(
- span,
- "did you mean",
- format!("{}::{}", ty_str, suggested_name.to_string()),
- Applicability::MaybeIncorrect,
- );
- } else {
- err.span_label(span, "unknown variant");
- }
- err.emit();
- return (tcx.types.err, Def::Err);
- }
_ => {
- // Check if we have an enum variant.
- match ty.sty {
- ty::Adt(adt_def, _) if adt_def.is_enum() => {
- let variant_def = adt_def.variants.iter().find(|vd| {
- tcx.hygienic_eq(assoc_name, vd.ident, adt_def.did)
- });
- if let Some(variant_def) = variant_def {
- check_type_alias_enum_variants_enabled(tcx, span);
-
- let def = Def::Variant(variant_def.did);
- tcx.check_stability(def.def_id(), Some(ref_id), span);
- return (ty, def);
- }
- },
- _ => (),
- }
-
- // Don't print `TyErr` to the user.
- if !ty.references_error() {
+ if variant_resolution.is_some() {
+ // Variant in type position
+ let msg = format!("expected type, found variant `{}`", assoc_ident);
+ tcx.sess.span_err(span, &msg);
+ } else if qself_ty.is_enum() {
+ // Report as incorrect enum variant rather than ambiguous type.
+ let mut err = tcx.sess.struct_span_err(
+ span,
+ &format!("no variant `{}` on enum `{}`", &assoc_ident.as_str(), qself_ty),
+ );
+ // Check if it was a typo.
+ let adt_def = qself_ty.ty_adt_def().expect("enum is not an ADT");
+ if let Some(suggested_name) = find_best_match_for_name(
+ adt_def.variants.iter().map(|variant| &variant.ident.name),
+ &assoc_ident.as_str(),
+ None,
+ ) {
+ err.span_suggestion_with_applicability(
+ span,
+ "did you mean",
+ format!("{}::{}", qself_ty, suggested_name),
+ Applicability::MaybeIncorrect,
+ );
+ } else {
+ err.span_label(span, "unknown variant");
+ }
+ err.emit();
+ } else if !qself_ty.references_error() {
+ // Don't print `TyErr` to the user.
self.report_ambiguous_associated_type(span,
- &ty.to_string(),
+ &qself_ty.to_string(),
"Trait",
- &assoc_name.as_str());
+ &assoc_ident.as_str());
}
return (tcx.types.err, Def::Err);
}
};
let trait_did = bound.def_id();
- let (assoc_ident, def_scope) = tcx.adjust_ident(assoc_name, trait_did, ref_id);
+ let (assoc_ident, def_scope) = tcx.adjust_ident(assoc_ident, trait_did, ref_id);
let item = tcx.associated_items(trait_did).find(|i| {
Namespace::from(i.kind) == Namespace::Type &&
i.ident.modern() == assoc_ident
@@ -1394,11 +1400,35 @@
let def = Def::AssociatedTy(item.def_id);
if !item.vis.is_accessible_from(def_scope, tcx) {
- let msg = format!("{} `{}` is private", def.kind_name(), assoc_name);
+ let msg = format!("{} `{}` is private", def.kind_name(), assoc_ident);
tcx.sess.span_err(span, &msg);
}
tcx.check_stability(item.def_id, Some(ref_id), span);
+ if let Some(variant_def) = variant_resolution {
+ let mut err = tcx.struct_span_lint_node(
+ AMBIGUOUS_ASSOCIATED_ITEMS,
+ ref_id,
+ span,
+ "ambiguous associated item",
+ );
+
+ let mut could_refer_to = |def: Def, also| {
+ let note_msg = format!("`{}` could{} refer to {} defined here",
+ assoc_ident, also, def.kind_name());
+ err.span_note(tcx.def_span(def.def_id()), ¬e_msg);
+ };
+ could_refer_to(variant_def, "");
+ could_refer_to(def, " also");
+
+ err.span_suggestion_with_applicability(
+ span,
+ "use fully-qualified syntax",
+ format!("<{} as {}>::{}", qself_ty, "Trait", assoc_ident),
+ Applicability::HasPlaceholders,
+ ).emit();
+ }
+
(ty, def)
}
@@ -1773,7 +1803,7 @@
} else {
Def::Err
};
- self.associated_path_def_to_ty(ast_ty.id, ast_ty.span, ty, def, segment).0
+ self.associated_path_to_ty(ast_ty.id, ast_ty.span, ty, def, segment, false).0
}
hir::TyKind::Array(ref ty, ref length) => {
let length_def_id = tcx.hir().local_def_id(length.id);
diff --git a/src/librustc_typeck/check/_match.rs b/src/librustc_typeck/check/_match.rs
index b66c383..1767af4 100644
--- a/src/librustc_typeck/check/_match.rs
+++ b/src/librustc_typeck/check/_match.rs
@@ -20,21 +20,33 @@
use super::report_unexpected_variant_def;
impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
- /// The `is_arg` argument indicates whether this pattern is the
- /// *outermost* pattern in an argument (e.g., in `fn foo(&x:
- /// &u32)`, it is true for the `&x` pattern but not `x`). This is
- /// used to tailor error reporting.
+ /// `match_discrim_span` argument having a `Span` indicates that this pattern is part of
+ /// a match expression arm guard, and it points to the match discriminant to add context
+ /// in type errors. In the folloowing example, `match_discrim_span` corresponds to the
+ /// `a + b` expression:
+ ///
+ /// ```text
+ /// error[E0308]: mismatched types
+ /// --> src/main.rs:5:9
+ /// |
+ /// 4 | let temp: usize = match a + b {
+ /// | ----- this expression has type `usize`
+ /// 5 | Ok(num) => num,
+ /// | ^^^^^^^ expected usize, found enum `std::result::Result`
+ /// |
+ /// = note: expected type `usize`
+ /// found type `std::result::Result<_, _>`
+ /// ```
pub fn check_pat_walk(
&self,
pat: &'gcx hir::Pat,
mut expected: Ty<'tcx>,
mut def_bm: ty::BindingMode,
- is_arg: bool)
- {
+ match_discrim_span: Option<Span>,
+ ) {
let tcx = self.tcx;
- debug!("check_pat_walk(pat={:?},expected={:?},def_bm={:?},is_arg={})",
- pat, expected, def_bm, is_arg);
+ debug!("check_pat_walk(pat={:?},expected={:?},def_bm={:?})", pat, expected, def_bm);
let is_non_ref_pat = match pat.node {
PatKind::Struct(..) |
@@ -210,8 +222,8 @@
let common_type = self.resolve_type_vars_if_possible(&lhs_ty);
// subtyping doesn't matter here, as the value is some kind of scalar
- self.demand_eqtype(pat.span, expected, lhs_ty);
- self.demand_eqtype(pat.span, expected, rhs_ty);
+ self.demand_eqtype_pat(pat.span, expected, lhs_ty, match_discrim_span);
+ self.demand_eqtype_pat(pat.span, expected, rhs_ty, match_discrim_span);
common_type
}
PatKind::Binding(ba, var_id, _, ref sub) => {
@@ -240,13 +252,13 @@
// `x` is assigned a value of type `&M T`, hence `&M T <: typeof(x)` is
// required. However, we use equality, which is stronger. See (*) for
// an explanation.
- self.demand_eqtype(pat.span, region_ty, local_ty);
+ self.demand_eqtype_pat(pat.span, region_ty, local_ty, match_discrim_span);
}
// otherwise the type of x is the expected type T
ty::BindByValue(_) => {
// As above, `T <: typeof(x)` is required but we
// use equality, see (*) below.
- self.demand_eqtype(pat.span, expected, local_ty);
+ self.demand_eqtype_pat(pat.span, expected, local_ty, match_discrim_span);
}
}
@@ -254,23 +266,31 @@
// what the type of the binding `x` ought to be
if var_id != pat.id {
let vt = self.local_ty(pat.span, var_id).decl_ty;
- self.demand_eqtype(pat.span, vt, local_ty);
+ self.demand_eqtype_pat(pat.span, vt, local_ty, match_discrim_span);
}
if let Some(ref p) = *sub {
- self.check_pat_walk(&p, expected, def_bm, true);
+ self.check_pat_walk(&p, expected, def_bm, match_discrim_span);
}
local_ty
}
PatKind::TupleStruct(ref qpath, ref subpats, ddpos) => {
- self.check_pat_tuple_struct(pat, qpath, &subpats, ddpos, expected, def_bm)
+ self.check_pat_tuple_struct(
+ pat,
+ qpath,
+ &subpats,
+ ddpos,
+ expected,
+ def_bm,
+ match_discrim_span,
+ )
}
PatKind::Path(ref qpath) => {
self.check_pat_path(pat, qpath, expected)
}
PatKind::Struct(ref qpath, ref fields, etc) => {
- self.check_pat_struct(pat, qpath, fields, etc, expected, def_bm)
+ self.check_pat_struct(pat, qpath, fields, etc, expected, def_bm, match_discrim_span)
}
PatKind::Tuple(ref elements, ddpos) => {
let mut expected_len = elements.len();
@@ -295,12 +315,12 @@
// further errors being emitted when using the bindings. #50333
let element_tys_iter = (0..max_len).map(|_| tcx.types.err);
for (_, elem) in elements.iter().enumerate_and_adjust(max_len, ddpos) {
- self.check_pat_walk(elem, &tcx.types.err, def_bm, true);
+ self.check_pat_walk(elem, &tcx.types.err, def_bm, match_discrim_span);
}
tcx.mk_tup(element_tys_iter)
} else {
for (i, elem) in elements.iter().enumerate_and_adjust(max_len, ddpos) {
- self.check_pat_walk(elem, &element_tys[i], def_bm, true);
+ self.check_pat_walk(elem, &element_tys[i], def_bm, match_discrim_span);
}
pat_ty
}
@@ -313,11 +333,11 @@
// Here, `demand::subtype` is good enough, but I don't
// think any errors can be introduced by using
// `demand::eqtype`.
- self.demand_eqtype(pat.span, expected, uniq_ty);
- self.check_pat_walk(&inner, inner_ty, def_bm, true);
+ self.demand_eqtype_pat(pat.span, expected, uniq_ty, match_discrim_span);
+ self.check_pat_walk(&inner, inner_ty, def_bm, match_discrim_span);
uniq_ty
} else {
- self.check_pat_walk(&inner, tcx.types.err, def_bm, true);
+ self.check_pat_walk(&inner, tcx.types.err, def_bm, match_discrim_span);
tcx.types.err
}
}
@@ -349,15 +369,13 @@
// Look for a case like `fn foo(&foo: u32)` and suggest
// `fn foo(foo: &u32)`
if let Some(mut err) = err {
- if is_arg {
- if let PatKind::Binding(..) = inner.node {
- if let Ok(snippet) = tcx.sess.source_map()
- .span_to_snippet(pat.span)
- {
- err.help(&format!("did you mean `{}: &{}`?",
- &snippet[1..],
- expected));
- }
+ if let PatKind::Binding(..) = inner.node {
+ if let Ok(snippet) = tcx.sess.source_map()
+ .span_to_snippet(pat.span)
+ {
+ err.help(&format!("did you mean `{}: &{}`?",
+ &snippet[1..],
+ expected));
}
}
err.emit();
@@ -366,10 +384,10 @@
}
};
- self.check_pat_walk(&inner, inner_ty, def_bm, true);
+ self.check_pat_walk(&inner, inner_ty, def_bm, match_discrim_span);
rptr_ty
} else {
- self.check_pat_walk(&inner, tcx.types.err, def_bm, true);
+ self.check_pat_walk(&inner, tcx.types.err, def_bm, match_discrim_span);
tcx.types.err
}
}
@@ -427,13 +445,13 @@
};
for elt in before {
- self.check_pat_walk(&elt, inner_ty, def_bm, true);
+ self.check_pat_walk(&elt, inner_ty, def_bm, match_discrim_span);
}
if let Some(ref slice) = *slice {
- self.check_pat_walk(&slice, slice_ty, def_bm, true);
+ self.check_pat_walk(&slice, slice_ty, def_bm, match_discrim_span);
}
for elt in after {
- self.check_pat_walk(&elt, inner_ty, def_bm, true);
+ self.check_pat_walk(&elt, inner_ty, def_bm, match_discrim_span);
}
expected_ty
}
@@ -524,12 +542,14 @@
true
}
- pub fn check_match(&self,
- expr: &'gcx hir::Expr,
- discrim: &'gcx hir::Expr,
- arms: &'gcx [hir::Arm],
- expected: Expectation<'tcx>,
- match_src: hir::MatchSource) -> Ty<'tcx> {
+ pub fn check_match(
+ &self,
+ expr: &'gcx hir::Expr,
+ discrim: &'gcx hir::Expr,
+ arms: &'gcx [hir::Arm],
+ expected: Expectation<'tcx>,
+ match_src: hir::MatchSource,
+ ) -> Ty<'tcx> {
let tcx = self.tcx;
// Not entirely obvious: if matches may create ref bindings, we want to
@@ -624,8 +644,12 @@
let mut all_pats_diverge = Diverges::WarnedAlways;
for p in &arm.pats {
self.diverges.set(Diverges::Maybe);
- self.check_pat_walk(&p, discrim_ty,
- ty::BindingMode::BindByValue(hir::Mutability::MutImmutable), true);
+ self.check_pat_walk(
+ &p,
+ discrim_ty,
+ ty::BindingMode::BindByValue(hir::Mutability::MutImmutable),
+ Some(discrim.span),
+ );
all_pats_diverge &= self.diverges.get();
}
@@ -703,26 +727,34 @@
coercion.complete(self)
}
- fn check_pat_struct(&self,
- pat: &'gcx hir::Pat,
- qpath: &hir::QPath,
- fields: &'gcx [Spanned<hir::FieldPat>],
- etc: bool,
- expected: Ty<'tcx>,
- def_bm: ty::BindingMode) -> Ty<'tcx>
+ fn check_pat_struct(
+ &self,
+ pat: &'gcx hir::Pat,
+ qpath: &hir::QPath,
+ fields: &'gcx [Spanned<hir::FieldPat>],
+ etc: bool,
+ expected: Ty<'tcx>,
+ def_bm: ty::BindingMode,
+ match_discrim_span: Option<Span>,
+ ) -> Ty<'tcx>
{
// Resolve the path and check the definition for errors.
let (variant, pat_ty) = if let Some(variant_ty) = self.check_struct_path(qpath, pat.id) {
variant_ty
} else {
for field in fields {
- self.check_pat_walk(&field.node.pat, self.tcx.types.err, def_bm, true);
+ self.check_pat_walk(
+ &field.node.pat,
+ self.tcx.types.err,
+ def_bm,
+ match_discrim_span,
+ );
}
return self.tcx.types.err;
};
// Type-check the path.
- self.demand_eqtype(pat.span, expected, pat_ty);
+ self.demand_eqtype_pat(pat.span, expected, pat_ty, match_discrim_span);
// Type-check subpatterns.
if self.check_struct_pat_fields(pat_ty, pat.id, pat.span, variant, fields, etc, def_bm) {
@@ -732,11 +764,12 @@
}
}
- fn check_pat_path(&self,
- pat: &hir::Pat,
- qpath: &hir::QPath,
- expected: Ty<'tcx>) -> Ty<'tcx>
- {
+ fn check_pat_path(
+ &self,
+ pat: &hir::Pat,
+ qpath: &hir::QPath,
+ expected: Ty<'tcx>,
+ ) -> Ty<'tcx> {
let tcx = self.tcx;
// Resolve the path and check the definition for errors.
@@ -767,18 +800,20 @@
pat_ty
}
- fn check_pat_tuple_struct(&self,
- pat: &hir::Pat,
- qpath: &hir::QPath,
- subpats: &'gcx [P<hir::Pat>],
- ddpos: Option<usize>,
- expected: Ty<'tcx>,
- def_bm: ty::BindingMode) -> Ty<'tcx>
- {
+ fn check_pat_tuple_struct(
+ &self,
+ pat: &hir::Pat,
+ qpath: &hir::QPath,
+ subpats: &'gcx [P<hir::Pat>],
+ ddpos: Option<usize>,
+ expected: Ty<'tcx>,
+ def_bm: ty::BindingMode,
+ match_arm_pat_span: Option<Span>,
+ ) -> Ty<'tcx> {
let tcx = self.tcx;
let on_error = || {
for pat in subpats {
- self.check_pat_walk(&pat, tcx.types.err, def_bm, true);
+ self.check_pat_walk(&pat, tcx.types.err, def_bm, match_arm_pat_span);
}
};
let report_unexpected_def = |def: Def| {
@@ -826,7 +861,7 @@
let pat_ty = pat_ty.fn_sig(tcx).output();
let pat_ty = pat_ty.no_bound_vars().expect("expected fn type");
- self.demand_eqtype(pat.span, expected, pat_ty);
+ self.demand_eqtype_pat(pat.span, expected, pat_ty, match_arm_pat_span);
// Type-check subpatterns.
if subpats.len() == variant.fields.len() ||
@@ -837,7 +872,7 @@
};
for (i, subpat) in subpats.iter().enumerate_and_adjust(variant.fields.len(), ddpos) {
let field_ty = self.field_ty(subpat.span, &variant.fields[i], substs);
- self.check_pat_walk(&subpat, field_ty, def_bm, true);
+ self.check_pat_walk(&subpat, field_ty, def_bm, match_arm_pat_span);
self.tcx.check_stability(variant.fields[i].did, Some(pat.id), subpat.span);
}
@@ -917,7 +952,7 @@
}
};
- self.check_pat_walk(&field.pat, field_ty, def_bm, true);
+ self.check_pat_walk(&field.pat, field_ty, def_bm, None);
}
let mut unmentioned_fields = variant.fields
.iter()
diff --git a/src/librustc_typeck/check/cast.rs b/src/librustc_typeck/check/cast.rs
index fbba891..3f185ba 100644
--- a/src/librustc_typeck/check/cast.rs
+++ b/src/librustc_typeck/check/cast.rs
@@ -257,10 +257,28 @@
.emit();
}
CastError::CastToBool => {
- struct_span_err!(fcx.tcx.sess, self.span, E0054, "cannot cast as `bool`")
- .span_label(self.span, "unsupported cast")
- .help("compare with zero instead")
- .emit();
+ let mut err =
+ struct_span_err!(fcx.tcx.sess, self.span, E0054, "cannot cast as `bool`");
+
+ if self.expr_ty.is_numeric() {
+ match fcx.tcx.sess.source_map().span_to_snippet(self.expr.span) {
+ Ok(snippet) => {
+ err.span_suggestion_with_applicability(
+ self.span,
+ "compare with zero instead",
+ format!("{} != 0", snippet),
+ Applicability::MachineApplicable,
+ );
+ }
+ Err(_) => {
+ err.span_help(self.span, "compare with zero instead");
+ }
+ }
+ } else {
+ err.span_label(self.span, "unsupported cast");
+ }
+
+ err.emit();
}
CastError::CastToChar => {
type_error_struct!(fcx.tcx.sess, self.span, self.expr_ty, E0604,
diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs
index 41f2b0e..c0cedd7 100644
--- a/src/librustc_typeck/check/demand.rs
+++ b/src/librustc_typeck/check/demand.rs
@@ -1,6 +1,6 @@
use check::FnCtxt;
use rustc::infer::InferOk;
-use rustc::traits::ObligationCause;
+use rustc::traits::{ObligationCause, ObligationCauseCode};
use syntax::ast;
use syntax::util::parser::PREC_POSTFIX;
@@ -66,6 +66,25 @@
}
}
+ pub fn demand_eqtype_pat(
+ &self,
+ cause_span: Span,
+ expected: Ty<'tcx>,
+ actual: Ty<'tcx>,
+ match_expr_span: Option<Span>,
+ ) {
+ let cause = if let Some(span) = match_expr_span {
+ self.cause(
+ cause_span,
+ ObligationCauseCode::MatchExpressionArmPattern { span, ty: expected },
+ )
+ } else {
+ self.misc(cause_span)
+ };
+ self.demand_eqtype_with_origin(&cause, expected, actual).map(|mut err| err.emit());
+ }
+
+
pub fn demand_coerce(&self,
expr: &hir::Expr,
checked_ty: Ty<'tcx>,
diff --git a/src/librustc_typeck/check/intrinsic.rs b/src/librustc_typeck/check/intrinsic.rs
index 9f323b9..143715d 100644
--- a/src/librustc_typeck/check/intrinsic.rs
+++ b/src/librustc_typeck/check/intrinsic.rs
@@ -1,17 +1,13 @@
//! Type-checking for the rust-intrinsic and platform-intrinsic
//! intrinsics that the compiler exposes.
-use intrinsics;
use rustc::traits::{ObligationCause, ObligationCauseCode};
use rustc::ty::{self, TyCtxt, Ty};
use rustc::ty::subst::Subst;
-use rustc::util::nodemap::FxHashMap;
use require_same_types;
use rustc_target::spec::abi::Abi;
-use syntax::ast;
use syntax::symbol::Symbol;
-use syntax_pos::Span;
use rustc::hir;
@@ -402,8 +398,6 @@
tcx.mk_ty_param(n, name)
};
- let def_id = tcx.hir().local_def_id(it.id);
- let i_n_tps = tcx.generics_of(def_id).own_counts().types;
let name = it.ident.as_str();
let (n_tps, inputs, output) = match &*name {
@@ -461,159 +455,12 @@
}
}
_ => {
- match intrinsics::Intrinsic::find(&name) {
- Some(intr) => {
- // this function is a platform specific intrinsic
- if i_n_tps != 0 {
- span_err!(tcx.sess, it.span, E0440,
- "platform-specific intrinsic has wrong number of type \
- parameters: found {}, expected 0",
- i_n_tps);
- return
- }
-
- let mut structural_to_nomimal = FxHashMap::default();
-
- let sig = tcx.fn_sig(def_id);
- let sig = sig.no_bound_vars().unwrap();
- if intr.inputs.len() != sig.inputs().len() {
- span_err!(tcx.sess, it.span, E0444,
- "platform-specific intrinsic has invalid number of \
- arguments: found {}, expected {}",
- sig.inputs().len(), intr.inputs.len());
- return
- }
- let input_pairs = intr.inputs.iter().zip(sig.inputs());
- for (i, (expected_arg, arg)) in input_pairs.enumerate() {
- match_intrinsic_type_to_type(tcx, &format!("argument {}", i + 1), it.span,
- &mut structural_to_nomimal, expected_arg, arg);
- }
- match_intrinsic_type_to_type(tcx, "return value", it.span,
- &mut structural_to_nomimal,
- &intr.output, sig.output());
- return
- }
- None => {
- span_err!(tcx.sess, it.span, E0441,
- "unrecognized platform-specific intrinsic function: `{}`", name);
- return;
- }
- }
+ let msg = format!("unrecognized platform-specific intrinsic function: `{}`", name);
+ tcx.sess.span_err(it.span, &msg);
+ return;
}
};
equate_intrinsic_type(tcx, it, n_tps, Abi::PlatformIntrinsic, hir::Unsafety::Unsafe,
inputs, output)
}
-
-// walk the expected type and the actual type in lock step, checking they're
-// the same, in a kinda-structural way, i.e., `Vector`s have to be simd structs with
-// exactly the right element type
-fn match_intrinsic_type_to_type<'a, 'tcx>(
- tcx: TyCtxt<'a, 'tcx, 'tcx>,
- position: &str,
- span: Span,
- structural_to_nominal: &mut FxHashMap<&'a intrinsics::Type, Ty<'tcx>>,
- expected: &'a intrinsics::Type, t: Ty<'tcx>)
-{
- use intrinsics::Type::*;
-
- let simple_error = |real: &str, expected: &str| {
- span_err!(tcx.sess, span, E0442,
- "intrinsic {} has wrong type: found {}, expected {}",
- position, real, expected)
- };
-
- match *expected {
- Void => match t.sty {
- ty::Tuple(ref v) if v.is_empty() => {},
- _ => simple_error(&format!("`{}`", t), "()"),
- },
- // (The width we pass to LLVM doesn't concern the type checker.)
- Integer(signed, bits, _llvm_width) => match (signed, bits, &t.sty) {
- (true, 8, &ty::Int(ast::IntTy::I8)) |
- (false, 8, &ty::Uint(ast::UintTy::U8)) |
- (true, 16, &ty::Int(ast::IntTy::I16)) |
- (false, 16, &ty::Uint(ast::UintTy::U16)) |
- (true, 32, &ty::Int(ast::IntTy::I32)) |
- (false, 32, &ty::Uint(ast::UintTy::U32)) |
- (true, 64, &ty::Int(ast::IntTy::I64)) |
- (false, 64, &ty::Uint(ast::UintTy::U64)) |
- (true, 128, &ty::Int(ast::IntTy::I128)) |
- (false, 128, &ty::Uint(ast::UintTy::U128)) => {},
- _ => simple_error(&format!("`{}`", t),
- &format!("`{}{n}`",
- if signed {"i"} else {"u"},
- n = bits)),
- },
- Float(bits) => match (bits, &t.sty) {
- (32, &ty::Float(ast::FloatTy::F32)) |
- (64, &ty::Float(ast::FloatTy::F64)) => {},
- _ => simple_error(&format!("`{}`", t),
- &format!("`f{n}`", n = bits)),
- },
- Pointer(ref inner_expected, ref _llvm_type, const_) => {
- match t.sty {
- ty::RawPtr(ty::TypeAndMut { ty, mutbl }) => {
- if (mutbl == hir::MutImmutable) != const_ {
- simple_error(&format!("`{}`", t),
- if const_ {"const pointer"} else {"mut pointer"})
- }
- match_intrinsic_type_to_type(tcx, position, span, structural_to_nominal,
- inner_expected, ty)
- }
- _ => simple_error(&format!("`{}`", t), "raw pointer"),
- }
- }
- Vector(ref inner_expected, ref _llvm_type, len) => {
- if !t.is_simd() {
- simple_error(&format!("non-simd type `{}`", t), "simd type");
- return;
- }
- let t_len = t.simd_size(tcx);
- if len as usize != t_len {
- simple_error(&format!("vector with length {}", t_len),
- &format!("length {}", len));
- return;
- }
- let t_ty = t.simd_type(tcx);
- {
- // check that a given structural type always has the same an intrinsic definition
- let previous = structural_to_nominal.entry(expected).or_insert(t);
- if *previous != t {
- // this gets its own error code because it is non-trivial
- span_err!(tcx.sess, span, E0443,
- "intrinsic {} has wrong type: found `{}`, expected `{}` which \
- was used for this vector type previously in this signature",
- position,
- t,
- *previous);
- return;
- }
- }
- match_intrinsic_type_to_type(tcx,
- position,
- span,
- structural_to_nominal,
- inner_expected,
- t_ty)
- }
- Aggregate(_flatten, ref expected_contents) => {
- match t.sty {
- ty::Tuple(contents) => {
- if contents.len() != expected_contents.len() {
- simple_error(&format!("tuple with length {}", contents.len()),
- &format!("tuple with length {}", expected_contents.len()));
- return
- }
- for (e, c) in expected_contents.iter().zip(contents) {
- match_intrinsic_type_to_type(tcx, position, span, structural_to_nominal,
- e, c)
- }
- }
- _ => simple_error(&format!("`{}`", t),
- "tuple"),
- }
- }
- }
-}
diff --git a/src/librustc_typeck/check/method/mod.rs b/src/librustc_typeck/check/method/mod.rs
index 02687df..e71dc01 100644
--- a/src/librustc_typeck/check/method/mod.rs
+++ b/src/librustc_typeck/check/method/mod.rs
@@ -408,45 +408,36 @@
let tcx = self.tcx;
- let mode = probe::Mode::Path;
- match self.probe_for_name(span, mode, method_name, IsSuggestion(false),
- self_ty, expr_id, ProbeScope::TraitsInScope) {
- Ok(pick) => {
- debug!("resolve_ufcs: pick={:?}", pick);
- if let Some(import_id) = pick.import_id {
- let import_def_id = tcx.hir().local_def_id(import_id);
- debug!("resolve_ufcs: used_trait_import: {:?}", import_def_id);
- Lrc::get_mut(&mut self.tables.borrow_mut().used_trait_imports)
- .unwrap().insert(import_def_id);
+ // Check if we have an enum variant.
+ if let ty::Adt(adt_def, _) = self_ty.sty {
+ if adt_def.is_enum() {
+ let variant_def = adt_def.variants.iter().find(|vd| {
+ tcx.hygienic_eq(method_name, vd.ident, adt_def.did)
+ });
+ if let Some(variant_def) = variant_def {
+ check_type_alias_enum_variants_enabled(tcx, span);
+
+ let def = Def::VariantCtor(variant_def.did, variant_def.ctor_kind);
+ tcx.check_stability(def.def_id(), Some(expr_id), span);
+ return Ok(def);
}
-
- let def = pick.item.def();
- debug!("resolve_ufcs: def={:?}", def);
- tcx.check_stability(def.def_id(), Some(expr_id), span);
-
- Ok(def)
- }
- Err(err) => {
- // Check if we have an enum variant.
- match self_ty.sty {
- ty::Adt(adt_def, _) if adt_def.is_enum() => {
- let variant_def = adt_def.variants.iter().find(|vd| {
- tcx.hygienic_eq(method_name, vd.ident, adt_def.did)
- });
- if let Some(variant_def) = variant_def {
- check_type_alias_enum_variants_enabled(tcx, span);
-
- let def = Def::VariantCtor(variant_def.did, variant_def.ctor_kind);
- tcx.check_stability(def.def_id(), Some(expr_id), span);
- return Ok(def);
- }
- },
- _ => (),
- }
-
- Err(err)
}
}
+
+ let pick = self.probe_for_name(span, probe::Mode::Path, method_name, IsSuggestion(false),
+ self_ty, expr_id, ProbeScope::TraitsInScope)?;
+ debug!("resolve_ufcs: pick={:?}", pick);
+ if let Some(import_id) = pick.import_id {
+ let import_def_id = tcx.hir().local_def_id(import_id);
+ debug!("resolve_ufcs: used_trait_import: {:?}", import_def_id);
+ Lrc::get_mut(&mut self.tables.borrow_mut().used_trait_imports)
+ .unwrap().insert(import_def_id);
+ }
+
+ let def = pick.item.def();
+ debug!("resolve_ufcs: def={:?}", def);
+ tcx.check_stability(def.def_id(), Some(expr_id), span);
+ Ok(def)
}
/// Find item with name `item_name` defined in impl/trait `def_id`
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index 870c6dd..452fd24 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -109,6 +109,7 @@
use rustc::ty::adjustment::{Adjust, Adjustment, AllowTwoPhase, AutoBorrow, AutoBorrowMutability};
use rustc::ty::fold::TypeFoldable;
use rustc::ty::query::Providers;
+use rustc::ty::query::queries;
use rustc::ty::subst::{UnpackedKind, Subst, Substs, UserSelfTy, UserSubsts};
use rustc::ty::util::{Representability, IntTypeExt, Discr};
use rustc::ty::layout::VariantIdx;
@@ -131,7 +132,8 @@
use std::slice;
use require_c_abi_if_variadic;
-use session::{CompileIncomplete, config, Session};
+use session::{CompileIncomplete, Session};
+use session::config::EntryFnType;
use TypeAndSubsts;
use lint;
use util::captures::Captures;
@@ -700,10 +702,16 @@
pub fn check_item_types<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> Result<(), ErrorReported> {
tcx.sess.track_errors(|| {
- tcx.hir().krate().visit_all_item_likes(&mut CheckItemTypesVisitor { tcx });
+ for &module in tcx.hir().krate().modules.keys() {
+ queries::check_mod_item_types::ensure(tcx, tcx.hir().local_def_id(module));
+ }
})
}
+fn check_mod_item_types<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
+ tcx.hir().visit_item_likes_in_module(module_def_id, &mut CheckItemTypesVisitor { tcx });
+}
+
pub fn check_item_bodies<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> Result<(), CompileIncomplete> {
tcx.typeck_item_bodies(LOCAL_CRATE)
}
@@ -742,6 +750,7 @@
check_item_well_formed,
check_trait_item_well_formed,
check_impl_item_well_formed,
+ check_mod_item_types,
..*providers
};
}
@@ -1084,8 +1093,12 @@
// Add formal parameters.
for (arg_ty, arg) in fn_sig.inputs().iter().zip(&body.arguments) {
// Check the pattern.
- fcx.check_pat_walk(&arg.pat, arg_ty,
- ty::BindingMode::BindByValue(hir::Mutability::MutImmutable), true);
+ fcx.check_pat_walk(
+ &arg.pat,
+ arg_ty,
+ ty::BindingMode::BindByValue(hir::Mutability::MutImmutable),
+ None,
+ );
// Check that argument is Sized.
// The check for a non-trivial pattern is a hack to avoid duplicate warnings
@@ -1151,19 +1164,18 @@
// Check that the main return type implements the termination trait.
if let Some(term_id) = fcx.tcx.lang_items().termination() {
- if let Some((id, _, entry_type)) = *fcx.tcx.sess.entry_fn.borrow() {
- if id == fn_id {
- if let config::EntryFnType::Main = entry_type {
- let substs = fcx.tcx.mk_substs_trait(declared_ret_ty, &[]);
- let trait_ref = ty::TraitRef::new(term_id, substs);
- let return_ty_span = decl.output.span();
- let cause = traits::ObligationCause::new(
- return_ty_span, fn_id, ObligationCauseCode::MainFunctionType);
+ if let Some((def_id, EntryFnType::Main)) = fcx.tcx.entry_fn(LOCAL_CRATE) {
+ let main_id = fcx.tcx.hir().as_local_node_id(def_id).unwrap();
+ if main_id == fn_id {
+ let substs = fcx.tcx.mk_substs_trait(declared_ret_ty, &[]);
+ let trait_ref = ty::TraitRef::new(term_id, substs);
+ let return_ty_span = decl.output.span();
+ let cause = traits::ObligationCause::new(
+ return_ty_span, fn_id, ObligationCauseCode::MainFunctionType);
- inherited.register_predicate(
- traits::Obligation::new(
- cause, param_env, trait_ref.to_predicate()));
- }
+ inherited.register_predicate(
+ traits::Obligation::new(
+ cause, param_env, trait_ref.to_predicate()));
}
}
}
@@ -3354,13 +3366,103 @@
let coerce_to_ty = expected.coercion_target_type(self, sp);
let mut coerce: DynamicCoerceMany = CoerceMany::new(coerce_to_ty);
- let if_cause = self.cause(sp, ObligationCauseCode::IfExpression);
- coerce.coerce(self, &if_cause, then_expr, then_ty);
+ coerce.coerce(self, &self.misc(sp), then_expr, then_ty);
if let Some(else_expr) = opt_else_expr {
let else_ty = self.check_expr_with_expectation(else_expr, expected);
let else_diverges = self.diverges.get();
+ let mut outer_sp = if self.tcx.sess.source_map().is_multiline(sp) {
+ // The `if`/`else` isn't in one line in the output, include some context to make it
+ // clear it is an if/else expression:
+ // ```
+ // LL | let x = if true {
+ // | _____________-
+ // LL || 10i32
+ // || ----- expected because of this
+ // LL || } else {
+ // LL || 10u32
+ // || ^^^^^ expected i32, found u32
+ // LL || };
+ // ||_____- if and else have incompatible types
+ // ```
+ Some(sp)
+ } else {
+ // The entire expression is in one line, only point at the arms
+ // ```
+ // LL | let x = if true { 10i32 } else { 10u32 };
+ // | ----- ^^^^^ expected i32, found u32
+ // | |
+ // | expected because of this
+ // ```
+ None
+ };
+ let mut remove_semicolon = None;
+ let error_sp = if let ExprKind::Block(block, _) = &else_expr.node {
+ if let Some(expr) = &block.expr {
+ expr.span
+ } else if let Some(stmt) = block.stmts.last() {
+ // possibly incorrect trailing `;` in the else arm
+ remove_semicolon = self.could_remove_semicolon(block, then_ty);
+ stmt.span
+ } else { // empty block, point at its entirety
+ // Avoid overlapping spans that aren't as readable:
+ // ```
+ // 2 | let x = if true {
+ // | _____________-
+ // 3 | | 3
+ // | | - expected because of this
+ // 4 | | } else {
+ // | |____________^
+ // 5 | ||
+ // 6 | || };
+ // | || ^
+ // | ||_____|
+ // | |______if and else have incompatible types
+ // | expected integer, found ()
+ // ```
+ // by not pointing at the entire expression:
+ // ```
+ // 2 | let x = if true {
+ // | ------- if and else have incompatible types
+ // 3 | 3
+ // | - expected because of this
+ // 4 | } else {
+ // | ____________^
+ // 5 | |
+ // 6 | | };
+ // | |_____^ expected integer, found ()
+ // ```
+ if outer_sp.is_some() {
+ outer_sp = Some(self.tcx.sess.source_map().def_span(sp));
+ }
+ else_expr.span
+ }
+ } else { // shouldn't happen unless the parser has done something weird
+ else_expr.span
+ };
+ let then_sp = if let ExprKind::Block(block, _) = &then_expr.node {
+ if let Some(expr) = &block.expr {
+ expr.span
+ } else if let Some(stmt) = block.stmts.last() {
+ // possibly incorrect trailing `;` in the else arm
+ remove_semicolon = remove_semicolon.or(
+ self.could_remove_semicolon(block, else_ty));
+ stmt.span
+ } else { // empty block, point at its entirety
+ outer_sp = None; // same as in `error_sp`, cleanup output
+ then_expr.span
+ }
+ } else { // shouldn't happen unless the parser has done something weird
+ then_expr.span
+ };
+
+ let if_cause = self.cause(error_sp, ObligationCauseCode::IfExpression {
+ then: then_sp,
+ outer: outer_sp,
+ semicolon: remove_semicolon,
+ });
+
coerce.coerce(self, &if_cause, else_expr, else_ty);
// We won't diverge unless both branches do (or the condition does).
@@ -4622,8 +4724,8 @@
} else {
Def::Err
};
- let (ty, def) = AstConv::associated_path_def_to_ty(self, node_id, path_span,
- ty, def, segment);
+ let (ty, def) = AstConv::associated_path_to_ty(self, node_id, path_span,
+ ty, def, segment, true);
// Write back the new resolution.
let hir_id = self.tcx.hir().node_to_hir_id(node_id);
@@ -4723,9 +4825,12 @@
}
}
- self.check_pat_walk(&local.pat, t,
- ty::BindingMode::BindByValue(hir::Mutability::MutImmutable),
- true);
+ self.check_pat_walk(
+ &local.pat,
+ t,
+ ty::BindingMode::BindByValue(hir::Mutability::MutImmutable),
+ None,
+ );
let pat_ty = self.node_ty(local.pat.hir_id);
if pat_ty.references_error() {
self.write_ty(local.hir_id, pat_ty);
@@ -5129,7 +5234,6 @@
}
}
-
/// A common error is to add an extra semicolon:
///
/// ```
@@ -5141,31 +5245,43 @@
/// This routine checks if the final statement in a block is an
/// expression with an explicit semicolon whose type is compatible
/// with `expected_ty`. If so, it suggests removing the semicolon.
- fn consider_hint_about_removing_semicolon(&self,
- blk: &'gcx hir::Block,
- expected_ty: Ty<'tcx>,
- err: &mut DiagnosticBuilder) {
+ fn consider_hint_about_removing_semicolon(
+ &self,
+ blk: &'gcx hir::Block,
+ expected_ty: Ty<'tcx>,
+ err: &mut DiagnosticBuilder,
+ ) {
+ if let Some(span_semi) = self.could_remove_semicolon(blk, expected_ty) {
+ err.span_suggestion_with_applicability(
+ span_semi,
+ "consider removing this semicolon",
+ String::new(),
+ Applicability::MachineApplicable,
+ );
+ }
+ }
+
+ fn could_remove_semicolon(
+ &self,
+ blk: &'gcx hir::Block,
+ expected_ty: Ty<'tcx>,
+ ) -> Option<Span> {
// Be helpful when the user wrote `{... expr;}` and
// taking the `;` off is enough to fix the error.
let last_stmt = match blk.stmts.last() {
Some(s) => s,
- None => return,
+ None => return None,
};
let last_expr = match last_stmt.node {
hir::StmtKind::Semi(ref e, _) => e,
- _ => return,
+ _ => return None,
};
let last_expr_ty = self.node_ty(last_expr.hir_id);
if self.can_sub(self.param_env, last_expr_ty, expected_ty).is_err() {
- return;
+ return None;
}
let original_span = original_sp(last_stmt.span, blk.span);
- let span_semi = original_span.with_lo(original_span.hi() - BytePos(1));
- err.span_suggestion_with_applicability(
- span_semi,
- "consider removing this semicolon",
- String::new(),
- Applicability::MachineApplicable);
+ Some(original_span.with_lo(original_span.hi() - BytePos(1)))
}
// Instantiates the given path, which must refer to an item with the given
diff --git a/src/librustc_typeck/coherence/mod.rs b/src/librustc_typeck/coherence/mod.rs
index ce71be0..8053ed1 100644
--- a/src/librustc_typeck/coherence/mod.rs
+++ b/src/librustc_typeck/coherence/mod.rs
@@ -171,13 +171,23 @@
// This is something like impl Trait1 for Trait2. Illegal
// if Trait1 is a supertrait of Trait2 or Trait2 is not object safe.
- if let Some(principal_def_id) = data.principal_def_id() {
- if !tcx.is_object_safe(principal_def_id) {
+ let component_def_ids = data.iter().flat_map(|predicate| {
+ match predicate.skip_binder() {
+ ty::ExistentialPredicate::Trait(tr) => Some(tr.def_id),
+ ty::ExistentialPredicate::AutoTrait(def_id) => Some(*def_id),
+ // An associated type projection necessarily comes with
+ // an additional `Trait` requirement.
+ ty::ExistentialPredicate::Projection(..) => None,
+ }
+ });
+
+ for component_def_id in component_def_ids {
+ if !tcx.is_object_safe(component_def_id) {
// This is an error, but it will be reported by wfcheck. Ignore it here.
// This is tested by `coherence-impl-trait-for-trait-object-safe.rs`.
} else {
let mut supertrait_def_ids =
- traits::supertrait_def_ids(tcx, principal_def_id);
+ traits::supertrait_def_ids(tcx, component_def_id);
if supertrait_def_ids.any(|d| d == trait_def_id) {
let sp = tcx.sess.source_map().def_span(tcx.span_of_impl(impl_def_id).unwrap());
struct_span_err!(tcx.sess,
@@ -193,6 +203,5 @@
}
}
}
- // FIXME: also check auto-trait def-ids? (e.g. `impl Sync for Foo+Sync`)?
}
}
diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs
index be5f398..3a546f8 100644
--- a/src/librustc_typeck/collect.rs
+++ b/src/librustc_typeck/collect.rs
@@ -23,6 +23,7 @@
use middle::weak_lang_items;
use rustc::mir::mono::Linkage;
use rustc::ty::query::Providers;
+use rustc::ty::query::queries;
use rustc::ty::subst::Substs;
use rustc::ty::util::Discr;
use rustc::ty::util::IntTypeExt;
@@ -56,10 +57,16 @@
// Main entry point
pub fn collect_item_types<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
- let mut visitor = CollectItemTypesVisitor { tcx };
- tcx.hir()
- .krate()
- .visit_all_item_likes(&mut visitor.as_deep_visitor());
+ for &module in tcx.hir().krate().modules.keys() {
+ queries::collect_mod_item_types::ensure(tcx, tcx.hir().local_def_id(module));
+ }
+}
+
+fn collect_mod_item_types<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
+ tcx.hir().visit_item_likes_in_module(
+ module_def_id,
+ &mut CollectItemTypesVisitor { tcx }.as_deep_visitor()
+ );
}
pub fn provide(providers: &mut Providers) {
@@ -78,6 +85,7 @@
impl_polarity,
is_foreign_item,
codegen_fn_attrs,
+ collect_mod_item_types,
..*providers
};
}
@@ -2136,12 +2144,7 @@
) {
let list = match attr.meta_item_list() {
Some(list) => list,
- None => {
- let msg = "#[target_feature] attribute must be of the form \
- #[target_feature(..)]";
- tcx.sess.span_err(attr.span, &msg);
- return;
- }
+ None => return,
};
let rust_features = tcx.features();
for item in list {
@@ -2339,14 +2342,6 @@
).emit();
}
codegen_fn_attrs.export_name = Some(s);
- } else {
- struct_span_err!(
- tcx.sess,
- attr.span,
- E0558,
- "`export_name` attribute has invalid format"
- ).span_label(attr.span, "did you mean #[export_name=\"*\"]?")
- .emit();
}
} else if attr.check_name("target_feature") {
if tcx.fn_sig(id).unsafety() == Unsafety::Normal {
diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs
index 387dabe..c0a8dd8 100644
--- a/src/librustc_typeck/diagnostics.rs
+++ b/src/librustc_typeck/diagnostics.rs
@@ -516,7 +516,7 @@
For a somewhat artificial example:
```compile_fail,E0055
-#![recursion_limit="2"]
+#![recursion_limit="5"]
struct Foo;
@@ -526,9 +526,9 @@
fn main() {
let foo = Foo;
- let ref_foo = &&Foo;
+ let ref_foo = &&&&&Foo;
- // error, reached the recursion limit while auto-dereferencing `&&Foo`
+ // error, reached the recursion limit while auto-dereferencing `&&&&&Foo`
ref_foo.foo();
}
```
@@ -3369,180 +3369,6 @@
```
"##,
-E0440: r##"
-A platform-specific intrinsic function has the wrong number of type
-parameters. Erroneous code example:
-
-```compile_fail,E0440
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd<T>(x: f64x2) -> i32;
- // error: platform-specific intrinsic has wrong number of type
- // parameters
-}
-```
-
-Please refer to the function declaration to see if it corresponds
-with yours. Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2) -> i32;
-}
-```
-"##,
-
-E0441: r##"
-An unknown platform-specific intrinsic function was used. Erroneous
-code example:
-
-```compile_fail,E0441
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_ep16(x: i16x8, y: i16x8) -> i16x8;
- // error: unrecognized platform-specific intrinsic function
-}
-```
-
-Please verify that the function name wasn't misspelled, and ensure
-that it is declared in the rust source code (in the file
-src/librustc_platform_intrinsics/x86.rs). Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; // ok!
-}
-```
-"##,
-
-E0442: r##"
-Intrinsic argument(s) and/or return value have the wrong type.
-Erroneous code example:
-
-```compile_fail,E0442
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8,
- i8, i8, i8, i8, i8, i8, i8, i8);
-#[repr(simd)]
-struct i32x4(i32, i32, i32, i32);
-#[repr(simd)]
-struct i64x2(i64, i64);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- // error: intrinsic arguments/return value have wrong type
-}
-```
-
-To fix this error, please refer to the function declaration to give
-it the awaited types. Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; // ok!
-}
-```
-"##,
-
-E0443: r##"
-Intrinsic argument(s) and/or return value have the wrong type.
-Erroneous code example:
-
-```compile_fail,E0443
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-#[repr(simd)]
-struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i64x8;
- // error: intrinsic argument/return value has wrong type
-}
-```
-
-To fix this error, please refer to the function declaration to give
-it the awaited types. Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; // ok!
-}
-```
-"##,
-
-E0444: r##"
-A platform-specific intrinsic function has wrong number of arguments.
-Erroneous code example:
-
-```compile_fail,E0444
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32;
- // error: platform-specific intrinsic has invalid number of arguments
-}
-```
-
-Please refer to the function declaration to see if it corresponds
-with yours. Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2) -> i32; // ok!
-}
-```
-"##,
-
E0516: r##"
The `typeof` keyword is currently reserved but unimplemented.
Erroneous code example:
@@ -3785,29 +3611,6 @@
read://doc.rust-lang.org/reference.html#inline-attributes
"##,
-E0558: r##"
-The `export_name` attribute was malformed.
-
-Erroneous code example:
-
-```ignore (error-emitted-at-codegen-which-cannot-be-handled-by-compile_fail)
-#[export_name] // error: `export_name` attribute has invalid format
-pub fn something() {}
-
-fn main() {}
-```
-
-The `export_name` attribute expects a string in order to determine the name of
-the exported symbol. Example:
-
-```
-#[export_name = "some_function"] // ok!
-pub fn something() {}
-
-fn main() {}
-```
-"##,
-
E0559: r##"
An unknown field was specified into an enum's structure variant.
@@ -4896,6 +4699,7 @@
// E0372, // coherence not object safe
E0377, // the trait `CoerceUnsized` may only be implemented for a coercion
// between structures with the same definition
+// E0558, // replaced with a generic attribute input check
E0533, // `{}` does not name a unit variant, unit struct or a constant
// E0563, // cannot determine a type for this `impl Trait`: {} // removed in 6383de15
E0564, // only named lifetimes are allowed in `impl Trait`,
diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs
index c55a125..6c1c49b 100644
--- a/src/librustc_typeck/lib.rs
+++ b/src/librustc_typeck/lib.rs
@@ -82,7 +82,6 @@
extern crate arena;
#[macro_use] extern crate rustc;
-extern crate rustc_platform_intrinsics as intrinsics;
extern crate rustc_data_structures;
extern crate rustc_errors as errors;
extern crate rustc_target;
@@ -104,23 +103,22 @@
mod outlives;
mod variance;
-use hir::Node;
use rustc_target::spec::abi::Abi;
-use rustc::hir;
+use rustc::hir::{self, Node};
+use rustc::hir::def_id::{DefId, LOCAL_CRATE};
use rustc::infer::InferOk;
use rustc::lint;
use rustc::middle;
use rustc::session;
-use rustc::session::config::nightly_options;
+use rustc::session::CompileIncomplete;
+use rustc::session::config::{EntryFnType, nightly_options};
use rustc::traits::{ObligationCause, ObligationCauseCode, TraitEngine, TraitEngineExt};
use rustc::ty::subst::Substs;
use rustc::ty::{self, Ty, TyCtxt};
use rustc::ty::query::Providers;
use rustc::util;
use rustc::util::profiling::ProfileCategory;
-use session::{CompileIncomplete, config};
use syntax_pos::Span;
-use syntax::ast;
use util::common::time;
use std::iter;
@@ -185,10 +183,9 @@
})
}
-fn check_main_fn_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
- main_id: ast::NodeId,
- main_span: Span) {
- let main_def_id = tcx.hir().local_def_id(main_id);
+fn check_main_fn_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, main_def_id: DefId) {
+ let main_id = tcx.hir().as_local_node_id(main_def_id).unwrap();
+ let main_span = tcx.def_span(main_def_id);
let main_t = tcx.type_of(main_def_id);
match main_t.sty {
ty::FnDef(..) => {
@@ -251,10 +248,9 @@
}
}
-fn check_start_fn_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
- start_id: ast::NodeId,
- start_span: Span) {
- let start_def_id = tcx.hir().local_def_id(start_id);
+fn check_start_fn_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, start_def_id: DefId) {
+ let start_id = tcx.hir().as_local_node_id(start_def_id).unwrap();
+ let start_span = tcx.def_span(start_def_id);
let start_t = tcx.type_of(start_def_id);
match start_t.sty {
ty::FnDef(..) => {
@@ -310,11 +306,10 @@
}
fn check_for_entry_fn<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
- if let Some((id, sp, entry_type)) = *tcx.sess.entry_fn.borrow() {
- match entry_type {
- config::EntryFnType::Main => check_main_fn_ty(tcx, id, sp),
- config::EntryFnType::Start => check_start_fn_ty(tcx, id, sp),
- }
+ match tcx.entry_fn(LOCAL_CRATE) {
+ Some((def_id, EntryFnType::Main)) => check_main_fn_ty(tcx, def_id),
+ Some((def_id, EntryFnType::Start)) => check_start_fn_ty(tcx, def_id),
+ _ => {}
}
}
diff --git a/src/librustdoc/Cargo.toml b/src/librustdoc/Cargo.toml
index 8bac007..4b42188 100644
--- a/src/librustdoc/Cargo.toml
+++ b/src/librustdoc/Cargo.toml
@@ -9,6 +9,6 @@
[dependencies]
pulldown-cmark = { version = "0.1.2", default-features = false }
-minifier = "0.0.20"
+minifier = "0.0.26"
tempfile = "3"
parking_lot = "0.6.4"
diff --git a/src/librustdoc/clean/cfg.rs b/src/librustdoc/clean/cfg.rs
index 0cfe6be..c74a561 100644
--- a/src/librustdoc/clean/cfg.rs
+++ b/src/librustdoc/clean/cfg.rs
@@ -370,6 +370,7 @@
"pc" => "PC",
"rumprun" => "Rumprun",
"sun" => "Sun",
+ "fortanix" => "Fortanix",
_ => ""
},
("target_env", Some(env)) => match &*env.as_str() {
@@ -378,6 +379,7 @@
"musl" => "musl",
"newlib" => "Newlib",
"uclibc" => "uClibc",
+ "sgx" => "SGX",
_ => "",
},
("target_endian", Some(endian)) => return write!(fmt, "{}-endian", endian),
diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs
index d991368..635d071 100644
--- a/src/librustdoc/config.rs
+++ b/src/librustdoc/config.rs
@@ -68,6 +68,9 @@
pub should_test: bool,
/// List of arguments to pass to the test harness, if running tests.
pub test_args: Vec<String>,
+ /// Optional path to persist the doctest executables to, defaults to a
+ /// temporary directory if not set.
+ pub persist_doctests: Option<PathBuf>,
// Options that affect the documentation process
@@ -121,6 +124,7 @@
.field("lint_cap", &self.lint_cap)
.field("should_test", &self.should_test)
.field("test_args", &self.test_args)
+ .field("persist_doctests", &self.persist_doctests)
.field("default_passes", &self.default_passes)
.field("manual_passes", &self.manual_passes)
.field("display_warnings", &self.display_warnings)
@@ -431,6 +435,7 @@
let enable_index_page = matches.opt_present("enable-index-page") || index_page.is_some();
let static_root_path = matches.opt_str("static-root-path");
let generate_search_filter = !matches.opt_present("disable-per-crate-search");
+ let persist_doctests = matches.opt_str("persist-doctests").map(PathBuf::from);
let (lint_opts, describe_lints, lint_cap) = get_cmd_lint_options(matches, error_format);
@@ -456,6 +461,7 @@
manual_passes,
display_warnings,
crate_version,
+ persist_doctests,
render_options: RenderOptions {
output,
external_html,
diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs
index 8bb0dc9..7069f04 100644
--- a/src/librustdoc/core.rs
+++ b/src/librustdoc/core.rs
@@ -51,9 +51,6 @@
/// The stack of module NodeIds up till this point
pub crate_name: Option<String>,
pub cstore: Rc<CStore>,
- // Note that external items for which `doc(hidden)` applies to are shown as
- // non-reachable while local items aren't. This is because we're reusing
- // the access levels from crateanalysis.
/// Later on moved into `html::render::CACHE_KEY`
pub renderinfo: RefCell<RenderInfo>,
/// Later on moved through `clean::Crate` into `html::render::CACHE_KEY`
@@ -451,7 +448,6 @@
None,
&name,
None,
- resolve::MakeGlobMap::No,
&resolver_arenas,
&mut crate_loader,
|_| Ok(()));
@@ -469,15 +465,13 @@
freevars: resolver.freevars.clone(),
export_map: resolver.export_map.clone(),
trait_map: resolver.trait_map.clone(),
+ glob_map: resolver.glob_map.clone(),
maybe_unused_trait_imports: resolver.maybe_unused_trait_imports.clone(),
maybe_unused_extern_crates: resolver.maybe_unused_extern_crates.clone(),
extern_prelude: resolver.extern_prelude.iter().map(|(ident, entry)| {
(ident.name, entry.introduced_by_item)
}).collect(),
};
- let analysis = ty::CrateAnalysis {
- glob_map: if resolver.make_glob_map { Some(resolver.glob_map.clone()) } else { None },
- };
let mut arenas = AllArenas::new();
let hir_map = hir_map::map_crate(&sess, &*cstore, &mut hir_forest, &defs);
@@ -493,12 +487,11 @@
&sess,
&*cstore,
hir_map,
- analysis,
resolutions,
&mut arenas,
&name,
&output_filenames,
- |tcx, _, _, result| {
+ |tcx, _, result| {
if result.is_err() {
sess.fatal("Compilation failed, aborting rustdoc");
}
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index b48951d..ad1659b 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -309,7 +309,7 @@
// Note that external items for which `doc(hidden)` applies to are shown as
// non-reachable while local items aren't. This is because we're reusing
- // the access levels from crateanalysis.
+ // the access levels from the privacy check pass.
pub access_levels: AccessLevels<DefId>,
/// The version of the crate being documented, if given from the `--crate-version` flag.
@@ -741,8 +741,8 @@
let mut crate_data = BTreeMap::new();
crate_data.insert("doc".to_owned(), Json::String(crate_doc));
- crate_data.insert("items".to_owned(), Json::Array(crate_items));
- crate_data.insert("paths".to_owned(), Json::Array(crate_paths));
+ crate_data.insert("i".to_owned(), Json::Array(crate_items));
+ crate_data.insert("p".to_owned(), Json::Array(crate_paths));
// Collect the index into a string
format!("searchIndex[{}] = {};",
@@ -914,12 +914,44 @@
write(cx.dst.join("COPYRIGHT.txt"),
static_files::COPYRIGHT)?;
- fn collect(path: &Path, krate: &str, key: &str) -> io::Result<(Vec<String>, Vec<String>)> {
+ fn collect(
+ path: &Path,
+ krate: &str,
+ key: &str,
+ for_search_index: bool,
+ ) -> io::Result<(Vec<String>, Vec<String>, Vec<String>)> {
+ use minifier::js;
+
let mut ret = Vec::new();
let mut krates = Vec::new();
+ let mut variables = Vec::new();
+
+ let mut krate = krate.to_owned();
+
if path.exists() {
for line in BufReader::new(File::open(path)?).lines() {
let line = line?;
+ if for_search_index && line.starts_with("var r_") {
+ variables.push(line.clone());
+ // We need to check if the crate name has been put into a variable as well.
+ let tokens = js::simple_minify(&line).apply(js::clean_tokens);
+ let mut pos = 0;
+ while pos < tokens.len() {
+ if let Some((var_pos, Some(value_pos))) =
+ js::get_variable_name_and_value_positions(&tokens, pos) {
+ if let Some(s) = tokens.0[value_pos].get_string() {
+ if &s[1..s.len() - 1] == krate {
+ if let Some(var) = tokens[var_pos].get_other() {
+ krate = var.to_owned();
+ break
+ }
+ }
+ }
+ }
+ pos += 1;
+ }
+ continue;
+ }
if !line.starts_with(key) {
continue;
}
@@ -933,7 +965,7 @@
.unwrap_or_else(|| String::new()));
}
}
- Ok((ret, krates))
+ Ok((ret, krates, variables))
}
fn show_item(item: &IndexItem, krate: &str) -> String {
@@ -948,7 +980,7 @@
let dst = cx.dst.join("aliases.js");
{
- let (mut all_aliases, _) = try_err!(collect(&dst, &krate.name, "ALIASES"), &dst);
+ let (mut all_aliases, _, _) = try_err!(collect(&dst, &krate.name, "ALIASES", false), &dst);
let mut w = try_err!(File::create(&dst), &dst);
let mut output = String::with_capacity(100);
for (alias, items) in &cache.aliases {
@@ -1035,34 +1067,38 @@
}
let dst = cx.dst.join("source-files.js");
- let (mut all_sources, _krates) = try_err!(collect(&dst, &krate.name, "sourcesIndex"), &dst);
+ let (mut all_sources, _krates, _) = try_err!(collect(&dst, &krate.name, "sourcesIndex",
+ false),
+ &dst);
all_sources.push(format!("sourcesIndex[\"{}\"] = {};",
&krate.name,
hierarchy.to_json_string()));
all_sources.sort();
let mut w = try_err!(File::create(&dst), &dst);
try_err!(writeln!(&mut w,
- "var N = null;var sourcesIndex = {{}};\n{}",
+ "var N = null;var sourcesIndex = {{}};\n{}\ncreateSourceSidebar();",
all_sources.join("\n")),
&dst);
}
// Update the search index
let dst = cx.dst.join("search-index.js");
- let (mut all_indexes, mut krates) = try_err!(collect(&dst, &krate.name, "searchIndex"), &dst);
+ let (mut all_indexes, mut krates, variables) = try_err!(collect(&dst,
+ &krate.name,
+ "searchIndex",
+ true), &dst);
all_indexes.push(search_index);
// Sort the indexes by crate so the file will be generated identically even
// with rustdoc running in parallel.
all_indexes.sort();
let mut w = try_err!(File::create(&dst), &dst);
- try_err!(writeln!(&mut w, "var N = null;var searchIndex = {{}};"), &dst);
- for index in &all_indexes {
- try_err!(write_minify_replacer(&mut w, &*index, options.enable_minification,
- &[(minifier::js::Keyword::Null, "N")]),
- &dst);
- }
- try_err!(writeln!(&mut w, "initSearch(searchIndex);addSearchOptions(searchIndex);"), &dst);
+ try_err!(writeln!(&mut w, "var N=null,E=\"\",T=\"t\",U=\"u\",searchIndex={{}};"), &dst);
+ try_err!(write_minify_replacer(&mut w,
+ &format!("{}\n{}", variables.join(""), all_indexes.join("\n")),
+ options.enable_minification),
+ &dst);
+ try_err!(write!(&mut w, "initSearch(searchIndex);addSearchOptions(searchIndex);"), &dst);
if options.enable_index_page {
if let Some(index_page) = options.index_page.clone() {
@@ -1161,8 +1197,9 @@
remote_item_type.css_class(),
remote_path[remote_path.len() - 1]));
- let (mut all_implementors, _) = try_err!(collect(&mydst, &krate.name, "implementors"),
- &mydst);
+ let (mut all_implementors, _, _) = try_err!(collect(&mydst, &krate.name, "implementors",
+ false),
+ &mydst);
all_implementors.push(implementors);
// Sort the implementors by crate so the file will be generated
// identically even with rustdoc running in parallel.
@@ -1216,14 +1253,50 @@
}
}
-fn write_minify_replacer<W: Write>(dst: &mut W,
- contents: &str,
- enable_minification: bool,
- keywords_to_replace: &[(minifier::js::Keyword, &str)])
- -> io::Result<()> {
+fn write_minify_replacer<W: Write>(
+ dst: &mut W,
+ contents: &str,
+ enable_minification: bool,
+) -> io::Result<()> {
+ use minifier::js::{Keyword, ReservedChar, Token};
+
if enable_minification {
writeln!(dst, "{}",
- minifier::js::minify_and_replace_keywords(contents, keywords_to_replace))
+ minifier::js::simple_minify(contents)
+ .apply(|f| {
+ // We keep backlines.
+ minifier::js::clean_tokens_except(f, |c| {
+ c.get_char() != Some(ReservedChar::Backline)
+ })
+ })
+ .apply(|f| {
+ minifier::js::replace_token_with(f, |t| {
+ match *t {
+ Token::Keyword(Keyword::Null) => Some(Token::Other("N")),
+ Token::String(s) => {
+ let s = &s[1..s.len() -1]; // The quotes are included
+ if s.is_empty() {
+ Some(Token::Other("E"))
+ } else if s == "t" {
+ Some(Token::Other("T"))
+ } else if s == "u" {
+ Some(Token::Other("U"))
+ } else {
+ None
+ }
+ }
+ _ => None,
+ }
+ })
+ })
+ .apply(|f| {
+ // We add a backline after the newly created variables.
+ minifier::js::aggregate_strings_with_separation(
+ f,
+ Token::Char(ReservedChar::Backline),
+ )
+ })
+ .to_string())
} else {
writeln!(dst, "{}", contents)
}
@@ -3059,7 +3132,7 @@
let item_type = m.type_();
let id = cx.derive_id(format!("{}.{}", item_type, name));
let ns_id = cx.derive_id(format!("{}.{}", name, item_type.name_space()));
- write!(w, "{extra}<h3 id='{id}' class='method'><code id='{ns_id}'>",
+ write!(w, "<h3 id='{id}' class='method'>{extra}<code id='{ns_id}'>",
extra = render_spotlight_traits(m)?,
id = id,
ns_id = ns_id)?;
@@ -3444,7 +3517,7 @@
let id = format!("{}.{}", ItemType::StructField, name);
write!(w, "<span id=\"{id}\" class=\"{shortty} small-section-header\">\
<a href=\"#{id}\" class=\"anchor field\"></a>\
- <span class='invisible'><code>{name}: {ty}</code></span>\
+ <code>{name}: {ty}</code>\
</span>",
id = id,
name = name,
@@ -3999,8 +4072,7 @@
None => "impl".to_string(),
});
if let Some(use_absolute) = use_absolute {
- write!(w, "<h3 id='{}' class='impl'><span class='in-band'><table class='table-display'>\
- <tbody><tr><td><code>", id)?;
+ write!(w, "<h3 id='{}' class='impl'><code class='in-band'>", id)?;
fmt_impl_for_trait_page(&i.inner_impl(), w, use_absolute)?;
if show_def_docs {
for it in &i.inner_impl().items {
@@ -4014,22 +4086,18 @@
}
write!(w, "</code>")?;
} else {
- write!(w, "<h3 id='{}' class='impl'><span class='in-band'><table class='table-display'>\
- <tbody><tr><td><code>{}</code>",
- id, i.inner_impl())?;
+ write!(w, "<h3 id='{}' class='impl'><code class='in-band'>{}</code>",
+ id, i.inner_impl()
+ )?;
}
write!(w, "<a href='#{}' class='anchor'></a>", id)?;
- write!(w, "</td><td><span class='out-of-band'>")?;
let since = i.impl_item.stability.as_ref().map(|s| &s.since[..]);
+ render_stability_since_raw(w, since, outer_version)?;
if let Some(l) = (Item { item: &i.impl_item, cx: cx }).src_href() {
- write!(w, "<div class='ghost'></div>")?;
- render_stability_since_raw(w, since, outer_version)?;
write!(w, "<a class='srclink' href='{}' title='{}'>[src]</a>",
l, "goto source code")?;
- } else {
- render_stability_since_raw(w, since, outer_version)?;
}
- write!(w, "</span></td></tr></tbody></table></span></h3>")?;
+ write!(w, "</h3>")?;
if let Some(ref dox) = cx.shared.maybe_collapsed_doc_value(&i.impl_item) {
let mut ids = cx.id_map.borrow_mut();
write!(w, "<div class='docblock'>{}</div>",
@@ -4065,20 +4133,15 @@
let ns_id = cx.derive_id(format!("{}.{}", name, item_type.name_space()));
write!(w, "<h4 id='{}' class=\"{}{}\">", id, item_type, extra_class)?;
write!(w, "{}", spotlight_decl(decl)?)?;
- write!(w, "<table id='{}' class='table-display'><tbody><tr><td><code>", ns_id)?;
+ write!(w, "<code id='{}'>", ns_id)?;
render_assoc_item(w, item, link.anchor(&id), ItemType::Impl)?;
write!(w, "</code>")?;
+ render_stability_since_raw(w, item.stable_since(), outer_version)?;
if let Some(l) = (Item { cx, item }).src_href() {
- write!(w, "</td><td><span class='out-of-band'>")?;
- write!(w, "<div class='ghost'></div>")?;
- render_stability_since_raw(w, item.stable_since(), outer_version)?;
- write!(w, "<a class='srclink' href='{}' title='{}'>[src]</a></span>",
+ write!(w, "<a class='srclink' href='{}' title='{}'>[src]</a>",
l, "goto source code")?;
- } else {
- write!(w, "</td><td>")?;
- render_stability_since_raw(w, item.stable_since(), outer_version)?;
}
- write!(w, "</td></tr></tbody></table></h4>")?;
+ write!(w, "</h4>")?;
}
}
clean::TypedefItem(ref tydef, _) => {
@@ -4090,40 +4153,18 @@
write!(w, "</code></h4>")?;
}
clean::AssociatedConstItem(ref ty, ref default) => {
- let mut version = String::new();
-
- render_stability_since_raw(&mut version, item.stable_since(), outer_version)?;
-
let id = cx.derive_id(format!("{}.{}", item_type, name));
let ns_id = cx.derive_id(format!("{}.{}", name, item_type.name_space()));
write!(w, "<h4 id='{}' class=\"{}{}\">", id, item_type, extra_class)?;
- if !version.is_empty() {
- write!(w, "<table id='{}' class='table-display'><tbody><tr><td><code>", ns_id)?;
- } else {
- write!(w, "<code id='{}'>", ns_id)?;
- }
+ write!(w, "<code id='{}'>", ns_id)?;
assoc_const(w, item, ty, default.as_ref(), link.anchor(&id))?;
- if !version.is_empty() {
- write!(w, "</code>")?;
+ write!(w, "</code>")?;
+ render_stability_since_raw(w, item.stable_since(), outer_version)?;
+ if let Some(l) = (Item { cx, item }).src_href() {
+ write!(w, "<a class='srclink' href='{}' title='{}'>[src]</a>",
+ l, "goto source code")?;
}
- let src = if let Some(l) = (Item { cx, item }).src_href() {
- if !version.is_empty() {
- write!(w, "</td><td><span class='out-of-band'>")?;
- write!(w, "<div class='ghost'></div>{}", version)?;
- }
- format!("<a class='srclink' href='{}' title='{}'>[src]</a>",
- l, "goto source code")
- } else {
- if !version.is_empty() {
- write!(w, "</td><td>{}", version)?;
- }
- String::new()
- };
- if version.is_empty() {
- write!(w, "</code>{}</h4>", src)?;
- } else {
- write!(w, "{}</span></td></tr></tbody></table></h4>", src)?;
- }
+ write!(w, "</h4>")?;
}
clean::AssociatedTypeItem(ref bounds, ref default) => {
let id = cx.derive_id(format!("{}.{}", item_type, name));
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 75b0f5d..82604cc 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -1555,10 +1555,10 @@
// (String) description,
// (Number | null) the parent path index to `paths`]
// (Object | null) the type of the function (if any)
- var items = rawSearchIndex[crate].items;
+ var items = rawSearchIndex[crate].i;
// an array of [(Number) item type,
// (String) name]
- var paths = rawSearchIndex[crate].paths;
+ var paths = rawSearchIndex[crate].p;
// convert `paths` into an object form
var len = paths.length;
@@ -2409,8 +2409,17 @@
e.remove();
});
onEachLazy(main.childNodes, function(e) {
+ // Unhide the actual content once loading is complete. Headers get
+ // flex treatment for their horizontal layout, divs get block treatment
+ // for vertical layout (column-oriented flex layout for divs caused
+ // errors in mobile browsers).
if (e.tagName === "H2" || e.tagName === "H3") {
- e.nextElementSibling.style.display = "block";
+ let nextTagName = e.nextElementSibling.tagName;
+ if (nextTagName == "H2" || nextTagName == "H3") {
+ e.nextElementSibling.style.display = "flex";
+ } else {
+ e.nextElementSibling.style.display = "block";
+ }
}
});
}
@@ -2422,7 +2431,7 @@
return;
}
var crates_text = [];
- if (crates.length > 1) {
+ if (Object.keys(crates).length > 1) {
for (var crate in crates) {
if (crates.hasOwnProperty(crate)) {
crates_text.push(crate);
diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css
index 14273c6..3676549 100644
--- a/src/librustdoc/html/static/rustdoc.css
+++ b/src/librustdoc/html/static/rustdoc.css
@@ -89,8 +89,9 @@
border-bottom: 1px solid;
}
h3.impl, h3.method, h4.method, h3.type, h4.type, h4.associatedconstant {
+ flex-basis: 100%;
font-weight: 600;
- margin-top: 10px;
+ margin-top: 16px;
margin-bottom: 10px;
position: relative;
}
@@ -356,7 +357,8 @@
#main > .docblock h3, #main > .docblock h4, #main > .docblock h5 { font-size: 1em; }
#main > h2 + div, #main > h2 + h3, #main > h3 + div {
- display: none;
+ display: none; /* Changed to flex or block via js once the page is loaded */
+ flex-wrap: wrap;
}
.docblock h1 { font-size: 1em; }
@@ -389,10 +391,6 @@
display: block;
}
-.in-band, code {
- z-index: 5;
-}
-
.invisible {
width: 100%;
display: inline-block;
@@ -534,6 +532,10 @@
margin-top: -8px;
}
+.impl-items {
+ flex-basis: 100%;
+}
+
#main > .stability {
margin-top: 0;
}
@@ -784,6 +786,33 @@
top: 0;
}
+.impl-items .since, .impl .since {
+ flex-grow: 0;
+ padding-left: 12px;
+ padding-right: 2px;
+ position: initial;
+}
+
+.impl-items .srclink, .impl .srclink {
+ flex-grow: 0;
+ /* Override header settings otherwise it's too bold */
+ font-size: 17px;
+ font-weight: normal;
+}
+
+.impl-items code, .impl code {
+ flex-grow: 1;
+}
+
+.impl-items h4, h4.impl, h3.impl {
+ display: flex;
+ flex-basis: 100%;
+ font-size: 16px;
+ margin-bottom: 12px;
+ /* Push the src link out to the right edge consistently */
+ justify-content: space-between;
+}
+
.variants_table {
width: 100%;
}
@@ -871,15 +900,6 @@
margin-left: 20px;
}
-.ghost {
- display: none;
-}
-
-.ghost + .since {
- position: initial;
- display: table-cell;
-}
-
.since + .srclink {
display: table-cell;
padding-left: 10px;
@@ -1119,7 +1139,7 @@
margin-left: 5px;
top: -5px;
left: 105%;
- z-index: 1;
+ z-index: 10;
}
.tooltip:hover .tooltiptext {
@@ -1361,8 +1381,9 @@
margin-top: 16px;
}
-.content > .methods > div.important-traits {
+.content > .methods > .method > div.important-traits {
position: absolute;
+ font-weight: 400;
left: -42px;
margin-top: 2px;
}
diff --git a/src/librustdoc/html/static/source-script.js b/src/librustdoc/html/static/source-script.js
index 0affe1c..c5d6fa1 100644
--- a/src/librustdoc/html/static/source-script.js
+++ b/src/librustdoc/html/static/source-script.js
@@ -137,5 +137,3 @@
main.insertBefore(sidebar, main.firstChild);
}
-
-createSourceSidebar();
diff --git a/src/librustdoc/html/static/themes/dark.css b/src/librustdoc/html/static/themes/dark.css
index 1390be7..52a3096 100644
--- a/src/librustdoc/html/static/themes/dark.css
+++ b/src/librustdoc/html/static/themes/dark.css
@@ -82,12 +82,6 @@
border-bottom-color: #ddd;
}
-:target { background: #494a3d; }
-
-:target > .in-band {
- background: #494a3d;
-}
-
.content .method .where,
.content .fn .where,
.content .where.fmt-newline {
@@ -252,7 +246,7 @@
color: #999;
}
-:target > code {
+:target > code, :target > .in-band {
background-color: #494a3d;
}
diff --git a/src/librustdoc/html/static/themes/light.css b/src/librustdoc/html/static/themes/light.css
index 2b04dd2..d20fea6 100644
--- a/src/librustdoc/html/static/themes/light.css
+++ b/src/librustdoc/html/static/themes/light.css
@@ -84,12 +84,6 @@
border-bottom-color: #ddd;
}
-:target { background: #FDFFD3; }
-
-:target > .in-band {
- background: #FDFFD3;
-}
-
.content .method .where,
.content .fn .where,
.content .where.fmt-newline {
@@ -247,7 +241,7 @@
color: #999;
}
-:target > code {
+:target > code, :target > .in-band {
background: #FDFFD3;
}
diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs
index 1b6d7e8..4bbc01d 100644
--- a/src/librustdoc/lib.rs
+++ b/src/librustdoc/lib.rs
@@ -341,6 +341,12 @@
"disable-per-crate-search",
"disables generating the crate selector on the search box")
}),
+ unstable("persist-doctests", |o| {
+ o.optopt("",
+ "persist-doctests",
+ "Directory to persist doctest executables into",
+ "PATH")
+ }),
]
}
diff --git a/src/librustdoc/markdown.rs b/src/librustdoc/markdown.rs
index da56194..65a96e9 100644
--- a/src/librustdoc/markdown.rs
+++ b/src/librustdoc/markdown.rs
@@ -142,7 +142,7 @@
options.libs, options.codegen_options, options.externs,
true, opts, options.maybe_sysroot, None,
Some(options.input),
- options.linker, options.edition);
+ options.linker, options.edition, options.persist_doctests);
collector.set_position(DUMMY_SP);
let codes = ErrorCodes::from(UnstableFeatures::from_environment().is_nightly_build());
let res = find_testable_code(&input_str, &mut collector, codes);
diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs
index 1f19fa2..0b9fbc8 100644
--- a/src/librustdoc/test.rs
+++ b/src/librustdoc/test.rs
@@ -6,7 +6,6 @@
use rustc_driver::driver::phase_2_configure_and_expand;
use rustc_metadata::cstore::CStore;
use rustc_metadata::dynamic_lib::DynamicLibrary;
-use rustc_resolve::MakeGlobMap;
use rustc::hir;
use rustc::hir::intravisit;
use rustc::session::{self, CompileIncomplete, config};
@@ -100,7 +99,6 @@
None,
"rustdoc-test",
None,
- MakeGlobMap::No,
|_| Ok(()),
).expect("phase_2_configure_and_expand aborted in rustdoc!")
};
@@ -122,7 +120,8 @@
Some(source_map),
None,
options.linker,
- options.edition
+ options.edition,
+ options.persist_doctests,
);
{
@@ -186,7 +185,8 @@
cg: CodegenOptions, externs: Externs,
should_panic: bool, no_run: bool, as_test_harness: bool,
compile_fail: bool, mut error_codes: Vec<String>, opts: &TestOptions,
- maybe_sysroot: Option<PathBuf>, linker: Option<PathBuf>, edition: Edition) {
+ maybe_sysroot: Option<PathBuf>, linker: Option<PathBuf>, edition: Edition,
+ persist_doctests: Option<PathBuf>) {
// The test harness wants its own `main` and top-level functions, so
// never wrap the test in `fn main() { ... }`.
let (test, line_offset) = make_test(test, Some(cratename), as_test_harness, opts);
@@ -251,6 +251,20 @@
let old = io::set_panic(Some(box Sink(data.clone())));
let _bomb = Bomb(data.clone(), old.unwrap_or(box io::stdout()));
+ enum DirState {
+ Temp(tempfile::TempDir),
+ Perm(PathBuf),
+ }
+
+ impl DirState {
+ fn path(&self) -> &std::path::Path {
+ match self {
+ DirState::Temp(t) => t.path(),
+ DirState::Perm(p) => p.as_path(),
+ }
+ }
+ }
+
let (libdir, outdir, compile_result) = driver::spawn_thread_pool(sessopts, |sessopts| {
let source_map = Lrc::new(SourceMap::new(sessopts.file_path_mapping()));
let emitter = errors::emitter::EmitterWriter::new(box Sink(data.clone()),
@@ -269,7 +283,26 @@
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
let outdir = Mutex::new(
- TempFileBuilder::new().prefix("rustdoctest").tempdir().expect("rustdoc needs a tempdir")
+ if let Some(mut path) = persist_doctests {
+ path.push(format!("{}_{}",
+ filename
+ .to_string()
+ .rsplit('/')
+ .next()
+ .unwrap()
+ .replace(".", "_"),
+ line)
+ );
+ std::fs::create_dir_all(&path)
+ .expect("Couldn't create directory for doctest executables");
+
+ DirState::Perm(path)
+ } else {
+ DirState::Temp(TempFileBuilder::new()
+ .prefix("rustdoctest")
+ .tempdir()
+ .expect("rustdoc needs a tempdir"))
+ }
);
let libdir = sess.target_filesearch(PathKind::All).get_lib_path();
let mut control = driver::CompileController::basic();
@@ -631,13 +664,15 @@
filename: Option<PathBuf>,
linker: Option<PathBuf>,
edition: Edition,
+ persist_doctests: Option<PathBuf>,
}
impl Collector {
pub fn new(cratename: String, cfgs: Vec<String>, libs: Vec<SearchPath>, cg: CodegenOptions,
externs: Externs, use_headers: bool, opts: TestOptions,
maybe_sysroot: Option<PathBuf>, source_map: Option<Lrc<SourceMap>>,
- filename: Option<PathBuf>, linker: Option<PathBuf>, edition: Edition) -> Collector {
+ filename: Option<PathBuf>, linker: Option<PathBuf>, edition: Edition,
+ persist_doctests: Option<PathBuf>) -> Collector {
Collector {
tests: Vec::new(),
names: Vec::new(),
@@ -654,6 +689,7 @@
filename,
linker,
edition,
+ persist_doctests,
}
}
@@ -697,6 +733,8 @@
let maybe_sysroot = self.maybe_sysroot.clone();
let linker = self.linker.clone();
let edition = config.edition.unwrap_or(self.edition);
+ let persist_doctests = self.persist_doctests.clone();
+
debug!("Creating test {}: {}", name, test);
self.tests.push(testing::TestDescAndFn {
desc: testing::TestDesc {
@@ -729,7 +767,8 @@
&opts,
maybe_sysroot,
linker,
- edition)
+ edition,
+ persist_doctests)
}))
} {
Ok(()) => (),
diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs
index 3c289596..362b457 100644
--- a/src/libserialize/json.rs
+++ b/src/libserialize/json.rs
@@ -1,4 +1,4 @@
-// Rust JSON serialization library
+// Rust JSON serialization library.
// Copyright (c) 2011 Google Inc.
#![forbid(non_camel_case_types)]
diff --git a/src/libstd/collections/hash/set.rs b/src/libstd/collections/hash/set.rs
index 9214590..c55dd04 100644
--- a/src/libstd/collections/hash/set.rs
+++ b/src/libstd/collections/hash/set.rs
@@ -410,9 +410,16 @@
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
pub fn intersection<'a>(&'a self, other: &'a HashSet<T, S>) -> Intersection<'a, T, S> {
- Intersection {
- iter: self.iter(),
- other,
+ if self.len() <= other.len() {
+ Intersection {
+ iter: self.iter(),
+ other,
+ }
+ } else {
+ Intersection {
+ iter: other.iter(),
+ other: self,
+ }
}
}
@@ -436,7 +443,15 @@
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
pub fn union<'a>(&'a self, other: &'a HashSet<T, S>) -> Union<'a, T, S> {
- Union { iter: self.iter().chain(other.difference(self)) }
+ if self.len() <= other.len() {
+ Union {
+ iter: self.iter().chain(other.difference(self)),
+ }
+ } else {
+ Union {
+ iter: other.iter().chain(self.difference(other)),
+ }
+ }
}
/// Returns the number of elements in the set.
@@ -584,7 +599,11 @@
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
pub fn is_disjoint(&self, other: &HashSet<T, S>) -> bool {
- self.iter().all(|v| !other.contains(v))
+ if self.len() <= other.len() {
+ self.iter().all(|v| !other.contains(v))
+ } else {
+ other.iter().all(|v| !self.contains(v))
+ }
}
/// Returns `true` if the set is a subset of another,
@@ -1494,6 +1513,7 @@
fn test_intersection() {
let mut a = HashSet::new();
let mut b = HashSet::new();
+ assert!(a.intersection(&b).next().is_none());
assert!(a.insert(11));
assert!(a.insert(1));
@@ -1518,6 +1538,22 @@
i += 1
}
assert_eq!(i, expected.len());
+
+ assert!(a.insert(9)); // make a bigger than b
+
+ i = 0;
+ for x in a.intersection(&b) {
+ assert!(expected.contains(x));
+ i += 1
+ }
+ assert_eq!(i, expected.len());
+
+ i = 0;
+ for x in b.intersection(&a) {
+ assert!(expected.contains(x));
+ i += 1
+ }
+ assert_eq!(i, expected.len());
}
#[test]
@@ -1573,11 +1609,11 @@
fn test_union() {
let mut a = HashSet::new();
let mut b = HashSet::new();
+ assert!(a.union(&b).next().is_none());
+ assert!(b.union(&a).next().is_none());
assert!(a.insert(1));
assert!(a.insert(3));
- assert!(a.insert(5));
- assert!(a.insert(9));
assert!(a.insert(11));
assert!(a.insert(16));
assert!(a.insert(19));
@@ -1597,6 +1633,23 @@
i += 1
}
assert_eq!(i, expected.len());
+
+ assert!(a.insert(9)); // make a bigger than b
+ assert!(a.insert(5));
+
+ i = 0;
+ for x in a.union(&b) {
+ assert!(expected.contains(x));
+ i += 1
+ }
+ assert_eq!(i, expected.len());
+
+ i = 0;
+ for x in b.union(&a) {
+ assert!(expected.contains(x));
+ i += 1
+ }
+ assert_eq!(i, expected.len());
}
#[test]
diff --git a/src/libstd/ffi/mod.rs b/src/libstd/ffi/mod.rs
index 62081e7..7a38f0e 100644
--- a/src/libstd/ffi/mod.rs
+++ b/src/libstd/ffi/mod.rs
@@ -169,7 +169,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
pub use core::ffi::VaList;
mod c_str;
diff --git a/src/libstd/fs.rs b/src/libstd/fs.rs
index 119b3f7..3538816 100644
--- a/src/libstd/fs.rs
+++ b/src/libstd/fs.rs
@@ -1121,7 +1121,9 @@
/// writing.
///
/// This operation does **not** modify the filesystem. To modify the
- /// filesystem use the `fs::set_permissions` function.
+ /// filesystem use the [`fs::set_permissions`] function.
+ ///
+ /// [`fs::set_permissions`]: fn.set_permissions.html
///
/// # Examples
///
@@ -1639,10 +1641,15 @@
///
/// The `dst` path will be a symbolic link pointing to the `src` path.
/// On Windows, this will be a file symlink, not a directory symlink;
-/// for this reason, the platform-specific `std::os::unix::fs::symlink`
-/// and `std::os::windows::fs::{symlink_file, symlink_dir}` should be
+/// for this reason, the platform-specific [`std::os::unix::fs::symlink`]
+/// and [`std::os::windows::fs::symlink_file`] or [`symlink_dir`] should be
/// used instead to make the intent explicit.
///
+/// [`std::os::unix::fs::symlink`]: ../os/unix/fs/fn.symlink.html
+/// [`std::os::windows::fs::symlink_file`]: ../os/windows/fs/fn.symlink_file.html
+/// [`symlink_dir`]: ../os/windows/fs/fn.symlink_dir.html
+///
+///
/// # Examples
///
/// ```no_run
@@ -1795,7 +1802,7 @@
/// * If any directory in the path specified by `path`
/// does not already exist and it could not be created otherwise. The specific
/// error conditions for when a directory is being created (after it is
-/// determined to not exist) are outlined by `fs::create_dir`.
+/// determined to not exist) are outlined by [`fs::create_dir`].
///
/// Notable exception is made for situations where any of the directories
/// specified in the `path` could not be created as it was being created concurrently.
@@ -1803,6 +1810,8 @@
/// concurrently from multiple threads or processes is guaranteed not to fail
/// due to a race condition with itself.
///
+/// [`fs::create_dir`]: fn.create_dir.html
+///
/// # Examples
///
/// ```no_run
@@ -1868,7 +1877,10 @@
///
/// # Errors
///
-/// See `file::remove_file` and `fs::remove_dir`.
+/// See [`fs::remove_file`] and [`fs::remove_dir`].
+///
+/// [`fs::remove_file`]: fn.remove_file.html
+/// [`fs::remove_dir`]: fn.remove_dir.html
///
/// # Examples
///
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index e220080..83db3f3 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -238,7 +238,7 @@
#![feature(c_variadic)]
#![feature(cfg_target_has_atomic)]
#![feature(cfg_target_thread_local)]
-#![feature(cfg_target_vendor)]
+#![cfg_attr(stage0, feature(cfg_target_vendor))]
#![feature(char_error_internals)]
#![feature(compiler_builtins_lib)]
#![feature(concat_idents)]
@@ -286,6 +286,7 @@
#![feature(staged_api)]
#![feature(stmt_expr_attributes)]
#![feature(str_internals)]
+#![feature(renamed_spin_loop)]
#![feature(rustc_private)]
#![feature(thread_local)]
#![feature(toowned_clone_into)]
diff --git a/src/libstd/memchr.rs b/src/libstd/memchr.rs
index b43a299..9f44c67 100644
--- a/src/libstd/memchr.rs
+++ b/src/libstd/memchr.rs
@@ -1,5 +1,4 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
/// A safe interface to `memchr`.
diff --git a/src/libstd/net/tcp.rs b/src/libstd/net/tcp.rs
index b75591e..86ecb10 100644
--- a/src/libstd/net/tcp.rs
+++ b/src/libstd/net/tcp.rs
@@ -1674,17 +1674,6 @@
}
#[test]
- fn connect_timeout_unroutable() {
- // this IP is unroutable, so connections should always time out,
- // provided the network is reachable to begin with.
- let addr = "10.255.255.1:80".parse().unwrap();
- let e = TcpStream::connect_timeout(&addr, Duration::from_millis(250)).unwrap_err();
- assert!(e.kind() == io::ErrorKind::TimedOut ||
- e.kind() == io::ErrorKind::Other,
- "bad error: {} {:?}", e, e.kind());
- }
-
- #[test]
fn connect_timeout_unbound() {
// bind and drop a socket to track down a "probably unassigned" port
let socket = TcpListener::bind("127.0.0.1:0").unwrap();
diff --git a/src/libstd/prelude/mod.rs b/src/libstd/prelude/mod.rs
index ec8318f..bf689ba 100644
--- a/src/libstd/prelude/mod.rs
+++ b/src/libstd/prelude/mod.rs
@@ -44,8 +44,8 @@
//! The current version of the prelude (version 1) lives in
//! [`std::prelude::v1`], and re-exports the following.
//!
-//! * [`std::marker`]::{[`Copy`], [`Send`], [`Sized`], [`Sync`]}. The marker
-//! traits indicate fundamental properties of types.
+//! * [`std::marker`]::{[`Copy`], [`Send`], [`Sized`], [`Sync`], [`Unpin`]}. The
+//! marker traits indicate fundamental properties of types.
//! * [`std::ops`]::{[`Drop`], [`Fn`], [`FnMut`], [`FnOnce`]}. Various
//! operations for both destructors and overloading `()`.
//! * [`std::mem`]::[`drop`][`mem::drop`], a convenience function for explicitly
@@ -108,6 +108,7 @@
//! [`Sync`]: ../marker/trait.Sync.html
//! [`ToOwned`]: ../borrow/trait.ToOwned.html
//! [`ToString`]: ../string/trait.ToString.html
+//! [`Unpin`]: ../marker/trait.Unpin.html
//! [`Vec`]: ../vec/struct.Vec.html
//! [`Clone::clone`]: ../clone/trait.Clone.html#tymethod.clone
//! [`mem::drop`]: ../mem/fn.drop.html
diff --git a/src/libstd/sys/cloudabi/abi/cloudabi.rs b/src/libstd/sys/cloudabi/abi/cloudabi.rs
index aac1804..0bf8c2d 100644
--- a/src/libstd/sys/cloudabi/abi/cloudabi.rs
+++ b/src/libstd/sys/cloudabi/abi/cloudabi.rs
@@ -1,4 +1,4 @@
-// Copyright (c) 2016-2017 Nuxi (https://nuxi.nl/) and contributors.
+// Copyright (c) 2016-2017 Nuxi <https://nuxi.nl/> and contributors.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
diff --git a/src/libstd/sys/redox/memchr.rs b/src/libstd/sys/redox/memchr.rs
index 409d3a7..d2bfcce 100644
--- a/src/libstd/sys/redox/memchr.rs
+++ b/src/libstd/sys/redox/memchr.rs
@@ -1,5 +1,4 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
pub use core::slice::memchr::{memchr, memrchr};
diff --git a/src/libstd/sys/sgx/abi/entry.S b/src/libstd/sys/sgx/abi/entry.S
index 8dad6ee..ac7f95d 100644
--- a/src/libstd/sys/sgx/abi/entry.S
+++ b/src/libstd/sys/sgx/abi/entry.S
@@ -4,6 +4,16 @@
.global IMAGE_BASE
IMAGE_BASE:
+.section ".note.x86_64-fortanix-unknown-sgx", "", @note
+ .align 4
+ .long 1f - 0f /* name length (not including padding) */
+ .long 3f - 2f /* desc length (not including padding) */
+ .long 1 /* type = NT_VERSION */
+0: .asciz "toolchain-version" /* name */
+1: .align 4
+2: .long 0 /* desc - toolchain version number, 32-bit LE */
+3: .align 4
+
.section .rodata
/* The XSAVE area needs to be a large chunk of readable memory, but since we are */
/* going to restore everything to its initial state (XSTATE_BV=0), only certain */
diff --git a/src/libstd/sys/sgx/time.rs b/src/libstd/sys/sgx/time.rs
index 10fe72d..407fe72 100644
--- a/src/libstd/sys/sgx/time.rs
+++ b/src/libstd/sys/sgx/time.rs
@@ -25,6 +25,14 @@
pub fn checked_sub_duration(&self, other: &Duration) -> Option<Instant> {
Some(Instant(self.0.checked_sub(*other)?))
}
+
+ pub fn actually_monotonic() -> bool {
+ false
+ }
+
+ pub const fn zero() -> Instant {
+ Instant(Duration::from_secs(0))
+ }
}
impl SystemTime {
diff --git a/src/libstd/sys/sgx/waitqueue.rs b/src/libstd/sys/sgx/waitqueue.rs
index a473820..51c00a1 100644
--- a/src/libstd/sys/sgx/waitqueue.rs
+++ b/src/libstd/sys/sgx/waitqueue.rs
@@ -456,6 +456,7 @@
}
}
+ /// Lock the Mutex or return false.
pub macro try_lock_or_false {
($e:expr) => {
if let Some(v) = $e.try_lock() {
diff --git a/src/libstd/sys/unix/ext/fs.rs b/src/libstd/sys/unix/ext/fs.rs
index 7930dd0..e962d09 100644
--- a/src/libstd/sys/unix/ext/fs.rs
+++ b/src/libstd/sys/unix/ext/fs.rs
@@ -84,7 +84,6 @@
/// # Examples
///
/// ```no_run
- /// #![feature(rw_exact_all_at)]
/// use std::io;
/// use std::fs::File;
/// use std::os::unix::prelude::FileExt;
@@ -99,7 +98,7 @@
/// Ok(())
/// }
/// ```
- #[unstable(feature = "rw_exact_all_at", issue = "51984")]
+ #[stable(feature = "rw_exact_all_at", since = "1.33.0")]
fn read_exact_at(&self, mut buf: &mut [u8], mut offset: u64) -> io::Result<()> {
while !buf.is_empty() {
match self.read_at(buf, offset) {
@@ -181,7 +180,6 @@
/// # Examples
///
/// ```no_run
- /// #![feature(rw_exact_all_at)]
/// use std::fs::File;
/// use std::io;
/// use std::os::unix::prelude::FileExt;
@@ -194,7 +192,7 @@
/// Ok(())
/// }
/// ```
- #[unstable(feature = "rw_exact_all_at", issue = "51984")]
+ #[stable(feature = "rw_exact_all_at", since = "1.33.0")]
fn write_all_at(&self, mut buf: &[u8], mut offset: u64) -> io::Result<()> {
while !buf.is_empty() {
match self.write_at(buf, offset) {
diff --git a/src/libstd/sys/unix/memchr.rs b/src/libstd/sys/unix/memchr.rs
index 05bfecd..ec04a22 100644
--- a/src/libstd/sys/unix/memchr.rs
+++ b/src/libstd/sys/unix/memchr.rs
@@ -1,5 +1,4 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
pub fn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {
diff --git a/src/libstd/sys/windows/memchr.rs b/src/libstd/sys/windows/memchr.rs
index 87b1aa2..b9e5bcc 100644
--- a/src/libstd/sys/windows/memchr.rs
+++ b/src/libstd/sys/windows/memchr.rs
@@ -1,6 +1,5 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
-// Fallback memchr is fastest on windows
+// Fallback memchr is fastest on Windows.
pub use core::slice::memchr::{memchr, memrchr};
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index 1e91f4a..bbcaaac 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -853,13 +853,13 @@
pub type SpannedIdent = Spanned<Ident>;
-#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
+#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
pub enum BlockCheckMode {
Default,
Unsafe(UnsafeSource),
}
-#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
+#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
pub enum UnsafeSource {
CompilerGenerated,
UserProvided,
diff --git a/src/libsyntax/attr/builtin.rs b/src/libsyntax/attr/builtin.rs
index 98585dc..15e4804 100644
--- a/src/libsyntax/attr/builtin.rs
+++ b/src/libsyntax/attr/builtin.rs
@@ -436,9 +436,6 @@
}
_ => unreachable!()
}
- } else {
- span_err!(diagnostic, attr.span(), E0548, "incorrect stability attribute type");
- continue
}
}
diff --git a/src/libsyntax/attr/mod.rs b/src/libsyntax/attr/mod.rs
index 0f8ca5e..f6d7590 100644
--- a/src/libsyntax/attr/mod.rs
+++ b/src/libsyntax/attr/mod.rs
@@ -481,28 +481,33 @@
{
// FIXME: Share code with `parse_path`.
let ident = match tokens.next() {
- Some(TokenTree::Token(span, Token::Ident(ident, _))) => {
- if let Some(TokenTree::Token(_, Token::ModSep)) = tokens.peek() {
- let mut segments = vec![PathSegment::from_ident(ident.with_span_pos(span))];
- tokens.next();
- loop {
- if let Some(TokenTree::Token(span,
- Token::Ident(ident, _))) = tokens.next() {
- segments.push(PathSegment::from_ident(ident.with_span_pos(span)));
- } else {
- return None;
- }
- if let Some(TokenTree::Token(_, Token::ModSep)) = tokens.peek() {
- tokens.next();
- } else {
- break;
- }
+ Some(TokenTree::Token(span, token @ Token::Ident(..))) |
+ Some(TokenTree::Token(span, token @ Token::ModSep)) => 'arm: {
+ let mut segments = if let Token::Ident(ident, _) = token {
+ if let Some(TokenTree::Token(_, Token::ModSep)) = tokens.peek() {
+ tokens.next();
+ vec![PathSegment::from_ident(ident.with_span_pos(span))]
+ } else {
+ break 'arm Path::from_ident(ident.with_span_pos(span));
}
- let span = span.with_hi(segments.last().unwrap().ident.span.hi());
- Path { span, segments }
} else {
- Path::from_ident(ident.with_span_pos(span))
+ vec![PathSegment::path_root(span)]
+ };
+ loop {
+ if let Some(TokenTree::Token(span,
+ Token::Ident(ident, _))) = tokens.next() {
+ segments.push(PathSegment::from_ident(ident.with_span_pos(span)));
+ } else {
+ return None;
+ }
+ if let Some(TokenTree::Token(_, Token::ModSep)) = tokens.peek() {
+ tokens.next();
+ } else {
+ break;
+ }
}
+ let span = span.with_hi(segments.last().unwrap().ident.span.hi());
+ Path { span, segments }
}
Some(TokenTree::Token(_, Token::Interpolated(ref nt))) => match nt.0 {
token::Nonterminal::NtIdent(ident, _) => Path::from_ident(ident),
diff --git a/src/libsyntax/config.rs b/src/libsyntax/config.rs
index a987f53..50e0056 100644
--- a/src/libsyntax/config.rs
+++ b/src/libsyntax/config.rs
@@ -166,12 +166,9 @@
true
};
- let meta_item = if let Some(meta_item) = attr.meta() {
- meta_item
- } else {
- // Not a well-formed meta-item. Why? We don't know.
- return error(attr.span, "`cfg` is not a well-formed meta-item",
- "#[cfg(/* predicate */)]");
+ let meta_item = match attr.parse_meta(self.sess) {
+ Ok(meta_item) => meta_item,
+ Err(mut err) => { err.emit(); return true; }
};
let nested_meta_items = if let Some(nested_meta_items) = meta_item.meta_item_list() {
nested_meta_items
diff --git a/src/libsyntax/diagnostic_list.rs b/src/libsyntax/diagnostic_list.rs
index 548bf8b..2c367f1 100644
--- a/src/libsyntax/diagnostic_list.rs
+++ b/src/libsyntax/diagnostic_list.rs
@@ -389,12 +389,12 @@
E0545, // incorrect 'issue'
E0546, // missing 'feature'
E0547, // missing 'issue'
- E0548, // incorrect stability attribute type
+// E0548, // replaced with a generic attribute input check
E0549, // rustc_deprecated attribute must be paired with either stable or unstable attribute
E0550, // multiple deprecated attributes
E0551, // incorrect meta item
E0553, // multiple rustc_const_unstable attributes
- E0555, // malformed feature attribute, expected #![feature(...)]
+// E0555, // replaced with a generic attribute input check
E0556, // malformed feature, expected just one word
E0584, // file for module `..` found at both .. and ..
E0629, // missing 'feature' (rustc_const_unstable)
diff --git a/src/libsyntax/diagnostics/plugin.rs b/src/libsyntax/diagnostics/plugin.rs
index 71028ef..fa6b825 100644
--- a/src/libsyntax/diagnostics/plugin.rs
+++ b/src/libsyntax/diagnostics/plugin.rs
@@ -117,16 +117,18 @@
));
}
});
- let sym = Ident::with_empty_ctxt(Symbol::gensym(&format!(
- "__register_diagnostic_{}", code
- )));
+
+ let span = span.apply_mark(ecx.current_expansion.mark);
+
+ let sym = Ident::new(Symbol::gensym(&format!("__register_diagnostic_{}", code)), span);
+
MacEager::items(smallvec![
ecx.item_mod(
span,
span,
sym,
- Vec::new(),
- Vec::new()
+ vec![],
+ vec![],
)
])
}
diff --git a/src/libsyntax/early_buffered_lints.rs b/src/libsyntax/early_buffered_lints.rs
index 204e076..cf9671a 100644
--- a/src/libsyntax/early_buffered_lints.rs
+++ b/src/libsyntax/early_buffered_lints.rs
@@ -11,6 +11,7 @@
pub enum BufferedEarlyLintId {
/// Usage of `?` as a macro separator is deprecated.
QuestionMarkMacroSep,
+ IllFormedAttributeInput,
}
/// Stores buffered lint info which can later be passed to `librustc`.
diff --git a/src/libsyntax/ext/derive.rs b/src/libsyntax/ext/derive.rs
index d5a51bc..7ef09ce 100644
--- a/src/libsyntax/ext/derive.rs
+++ b/src/libsyntax/ext/derive.rs
@@ -15,6 +15,11 @@
if attr.path != "derive" {
return true;
}
+ if !attr.is_meta_item_list() {
+ cx.span_err(attr.span,
+ "attribute must be of the form `#[derive(Trait1, Trait2, ...)]`");
+ return false;
+ }
match attr.parse_list(cx.parse_sess,
|parser| parser.parse_path_allowing_meta(PathStyle::Mod)) {
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs
index 24202ca..9a129e7 100644
--- a/src/libsyntax/ext/tt/macro_rules.rs
+++ b/src/libsyntax/ext/tt/macro_rules.rs
@@ -435,7 +435,8 @@
match *seq_tt {
TokenTree::MetaVarDecl(_, _, id) => id.name == "vis",
TokenTree::Sequence(_, ref sub_seq) =>
- sub_seq.op == quoted::KleeneOp::ZeroOrMore,
+ sub_seq.op == quoted::KleeneOp::ZeroOrMore
+ || sub_seq.op == quoted::KleeneOp::ZeroOrOne,
_ => false,
}
}) {
@@ -543,7 +544,10 @@
}
// Reverse scan: Sequence comes before `first`.
- if subfirst.maybe_empty || seq_rep.op == quoted::KleeneOp::ZeroOrMore {
+ if subfirst.maybe_empty
+ || seq_rep.op == quoted::KleeneOp::ZeroOrMore
+ || seq_rep.op == quoted::KleeneOp::ZeroOrOne
+ {
// If sequence is potentially empty, then
// union them (preserving first emptiness).
first.add_all(&TokenSet { maybe_empty: true, ..subfirst });
@@ -591,8 +595,10 @@
assert!(first.maybe_empty);
first.add_all(subfirst);
- if subfirst.maybe_empty ||
- seq_rep.op == quoted::KleeneOp::ZeroOrMore {
+ if subfirst.maybe_empty
+ || seq_rep.op == quoted::KleeneOp::ZeroOrMore
+ || seq_rep.op == quoted::KleeneOp::ZeroOrOne
+ {
// continue scanning for more first
// tokens, but also make sure we
// restore empty-tracking state
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index 9b4231d..9b54e8f 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -19,15 +19,16 @@
use rustc_target::spec::abi::Abi;
use ast::{self, NodeId, PatKind, RangeEnd};
use attr;
+use early_buffered_lints::BufferedEarlyLintId;
use source_map::Spanned;
use edition::{ALL_EDITIONS, Edition};
use syntax_pos::{Span, DUMMY_SP};
use errors::{DiagnosticBuilder, Handler};
use visit::{self, FnKind, Visitor};
use parse::ParseSess;
-use symbol::{keywords, Symbol};
+use symbol::Symbol;
-use std::{env};
+use std::env;
macro_rules! set {
($field: ident) => {{
@@ -244,9 +245,6 @@
// rustc internal
(active, omit_gdb_pretty_printer_section, "1.5.0", None, None),
- // Allows `cfg(target_vendor = "...")`.
- (active, cfg_target_vendor, "1.5.0", Some(29718), None),
-
// Allows attributes on expressions and non-item statements.
(active, stmt_expr_attributes, "1.6.0", Some(15701), None),
@@ -375,9 +373,6 @@
// Generic associated types (RFC 1598)
(active, generic_associated_types, "1.23.0", Some(44265), None),
- // `extern` in paths
- (active, extern_in_paths, "1.23.0", Some(55600), None),
-
// Infer static outlives requirements (RFC 2093).
(active, infer_static_outlives_requirements, "1.26.0", Some(54185), None),
@@ -506,6 +501,9 @@
// Allows the use of `#[derive(Anything)]` as sugar for `#[derive_Anything]`.
(removed, custom_derive, "1.0.0", Some(29644), None,
Some("subsumed by `#[proc_macro_derive]`")),
+ // Paths of the form: `extern::foo::bar`
+ (removed, extern_in_paths, "1.33.0", Some(55600), None,
+ Some("subsumed by `::foo::bar` paths")),
);
declare_features! (
@@ -686,6 +684,8 @@
(accepted, if_while_or_patterns, "1.33.0", Some(48215), None),
// Allows `use x::y;` to search `x` in the current scope.
(accepted, uniform_paths, "1.32.0", Some(53130), None),
+ // Allows `cfg(target_vendor = "...")`.
+ (accepted, cfg_target_vendor, "1.33.0", Some(29718), None),
);
// If you change this, please modify `src/doc/unstable-book` as well. You must
@@ -716,6 +716,47 @@
Ungated,
}
+/// A template that the attribute input must match.
+/// Only top-level shape (`#[attr]` vs `#[attr(...)]` vs `#[attr = ...]`) is considered now.
+#[derive(Clone, Copy)]
+pub struct AttributeTemplate {
+ word: bool,
+ list: Option<&'static str>,
+ name_value_str: Option<&'static str>,
+}
+
+impl AttributeTemplate {
+ /// Check that the given meta-item is compatible with this template.
+ fn compatible(&self, meta_item_kind: &ast::MetaItemKind) -> bool {
+ match meta_item_kind {
+ ast::MetaItemKind::Word => self.word,
+ ast::MetaItemKind::List(..) => self.list.is_some(),
+ ast::MetaItemKind::NameValue(lit) if lit.node.is_str() => self.name_value_str.is_some(),
+ ast::MetaItemKind::NameValue(..) => false,
+ }
+ }
+}
+
+/// A convenience macro for constructing attribute templates.
+/// E.g. `template!(Word, List: "description")` means that the attribute
+/// supports forms `#[attr]` and `#[attr(description)]`.
+macro_rules! template {
+ (Word) => { template!(@ true, None, None) };
+ (List: $descr: expr) => { template!(@ false, Some($descr), None) };
+ (NameValueStr: $descr: expr) => { template!(@ false, None, Some($descr)) };
+ (Word, List: $descr: expr) => { template!(@ true, Some($descr), None) };
+ (Word, NameValueStr: $descr: expr) => { template!(@ true, None, Some($descr)) };
+ (List: $descr1: expr, NameValueStr: $descr2: expr) => {
+ template!(@ false, Some($descr1), Some($descr2))
+ };
+ (Word, List: $descr1: expr, NameValueStr: $descr2: expr) => {
+ template!(@ true, Some($descr1), Some($descr2))
+ };
+ (@ $word: expr, $list: expr, $name_value_str: expr) => { AttributeTemplate {
+ word: $word, list: $list, name_value_str: $name_value_str
+ } };
+}
+
impl AttributeGate {
fn is_deprecated(&self) -> bool {
match *self {
@@ -753,225 +794,241 @@
}}
}
-pub fn deprecated_attributes() -> Vec<&'static (&'static str, AttributeType, AttributeGate)> {
- BUILTIN_ATTRIBUTES.iter().filter(|a| a.2.is_deprecated()).collect()
+pub fn deprecated_attributes() -> Vec<&'static (&'static str, AttributeType,
+ AttributeTemplate, AttributeGate)> {
+ BUILTIN_ATTRIBUTES.iter().filter(|(.., gate)| gate.is_deprecated()).collect()
}
pub fn is_builtin_attr_name(name: ast::Name) -> bool {
- BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, _, _)| name == builtin_name)
+ BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, ..)| name == builtin_name)
}
pub fn is_builtin_attr(attr: &ast::Attribute) -> bool {
- BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, _, _)| attr.path == builtin_name)
+ BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, ..)| attr.path == builtin_name)
}
// Attributes that have a special meaning to rustc or rustdoc
-pub const BUILTIN_ATTRIBUTES: &[(&str, AttributeType, AttributeGate)] = &[
+pub const BUILTIN_ATTRIBUTES: &[(&str, AttributeType, AttributeTemplate, AttributeGate)] = &[
// Normal attributes
- ("warn", Normal, Ungated),
- ("allow", Normal, Ungated),
- ("forbid", Normal, Ungated),
- ("deny", Normal, Ungated),
+ ("warn", Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), Ungated),
+ ("allow", Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), Ungated),
+ ("forbid", Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), Ungated),
+ ("deny", Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), Ungated),
- ("macro_use", Normal, Ungated),
- ("macro_export", Normal, Ungated),
- ("plugin_registrar", Normal, Ungated),
+ ("macro_use", Normal, template!(Word, List: "name1, name2, ..."), Ungated),
+ ("macro_export", Normal, template!(Word, List: "local_inner_macros"), Ungated),
+ ("plugin_registrar", Normal, template!(Word), Ungated),
- ("cfg", Normal, Ungated),
- ("cfg_attr", Normal, Ungated),
- ("main", Normal, Ungated),
- ("start", Normal, Ungated),
- ("repr", Normal, Ungated),
- ("path", Normal, Ungated),
- ("abi", Normal, Ungated),
- ("automatically_derived", Normal, Ungated),
- ("no_mangle", Normal, Ungated),
- ("no_link", Normal, Ungated),
- ("derive", Normal, Ungated),
- ("should_panic", Normal, Ungated),
- ("ignore", Normal, Ungated),
- ("no_implicit_prelude", Normal, Ungated),
- ("reexport_test_harness_main", Normal, Ungated),
- ("link_args", Normal, Gated(Stability::Unstable,
+ ("cfg", Normal, template!(List: "predicate"), Ungated),
+ ("cfg_attr", Normal, template!(List: "predicate, attr1, attr2, ..."), Ungated),
+ ("main", Normal, template!(Word), Ungated),
+ ("start", Normal, template!(Word), Ungated),
+ ("repr", Normal, template!(List: "C, packed, ..."), Ungated),
+ ("path", Normal, template!(NameValueStr: "file"), Ungated),
+ ("automatically_derived", Normal, template!(Word), Ungated),
+ ("no_mangle", Normal, template!(Word), Ungated),
+ ("no_link", Normal, template!(Word), Ungated),
+ ("derive", Normal, template!(List: "Trait1, Trait2, ..."), Ungated),
+ ("should_panic", Normal, template!(Word, List: r#"expected = "reason"#, NameValueStr: "reason"),
+ Ungated),
+ ("ignore", Normal, template!(Word, NameValueStr: "reason"), Ungated),
+ ("no_implicit_prelude", Normal, template!(Word), Ungated),
+ ("reexport_test_harness_main", Normal, template!(NameValueStr: "name"), Ungated),
+ ("link_args", Normal, template!(NameValueStr: "args"), Gated(Stability::Unstable,
"link_args",
"the `link_args` attribute is experimental and not \
portable across platforms, it is recommended to \
use `#[link(name = \"foo\")] instead",
cfg_fn!(link_args))),
- ("macro_escape", Normal, Ungated),
+ ("macro_escape", Normal, template!(Word), Ungated),
// RFC #1445.
- ("structural_match", Whitelisted, Gated(Stability::Unstable,
+ ("structural_match", Whitelisted, template!(Word), Gated(Stability::Unstable,
"structural_match",
"the semantics of constant patterns is \
not yet settled",
cfg_fn!(structural_match))),
// RFC #2008
- ("non_exhaustive", Whitelisted, Gated(Stability::Unstable,
+ ("non_exhaustive", Whitelisted, template!(Word), Gated(Stability::Unstable,
"non_exhaustive",
"non exhaustive is an experimental feature",
cfg_fn!(non_exhaustive))),
// RFC #1268
- ("marker", Normal, Gated(Stability::Unstable,
+ ("marker", Normal, template!(Word), Gated(Stability::Unstable,
"marker_trait_attr",
"marker traits is an experimental feature",
cfg_fn!(marker_trait_attr))),
- ("plugin", CrateLevel, Gated(Stability::Unstable,
+ ("plugin", CrateLevel, template!(List: "name|name(args)"), Gated(Stability::Unstable,
"plugin",
"compiler plugins are experimental \
and possibly buggy",
cfg_fn!(plugin))),
- ("no_std", CrateLevel, Ungated),
- ("no_core", CrateLevel, Gated(Stability::Unstable,
+ ("no_std", CrateLevel, template!(Word), Ungated),
+ ("no_core", CrateLevel, template!(Word), Gated(Stability::Unstable,
"no_core",
"no_core is experimental",
cfg_fn!(no_core))),
- ("lang", Normal, Gated(Stability::Unstable,
+ ("lang", Normal, template!(NameValueStr: "name"), Gated(Stability::Unstable,
"lang_items",
"language items are subject to change",
cfg_fn!(lang_items))),
- ("linkage", Whitelisted, Gated(Stability::Unstable,
+ ("linkage", Whitelisted, template!(NameValueStr: "external|internal|..."),
+ Gated(Stability::Unstable,
"linkage",
"the `linkage` attribute is experimental \
and not portable across platforms",
cfg_fn!(linkage))),
- ("thread_local", Whitelisted, Gated(Stability::Unstable,
+ ("thread_local", Whitelisted, template!(Word), Gated(Stability::Unstable,
"thread_local",
"`#[thread_local]` is an experimental feature, and does \
not currently handle destructors.",
cfg_fn!(thread_local))),
- ("rustc_on_unimplemented", Normal, Gated(Stability::Unstable,
+ ("rustc_on_unimplemented", Normal, template!(List:
+ r#"/*opt*/ message = "...", /*opt*/ label = "...", /*opt*/ note = "...""#,
+ NameValueStr: "message"),
+ Gated(Stability::Unstable,
"on_unimplemented",
"the `#[rustc_on_unimplemented]` attribute \
is an experimental feature",
cfg_fn!(on_unimplemented))),
- ("rustc_const_unstable", Normal, Gated(Stability::Unstable,
+ ("rustc_const_unstable", Normal, template!(List: r#"feature = "name""#),
+ Gated(Stability::Unstable,
"rustc_const_unstable",
"the `#[rustc_const_unstable]` attribute \
is an internal feature",
cfg_fn!(rustc_const_unstable))),
- ("global_allocator", Normal, Ungated),
- ("default_lib_allocator", Whitelisted, Gated(Stability::Unstable,
+ ("global_allocator", Normal, template!(Word), Ungated),
+ ("default_lib_allocator", Whitelisted, template!(Word), Gated(Stability::Unstable,
"allocator_internals",
"the `#[default_lib_allocator]` \
attribute is an experimental feature",
cfg_fn!(allocator_internals))),
- ("needs_allocator", Normal, Gated(Stability::Unstable,
+ ("needs_allocator", Normal, template!(Word), Gated(Stability::Unstable,
"allocator_internals",
"the `#[needs_allocator]` \
attribute is an experimental \
feature",
cfg_fn!(allocator_internals))),
- ("panic_runtime", Whitelisted, Gated(Stability::Unstable,
+ ("panic_runtime", Whitelisted, template!(Word), Gated(Stability::Unstable,
"panic_runtime",
"the `#[panic_runtime]` attribute is \
an experimental feature",
cfg_fn!(panic_runtime))),
- ("needs_panic_runtime", Whitelisted, Gated(Stability::Unstable,
+ ("needs_panic_runtime", Whitelisted, template!(Word), Gated(Stability::Unstable,
"needs_panic_runtime",
"the `#[needs_panic_runtime]` \
attribute is an experimental \
feature",
cfg_fn!(needs_panic_runtime))),
- ("rustc_outlives", Normal, Gated(Stability::Unstable,
+ ("rustc_outlives", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_outlives]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_variance", Normal, Gated(Stability::Unstable,
+ ("rustc_variance", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_variance]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_regions", Normal, Gated(Stability::Unstable,
+ ("rustc_regions", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_regions]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_error", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_error", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_error]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_dump_user_substs", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_dump_user_substs", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_if_this_changed", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_if_this_changed", Whitelisted, template!(Word, List: "DepNode"),
+ Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_if_this_changed]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_then_this_would_need", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_then_this_would_need", Whitelisted, template!(List: "DepNode"),
+ Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_if_this_changed]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_dirty", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_dirty", Whitelisted, template!(List: r#"cfg = "...", /*opt*/ label = "...",
+ /*opt*/ except = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_dirty]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_clean", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_clean", Whitelisted, template!(List: r#"cfg = "...", /*opt*/ label = "...",
+ /*opt*/ except = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_clean]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_partition_reused", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_partition_reused", Whitelisted, template!(List: r#"cfg = "...", module = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_partition_codegened", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_partition_codegened", Whitelisted, template!(List: r#"cfg = "...", module = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_expected_cgu_reuse", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_expected_cgu_reuse", Whitelisted, template!(List: r#"cfg = "...", module = "...",
+ kind = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_synthetic", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_synthetic", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_symbol_name", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_symbol_name", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"internal rustc attributes will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_item_path", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_item_path", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"internal rustc attributes will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_mir", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_mir", Whitelisted, template!(List: "arg1, arg2, ..."), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_mir]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_inherit_overflow_checks", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_inherit_overflow_checks", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_inherit_overflow_checks]` \
attribute is just used to control \
@@ -980,41 +1037,35 @@
across crates and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_dump_program_clauses", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_dump_program_clauses", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_dump_program_clauses]` \
attribute is just used for rustc unit \
tests and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_test_marker", Normal, Gated(Stability::Unstable,
+ ("rustc_test_marker", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_test_marker]` attribute \
is used internally to track tests",
cfg_fn!(rustc_attrs))),
- ("rustc_transparent_macro", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_transparent_macro", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"used internally for testing macro hygiene",
cfg_fn!(rustc_attrs))),
-
- // RFC #2094
- ("nll", Whitelisted, Gated(Stability::Unstable,
- "nll",
- "Non lexical lifetimes",
- cfg_fn!(nll))),
- ("compiler_builtins", Whitelisted, Gated(Stability::Unstable,
+ ("compiler_builtins", Whitelisted, template!(Word), Gated(Stability::Unstable,
"compiler_builtins",
"the `#[compiler_builtins]` attribute is used to \
identify the `compiler_builtins` crate which \
contains compiler-rt intrinsics and will never be \
stable",
cfg_fn!(compiler_builtins))),
- ("sanitizer_runtime", Whitelisted, Gated(Stability::Unstable,
+ ("sanitizer_runtime", Whitelisted, template!(Word), Gated(Stability::Unstable,
"sanitizer_runtime",
"the `#[sanitizer_runtime]` attribute is used to \
identify crates that contain the runtime of a \
sanitizer and will never be stable",
cfg_fn!(sanitizer_runtime))),
- ("profiler_runtime", Whitelisted, Gated(Stability::Unstable,
+ ("profiler_runtime", Whitelisted, template!(Word), Gated(Stability::Unstable,
"profiler_runtime",
"the `#[profiler_runtime]` attribute is used to \
identify the `profiler_builtins` crate which \
@@ -1022,55 +1073,58 @@
stable",
cfg_fn!(profiler_runtime))),
- ("allow_internal_unstable", Normal, Gated(Stability::Unstable,
+ ("allow_internal_unstable", Normal, template!(Word), Gated(Stability::Unstable,
"allow_internal_unstable",
EXPLAIN_ALLOW_INTERNAL_UNSTABLE,
cfg_fn!(allow_internal_unstable))),
- ("allow_internal_unsafe", Normal, Gated(Stability::Unstable,
+ ("allow_internal_unsafe", Normal, template!(Word), Gated(Stability::Unstable,
"allow_internal_unsafe",
EXPLAIN_ALLOW_INTERNAL_UNSAFE,
cfg_fn!(allow_internal_unsafe))),
- ("fundamental", Whitelisted, Gated(Stability::Unstable,
+ ("fundamental", Whitelisted, template!(Word), Gated(Stability::Unstable,
"fundamental",
"the `#[fundamental]` attribute \
is an experimental feature",
cfg_fn!(fundamental))),
- ("proc_macro_derive", Normal, Ungated),
+ ("proc_macro_derive", Normal, template!(List: "TraitName, \
+ /*opt*/ attributes(name1, name2, ...)"),
+ Ungated),
- ("rustc_copy_clone_marker", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_copy_clone_marker", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"internal implementation detail",
cfg_fn!(rustc_attrs))),
// FIXME: #14408 whitelist docs since rustdoc looks at them
- ("doc", Whitelisted, Ungated),
+ ("doc", Whitelisted, template!(List: "hidden|inline|...", NameValueStr: "string"), Ungated),
// FIXME: #14406 these are processed in codegen, which happens after the
// lint pass
- ("cold", Whitelisted, Ungated),
- ("naked", Whitelisted, Gated(Stability::Unstable,
+ ("cold", Whitelisted, template!(Word), Ungated),
+ ("naked", Whitelisted, template!(Word), Gated(Stability::Unstable,
"naked_functions",
"the `#[naked]` attribute \
is an experimental feature",
cfg_fn!(naked_functions))),
- ("target_feature", Whitelisted, Ungated),
- ("export_name", Whitelisted, Ungated),
- ("inline", Whitelisted, Ungated),
- ("link", Whitelisted, Ungated),
- ("link_name", Whitelisted, Ungated),
- ("link_section", Whitelisted, Ungated),
- ("no_builtins", Whitelisted, Ungated),
- ("no_mangle", Whitelisted, Ungated),
- ("no_debug", Whitelisted, Gated(
+ ("target_feature", Whitelisted, template!(List: r#"enable = "name""#), Ungated),
+ ("export_name", Whitelisted, template!(NameValueStr: "name"), Ungated),
+ ("inline", Whitelisted, template!(Word, List: "always|never"), Ungated),
+ ("link", Whitelisted, template!(List: r#"name = "...", /*opt*/ kind = "dylib|static|...",
+ /*opt*/ cfg = "...""#), Ungated),
+ ("link_name", Whitelisted, template!(NameValueStr: "name"), Ungated),
+ ("link_section", Whitelisted, template!(NameValueStr: "name"), Ungated),
+ ("no_builtins", Whitelisted, template!(Word), Ungated),
+ ("no_mangle", Whitelisted, template!(Word), Ungated),
+ ("no_debug", Whitelisted, template!(Word), Gated(
Stability::Deprecated("https://github.com/rust-lang/rust/issues/29721", None),
"no_debug",
"the `#[no_debug]` attribute was an experimental feature that has been \
deprecated due to lack of demand",
cfg_fn!(no_debug))),
- ("omit_gdb_pretty_printer_section", Whitelisted, Gated(Stability::Unstable,
+ ("omit_gdb_pretty_printer_section", Whitelisted, template!(Word), Gated(Stability::Unstable,
"omit_gdb_pretty_printer_section",
"the `#[omit_gdb_pretty_printer_section]` \
attribute is just used for the Rust test \
@@ -1078,6 +1132,7 @@
cfg_fn!(omit_gdb_pretty_printer_section))),
("unsafe_destructor_blind_to_params",
Normal,
+ template!(Word),
Gated(Stability::Deprecated("https://github.com/rust-lang/rust/issues/34761",
Some("replace this attribute with `#[may_dangle]`")),
"dropck_parametricity",
@@ -1086,93 +1141,91 @@
cfg_fn!(dropck_parametricity))),
("may_dangle",
Normal,
+ template!(Word),
Gated(Stability::Unstable,
"dropck_eyepatch",
"may_dangle has unstable semantics and may be removed in the future",
cfg_fn!(dropck_eyepatch))),
- ("unwind", Whitelisted, Gated(Stability::Unstable,
+ ("unwind", Whitelisted, template!(List: "allowed"), Gated(Stability::Unstable,
"unwind_attributes",
"#[unwind] is experimental",
cfg_fn!(unwind_attributes))),
- ("used", Whitelisted, Ungated),
+ ("used", Whitelisted, template!(Word), Ungated),
// used in resolve
- ("prelude_import", Whitelisted, Gated(Stability::Unstable,
+ ("prelude_import", Whitelisted, template!(Word), Gated(Stability::Unstable,
"prelude_import",
"`#[prelude_import]` is for use by rustc only",
cfg_fn!(prelude_import))),
// FIXME: #14407 these are only looked at on-demand so we can't
// guarantee they'll have already been checked
- ("rustc_deprecated", Whitelisted, Ungated),
- ("must_use", Whitelisted, Ungated),
- ("stable", Whitelisted, Ungated),
- ("unstable", Whitelisted, Ungated),
- ("deprecated", Normal, Ungated),
+ ("rustc_deprecated", Whitelisted, template!(List: r#"since = "version", reason = "...""#),
+ Ungated),
+ ("must_use", Whitelisted, template!(Word, NameValueStr: "reason"), Ungated),
+ ("stable", Whitelisted, template!(List: r#"feature = "name", since = "version""#), Ungated),
+ ("unstable", Whitelisted, template!(List: r#"feature = "name", reason = "...", issue = "N""#),
+ Ungated),
+ ("deprecated", Normal, template!(Word, List: r#"/*opt*/ since = "version",
+ /*opt*/ note = "reason"#,
+ NameValueStr: "reason"), Ungated),
- ("rustc_paren_sugar", Normal, Gated(Stability::Unstable,
+ ("rustc_paren_sugar", Normal, template!(Word), Gated(Stability::Unstable,
"unboxed_closures",
"unboxed_closures are still evolving",
cfg_fn!(unboxed_closures))),
- ("windows_subsystem", Whitelisted, Ungated),
+ ("windows_subsystem", Whitelisted, template!(NameValueStr: "windows|console"), Ungated),
- ("proc_macro_attribute", Normal, Ungated),
- ("proc_macro", Normal, Ungated),
+ ("proc_macro_attribute", Normal, template!(Word), Ungated),
+ ("proc_macro", Normal, template!(Word), Ungated),
- ("rustc_proc_macro_decls", Normal, Gated(Stability::Unstable,
+ ("rustc_proc_macro_decls", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_proc_macro_decls",
"used internally by rustc",
cfg_fn!(rustc_attrs))),
- ("allow_fail", Normal, Gated(Stability::Unstable,
+ ("allow_fail", Normal, template!(Word), Gated(Stability::Unstable,
"allow_fail",
"allow_fail attribute is currently unstable",
cfg_fn!(allow_fail))),
- ("rustc_std_internal_symbol", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_std_internal_symbol", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"this is an internal attribute that will \
never be stable",
cfg_fn!(rustc_attrs))),
// whitelists "identity-like" conversion methods to suggest on type mismatch
- ("rustc_conversion_suggestion", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_conversion_suggestion", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"this is an internal attribute that will \
never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_args_required_const", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_args_required_const", Whitelisted, template!(List: "N"), Gated(Stability::Unstable,
"rustc_attrs",
"never will be stable",
cfg_fn!(rustc_attrs))),
-
- // RFC #2093
- ("infer_static_outlives_requirements", Normal, Gated(Stability::Unstable,
- "infer_static_outlives_requirements",
- "infer 'static lifetime requirements",
- cfg_fn!(infer_static_outlives_requirements))),
-
// RFC 2070
- ("panic_handler", Normal, Ungated),
+ ("panic_handler", Normal, template!(Word), Ungated),
- ("alloc_error_handler", Normal, Gated(Stability::Unstable,
+ ("alloc_error_handler", Normal, template!(Word), Gated(Stability::Unstable,
"alloc_error_handler",
"#[alloc_error_handler] is an unstable feature",
cfg_fn!(alloc_error_handler))),
// Crate level attributes
- ("crate_name", CrateLevel, Ungated),
- ("crate_type", CrateLevel, Ungated),
- ("crate_id", CrateLevel, Ungated),
- ("feature", CrateLevel, Ungated),
- ("no_start", CrateLevel, Ungated),
- ("no_main", CrateLevel, Ungated),
- ("no_builtins", CrateLevel, Ungated),
- ("recursion_limit", CrateLevel, Ungated),
- ("type_length_limit", CrateLevel, Ungated),
- ("test_runner", CrateLevel, Gated(Stability::Unstable,
+ ("crate_name", CrateLevel, template!(NameValueStr: "name"), Ungated),
+ ("crate_type", CrateLevel, template!(NameValueStr: "bin|lib|..."), Ungated),
+ ("crate_id", CrateLevel, template!(NameValueStr: "ignored"), Ungated),
+ ("feature", CrateLevel, template!(List: "name1, name1, ..."), Ungated),
+ ("no_start", CrateLevel, template!(Word), Ungated),
+ ("no_main", CrateLevel, template!(Word), Ungated),
+ ("no_builtins", CrateLevel, template!(Word), Ungated),
+ ("recursion_limit", CrateLevel, template!(NameValueStr: "N"), Ungated),
+ ("type_length_limit", CrateLevel, template!(NameValueStr: "N"), Ungated),
+ ("test_runner", CrateLevel, template!(List: "path"), Gated(Stability::Unstable,
"custom_test_frameworks",
EXPLAIN_CUSTOM_TEST_FRAMEWORKS,
cfg_fn!(custom_test_frameworks))),
@@ -1181,7 +1234,6 @@
// cfg(...)'s that are feature gated
const GATED_CFGS: &[(&str, &str, fn(&Features) -> bool)] = &[
// (name in cfg, feature, function to check if the feature is enabled)
- ("target_vendor", "cfg_target_vendor", cfg_fn!(cfg_target_vendor)),
("target_thread_local", "cfg_target_thread_local", cfg_fn!(cfg_target_thread_local)),
("target_has_atomic", "cfg_target_has_atomic", cfg_fn!(cfg_target_has_atomic)),
("rustdoc", "doc_cfg", cfg_fn!(doc_cfg)),
@@ -1249,7 +1301,7 @@
fn check_attribute(&self, attr: &ast::Attribute, is_macro: bool) {
debug!("check_attribute(attr = {:?})", attr);
let name = attr.name().as_str();
- for &(n, ty, ref gateage) in BUILTIN_ATTRIBUTES {
+ for &(n, ty, _template, ref gateage) in BUILTIN_ATTRIBUTES {
if name == n {
if let Gated(_, name, desc, ref has_feature) = *gateage {
gate_feature_fn!(self, has_feature, attr.span, name, desc, GateStrength::Hard);
@@ -1484,6 +1536,52 @@
Abi::System => {}
}
}
+
+ fn check_builtin_attribute(&mut self, attr: &ast::Attribute, name: &str,
+ template: AttributeTemplate) {
+ // Some special attributes like `cfg` must be checked
+ // before the generic check, so we skip them here.
+ let should_skip = |name| name == "cfg";
+ // Some of previously accepted forms were used in practice,
+ // report them as warnings for now.
+ let should_warn = |name| name == "doc" || name == "ignore" ||
+ name == "inline" || name == "link";
+
+ match attr.parse_meta(self.context.parse_sess) {
+ Ok(meta) => if !should_skip(name) && !template.compatible(&meta.node) {
+ let mut msg = "attribute must be of the form ".to_owned();
+ let mut first = true;
+ if template.word {
+ first = false;
+ msg.push_str(&format!("`#[{}{}]`", name, ""));
+ }
+ if let Some(descr) = template.list {
+ if !first {
+ msg.push_str(" or ");
+ }
+ first = false;
+ msg.push_str(&format!("`#[{}({})]`", name, descr));
+ }
+ if let Some(descr) = template.name_value_str {
+ if !first {
+ msg.push_str(" or ");
+ }
+ msg.push_str(&format!("`#[{} = \"{}\"]`", name, descr));
+ }
+ if should_warn(name) {
+ self.context.parse_sess.buffer_lint(
+ BufferedEarlyLintId::IllFormedAttributeInput,
+ meta.span,
+ ast::CRATE_NODE_ID,
+ &msg,
+ );
+ } else {
+ self.context.parse_sess.span_diagnostic.span_err(meta.span, &msg);
+ }
+ }
+ Err(mut err) => err.emit(),
+ }
+ }
}
impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
@@ -1519,12 +1617,15 @@
}
}
- if !self.context.features.unrestricted_attribute_tokens {
- // Unfortunately, `parse_meta` cannot be called speculatively
- // because it can report errors by itself, so we have to call it
- // only if the feature is disabled.
- if let Err(mut err) = attr.parse_meta(self.context.parse_sess) {
- err.help("try enabling `#![feature(unrestricted_attribute_tokens)]`").emit()
+ match BUILTIN_ATTRIBUTES.iter().find(|(name, ..)| attr.path == name) {
+ Some(&(name, _, template, _)) => self.check_builtin_attribute(attr, name, template),
+ None => if !self.context.features.unrestricted_attribute_tokens {
+ // Unfortunately, `parse_meta` cannot be called speculatively
+ // because it can report errors by itself, so we have to call it
+ // only if the feature is disabled.
+ if let Err(mut err) = attr.parse_meta(self.context.parse_sess) {
+ err.help("try enabling `#![feature(unrestricted_attribute_tokens)]`").emit()
+ }
}
}
}
@@ -1829,25 +1930,6 @@
visit::walk_impl_item(self, ii);
}
- fn visit_path(&mut self, path: &'a ast::Path, _id: NodeId) {
- for segment in &path.segments {
- // Identifiers we are going to check could come from a legacy macro (e.g., `#[test]`).
- // For such macros identifiers must have empty context, because this context is
- // used during name resolution and produced names must be unhygienic for compatibility.
- // On the other hand, we need the actual non-empty context for feature gate checking
- // because it's hygienic even for legacy macros. As previously stated, such context
- // cannot be kept in identifiers, so it's kept in paths instead and we take it from
- // there while keeping location info from the ident span.
- let span = segment.ident.span.with_ctxt(path.span.ctxt());
- if segment.ident.name == keywords::Extern.name() {
- gate_feature_post!(&self, extern_in_paths, span,
- "`extern` in paths is experimental");
- }
- }
-
- visit::walk_path(self, path);
- }
-
fn visit_vis(&mut self, vis: &'a ast::Visibility) {
if let ast::VisibilityKind::Crate(ast::CrateSugar::JustCrate) = vis.node {
gate_feature_post!(&self, crate_visibility_modifier, vis.span,
@@ -1947,11 +2029,7 @@
let list = match attr.meta_item_list() {
Some(list) => list,
- None => {
- span_err!(span_handler, attr.span, E0555,
- "malformed feature attribute, expected #![feature(...)]");
- continue
- }
+ None => continue,
};
for mi in list {
diff --git a/src/libsyntax/json.rs b/src/libsyntax/json.rs
index ea0fe71..cf11ac5 100644
--- a/src/libsyntax/json.rs
+++ b/src/libsyntax/json.rs
@@ -7,7 +7,7 @@
//! The format of the JSON output should be considered *unstable*. For now the
//! structs at the end of this file (Diagnostic*) specify the error format.
-// FIXME spec the JSON output properly.
+// FIXME: spec the JSON output properly.
use source_map::{SourceMap, FilePathMapping};
use syntax_pos::{self, MacroBacktrace, Span, SpanLabel, MultiSpan};
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index ea943e1..df22dac 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -10,6 +10,7 @@
test(attr(deny(warnings))))]
#![feature(crate_visibility_modifier)]
+#![feature(label_break_value)]
#![feature(nll)]
#![feature(rustc_attrs)]
#![feature(rustc_diagnostic_macros)]
diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs
index ecb34e4..0e1c3b4 100644
--- a/src/libsyntax/parse/lexer/mod.rs
+++ b/src/libsyntax/parse/lexer/mod.rs
@@ -299,7 +299,7 @@
/// Report a lexical error with a given span.
fn err_span(&self, sp: Span, m: &str) {
- self.sess.span_diagnostic.span_err(sp, m)
+ self.sess.span_diagnostic.struct_span_err(sp, m).emit();
}
diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs
index 759de57..ddb350f 100644
--- a/src/libsyntax/parse/mod.rs
+++ b/src/libsyntax/parse/mod.rs
@@ -520,6 +520,7 @@
} else {
let msg = format!("invalid suffix `{}` for float literal", suf);
diag.struct_span_err(span, &msg)
+ .span_label(span, format!("invalid suffix `{}`", suf))
.help("valid suffixes are `f32` and `f64`")
.emit();
}
@@ -673,7 +674,11 @@
_ => None,
};
if let Some(err) = err {
- err!(diag, |span, diag| diag.span_err(span, err));
+ err!(diag, |span, diag| {
+ diag.struct_span_err(span, err)
+ .span_label(span, "not supported")
+ .emit();
+ });
}
return filtered_float_lit(Symbol::intern(s), Some(suf), diag)
}
@@ -712,6 +717,7 @@
} else {
let msg = format!("invalid suffix `{}` for numeric literal", suf);
diag.struct_span_err(span, &msg)
+ .span_label(span, format!("invalid suffix `{}`", suf))
.help("the suffix must be one of the integral types \
(`u32`, `isize`, etc)")
.emit();
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 537d536..bdbca30 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -1012,7 +1012,10 @@
if text.is_empty() {
self.span_bug(sp, "found empty literal suffix in Some")
}
- self.span_err(sp, &format!("{} with a suffix is invalid", kind));
+ let msg = format!("{} with a suffix is invalid", kind);
+ self.struct_span_err(sp, &msg)
+ .span_label(sp, msg)
+ .emit();
}
}
}
@@ -1299,7 +1302,7 @@
fn token_is_bare_fn_keyword(&mut self) -> bool {
self.check_keyword(keywords::Fn) ||
self.check_keyword(keywords::Unsafe) ||
- self.check_keyword(keywords::Extern) && self.is_extern_non_path()
+ self.check_keyword(keywords::Extern)
}
/// parse a `TyKind::BareFn` type:
@@ -1768,9 +1771,11 @@
Mutability::Immutable
} else {
let span = self.prev_span;
- self.span_err(span,
- "expected mut or const in raw pointer type (use \
- `*mut T` or `*const T` as appropriate)");
+ let msg = "expected mut or const in raw pointer type";
+ self.struct_span_err(span, msg)
+ .span_label(span, msg)
+ .help("use `*mut T` or `*const T` as appropriate")
+ .emit();
Mutability::Immutable
};
let t = self.parse_ty_no_plus()?;
@@ -3815,8 +3820,12 @@
ddpos = Some(fields.len());
} else {
// Emit a friendly error, ignore `..` and continue parsing
- self.span_err(self.prev_span,
- "`..` can only be used once per tuple or tuple struct pattern");
+ self.struct_span_err(
+ self.prev_span,
+ "`..` can only be used once per tuple or tuple struct pattern",
+ )
+ .span_label(self.prev_span, "can only be used once per pattern")
+ .emit();
}
} else if !self.check(&token::CloseDelim(token::Paren)) {
fields.push(self.parse_pat(None)?);
@@ -3832,7 +3841,10 @@
if ddpos == Some(fields.len()) && trailing_comma {
// `..` needs to be followed by `)` or `, pat`, `..,)` is disallowed.
- self.span_err(self.prev_span, "trailing comma is not permitted after `..`");
+ let msg = "trailing comma is not permitted after `..`";
+ self.struct_span_err(self.prev_span, msg)
+ .span_label(self.prev_span, msg)
+ .emit();
}
Ok((fields, ddpos, trailing_comma))
@@ -4605,10 +4617,6 @@
self.token.is_keyword(keywords::Crate) && self.look_ahead(1, |t| t != &token::ModSep)
}
- fn is_extern_non_path(&self) -> bool {
- self.token.is_keyword(keywords::Extern) && self.look_ahead(1, |t| t != &token::ModSep)
- }
-
fn is_existential_type_decl(&self) -> bool {
self.token.is_keyword(keywords::Existential) &&
self.look_ahead(1, |t| t.is_keyword(keywords::Type))
@@ -4712,12 +4720,10 @@
// like a path (1 token), but it fact not a path.
// `union::b::c` - path, `union U { ... }` - not a path.
// `crate::b::c` - path, `crate struct S;` - not a path.
- // `extern::b::c` - path, `extern crate c;` - not a path.
} else if self.token.is_path_start() &&
!self.token.is_qpath_start() &&
!self.is_union_item() &&
!self.is_crate_vis() &&
- !self.is_extern_non_path() &&
!self.is_existential_type_decl() &&
!self.is_auto_trait_item() {
let pth = self.parse_path(PathStyle::Expr)?;
@@ -5228,22 +5234,13 @@
kind: ast::GenericParamKind::Lifetime,
});
if let Some(sp) = seen_ty_param {
- let param_span = self.prev_span;
- let ate_comma = self.eat(&token::Comma);
- let remove_sp = if ate_comma {
- param_span.until(self.span)
- } else {
- last_comma_span.unwrap_or(param_span).to(param_span)
- };
- bad_lifetime_pos.push(param_span);
-
- if let Ok(snippet) = self.sess.source_map().span_to_snippet(param_span) {
+ let remove_sp = last_comma_span.unwrap_or(self.prev_span).to(self.prev_span);
+ bad_lifetime_pos.push(self.prev_span);
+ if let Ok(snippet) = self.sess.source_map().span_to_snippet(self.prev_span) {
suggestions.push((remove_sp, String::new()));
- suggestions.push((sp.shrink_to_lo(), format!("{}, ", snippet)));
- }
- if ate_comma {
- last_comma_span = Some(self.prev_span);
- continue
+ suggestions.push((
+ sp.shrink_to_lo(),
+ format!("{}, ", snippet)));
}
}
} else if self.check_ident() {
@@ -5256,8 +5253,12 @@
// Check for trailing attributes and stop parsing.
if !attrs.is_empty() {
let param_kind = if seen_ty_param.is_some() { "type" } else { "lifetime" };
- self.span_err(attrs[0].span,
- &format!("trailing attribute after {} parameters", param_kind));
+ self.struct_span_err(
+ attrs[0].span,
+ &format!("trailing attribute after {} parameters", param_kind),
+ )
+ .span_label(attrs[0].span, "attributes must go before parameters")
+ .emit();
}
break
}
@@ -5315,19 +5316,28 @@
/// Parses (possibly empty) list of lifetime and type arguments and associated type bindings,
/// possibly including trailing comma.
- fn parse_generic_args(&mut self)
- -> PResult<'a, (Vec<GenericArg>, Vec<TypeBinding>)> {
+ fn parse_generic_args(&mut self) -> PResult<'a, (Vec<GenericArg>, Vec<TypeBinding>)> {
let mut args = Vec::new();
let mut bindings = Vec::new();
let mut seen_type = false;
let mut seen_binding = false;
+ let mut first_type_or_binding_span: Option<Span> = None;
+ let mut bad_lifetime_pos = vec![];
+ let mut last_comma_span = None;
+ let mut suggestions = vec![];
loop {
if self.check_lifetime() && self.look_ahead(1, |t| !t.is_like_plus()) {
// Parse lifetime argument.
args.push(GenericArg::Lifetime(self.expect_lifetime()));
if seen_type || seen_binding {
- self.span_err(self.prev_span,
- "lifetime parameters must be declared prior to type parameters");
+ let remove_sp = last_comma_span.unwrap_or(self.prev_span).to(self.prev_span);
+ bad_lifetime_pos.push(self.prev_span);
+ if let Ok(snippet) = self.sess.source_map().span_to_snippet(self.prev_span) {
+ suggestions.push((remove_sp, String::new()));
+ suggestions.push((
+ first_type_or_binding_span.unwrap().shrink_to_lo(),
+ format!("{}, ", snippet)));
+ }
}
} else if self.check_ident() && self.look_ahead(1, |t| t == &token::Eq) {
// Parse associated type binding.
@@ -5335,19 +5345,33 @@
let ident = self.parse_ident()?;
self.bump();
let ty = self.parse_ty()?;
+ let span = lo.to(self.prev_span);
bindings.push(TypeBinding {
id: ast::DUMMY_NODE_ID,
ident,
ty,
- span: lo.to(self.prev_span),
+ span,
});
seen_binding = true;
+ if first_type_or_binding_span.is_none() {
+ first_type_or_binding_span = Some(span);
+ }
} else if self.check_type() {
// Parse type argument.
let ty_param = self.parse_ty()?;
if seen_binding {
- self.span_err(ty_param.span,
- "type parameters must be declared prior to associated type bindings");
+ self.struct_span_err(
+ ty_param.span,
+ "type parameters must be declared prior to associated type bindings"
+ )
+ .span_label(
+ ty_param.span,
+ "must be declared prior to associated type bindings",
+ )
+ .emit();
+ }
+ if first_type_or_binding_span.is_none() {
+ first_type_or_binding_span = Some(ty_param.span);
}
args.push(GenericArg::Type(ty_param));
seen_type = true;
@@ -5357,8 +5381,30 @@
if !self.eat(&token::Comma) {
break
+ } else {
+ last_comma_span = Some(self.prev_span);
}
}
+ if !bad_lifetime_pos.is_empty() {
+ let mut err = self.struct_span_err(
+ bad_lifetime_pos.clone(),
+ "lifetime parameters must be declared prior to type parameters"
+ );
+ for sp in &bad_lifetime_pos {
+ err.span_label(*sp, "must be declared prior to type parameters");
+ }
+ if !suggestions.is_empty() {
+ err.multipart_suggestion_with_applicability(
+ &format!(
+ "move the lifetime parameter{} prior to the first type parameter",
+ if bad_lifetime_pos.len() > 1 { "s" } else { "" },
+ ),
+ suggestions,
+ Applicability::MachineApplicable,
+ );
+ }
+ err.emit();
+ }
Ok((args, bindings))
}
@@ -5386,8 +5432,12 @@
// change we parse those generics now, but report an error.
if self.choose_generics_over_qpath() {
let generics = self.parse_generics()?;
- self.span_err(generics.span,
- "generic parameters on `where` clauses are reserved for future use");
+ self.struct_span_err(
+ generics.span,
+ "generic parameters on `where` clauses are reserved for future use",
+ )
+ .span_label(generics.span, "currently unsupported")
+ .emit();
}
loop {
@@ -5587,15 +5637,20 @@
// *mut self
// *not_self
// Emit special error for `self` cases.
+ let msg = "cannot pass `self` by raw pointer";
(if isolated_self(self, 1) {
self.bump();
- self.span_err(self.span, "cannot pass `self` by raw pointer");
+ self.struct_span_err(self.span, msg)
+ .span_label(self.span, msg)
+ .emit();
SelfKind::Value(Mutability::Immutable)
} else if self.look_ahead(1, |t| t.is_mutability()) &&
isolated_self(self, 2) {
self.bump();
self.bump();
- self.span_err(self.span, "cannot pass `self` by raw pointer");
+ self.struct_span_err(self.span, msg)
+ .span_label(self.span, msg)
+ .emit();
SelfKind::Value(Mutability::Immutable)
} else {
return Ok(None);
@@ -5932,7 +5987,10 @@
tps.where_clause = self.parse_where_clause()?;
self.expect(&token::Semi)?;
if unsafety != Unsafety::Normal {
- self.span_err(self.prev_span, "trait aliases cannot be unsafe");
+ let msg = "trait aliases cannot be unsafe";
+ self.struct_span_err(self.prev_span, msg)
+ .span_label(self.prev_span, msg)
+ .emit();
}
Ok((ident, ItemKind::TraitAlias(tps, bounds), None))
} else {
@@ -6048,7 +6106,13 @@
Some(ty_second) => {
// impl Trait for Type
if !has_for {
- self.span_err(missing_for_span, "missing `for` in a trait impl");
+ self.struct_span_err(missing_for_span, "missing `for` in a trait impl")
+ .span_suggestion_short_with_applicability(
+ missing_for_span,
+ "add `for` here",
+ " for ".to_string(),
+ Applicability::MachineApplicable,
+ ).emit();
}
let ty_first = ty_first.into_inner();
@@ -6409,41 +6473,52 @@
}
}
+ fn maybe_consume_incorrect_semicolon(&mut self, items: &[P<Item>]) -> bool {
+ if self.eat(&token::Semi) {
+ let mut err = self.struct_span_err(self.prev_span, "expected item, found `;`");
+ err.span_suggestion_short_with_applicability(
+ self.prev_span,
+ "remove this semicolon",
+ String::new(),
+ Applicability::MachineApplicable,
+ );
+ if !items.is_empty() {
+ let previous_item = &items[items.len()-1];
+ let previous_item_kind_name = match previous_item.node {
+ // say "braced struct" because tuple-structs and
+ // braceless-empty-struct declarations do take a semicolon
+ ItemKind::Struct(..) => Some("braced struct"),
+ ItemKind::Enum(..) => Some("enum"),
+ ItemKind::Trait(..) => Some("trait"),
+ ItemKind::Union(..) => Some("union"),
+ _ => None,
+ };
+ if let Some(name) = previous_item_kind_name {
+ err.help(&format!("{} declarations are not followed by a semicolon", name));
+ }
+ }
+ err.emit();
+ true
+ } else {
+ false
+ }
+ }
+
/// Given a termination token, parse all of the items in a module
fn parse_mod_items(&mut self, term: &token::Token, inner_lo: Span) -> PResult<'a, Mod> {
let mut items = vec![];
while let Some(item) = self.parse_item()? {
items.push(item);
+ self.maybe_consume_incorrect_semicolon(&items);
}
if !self.eat(term) {
let token_str = self.this_token_descr();
- let mut err = self.fatal(&format!("expected item, found {}", token_str));
- if self.token == token::Semi {
- let msg = "consider removing this semicolon";
- err.span_suggestion_short_with_applicability(
- self.span, msg, String::new(), Applicability::MachineApplicable
- );
- if !items.is_empty() { // Issue #51603
- let previous_item = &items[items.len()-1];
- let previous_item_kind_name = match previous_item.node {
- // say "braced struct" because tuple-structs and
- // braceless-empty-struct declarations do take a semicolon
- ItemKind::Struct(..) => Some("braced struct"),
- ItemKind::Enum(..) => Some("enum"),
- ItemKind::Trait(..) => Some("trait"),
- ItemKind::Union(..) => Some("union"),
- _ => None,
- };
- if let Some(name) = previous_item_kind_name {
- err.help(&format!("{} declarations are not followed by a semicolon",
- name));
- }
- }
- } else {
+ if !self.maybe_consume_incorrect_semicolon(&items) {
+ let mut err = self.fatal(&format!("expected item, found {}", token_str));
err.span_label(self.span, "expected item");
+ return Err(err);
}
- return Err(err);
}
let hi = if self.span.is_dummy() {
@@ -6939,7 +7014,7 @@
fn parse_enum_def(&mut self, _generics: &ast::Generics) -> PResult<'a, EnumDef> {
let mut variants = Vec::new();
let mut all_nullary = true;
- let mut any_disr = None;
+ let mut any_disr = vec![];
while self.token != token::CloseDelim(token::Brace) {
let variant_attrs = self.parse_outer_attributes()?;
let vlo = self.span;
@@ -6961,7 +7036,9 @@
id: ast::DUMMY_NODE_ID,
value: self.parse_expr()?,
});
- any_disr = disr_expr.as_ref().map(|c| c.value.span);
+ if let Some(sp) = disr_expr.as_ref().map(|c| c.value.span) {
+ any_disr.push(sp);
+ }
struct_def = VariantData::Unit(ast::DUMMY_NODE_ID);
} else {
struct_def = VariantData::Unit(ast::DUMMY_NODE_ID);
@@ -6978,11 +7055,15 @@
if !self.eat(&token::Comma) { break; }
}
self.expect(&token::CloseDelim(token::Brace))?;
- match any_disr {
- Some(disr_span) if !all_nullary =>
- self.span_err(disr_span,
- "discriminator values can only be used with a field-less enum"),
- _ => ()
+ if !any_disr.is_empty() && !all_nullary {
+ let mut err =self.struct_span_err(
+ any_disr.clone(),
+ "discriminator values can only be used with a field-less enum",
+ );
+ for sp in any_disr {
+ err.span_label(sp, "only valid in field-less enums");
+ }
+ err.emit();
}
Ok(ast::EnumDef { variants })
@@ -7113,8 +7194,7 @@
return Ok(Some(item));
}
- if self.check_keyword(keywords::Extern) && self.is_extern_non_path() {
- self.bump(); // `extern`
+ if self.eat_keyword(keywords::Extern) {
if self.eat_keyword(keywords::Crate) {
return Ok(Some(self.parse_item_extern_crate(lo, visibility, attrs)?));
}
@@ -7623,7 +7703,7 @@
fn parse_assoc_macro_invoc(&mut self, item_kind: &str, vis: Option<&Visibility>,
at_end: &mut bool) -> PResult<'a, Option<Mac>>
{
- if self.token.is_path_start() && !self.is_extern_non_path() {
+ if self.token.is_path_start() {
let prev_span = self.prev_span;
let lo = self.span;
let pth = self.parse_path(PathStyle::Mod)?;
diff --git a/src/libsyntax/test.rs b/src/libsyntax/test.rs
index 884c4fd..b352486 100644
--- a/src/libsyntax/test.rs
+++ b/src/libsyntax/test.rs
@@ -428,14 +428,11 @@
fn get_test_runner(sd: &errors::Handler, krate: &ast::Crate) -> Option<ast::Path> {
let test_attr = attr::find_by_name(&krate.attrs, "test_runner")?;
- if let Some(meta_list) = test_attr.meta_item_list() {
+ test_attr.meta_item_list().map(|meta_list| {
if meta_list.len() != 1 {
sd.span_fatal(test_attr.span(),
"#![test_runner(..)] accepts exactly 1 argument").raise()
}
- Some(meta_list[0].word().as_ref().unwrap().ident.clone())
- } else {
- sd.span_fatal(test_attr.span(),
- "test_runner must be of the form #[test_runner(..)]").raise()
- }
+ meta_list[0].word().as_ref().unwrap().ident.clone()
+ })
}
diff --git a/src/libsyntax_ext/proc_macro_decls.rs b/src/libsyntax_ext/proc_macro_decls.rs
index 38f7ca5..1d27271 100644
--- a/src/libsyntax_ext/proc_macro_decls.rs
+++ b/src/libsyntax_ext/proc_macro_decls.rs
@@ -105,12 +105,7 @@
// `#[proc_macro_derive(Foo, attributes(A, ..))]`
let list = match attr.meta_item_list() {
Some(list) => list,
- None => {
- self.handler.span_err(attr.span(),
- "attribute must be of form: \
- #[proc_macro_derive(TraitName)]");
- return
- }
+ None => return,
};
if list.len() != 1 && list.len() != 2 {
self.handler.span_err(attr.span(),
@@ -182,13 +177,7 @@
}
}
- fn collect_attr_proc_macro(&mut self, item: &'a ast::Item, attr: &'a ast::Attribute) {
- if !attr.is_word() {
- self.handler.span_err(attr.span, "`#[proc_macro_attribute]` attribute \
- does not take any arguments");
- return;
- }
-
+ fn collect_attr_proc_macro(&mut self, item: &'a ast::Item) {
if self.in_root && item.vis.node.is_pub() {
self.attr_macros.push(ProcMacroDef {
span: item.span,
@@ -205,13 +194,7 @@
}
}
- fn collect_bang_proc_macro(&mut self, item: &'a ast::Item, attr: &'a ast::Attribute) {
- if !attr.is_word() {
- self.handler.span_err(attr.span, "`#[proc_macro]` attribute \
- does not take any arguments");
- return;
- }
-
+ fn collect_bang_proc_macro(&mut self, item: &'a ast::Item) {
if self.in_root && item.vis.node.is_pub() {
self.bang_macros.push(ProcMacroDef {
span: item.span,
@@ -308,9 +291,9 @@
if attr.check_name("proc_macro_derive") {
self.collect_custom_derive(item, attr);
} else if attr.check_name("proc_macro_attribute") {
- self.collect_attr_proc_macro(item, attr);
+ self.collect_attr_proc_macro(item);
} else if attr.check_name("proc_macro") {
- self.collect_bang_proc_macro(item, attr);
+ self.collect_bang_proc_macro(item);
};
let prev_in_root = mem::replace(&mut self.in_root, false);
diff --git a/src/libsyntax_ext/test.rs b/src/libsyntax_ext/test.rs
index cf842dd..11c734b 100644
--- a/src/libsyntax_ext/test.rs
+++ b/src/libsyntax_ext/test.rs
@@ -124,14 +124,14 @@
])
};
- let mut test_const = cx.item(sp, item.ident.gensym(),
+ let mut test_const = cx.item(sp, ast::Ident::new(item.ident.name.gensymed(), sp),
vec![
// #[cfg(test)]
cx.attribute(attr_sp, cx.meta_list(attr_sp, Symbol::intern("cfg"), vec![
cx.meta_list_item_word(attr_sp, Symbol::intern("test"))
])),
// #[rustc_test_marker]
- cx.attribute(attr_sp, cx.meta_word(attr_sp, Symbol::intern("rustc_test_marker")))
+ cx.attribute(attr_sp, cx.meta_word(attr_sp, Symbol::intern("rustc_test_marker"))),
],
// const $ident: test::TestDescAndFn =
ast::ItemKind::Const(cx.ty(sp, ast::TyKind::Path(None, test_path("TestDescAndFn"))),
@@ -214,20 +214,8 @@
match attr::find_by_name(&i.attrs, "should_panic") {
Some(attr) => {
let ref sd = cx.parse_sess.span_diagnostic;
- if attr.is_value_str() {
- sd.struct_span_warn(
- attr.span(),
- "attribute must be of the form: \
- `#[should_panic]` or \
- `#[should_panic(expected = \"error message\")]`"
- ).note("Errors in this attribute were erroneously allowed \
- and will become a hard error in a future release.")
- .emit();
- return ShouldPanic::Yes(None);
- }
+
match attr.meta_item_list() {
- // Handle #[should_panic]
- None => ShouldPanic::Yes(None),
// Handle #[should_panic(expected = "foo")]
Some(list) => {
let msg = list.iter()
@@ -247,6 +235,8 @@
ShouldPanic::Yes(msg)
}
},
+ // Handle #[should_panic] and #[should_panic = "expected"]
+ None => ShouldPanic::Yes(attr.value_str())
}
}
None => ShouldPanic::No,
diff --git a/src/libsyntax_pos/symbol.rs b/src/libsyntax_pos/symbol.rs
index 76d47f4..e741b79 100644
--- a/src/libsyntax_pos/symbol.rs
+++ b/src/libsyntax_pos/symbol.rs
@@ -478,7 +478,6 @@
self.name == keywords::Super.name() ||
self.name == keywords::SelfLower.name() ||
self.name == keywords::SelfUpper.name() ||
- self.name == keywords::Extern.name() ||
self.name == keywords::Crate.name() ||
self.name == keywords::PathRoot.name() ||
self.name == keywords::DollarCrate.name()
diff --git a/src/libterm/terminfo/searcher.rs b/src/libterm/terminfo/searcher.rs
index d48e189..a9e2626 100644
--- a/src/libterm/terminfo/searcher.rs
+++ b/src/libterm/terminfo/searcher.rs
@@ -66,7 +66,7 @@
}
#[test]
-#[ignore(reason = "buildbots don't have ncurses installed and I can't mock everything I need")]
+#[ignore = "buildbots don't have ncurses installed and I can't mock everything I need"]
fn test_get_dbpath_for_term() {
// woefully inadequate test coverage
// note: current tests won't work with non-standard terminfo hierarchies (e.g., macOS's)
diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs
index ec96ea0..2cc80dd 100644
--- a/src/libtest/lib.rs
+++ b/src/libtest/lib.rs
@@ -23,7 +23,7 @@
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
html_root_url = "https://doc.rust-lang.org/nightly/", test(attr(deny(warnings))))]
#![feature(asm)]
-#![feature(cfg_target_vendor)]
+#![cfg_attr(stage0, feature(cfg_target_vendor))]
#![feature(fnbox)]
#![cfg_attr(any(unix, target_os = "cloudabi"), feature(libc))]
#![feature(nll)]
diff --git a/src/libunwind/lib.rs b/src/libunwind/lib.rs
index 5e51995..7ed7837 100644
--- a/src/libunwind/lib.rs
+++ b/src/libunwind/lib.rs
@@ -1,7 +1,7 @@
#![no_std]
#![unstable(feature = "panic_unwind", issue = "32837")]
-#![feature(cfg_target_vendor)]
+#![cfg_attr(stage0, feature(cfg_target_vendor))]
#![feature(link_cfg)]
#![feature(nll)]
#![feature(staged_api)]
diff --git a/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs b/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs
index efef4ab..bca1d7a 100644
--- a/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs
+++ b/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs
@@ -1,13 +1,3 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
// force-host
#![feature(plugin_registrar)]
diff --git a/src/test/incremental/change_name_of_static_in_fn.rs b/src/test/incremental/change_name_of_static_in_fn.rs
new file mode 100644
index 0000000..5b27b68
--- /dev/null
+++ b/src/test/incremental/change_name_of_static_in_fn.rs
@@ -0,0 +1,17 @@
+
+// revisions:rpass1 rpass2 rpass3
+
+// See issue #57692.
+
+#![allow(warnings)]
+
+fn main() {
+ #[cfg(rpass1)]
+ {
+ static map: u64 = 0;
+ }
+ #[cfg(not(rpass1))]
+ {
+ static MAP: u64 = 0;
+ }
+}
diff --git a/src/test/run-make-fulldeps/save-analysis-rfc2126/Makefile b/src/test/run-make-fulldeps/save-analysis-rfc2126/Makefile
index 2b931d8..bf98fcd 100644
--- a/src/test/run-make-fulldeps/save-analysis-rfc2126/Makefile
+++ b/src/test/run-make-fulldeps/save-analysis-rfc2126/Makefile
@@ -1,12 +1,9 @@
-include ../tools.mk
-all: extern_absolute_paths.rs extern_in_paths.rs krate2
+all: extern_absolute_paths.rs krate2
$(RUSTC) extern_absolute_paths.rs -Zsave-analysis --edition=2018 \
-Z unstable-options --extern krate2
cat $(TMPDIR)/save-analysis/extern_absolute_paths.json | "$(PYTHON)" validate_json.py
- $(RUSTC) extern_in_paths.rs -Zsave-analysis --edition=2018 \
- -Z unstable-options --extern krate2
- cat $(TMPDIR)/save-analysis/extern_in_paths.json | "$(PYTHON)" validate_json.py
krate2: krate2.rs
$(RUSTC) $<
diff --git a/src/test/run-make-fulldeps/save-analysis-rfc2126/extern_in_paths.rs b/src/test/run-make-fulldeps/save-analysis-rfc2126/extern_in_paths.rs
deleted file mode 100644
index 299b966..0000000
--- a/src/test/run-make-fulldeps/save-analysis-rfc2126/extern_in_paths.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-#![feature(extern_in_paths)]
-
-use extern::krate2;
-
-fn main() {
- extern::krate2::hello();
-}
diff --git a/src/test/run-pass/binding/fn-arg-incomplete-pattern-drop-order.rs b/src/test/run-pass/binding/fn-arg-incomplete-pattern-drop-order.rs
new file mode 100644
index 0000000..4d5a6fb
--- /dev/null
+++ b/src/test/run-pass/binding/fn-arg-incomplete-pattern-drop-order.rs
@@ -0,0 +1,68 @@
+// Check that partially moved from function parameters are dropped after the
+// named bindings that move from them.
+
+// ignore-wasm32-bare compiled with panic=abort by default
+
+use std::{panic, cell::RefCell};
+
+struct LogDrop<'a>(i32, Context<'a>);
+
+#[derive(Copy, Clone)]
+struct Context<'a> {
+ panic_on: i32,
+ drops: &'a RefCell<Vec<i32>>,
+}
+
+impl<'a> Context<'a> {
+ fn record_drop(self, index: i32) {
+ self.drops.borrow_mut().push(index);
+ if index == self.panic_on {
+ panic!();
+ }
+ }
+}
+
+impl<'a> Drop for LogDrop<'a> {
+ fn drop(&mut self) {
+ self.1.record_drop(self.0);
+ }
+}
+
+fn bindings_in_params((_x, _): (LogDrop, LogDrop), (_, _y): (LogDrop, LogDrop)) {}
+fn bindings_with_let(a: (LogDrop, LogDrop), b: (LogDrop, LogDrop)) {
+ // Drop order in foo is the same as the following bindings.
+ // _temp2 is declared after _x to avoid a difference between `_: T` and
+ // `x: T` in function parameters.
+ let _temp1 = a;
+ let (_x, _) = _temp1;
+
+ let _temp2 = b;
+ let (_, _y) = _temp2;
+}
+
+fn test_drop_order(panic_on: i32, fun: fn((LogDrop, LogDrop), (LogDrop, LogDrop))) {
+ let context = Context {
+ panic_on,
+ drops: &RefCell::new(Vec::new()),
+ };
+ let one = LogDrop(1, context);
+ let two = LogDrop(2, context);
+ let three = LogDrop(3, context);
+ let four = LogDrop(4, context);
+
+ let res = panic::catch_unwind(panic::AssertUnwindSafe(|| {
+ fun((three, four), (two, one));
+ }));
+ if panic_on == 0 {
+ assert!(res.is_ok(), "should not have panicked");
+ } else {
+ assert!(res.is_err(), "should have panicked");
+ }
+ assert_eq!(*context.drops.borrow(), [1, 2, 3, 4], "incorrect drop order");
+}
+
+fn main() {
+ (0..=4).for_each(|i| test_drop_order(i, bindings_in_params));
+ (0..=4).for_each(|i| test_drop_order(i, bindings_with_let));
+ (0..=4).for_each(|i| test_drop_order(i, |(_x, _), (_, _y)| {}));
+}
diff --git a/src/test/run-pass/cfg/cfg-target-vendor.rs b/src/test/run-pass/cfg/cfg-target-vendor.rs
index 01b9048..7824585 100644
--- a/src/test/run-pass/cfg/cfg-target-vendor.rs
+++ b/src/test/run-pass/cfg/cfg-target-vendor.rs
@@ -1,6 +1,4 @@
// run-pass
-#![feature(cfg_target_vendor)]
-
#[cfg(target_vendor = "unknown")]
pub fn main() {
}
diff --git a/src/test/run-pass/rfcs/rfc-2126-extern-absolute-paths/extern.rs b/src/test/run-pass/rfcs/rfc-2126-extern-absolute-paths/extern.rs
deleted file mode 100644
index 165a753..0000000
--- a/src/test/run-pass/rfcs/rfc-2126-extern-absolute-paths/extern.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// run-pass
-#![allow(dead_code)]
-// aux-build:xcrate.rs
-// compile-flags:--extern xcrate
-
-#![feature(extern_in_paths)]
-
-use extern::xcrate::Z;
-
-type A = extern::xcrate::S;
-type B = for<'a> extern::xcrate::Tr<'a>;
-
-fn f() {
- use extern::xcrate;
- use extern::xcrate as ycrate;
- let s = xcrate::S;
- assert_eq!(format!("{:?}", s), "S");
- let z = ycrate::Z;
- assert_eq!(format!("{:?}", z), "Z");
-}
-
-fn main() {
- let s = extern::xcrate::S;
- assert_eq!(format!("{:?}", s), "S");
- let z = Z;
- assert_eq!(format!("{:?}", z), "Z");
- assert_eq!(A {}, extern::xcrate::S {});
-}
diff --git a/src/test/run-pass/simd/simd-upgraded.rs b/src/test/run-pass/simd/simd-upgraded.rs
deleted file mode 100644
index afba298..0000000
--- a/src/test/run-pass/simd/simd-upgraded.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// run-pass
-#![allow(stable_features)]
-#![allow(non_camel_case_types)]
-
-// Test that removed LLVM SIMD intrinsics continue
-// to work via the "AutoUpgrade" mechanism.
-
-#![feature(cfg_target_feature, repr_simd)]
-#![feature(platform_intrinsics, stmt_expr_attributes)]
-
-#[repr(simd)]
-#[derive(PartialEq, Debug)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-fn main() {
- #[cfg(target_feature = "sse2")] unsafe {
- extern "platform-intrinsic" {
- fn x86_mm_min_epi16(x: i16x8, y: i16x8) -> i16x8;
- }
- assert_eq!(x86_mm_min_epi16(i16x8(0, 1, 2, 3, 4, 5, 6, 7),
- i16x8(7, 6, 5, 4, 3, 2, 1, 0)),
- i16x8(0, 1, 2, 3, 3, 2, 1, 0));
- };
-}
diff --git a/src/test/run-pass/weird-exprs.rs b/src/test/run-pass/weird-exprs.rs
index 6d0c5c1..7ce7e29 100644
--- a/src/test/run-pass/weird-exprs.rs
+++ b/src/test/run-pass/weird-exprs.rs
@@ -4,7 +4,7 @@
#![allow(unused_parens)]
// compile-flags: -Z borrowck=compare
-#![recursion_limit = "128"]
+#![recursion_limit = "256"]
use std::cell::Cell;
use std::mem::swap;
diff --git a/src/test/rustdoc-ui/deny-missing-docs-crate.rs b/src/test/rustdoc-ui/deny-missing-docs-crate.rs
index 910c993..b74eba3 100644
--- a/src/test/rustdoc-ui/deny-missing-docs-crate.rs
+++ b/src/test/rustdoc-ui/deny-missing-docs-crate.rs
@@ -1,13 +1,3 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
#![deny(missing_docs)] //~ ERROR
pub struct Foo; //~ ERROR
diff --git a/src/test/rustdoc-ui/deny-missing-docs-crate.stderr b/src/test/rustdoc-ui/deny-missing-docs-crate.stderr
index 7f0590e..1cfd609 100644
--- a/src/test/rustdoc-ui/deny-missing-docs-crate.stderr
+++ b/src/test/rustdoc-ui/deny-missing-docs-crate.stderr
@@ -1,5 +1,5 @@
error: missing documentation for crate
- --> $DIR/deny-missing-docs-crate.rs:11:1
+ --> $DIR/deny-missing-docs-crate.rs:1:1
|
LL | / #![deny(missing_docs)] //~ ERROR
LL | |
@@ -7,13 +7,13 @@
| |_______________^
|
note: lint level defined here
- --> $DIR/deny-missing-docs-crate.rs:11:9
+ --> $DIR/deny-missing-docs-crate.rs:1:9
|
LL | #![deny(missing_docs)] //~ ERROR
| ^^^^^^^^^^^^
error: missing documentation for a struct
- --> $DIR/deny-missing-docs-crate.rs:13:1
+ --> $DIR/deny-missing-docs-crate.rs:3:1
|
LL | pub struct Foo; //~ ERROR
| ^^^^^^^^^^^^^^^
diff --git a/src/test/rustdoc-ui/deny-missing-docs-macro.rs b/src/test/rustdoc-ui/deny-missing-docs-macro.rs
index a12fe17..b1c1253 100644
--- a/src/test/rustdoc-ui/deny-missing-docs-macro.rs
+++ b/src/test/rustdoc-ui/deny-missing-docs-macro.rs
@@ -1,13 +1,3 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
//! foo
#![deny(missing_docs)]
diff --git a/src/test/rustdoc-ui/deny-missing-docs-macro.stderr b/src/test/rustdoc-ui/deny-missing-docs-macro.stderr
index 686a450..b87e60d 100644
--- a/src/test/rustdoc-ui/deny-missing-docs-macro.stderr
+++ b/src/test/rustdoc-ui/deny-missing-docs-macro.stderr
@@ -1,11 +1,11 @@
error: missing documentation for macro
- --> $DIR/deny-missing-docs-macro.rs:16:1
+ --> $DIR/deny-missing-docs-macro.rs:6:1
|
LL | macro_rules! foo { //~ ERROR
| ^^^^^^^^^^^^^^^^
|
note: lint level defined here
- --> $DIR/deny-missing-docs-macro.rs:13:9
+ --> $DIR/deny-missing-docs-macro.rs:3:9
|
LL | #![deny(missing_docs)]
| ^^^^^^^^^^^^
diff --git a/src/test/rustdoc-ui/failed-doctest-output.stdout b/src/test/rustdoc-ui/failed-doctest-output.stdout
index 9fd46e9..8af05e9 100644
--- a/src/test/rustdoc-ui/failed-doctest-output.stdout
+++ b/src/test/rustdoc-ui/failed-doctest-output.stdout
@@ -12,7 +12,7 @@
3 | no
| ^^ not found in this scope
-thread '$DIR/failed-doctest-output.rs - OtherStruct (line 17)' panicked at 'couldn't compile the test', src/librustdoc/test.rs:321:13
+thread '$DIR/failed-doctest-output.rs - OtherStruct (line 17)' panicked at 'couldn't compile the test', src/librustdoc/test.rs:354:13
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
---- $DIR/failed-doctest-output.rs - SomeStruct (line 11) stdout ----
@@ -21,7 +21,7 @@
thread 'main' panicked at 'oh no', $DIR/failed-doctest-output.rs:3:1
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
-', src/librustdoc/test.rs:356:17
+', src/librustdoc/test.rs:389:17
failures:
diff --git a/src/test/rustdoc/assoc-consts-version.rs b/src/test/rustdoc/assoc-consts-version.rs
index 3f3c251..c561269 100644
--- a/src/test/rustdoc/assoc-consts-version.rs
+++ b/src/test/rustdoc/assoc-consts-version.rs
@@ -10,7 +10,7 @@
pub struct SomeStruct;
impl SomeStruct {
- // @has 'foo/struct.SomeStruct.html' '//*[@id="SOME_CONST.v"]//div[@class="since"]' '1.1.2'
+ // @has 'foo/struct.SomeStruct.html' '//*[@id="associatedconstant.SOME_CONST"]//div[@class="since"]' '1.1.2'
#[stable(since="1.1.2", feature="rust2")]
pub const SOME_CONST: usize = 0;
}
diff --git a/src/test/rustdoc/auxiliary/enum_primitive.rs b/src/test/rustdoc/auxiliary/enum_primitive.rs
index c265ae4..eff47e8 100644
--- a/src/test/rustdoc/auxiliary/enum_primitive.rs
+++ b/src/test/rustdoc/auxiliary/enum_primitive.rs
@@ -19,7 +19,6 @@
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
//! This crate exports a macro `enum_from_primitive!` that wraps an
//! `enum` declaration and automatically adds an implementation of
//! `num::FromPrimitive` (reexported here), to allow conversion from
@@ -52,7 +51,6 @@
//! }
//! ```
-
pub mod num_traits {
pub trait FromPrimitive: Sized {
fn from_i64(n: i64) -> Option<Self>;
@@ -207,4 +205,3 @@
enum_from_primitive_impl! { $name, $( $( $variant )+ )+ }
};
}
-
diff --git a/src/test/rustdoc/const.rs b/src/test/rustdoc/const.rs
index f3118bb..c33db58 100644
--- a/src/test/rustdoc/const.rs
+++ b/src/test/rustdoc/const.rs
@@ -3,7 +3,7 @@
pub struct Foo;
impl Foo {
- // @has const/struct.Foo.html '//*[@id="new.v"]//code' 'const unsafe fn new'
+ // @has const/struct.Foo.html '//code[@id="new.v"]' 'const unsafe fn new'
pub const unsafe fn new() -> Foo {
Foo
}
diff --git a/src/test/rustdoc/issue-25001.rs b/src/test/rustdoc/issue-25001.rs
index 3c1580f..55d8ee3 100644
--- a/src/test/rustdoc/issue-25001.rs
+++ b/src/test/rustdoc/issue-25001.rs
@@ -9,17 +9,17 @@
impl Foo<u8> {
// @has - '//*[@id="method.pass"]//code' 'fn pass()'
- // @has - '//*[@id="pass.v"]//code' 'fn pass()'
+ // @has - '//code[@id="pass.v"]' 'fn pass()'
pub fn pass() {}
}
impl Foo<u16> {
// @has - '//*[@id="method.pass-1"]//code' 'fn pass() -> usize'
- // @has - '//*[@id="pass.v-1"]//code' 'fn pass() -> usize'
+ // @has - '//code[@id="pass.v-1"]' 'fn pass() -> usize'
pub fn pass() -> usize { 42 }
}
impl Foo<u32> {
// @has - '//*[@id="method.pass-2"]//code' 'fn pass() -> isize'
- // @has - '//*[@id="pass.v-2"]//code' 'fn pass() -> isize'
+ // @has - '//code[@id="pass.v-2"]' 'fn pass() -> isize'
pub fn pass() -> isize { 42 }
}
diff --git a/src/test/rustdoc/issue-51236.rs b/src/test/rustdoc/issue-51236.rs
index b57a067..d9accf9 100644
--- a/src/test/rustdoc/issue-51236.rs
+++ b/src/test/rustdoc/issue-51236.rs
@@ -7,7 +7,7 @@
}
// @has issue_51236/struct.Owned.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<T> Send for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<T> Send for \
// Owned<T> where <T as Owned<'static>>::Reader: Send"
pub struct Owned<T> where T: for<'a> ::traits::Owned<'a> {
marker: PhantomData<<T as ::traits::Owned<'static>>::Reader>,
diff --git a/src/test/rustdoc/issue-54705.rs b/src/test/rustdoc/issue-54705.rs
index 34f71fa..263b1eb 100644
--- a/src/test/rustdoc/issue-54705.rs
+++ b/src/test/rustdoc/issue-54705.rs
@@ -3,10 +3,10 @@
// @has issue_54705/struct.ScopeFutureContents.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<'scope, S> \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<'scope, S> \
// Send for ScopeFutureContents<'scope, S> where S: Sync"
//
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<'scope, S> \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<'scope, S> \
// Sync for ScopeFutureContents<'scope, S> where S: Sync"
pub struct ScopeFutureContents<'scope, S>
where S: ScopeHandle<'scope>,
diff --git a/src/test/rustdoc/issue-55321.rs b/src/test/rustdoc/issue-55321.rs
index 5c34a4d..257cb32 100644
--- a/src/test/rustdoc/issue-55321.rs
+++ b/src/test/rustdoc/issue-55321.rs
@@ -1,16 +1,16 @@
#![feature(optin_builtin_traits)]
// @has issue_55321/struct.A.html
-// @has - '//*[@id="implementations-list"]/*[@class="impl"]//*/code' "impl !Send for A"
-// @has - '//*[@id="implementations-list"]/*[@class="impl"]//*/code' "impl !Sync for A"
+// @has - '//*[@id="implementations-list"]/*[@class="impl"]//code' "impl !Send for A"
+// @has - '//*[@id="implementations-list"]/*[@class="impl"]//code' "impl !Sync for A"
pub struct A();
impl !Send for A {}
impl !Sync for A {}
// @has issue_55321/struct.B.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<T> !Send for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<T> !Send for \
// B<T>"
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<T> !Sync for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<T> !Sync for \
// B<T>"
pub struct B<T: ?Sized>(A, Box<T>);
diff --git a/src/test/rustdoc/issue-56701.rs b/src/test/rustdoc/issue-56701.rs
new file mode 100644
index 0000000..6fb30a4
--- /dev/null
+++ b/src/test/rustdoc/issue-56701.rs
@@ -0,0 +1,34 @@
+// This shouldn't cause a stack overflow when rustdoc is run
+
+use std::ops::Deref;
+use std::ops::DerefMut;
+
+pub trait SimpleTrait {
+ type SimpleT;
+}
+
+impl<Inner: SimpleTrait, Outer: Deref<Target = Inner>> SimpleTrait for Outer {
+ type SimpleT = Inner::SimpleT;
+}
+
+pub trait AnotherTrait {
+ type AnotherT;
+}
+
+impl<T, Simple: SimpleTrait<SimpleT = Vec<T>>> AnotherTrait for Simple {
+ type AnotherT = T;
+}
+
+pub struct Unrelated<Inner, UnrelatedT: DerefMut<Target = Vec<Inner>>>(UnrelatedT);
+
+impl<Inner, UnrelatedT: DerefMut<Target = Vec<Inner>>> Deref for Unrelated<Inner, UnrelatedT> {
+ type Target = Vec<Inner>;
+
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+
+
+pub fn main() { }
+
diff --git a/src/test/rustdoc/issue-56822.rs b/src/test/rustdoc/issue-56822.rs
index 2d6cb13..5b67817 100644
--- a/src/test/rustdoc/issue-56822.rs
+++ b/src/test/rustdoc/issue-56822.rs
@@ -17,7 +17,7 @@
}
// @has issue_56822/struct.Parser.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<'a> Send for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<'a> Send for \
// Parser<'a>"
pub struct Parser<'a> {
field: <Wrapper<Inner<'a, u8>> as MyTrait>::Output
diff --git a/src/test/rustdoc/no-crate-filter.rs b/src/test/rustdoc/no-crate-filter.rs
index e49ce9e..c694d14 100644
--- a/src/test/rustdoc/no-crate-filter.rs
+++ b/src/test/rustdoc/no-crate-filter.rs
@@ -1,13 +1,3 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
#![crate_name = "foo"]
// compile-flags: -Z unstable-options --disable-per-crate-search
diff --git a/src/test/rustdoc/synthetic_auto/complex.rs b/src/test/rustdoc/synthetic_auto/complex.rs
index d2533a2..609cefc 100644
--- a/src/test/rustdoc/synthetic_auto/complex.rs
+++ b/src/test/rustdoc/synthetic_auto/complex.rs
@@ -20,7 +20,7 @@
}
// @has complex/struct.NotOuter.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<'a, T, K: \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<'a, T, K: \
// ?Sized> Send for NotOuter<'a, T, K> where K: for<'b> Fn((&'b bool, &'a u8)) \
// -> &'b i8, T: MyTrait<'a>, <T as MyTrait<'a>>::MyItem: Copy, 'a: 'static"
diff --git a/src/test/rustdoc/synthetic_auto/lifetimes.rs b/src/test/rustdoc/synthetic_auto/lifetimes.rs
index 03b84c7..6d0a68f 100644
--- a/src/test/rustdoc/synthetic_auto/lifetimes.rs
+++ b/src/test/rustdoc/synthetic_auto/lifetimes.rs
@@ -9,10 +9,10 @@
{}
// @has lifetimes/struct.Foo.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<'c, K> Send \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<'c, K> Send \
// for Foo<'c, K> where K: for<'b> Fn(&'b bool) -> &'c u8, 'c: 'static"
//
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<'c, K> Sync \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<'c, K> Sync \
// for Foo<'c, K> where K: Sync"
pub struct Foo<'c, K: 'c> {
inner_field: Inner<'c, K>,
diff --git a/src/test/rustdoc/synthetic_auto/manual.rs b/src/test/rustdoc/synthetic_auto/manual.rs
index c7cfa0c..413ba18 100644
--- a/src/test/rustdoc/synthetic_auto/manual.rs
+++ b/src/test/rustdoc/synthetic_auto/manual.rs
@@ -1,8 +1,8 @@
// @has manual/struct.Foo.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' 'impl<T> Sync for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' 'impl<T> Sync for \
// Foo<T> where T: Sync'
//
-// @has - '//*[@id="implementations-list"]/*[@class="impl"]//*/code' \
+// @has - '//*[@id="implementations-list"]/*[@class="impl"]//code' \
// 'impl<T> Send for Foo<T>'
//
// @count - '//*[@id="implementations-list"]/*[@class="impl"]' 1
diff --git a/src/test/rustdoc/synthetic_auto/negative.rs b/src/test/rustdoc/synthetic_auto/negative.rs
index 5b6304e..3071384 100644
--- a/src/test/rustdoc/synthetic_auto/negative.rs
+++ b/src/test/rustdoc/synthetic_auto/negative.rs
@@ -3,10 +3,10 @@
}
// @has negative/struct.Outer.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<T> !Send for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<T> !Send for \
// Outer<T>"
//
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<T> \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<T> \
// !Sync for Outer<T>"
pub struct Outer<T: Copy> {
inner_field: Inner<T>,
diff --git a/src/test/rustdoc/synthetic_auto/nested.rs b/src/test/rustdoc/synthetic_auto/nested.rs
index 75d2ff2..e710ce1 100644
--- a/src/test/rustdoc/synthetic_auto/nested.rs
+++ b/src/test/rustdoc/synthetic_auto/nested.rs
@@ -9,10 +9,10 @@
}
// @has nested/struct.Foo.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' 'impl<T> Send for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' 'impl<T> Send for \
// Foo<T> where T: Copy'
//
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' \
// 'impl<T> Sync for Foo<T> where T: Sync'
pub struct Foo<T> {
inner_field: Inner<T>,
diff --git a/src/test/rustdoc/synthetic_auto/no-redundancy.rs b/src/test/rustdoc/synthetic_auto/no-redundancy.rs
index 9240271..cf17311 100644
--- a/src/test/rustdoc/synthetic_auto/no-redundancy.rs
+++ b/src/test/rustdoc/synthetic_auto/no-redundancy.rs
@@ -9,7 +9,7 @@
}
// @has no_redundancy/struct.Outer.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<T> Send for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<T> Send for \
// Outer<T> where T: Copy + Send"
pub struct Outer<T> {
inner_field: Inner<T>,
diff --git a/src/test/rustdoc/synthetic_auto/project.rs b/src/test/rustdoc/synthetic_auto/project.rs
index 6be6b44..5346521 100644
--- a/src/test/rustdoc/synthetic_auto/project.rs
+++ b/src/test/rustdoc/synthetic_auto/project.rs
@@ -23,10 +23,10 @@
}
// @has project/struct.Foo.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<'c, K> Send \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<'c, K> Send \
// for Foo<'c, K> where K: MyTrait<MyItem = bool>, 'c: 'static"
//
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<'c, K> Sync \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<'c, K> Sync \
// for Foo<'c, K> where K: MyTrait, <K as MyTrait>::MyItem: OtherTrait, 'c: 'static,"
pub struct Foo<'c, K: 'c> {
inner_field: Inner<'c, K>,
diff --git a/src/test/rustdoc/synthetic_auto/self-referential.rs b/src/test/rustdoc/synthetic_auto/self-referential.rs
index 0dca8fe..7d15434 100644
--- a/src/test/rustdoc/synthetic_auto/self-referential.rs
+++ b/src/test/rustdoc/synthetic_auto/self-referential.rs
@@ -23,7 +23,7 @@
// @has self_referential/struct.WriteAndThen.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<P1> Send for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<P1> Send for \
// WriteAndThen<P1> where <P1 as Pattern>::Value: Send"
pub struct WriteAndThen<P1>(pub P1::Value,pub <Constrain<P1, Wrapper<P1::Value>> as Pattern>::Value)
where P1: Pattern;
diff --git a/src/test/rustdoc/synthetic_auto/static-region.rs b/src/test/rustdoc/synthetic_auto/static-region.rs
index d1d50fb..5949374 100644
--- a/src/test/rustdoc/synthetic_auto/static-region.rs
+++ b/src/test/rustdoc/synthetic_auto/static-region.rs
@@ -3,7 +3,7 @@
}
// @has static_region/struct.Owned.html
-// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//*/code' "impl<T> Send for \
+// @has - '//*[@id="synthetic-implementations-list"]/*[@class="impl"]//code' "impl<T> Send for \
// Owned<T> where <T as OwnedTrait<'static>>::Reader: Send"
pub struct Owned<T> where T: OwnedTrait<'static> {
marker: <T as OwnedTrait<'static>>::Reader,
diff --git a/src/test/ui/associated-const/associated-const-upper-case-lint.stderr b/src/test/ui/associated-const/associated-const-upper-case-lint.stderr
deleted file mode 100644
index 43feb03..0000000
--- a/src/test/ui/associated-const/associated-const-upper-case-lint.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error: associated constant `not_upper` should have an upper case name such as `NOT_UPPER`
- --> $DIR/associated-const-upper-case-lint.rs:7:5
- |
-LL | const not_upper: bool = true;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
-note: lint level defined here
- --> $DIR/associated-const-upper-case-lint.rs:1:9
- |
-LL | #![deny(non_upper_case_globals)]
- | ^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/associated-types/associated-types-eq-1.stderr b/src/test/ui/associated-types/associated-types-eq-1.stderr
index a517bf8..0935d6a 100644
--- a/src/test/ui/associated-types/associated-types-eq-1.stderr
+++ b/src/test/ui/associated-types/associated-types-eq-1.stderr
@@ -2,7 +2,7 @@
--> $DIR/associated-types-eq-1.rs:10:12
|
LL | let _: A = x.boo(); //~ ERROR cannot find type `A` in this scope
- | ^ did you mean `I`?
+ | ^ help: a type parameter with a similar name exists: `I`
error: aborting due to previous error
diff --git a/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-1.stderr b/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-1.stderr
index 75c0d91..c4c0cee 100644
--- a/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-1.stderr
+++ b/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-1.stderr
@@ -2,7 +2,7 @@
--> $DIR/attrs-with-no-formal-in-generics-1.rs:9:25
|
LL | impl<#[rustc_1] 'a, 'b, #[oops]> RefIntPair<'a, 'b> {
- | ^^^^^^^
+ | ^^^^^^^ attributes must go before parameters
error: aborting due to previous error
diff --git a/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-2.stderr b/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-2.stderr
index 7585c6d..9099d74 100644
--- a/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-2.stderr
+++ b/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-2.stderr
@@ -2,7 +2,7 @@
--> $DIR/attrs-with-no-formal-in-generics-2.rs:9:35
|
LL | impl<#[rustc_1] 'a, #[rustc_2] T, #[oops]> RefAny<'a, T> {}
- | ^^^^^^^
+ | ^^^^^^^ attributes must go before parameters
error: aborting due to previous error
diff --git a/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-3.rs b/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-3.rs
index 343a2d7..e9f908d 100644
--- a/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-3.rs
+++ b/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-3.rs
@@ -5,12 +5,8 @@
struct RefIntPair<'a, 'b>(&'a u32, &'b u32);
fn hof_lt<Q>(_: Q)
- where Q: for <#[rustc_1] 'a, 'b, #[oops]> Fn(RefIntPair<'a,'b>) -> &'b u32
+ where Q: for <#[allow(unused)] 'a, 'b, #[oops]> Fn(RefIntPair<'a,'b>) -> &'b u32
//~^ ERROR trailing attribute after lifetime parameters
-{
+{}
-}
-
-fn main() {
-
-}
+fn main() {}
diff --git a/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-3.stderr b/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-3.stderr
index 9196051..452f0ea 100644
--- a/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-3.stderr
+++ b/src/test/ui/attrs-with-no-formal-in-generics/attrs-with-no-formal-in-generics-3.stderr
@@ -1,8 +1,8 @@
error: trailing attribute after lifetime parameters
- --> $DIR/attrs-with-no-formal-in-generics-3.rs:8:38
+ --> $DIR/attrs-with-no-formal-in-generics-3.rs:8:44
|
-LL | where Q: for <#[rustc_1] 'a, 'b, #[oops]> Fn(RefIntPair<'a,'b>) -> &'b u32
- | ^^^^^^^
+LL | where Q: for <#[allow(unused)] 'a, 'b, #[oops]> Fn(RefIntPair<'a,'b>) -> &'b u32
+ | ^^^^^^^ attributes must go before parameters
error: aborting due to previous error
diff --git a/src/test/ui/block-result/issue-13624.stderr b/src/test/ui/block-result/issue-13624.stderr
index b38633b..417667a 100644
--- a/src/test/ui/block-result/issue-13624.stderr
+++ b/src/test/ui/block-result/issue-13624.stderr
@@ -12,6 +12,8 @@
error[E0308]: mismatched types
--> $DIR/issue-13624.rs:22:9
|
+LL | match enum_struct_variant {
+ | ------------------- this match expression has type `()`
LL | a::Enum::EnumStructVariant { x, y, z } => {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected (), found enum `a::Enum`
|
diff --git a/src/test/ui/cast/cast-as-bool.rs b/src/test/ui/cast/cast-as-bool.rs
index 7a0bd0e..8130f4d 100644
--- a/src/test/ui/cast/cast-as-bool.rs
+++ b/src/test/ui/cast/cast-as-bool.rs
@@ -1,4 +1,9 @@
fn main() {
- let u = 5 as bool;
- //~^ ERROR cannot cast as `bool`
+ let u = 5 as bool; //~ ERROR cannot cast as `bool`
+ //~| HELP compare with zero instead
+ //~| SUGGESTION 5 != 0
+ let t = (1 + 2) as bool; //~ ERROR cannot cast as `bool`
+ //~| HELP compare with zero instead
+ //~| SUGGESTION (1 + 2) != 0
+ let v = "hello" as bool; //~ ERROR cannot cast as `bool`
}
diff --git a/src/test/ui/cast/cast-as-bool.stderr b/src/test/ui/cast/cast-as-bool.stderr
index 086d08a..6099a41 100644
--- a/src/test/ui/cast/cast-as-bool.stderr
+++ b/src/test/ui/cast/cast-as-bool.stderr
@@ -1,11 +1,21 @@
error[E0054]: cannot cast as `bool`
--> $DIR/cast-as-bool.rs:2:13
|
-LL | let u = 5 as bool;
- | ^^^^^^^^^ unsupported cast
- |
- = help: compare with zero instead
+LL | let u = 5 as bool; //~ ERROR cannot cast as `bool`
+ | ^^^^^^^^^ help: compare with zero instead: `5 != 0`
-error: aborting due to previous error
+error[E0054]: cannot cast as `bool`
+ --> $DIR/cast-as-bool.rs:5:13
+ |
+LL | let t = (1 + 2) as bool; //~ ERROR cannot cast as `bool`
+ | ^^^^^^^^^^^^^^^ help: compare with zero instead: `(1 + 2) != 0`
+
+error[E0054]: cannot cast as `bool`
+ --> $DIR/cast-as-bool.rs:8:13
+ |
+LL | let v = "hello" as bool; //~ ERROR cannot cast as `bool`
+ | ^^^^^^^^^^^^^^^ unsupported cast
+
+error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0054`.
diff --git a/src/test/ui/cast/cast-rfc0401-2.stderr b/src/test/ui/cast/cast-rfc0401-2.stderr
index 3bf6e53..52f6af7 100644
--- a/src/test/ui/cast/cast-rfc0401-2.stderr
+++ b/src/test/ui/cast/cast-rfc0401-2.stderr
@@ -2,9 +2,7 @@
--> $DIR/cast-rfc0401-2.rs:6:13
|
LL | let _ = 3 as bool;
- | ^^^^^^^^^ unsupported cast
- |
- = help: compare with zero instead
+ | ^^^^^^^^^ help: compare with zero instead: `3 != 0`
error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.rs b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.rs
new file mode 100644
index 0000000..5ea6919
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.rs
@@ -0,0 +1,29 @@
+#![feature(optin_builtin_traits)]
+
+// Test for issue #56934 - that it is impossible to redundantly
+// implement an auto-trait for a trait object type that contains it.
+
+// Negative impl variant.
+
+auto trait Marker1 {}
+auto trait Marker2 {}
+
+trait Object: Marker1 {}
+
+// A supertrait marker is illegal...
+impl !Marker1 for dyn Object + Marker2 { } //~ ERROR E0371
+// ...and also a direct component.
+impl !Marker2 for dyn Object + Marker2 { } //~ ERROR E0371
+
+// But implementing a marker if it is not present is OK.
+impl !Marker2 for dyn Object {} // OK
+
+// A non-principal trait-object type is orphan even in its crate.
+impl !Send for dyn Marker2 {} //~ ERROR E0117
+
+// And impl'ing a remote marker for a local trait object is forbidden
+// by one of these special orphan-like rules.
+impl !Send for dyn Object {} //~ ERROR E0321
+impl !Send for dyn Object + Marker2 {} //~ ERROR E0321
+
+fn main() { }
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.stderr b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.stderr
new file mode 100644
index 0000000..c8a146c
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.stderr
@@ -0,0 +1,37 @@
+error[E0371]: the object type `(dyn Object + Marker2 + 'static)` automatically implements the trait `Marker1`
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:14:1
+ |
+LL | impl !Marker1 for dyn Object + Marker2 { } //~ ERROR E0371
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `(dyn Object + Marker2 + 'static)` automatically implements trait `Marker1`
+
+error[E0371]: the object type `(dyn Object + Marker2 + 'static)` automatically implements the trait `Marker2`
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:16:1
+ |
+LL | impl !Marker2 for dyn Object + Marker2 { } //~ ERROR E0371
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `(dyn Object + Marker2 + 'static)` automatically implements trait `Marker2`
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:22:1
+ |
+LL | impl !Send for dyn Marker2 {} //~ ERROR E0117
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+ |
+ = note: the impl does not reference only types defined in this crate
+ = note: define and implement a trait or new type instead
+
+error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `(dyn Object + 'static)`
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:26:1
+ |
+LL | impl !Send for dyn Object {} //~ ERROR E0321
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
+
+error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `(dyn Object + Marker2 + 'static)`
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:27:1
+ |
+LL | impl !Send for dyn Object + Marker2 {} //~ ERROR E0321
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
+
+error: aborting due to 5 previous errors
+
+Some errors occurred: E0117, E0321, E0371.
+For more information about an error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.rs b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.rs
new file mode 100644
index 0000000..6b5689e
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.rs
@@ -0,0 +1,29 @@
+#![feature(optin_builtin_traits)]
+
+// Test for issue #56934 - that it is impossible to redundantly
+// implement an auto-trait for a trait object type that contains it.
+
+// Positive impl variant.
+
+auto trait Marker1 {}
+auto trait Marker2 {}
+
+trait Object: Marker1 {}
+
+// A supertrait marker is illegal...
+impl Marker1 for dyn Object + Marker2 { } //~ ERROR E0371
+// ...and also a direct component.
+impl Marker2 for dyn Object + Marker2 { } //~ ERROR E0371
+
+// But implementing a marker if it is not present is OK.
+impl Marker2 for dyn Object {} // OK
+
+// A non-principal trait-object type is orphan even in its crate.
+unsafe impl Send for dyn Marker2 {} //~ ERROR E0117
+
+// And impl'ing a remote marker for a local trait object is forbidden
+// by one of these special orphan-like rules.
+unsafe impl Send for dyn Object {} //~ ERROR E0321
+unsafe impl Send for dyn Object + Marker2 {} //~ ERROR E0321
+
+fn main() { }
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.stderr b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.stderr
new file mode 100644
index 0000000..78ca2f5
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.stderr
@@ -0,0 +1,37 @@
+error[E0371]: the object type `(dyn Object + Marker2 + 'static)` automatically implements the trait `Marker1`
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:14:1
+ |
+LL | impl Marker1 for dyn Object + Marker2 { } //~ ERROR E0371
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `(dyn Object + Marker2 + 'static)` automatically implements trait `Marker1`
+
+error[E0371]: the object type `(dyn Object + Marker2 + 'static)` automatically implements the trait `Marker2`
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:16:1
+ |
+LL | impl Marker2 for dyn Object + Marker2 { } //~ ERROR E0371
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `(dyn Object + Marker2 + 'static)` automatically implements trait `Marker2`
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:22:1
+ |
+LL | unsafe impl Send for dyn Marker2 {} //~ ERROR E0117
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+ |
+ = note: the impl does not reference only types defined in this crate
+ = note: define and implement a trait or new type instead
+
+error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `(dyn Object + 'static)`
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:26:1
+ |
+LL | unsafe impl Send for dyn Object {} //~ ERROR E0321
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
+
+error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `(dyn Object + Marker2 + 'static)`
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:27:1
+ |
+LL | unsafe impl Send for dyn Object + Marker2 {} //~ ERROR E0321
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
+
+error: aborting due to 5 previous errors
+
+Some errors occurred: E0117, E0321, E0371.
+For more information about an error, try `rustc --explain E0117`.
diff --git a/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.rs b/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.rs
index c7e1b44..c5aa903 100644
--- a/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.rs
+++ b/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.rs
@@ -27,7 +27,8 @@
macro_rules! generate_s10 {
($expr: expr) => {
- #[cfg(feature = $expr)] //~ ERROR `cfg` is not a well-formed meta-item
+ #[cfg(feature = $expr)]
+ //~^ ERROR expected unsuffixed literal or identifier, found concat!("nonexistent")
struct S10;
}
}
diff --git a/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.stderr b/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.stderr
index da06a81..bcf13ea 100644
--- a/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.stderr
+++ b/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.stderr
@@ -52,11 +52,11 @@
LL | #[cfg(a = b"hi")] //~ ERROR literal in `cfg` predicate value must be a string
| ^^^^^ help: consider removing the prefix: `"hi"`
-error: `cfg` is not a well-formed meta-item
- --> $DIR/cfg-attr-syntax-validation.rs:30:9
+error: expected unsuffixed literal or identifier, found concat!("nonexistent")
+ --> $DIR/cfg-attr-syntax-validation.rs:30:15
|
-LL | #[cfg(feature = $expr)] //~ ERROR `cfg` is not a well-formed meta-item
- | ^^^^^^^^^^^^^^^^^^^^^^^ help: expected syntax is: `#[cfg(/* predicate */)]`
+LL | #[cfg(feature = $expr)]
+ | ^^^^^^^
...
LL | generate_s10!(concat!("nonexistent"));
| -------------------------------------- in this macro invocation
diff --git a/src/test/ui/cycle-trait/cycle-trait-default-type-trait.stderr b/src/test/ui/cycle-trait/cycle-trait-default-type-trait.stderr
index 1a75eb5..aa45462 100644
--- a/src/test/ui/cycle-trait/cycle-trait-default-type-trait.stderr
+++ b/src/test/ui/cycle-trait/cycle-trait-default-type-trait.stderr
@@ -5,6 +5,11 @@
| ^^^
|
= note: ...which again requires processing `Foo::X`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/cycle-trait-default-type-trait.rs:4:1
+ |
+LL | trait Foo<X = Box<Foo>> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/src/test/ui/cycle-trait/cycle-trait-supertrait-direct.stderr b/src/test/ui/cycle-trait/cycle-trait-supertrait-direct.stderr
index 22efa8e..8aa3ac8a 100644
--- a/src/test/ui/cycle-trait/cycle-trait-supertrait-direct.stderr
+++ b/src/test/ui/cycle-trait/cycle-trait-supertrait-direct.stderr
@@ -5,6 +5,11 @@
| ^^^^^^^^^^
|
= note: ...which again requires computing the supertraits of `Chromosome`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/cycle-trait-supertrait-direct.rs:3:1
+ |
+LL | trait Chromosome: Chromosome {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/src/test/ui/derives/deriving-meta-empty-trait-list.rs b/src/test/ui/derives/deriving-meta-empty-trait-list.rs
index 98da6d2..8824841 100644
--- a/src/test/ui/derives/deriving-meta-empty-trait-list.rs
+++ b/src/test/ui/derives/deriving-meta-empty-trait-list.rs
@@ -1,9 +1,4 @@
-// run-pass
-
-#![allow(dead_code)]
-
-#[derive] //~ WARNING empty trait list in `derive`
-struct Foo;
+// compile-pass
#[derive()] //~ WARNING empty trait list in `derive`
struct Bar;
diff --git a/src/test/ui/derives/deriving-meta-empty-trait-list.stderr b/src/test/ui/derives/deriving-meta-empty-trait-list.stderr
index dbc2387..191bb78 100644
--- a/src/test/ui/derives/deriving-meta-empty-trait-list.stderr
+++ b/src/test/ui/derives/deriving-meta-empty-trait-list.stderr
@@ -1,11 +1,5 @@
warning: empty trait list in `derive`
- --> $DIR/deriving-meta-empty-trait-list.rs:5:1
- |
-LL | #[derive] //~ WARNING empty trait list in `derive`
- | ^^^^^^^^^
-
-warning: empty trait list in `derive`
- --> $DIR/deriving-meta-empty-trait-list.rs:8:1
+ --> $DIR/deriving-meta-empty-trait-list.rs:3:1
|
LL | #[derive()] //~ WARNING empty trait list in `derive`
| ^^^^^^^^^^^
diff --git a/src/test/ui/did_you_mean/recursion_limit.stderr b/src/test/ui/did_you_mean/recursion_limit.stderr
index 08947fd..0738c3f 100644
--- a/src/test/ui/did_you_mean/recursion_limit.stderr
+++ b/src/test/ui/did_you_mean/recursion_limit.stderr
@@ -1,11 +1,10 @@
-error[E0275]: overflow evaluating the requirement `K: std::marker::Send`
+error[E0275]: overflow evaluating the requirement `J: std::marker::Send`
--> $DIR/recursion_limit.rs:34:5
|
LL | is_send::<A>(); //~ ERROR overflow evaluating the requirement
| ^^^^^^^^^^^^
|
= help: consider adding a `#![recursion_limit="20"]` attribute to your crate
- = note: required because it appears within the type `J`
= note: required because it appears within the type `I`
= note: required because it appears within the type `H`
= note: required because it appears within the type `G`
diff --git a/src/test/ui/empty/empty-struct-braces-expr.stderr b/src/test/ui/empty/empty-struct-braces-expr.stderr
index d3e1ceb..e595e0c 100644
--- a/src/test/ui/empty/empty-struct-braces-expr.stderr
+++ b/src/test/ui/empty/empty-struct-braces-expr.stderr
@@ -4,8 +4,8 @@
LL | let e1 = Empty1; //~ ERROR expected value, found struct `Empty1`
| ^^^^^^
| |
- | did you mean `XEmpty2`?
| did you mean `Empty1 { /* fields */ }`?
+ | help: a unit struct with a similar name exists: `XEmpty2`
error[E0423]: expected function, found struct `Empty1`
--> $DIR/empty-struct-braces-expr.rs:16:14
@@ -13,8 +13,8 @@
LL | let e1 = Empty1(); //~ ERROR expected function, found struct `Empty1`
| ^^^^^^
| |
- | did you mean `XEmpty2`?
| did you mean `Empty1 { /* fields */ }`?
+ | help: a unit struct with a similar name exists: `XEmpty2`
error[E0423]: expected value, found struct variant `E::Empty3`
--> $DIR/empty-struct-braces-expr.rs:17:14
@@ -34,8 +34,8 @@
LL | let xe1 = XEmpty1; //~ ERROR expected value, found struct `XEmpty1`
| ^^^^^^^
| |
- | did you mean `XEmpty2`?
| did you mean `XEmpty1 { /* fields */ }`?
+ | help: a unit struct with a similar name exists: `XEmpty2`
error[E0423]: expected function, found struct `XEmpty1`
--> $DIR/empty-struct-braces-expr.rs:21:15
@@ -43,8 +43,8 @@
LL | let xe1 = XEmpty1(); //~ ERROR expected function, found struct `XEmpty1`
| ^^^^^^^
| |
- | did you mean `XEmpty2`?
| did you mean `XEmpty1 { /* fields */ }`?
+ | help: a unit struct with a similar name exists: `XEmpty2`
error[E0599]: no variant named `Empty3` found for type `empty_struct::XE` in the current scope
--> $DIR/empty-struct-braces-expr.rs:22:19
diff --git a/src/test/ui/empty/empty-struct-braces-pat-1.stderr b/src/test/ui/empty/empty-struct-braces-pat-1.stderr
index f432625..6c361c7 100644
--- a/src/test/ui/empty/empty-struct-braces-pat-1.stderr
+++ b/src/test/ui/empty/empty-struct-braces-pat-1.stderr
@@ -10,7 +10,7 @@
LL | XE::XEmpty3 => ()
| ^^^^-------
| | |
- | | did you mean `XEmpty4`?
+ | | help: a unit variant with a similar name exists: `XEmpty4`
| did you mean `XE::XEmpty3 { /* fields */ }`?
error: aborting due to 2 previous errors
diff --git a/src/test/ui/empty/empty-struct-braces-pat-2.stderr b/src/test/ui/empty/empty-struct-braces-pat-2.stderr
index 8c55b21..fc2ed79 100644
--- a/src/test/ui/empty/empty-struct-braces-pat-2.stderr
+++ b/src/test/ui/empty/empty-struct-braces-pat-2.stderr
@@ -4,8 +4,8 @@
LL | Empty1() => () //~ ERROR expected tuple struct/variant, found struct `Empty1`
| ^^^^^^
| |
- | did you mean `XEmpty6`?
| did you mean `Empty1 { /* fields */ }`?
+ | help: a tuple struct with a similar name exists: `XEmpty6`
error[E0532]: expected tuple struct/variant, found struct `XEmpty1`
--> $DIR/empty-struct-braces-pat-2.rs:18:9
@@ -13,8 +13,8 @@
LL | XEmpty1() => () //~ ERROR expected tuple struct/variant, found struct `XEmpty1`
| ^^^^^^^
| |
- | did you mean `XEmpty6`?
| did you mean `XEmpty1 { /* fields */ }`?
+ | help: a tuple struct with a similar name exists: `XEmpty6`
error[E0532]: expected tuple struct/variant, found struct `Empty1`
--> $DIR/empty-struct-braces-pat-2.rs:21:9
@@ -22,8 +22,8 @@
LL | Empty1(..) => () //~ ERROR expected tuple struct/variant, found struct `Empty1`
| ^^^^^^
| |
- | did you mean `XEmpty6`?
| did you mean `Empty1 { /* fields */ }`?
+ | help: a tuple struct with a similar name exists: `XEmpty6`
error[E0532]: expected tuple struct/variant, found struct `XEmpty1`
--> $DIR/empty-struct-braces-pat-2.rs:24:9
@@ -31,8 +31,8 @@
LL | XEmpty1(..) => () //~ ERROR expected tuple struct/variant, found struct `XEmpty1`
| ^^^^^^^
| |
- | did you mean `XEmpty6`?
| did you mean `XEmpty1 { /* fields */ }`?
+ | help: a tuple struct with a similar name exists: `XEmpty6`
error: aborting due to 4 previous errors
diff --git a/src/test/ui/empty/empty-struct-braces-pat-3.stderr b/src/test/ui/empty/empty-struct-braces-pat-3.stderr
index 17670cb..af8731b 100644
--- a/src/test/ui/empty/empty-struct-braces-pat-3.stderr
+++ b/src/test/ui/empty/empty-struct-braces-pat-3.stderr
@@ -10,7 +10,7 @@
LL | XE::XEmpty3() => ()
| ^^^^-------
| | |
- | | did you mean `XEmpty5`?
+ | | help: a tuple variant with a similar name exists: `XEmpty5`
| did you mean `XE::XEmpty3 { /* fields */ }`?
error[E0532]: expected tuple struct/variant, found struct variant `E::Empty3`
@@ -25,7 +25,7 @@
LL | XE::XEmpty3(..) => ()
| ^^^^-------
| | |
- | | did you mean `XEmpty5`?
+ | | help: a tuple variant with a similar name exists: `XEmpty5`
| did you mean `XE::XEmpty3 { /* fields */ }`?
error: aborting due to 4 previous errors
diff --git a/src/test/ui/empty/empty-struct-tuple-pat.stderr b/src/test/ui/empty/empty-struct-tuple-pat.stderr
index 4cb869e..f92c4e5 100644
--- a/src/test/ui/empty/empty-struct-tuple-pat.stderr
+++ b/src/test/ui/empty/empty-struct-tuple-pat.stderr
@@ -28,7 +28,7 @@
LL | XE::XEmpty5 => (),
| ^^^^-------
| |
- | did you mean `XEmpty4`?
+ | help: a unit variant with a similar name exists: `XEmpty4`
error: aborting due to 4 previous errors
diff --git a/src/test/ui/empty/empty-struct-unit-pat.stderr b/src/test/ui/empty/empty-struct-unit-pat.stderr
index 3711bd6..e622465 100644
--- a/src/test/ui/empty/empty-struct-unit-pat.stderr
+++ b/src/test/ui/empty/empty-struct-unit-pat.stderr
@@ -2,25 +2,25 @@
--> $DIR/empty-struct-unit-pat.rs:21:9
|
LL | Empty2() => () //~ ERROR expected tuple struct/variant, found unit struct `Empty2`
- | ^^^^^^ did you mean `XEmpty6`?
+ | ^^^^^^ help: a tuple struct with a similar name exists: `XEmpty6`
error[E0532]: expected tuple struct/variant, found unit struct `XEmpty2`
--> $DIR/empty-struct-unit-pat.rs:24:9
|
LL | XEmpty2() => () //~ ERROR expected tuple struct/variant, found unit struct `XEmpty2`
- | ^^^^^^^ did you mean `XEmpty6`?
+ | ^^^^^^^ help: a tuple struct with a similar name exists: `XEmpty6`
error[E0532]: expected tuple struct/variant, found unit struct `Empty2`
--> $DIR/empty-struct-unit-pat.rs:27:9
|
LL | Empty2(..) => () //~ ERROR expected tuple struct/variant, found unit struct `Empty2`
- | ^^^^^^ did you mean `XEmpty6`?
+ | ^^^^^^ help: a tuple struct with a similar name exists: `XEmpty6`
error[E0532]: expected tuple struct/variant, found unit struct `XEmpty2`
--> $DIR/empty-struct-unit-pat.rs:30:9
|
LL | XEmpty2(..) => () //~ ERROR expected tuple struct/variant, found unit struct `XEmpty2`
- | ^^^^^^^ did you mean `XEmpty6`?
+ | ^^^^^^^ help: a tuple struct with a similar name exists: `XEmpty6`
error[E0532]: expected tuple struct/variant, found unit variant `E::Empty4`
--> $DIR/empty-struct-unit-pat.rs:34:9
@@ -34,7 +34,7 @@
LL | XE::XEmpty4() => (),
| ^^^^-------
| |
- | did you mean `XEmpty5`?
+ | help: a tuple variant with a similar name exists: `XEmpty5`
error[E0532]: expected tuple struct/variant, found unit variant `E::Empty4`
--> $DIR/empty-struct-unit-pat.rs:42:9
@@ -48,7 +48,7 @@
LL | XE::XEmpty4(..) => (),
| ^^^^-------
| |
- | did you mean `XEmpty5`?
+ | help: a tuple variant with a similar name exists: `XEmpty5`
error: aborting due to 8 previous errors
diff --git a/src/test/ui/enable-unstable-lib-feature.stderr b/src/test/ui/enable-unstable-lib-feature.stderr
index d905ccc..51cfe7b 100644
--- a/src/test/ui/enable-unstable-lib-feature.stderr
+++ b/src/test/ui/enable-unstable-lib-feature.stderr
@@ -1,8 +1,8 @@
-error: function `BOGUS` should have a snake case name such as `bogus`
- --> $DIR/enable-unstable-lib-feature.rs:12:1
+error: function `BOGUS` should have a snake case name
+ --> $DIR/enable-unstable-lib-feature.rs:12:8
|
LL | pub fn BOGUS() { } //~ ERROR
- | ^^^^^^^^^^^^^^^^^^
+ | ^^^^^ help: convert the identifier to snake case: `bogus`
|
note: lint level defined here
--> $DIR/enable-unstable-lib-feature.rs:6:9
diff --git a/src/test/ui/error-codes/E0054.stderr b/src/test/ui/error-codes/E0054.stderr
index 416029c..cce32fa 100644
--- a/src/test/ui/error-codes/E0054.stderr
+++ b/src/test/ui/error-codes/E0054.stderr
@@ -2,9 +2,7 @@
--> $DIR/E0054.rs:3:24
|
LL | let x_is_nonzero = x as bool; //~ ERROR E0054
- | ^^^^^^^^^ unsupported cast
- |
- = help: compare with zero instead
+ | ^^^^^^^^^ help: compare with zero instead: `x != 0`
error: aborting due to previous error
diff --git a/src/test/ui/error-codes/E0055.rs b/src/test/ui/error-codes/E0055.rs
index a3ade92..b525575 100644
--- a/src/test/ui/error-codes/E0055.rs
+++ b/src/test/ui/error-codes/E0055.rs
@@ -1,4 +1,4 @@
-#![recursion_limit="2"]
+#![recursion_limit="5"]
struct Foo;
impl Foo {
@@ -7,7 +7,7 @@
fn main() {
let foo = Foo;
- let ref_foo = &&Foo;
+ let ref_foo = &&&&&Foo;
ref_foo.foo();
//~^ ERROR E0055
}
diff --git a/src/test/ui/error-codes/E0055.stderr b/src/test/ui/error-codes/E0055.stderr
index cd2bd92..d06566f 100644
--- a/src/test/ui/error-codes/E0055.stderr
+++ b/src/test/ui/error-codes/E0055.stderr
@@ -4,7 +4,7 @@
LL | ref_foo.foo();
| ^^^ deref recursion limit reached
|
- = help: consider adding a `#![recursion_limit="4"]` attribute to your crate
+ = help: consider adding a `#![recursion_limit="10"]` attribute to your crate
error: aborting due to previous error
diff --git a/src/test/ui/error-codes/E0232.rs b/src/test/ui/error-codes/E0232.rs
deleted file mode 100644
index 8e80624..0000000
--- a/src/test/ui/error-codes/E0232.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-#![feature(on_unimplemented)]
-
-#[rustc_on_unimplemented]
-//~^ ERROR E0232
-trait Bar {}
-
-fn main() {
-}
diff --git a/src/test/ui/error-codes/E0232.stderr b/src/test/ui/error-codes/E0232.stderr
deleted file mode 100644
index 9e9155b..0000000
--- a/src/test/ui/error-codes/E0232.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error[E0232]: `#[rustc_on_unimplemented]` requires a value
- --> $DIR/E0232.rs:3:1
- |
-LL | #[rustc_on_unimplemented]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^ value required here
- |
- = note: eg `#[rustc_on_unimplemented(message="foo")]`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0232`.
diff --git a/src/test/ui/error-codes/E0275.stderr b/src/test/ui/error-codes/E0275.stderr
index 817b482..f2b0f39 100644
--- a/src/test/ui/error-codes/E0275.stderr
+++ b/src/test/ui/error-codes/E0275.stderr
@@ -1,11 +1,10 @@
-error[E0275]: overflow evaluating the requirement `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: std::marker::Sized`
+error[E0275]: overflow evaluating the requirement `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: Foo`
--> $DIR/E0275.rs:5:1
|
LL | impl<T> Foo for T where Bar<T>: Foo {} //~ ERROR E0275
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding a `#![recursion_limit="128"]` attribute to your crate
- = note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
diff --git a/src/test/ui/error-codes/E0296.rs b/src/test/ui/error-codes/E0296.rs
deleted file mode 100644
index a1a8657..0000000
--- a/src/test/ui/error-codes/E0296.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-#![recursion_limit] //~ ERROR E0296
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0296.stderr b/src/test/ui/error-codes/E0296.stderr
deleted file mode 100644
index 41e9f7e..0000000
--- a/src/test/ui/error-codes/E0296.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0296]: malformed recursion limit attribute, expected #![recursion_limit="N"]
- --> $DIR/E0296.rs:1:1
- |
-LL | #![recursion_limit] //~ ERROR E0296
- | ^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0296`.
diff --git a/src/test/ui/error-codes/E0308-4.stderr b/src/test/ui/error-codes/E0308-4.stderr
index 8117bc7..f69a389 100644
--- a/src/test/ui/error-codes/E0308-4.stderr
+++ b/src/test/ui/error-codes/E0308-4.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/E0308-4.rs:4:9
|
+LL | match x {
+ | - this match expression has type `u8`
LL | 0u8..=3i8 => (), //~ ERROR E0308
| ^^^^^^^^^ expected u8, found i8
diff --git a/src/test/ui/error-codes/E0423.stderr b/src/test/ui/error-codes/E0423.stderr
index df9ed63..d0deb8c 100644
--- a/src/test/ui/error-codes/E0423.stderr
+++ b/src/test/ui/error-codes/E0423.stderr
@@ -22,26 +22,32 @@
LL | let f = Foo(); //~ ERROR E0423
| ^^^
| |
- | did you mean `foo`?
| did you mean `Foo { /* fields */ }`?
+ | help: a function with a similar name exists: `foo`
error[E0423]: expected value, found struct `S`
--> $DIR/E0423.rs:12:32
|
LL | if let S { x: _x, y: 2 } = S { x: 1, y: 2 } { println!("Ok"); }
- | ^ did you mean `(S { /* fields */ })`?
+ | ^---------------
+ | |
+ | help: surround the struct literal with parenthesis: `(S { x: 1, y: 2 })`
error[E0423]: expected value, found struct `T`
--> $DIR/E0423.rs:15:8
|
LL | if T {} == T {} { println!("Ok"); }
- | ^ did you mean `(T { /* fields */ })`?
+ | ^---
+ | |
+ | help: surround the struct literal with parenthesis: `(T {})`
error[E0423]: expected value, found struct `std::ops::Range`
--> $DIR/E0423.rs:21:14
|
LL | for _ in std::ops::Range { start: 0, end: 10 } {}
- | ^^^^^^^^^^^^^^^ did you mean `(std::ops::Range { /* fields */ })`?
+ | ^^^^^^^^^^^^^^^----------------------
+ | |
+ | help: surround the struct literal with parenthesis: `(std::ops::Range { start: 0, end: 10 })`
error: aborting due to 7 previous errors
diff --git a/src/test/ui/error-codes/E0440.rs b/src/test/ui/error-codes/E0440.rs
deleted file mode 100644
index 8ac47f5..0000000
--- a/src/test/ui/error-codes/E0440.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd<T>(x: f64x2) -> i32; //~ ERROR E0440
-}
-
-fn main () {
-}
diff --git a/src/test/ui/error-codes/E0440.stderr b/src/test/ui/error-codes/E0440.stderr
deleted file mode 100644
index e153fb0..0000000
--- a/src/test/ui/error-codes/E0440.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0440]: platform-specific intrinsic has wrong number of type parameters: found 1, expected 0
- --> $DIR/E0440.rs:9:5
- |
-LL | fn x86_mm_movemask_pd<T>(x: f64x2) -> i32; //~ ERROR E0440
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0440`.
diff --git a/src/test/ui/error-codes/E0441.rs b/src/test/ui/error-codes/E0441.rs
deleted file mode 100644
index 90bdbe9..0000000
--- a/src/test/ui/error-codes/E0441.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_ep16(x: i16x8, y: i16x8) -> i16x8; //~ ERROR E0441
-}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0441.stderr b/src/test/ui/error-codes/E0441.stderr
deleted file mode 100644
index 73eddb2..0000000
--- a/src/test/ui/error-codes/E0441.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0441]: unrecognized platform-specific intrinsic function: `x86_mm_adds_ep16`
- --> $DIR/E0441.rs:9:5
- |
-LL | fn x86_mm_adds_ep16(x: i16x8, y: i16x8) -> i16x8; //~ ERROR E0441
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0441`.
diff --git a/src/test/ui/error-codes/E0442.rs b/src/test/ui/error-codes/E0442.rs
deleted file mode 100644
index a6eb596..0000000
--- a/src/test/ui/error-codes/E0442.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8,
- i8, i8, i8, i8, i8, i8, i8, i8);
-#[repr(simd)]
-struct i32x4(i32, i32, i32, i32);
-#[repr(simd)]
-struct i64x2(i64, i64);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- //~^ ERROR E0442
- //~| ERROR E0442
- //~| ERROR E0442
-}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0442.stderr b/src/test/ui/error-codes/E0442.stderr
deleted file mode 100644
index 017d461..0000000
--- a/src/test/ui/error-codes/E0442.stderr
+++ /dev/null
@@ -1,21 +0,0 @@
-error[E0442]: intrinsic argument 1 has wrong type: found vector with length 16, expected length 8
- --> $DIR/E0442.rs:14:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found vector with length 4, expected length 8
- --> $DIR/E0442.rs:14:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found vector with length 2, expected length 8
- --> $DIR/E0442.rs:14:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0442`.
diff --git a/src/test/ui/error-codes/E0443.rs b/src/test/ui/error-codes/E0443.rs
deleted file mode 100644
index 4940f1d..0000000
--- a/src/test/ui/error-codes/E0443.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-#[repr(simd)]
-struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i64x8; //~ ERROR E0443
-}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0443.stderr b/src/test/ui/error-codes/E0443.stderr
deleted file mode 100644
index 4c2e641..0000000
--- a/src/test/ui/error-codes/E0443.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0443]: intrinsic return value has wrong type: found `i64x8`, expected `i16x8` which was used for this vector type previously in this signature
- --> $DIR/E0443.rs:11:5
- |
-LL | fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i64x8; //~ ERROR E0443
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0443`.
diff --git a/src/test/ui/error-codes/E0444.rs b/src/test/ui/error-codes/E0444.rs
deleted file mode 100644
index 3d73339..0000000
--- a/src/test/ui/error-codes/E0444.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ ERROR E0444
-}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0444.stderr b/src/test/ui/error-codes/E0444.stderr
deleted file mode 100644
index 0a894f7..0000000
--- a/src/test/ui/error-codes/E0444.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0444]: platform-specific intrinsic has invalid number of arguments: found 3, expected 1
- --> $DIR/E0444.rs:9:5
- |
-LL | fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ ERROR E0444
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0444`.
diff --git a/src/test/ui/error-codes/E0558.rs b/src/test/ui/error-codes/E0558.rs
deleted file mode 100644
index 26d16f6..0000000
--- a/src/test/ui/error-codes/E0558.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-#[export_name]
-//~^ ERROR E0558
-
-pub fn something() {}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0558.stderr b/src/test/ui/error-codes/E0558.stderr
deleted file mode 100644
index 95bd9a1..0000000
--- a/src/test/ui/error-codes/E0558.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0558]: `export_name` attribute has invalid format
- --> $DIR/E0558.rs:1:1
- |
-LL | #[export_name]
- | ^^^^^^^^^^^^^^ did you mean #[export_name="*"]?
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0558`.
diff --git a/src/test/ui/error-festival.stderr b/src/test/ui/error-festival.stderr
index ef7b493..ff6504e 100644
--- a/src/test/ui/error-festival.stderr
+++ b/src/test/ui/error-festival.stderr
@@ -2,7 +2,7 @@
--> $DIR/error-festival.rs:14:5
|
LL | y = 2;
- | ^ did you mean `x`?
+ | ^ help: a local variable with a similar name exists: `x`
error[E0603]: constant `FOO` is private
--> $DIR/error-festival.rs:22:10
@@ -52,9 +52,7 @@
--> $DIR/error-festival.rs:33:24
|
LL | let x_is_nonzero = x as bool;
- | ^^^^^^^^^ unsupported cast
- |
- = help: compare with zero instead
+ | ^^^^^^^^^ help: compare with zero instead: `x != 0`
error[E0606]: casting `&u8` as `u32` is invalid
--> $DIR/error-festival.rs:37:18
diff --git a/src/test/ui/existential_types/no_inferrable_concrete_type.stderr b/src/test/ui/existential_types/no_inferrable_concrete_type.stderr
index 9d2609e..fab61bd 100644
--- a/src/test/ui/existential_types/no_inferrable_concrete_type.stderr
+++ b/src/test/ui/existential_types/no_inferrable_concrete_type.stderr
@@ -10,6 +10,17 @@
LL | fn bar(x: Foo) -> Foo { x }
| ^^^^^
= note: ...which again requires processing `Foo`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/no_inferrable_concrete_type.rs:4:1
+ |
+LL | / #![feature(existential_type)]
+LL | |
+LL | | existential type Foo: Copy; //~ cycle detected
+LL | |
+... |
+LL | | let _: Foo = std::mem::transmute(0u8);
+LL | | }
+ | |_^
error: aborting due to previous error
diff --git a/src/test/ui/expr_attr_paren_order.stderr b/src/test/ui/expr_attr_paren_order.stderr
index f3aa39f..8155514 100644
--- a/src/test/ui/expr_attr_paren_order.stderr
+++ b/src/test/ui/expr_attr_paren_order.stderr
@@ -1,8 +1,8 @@
-error: variable `X` should have a snake case name such as `x`
+error: variable `X` should have a snake case name
--> $DIR/expr_attr_paren_order.rs:19:17
|
LL | let X = 0; //~ ERROR snake case name
- | ^
+ | ^ help: convert the identifier to snake case: `x`
|
note: lint level defined here
--> $DIR/expr_attr_paren_order.rs:17:17
diff --git a/src/test/ui/feature-gate/feature-gate-static-nobundle-2.rs b/src/test/ui/feature-gate/feature-gate-static-nobundle-2.rs
new file mode 100644
index 0000000..92844f9
--- /dev/null
+++ b/src/test/ui/feature-gate/feature-gate-static-nobundle-2.rs
@@ -0,0 +1,6 @@
+//~ ERROR kind="static-nobundle" is feature gated
+// Test the behavior of rustc when non-existent library is statically linked
+
+// compile-flags: -l static-nobundle=nonexistent
+
+fn main() {}
diff --git a/src/test/ui/feature-gate/feature-gate-static-nobundle-2.stderr b/src/test/ui/feature-gate/feature-gate-static-nobundle-2.stderr
new file mode 100644
index 0000000..419c219
--- /dev/null
+++ b/src/test/ui/feature-gate/feature-gate-static-nobundle-2.stderr
@@ -0,0 +1,7 @@
+error[E0658]: kind="static-nobundle" is feature gated (see issue #37403)
+ |
+ = help: add #![feature(static_nobundle)] to the crate attributes to enable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs
index 051bfbe..b1a8cba 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs
@@ -30,75 +30,71 @@
// inputs are handled by each, and (2.) to ease searching for related
// occurrences in the source text.
-// skip-codegen
#![warn(unused_attributes, unknown_lints)]
-#![allow(dead_code)]
#![allow(stable_features)]
// UNGATED WHITE-LISTED BUILT-IN ATTRIBUTES
-#![warn (x5400)] //~ WARN unknown lint: `x5400`
-#![allow (x5300)] //~ WARN unknown lint: `x5300`
-#![forbid (x5200)] //~ WARN unknown lint: `x5200`
-#![deny (x5100)] //~ WARN unknown lint: `x5100`
+#![warn(x5400)] //~ WARN unknown lint: `x5400`
+#![allow(x5300)] //~ WARN unknown lint: `x5300`
+#![forbid(x5200)] //~ WARN unknown lint: `x5200`
+#![deny(x5100)] //~ WARN unknown lint: `x5100`
#![macro_use] // (allowed if no argument; see issue-43160-gating-of-macro_use.rs)
-#![macro_export = "4800"] //~ WARN unused attribute
-#![plugin_registrar = "4700"] //~ WARN unused attribute
+#![macro_export] //~ WARN unused attribute
+#![plugin_registrar] //~ WARN unused attribute
// skipping testing of cfg
// skipping testing of cfg_attr
-#![main = "x4400"] //~ WARN unused attribute
-#![start = "x4300"] //~ WARN unused attribute
+#![main] //~ WARN unused attribute
+#![start] //~ WARN unused attribute
// see issue-43106-gating-of-test.rs for crate-level; but non crate-level is below at "4200"
// see issue-43106-gating-of-bench.rs for crate-level; but non crate-level is below at "4100"
-#![repr = "3900"]
+#![repr()]
//~^ WARN unused attribute
-//~| WARN `repr` attribute isn't configurable with a literal
-#![path = "3800"] //~ WARN unused attribute
-#![abi = "3700"] //~ WARN unused attribute
-#![automatically_derived = "3600"] //~ WARN unused attribute
-#![no_mangle = "3500"]
-#![no_link = "3400"] //~ WARN unused attribute
+#![path = "3800"] //~ WARN unused attribute
+#![automatically_derived] //~ WARN unused attribute
+#![no_mangle]
+#![no_link] //~ WARN unused attribute
// see issue-43106-gating-of-derive.rs
-#![should_panic = "3200"] //~ WARN unused attribute
-#![ignore = "3100"] //~ WARN unused attribute
-#![no_implicit_prelude = "3000"]
+#![should_panic] //~ WARN unused attribute
+#![ignore] //~ WARN unused attribute
+#![no_implicit_prelude]
#![reexport_test_harness_main = "2900"]
// see gated-link-args.rs
// see issue-43106-gating-of-macro_escape.rs for crate-level; but non crate-level is below at "2700"
// (cannot easily test gating of crate-level #[no_std]; but non crate-level is below at "2600")
-#![proc_macro_derive = "2500"] //~ WARN unused attribute
-#![doc = "2400"]
-#![cold = "2300"]
-#![export_name = "2200"]
+#![proc_macro_derive()] //~ WARN unused attribute
+#![doc = "2400"]
+#![cold]
+#![export_name = "2200"]
// see issue-43106-gating-of-inline.rs
-#![link = "2000"]
-#![link_name = "1900"]
-#![link_section = "1800"]
-#![no_builtins = "1700"] // Yikes, dupe'd on BUILTIN_ATTRIBUTES list (see "0300")
-#![no_mangle = "1600"] // Yikes, dupe'd on BUILTIN_ATTRIBUTES list (see "3500")
+#![link()]
+#![link_name = "1900"]
+#![link_section = "1800"]
+#![no_builtins] // Yikes, dupe'd on BUILTIN_ATTRIBUTES list (see "0300")
+#![no_mangle] // Yikes, dupe'd on BUILTIN_ATTRIBUTES list (see "3500")
// see issue-43106-gating-of-rustc_deprecated.rs
-#![must_use = "1400"]
+#![must_use]
// see issue-43106-gating-of-stable.rs
// see issue-43106-gating-of-unstable.rs
// see issue-43106-gating-of-deprecated.rs
-#![windows_subsystem = "1000"]
+#![windows_subsystem = "1000"]
// UNGATED CRATE-LEVEL BUILT-IN ATTRIBUTES
-#![crate_name = "0900"]
-#![crate_type = "bin"] // cannot pass "0800" here
+#![crate_name = "0900"]
+#![crate_type = "bin"] // cannot pass "0800" here
// For #![crate_id], see issue #43142. (I cannot bear to enshrine current behavior in a test)
// FIXME(#44232) we should warn that this isn't used.
-#![feature ( rust1)]
+#![feature(rust1)]
// For #![no_start], see issue #43144. (I cannot bear to enshrine current behavior in a test)
// (cannot easily gating state of crate-level #[no_main]; but non crate-level is below at "0400")
-#![no_builtins = "0300"]
-#![recursion_limit = "0200"]
-#![type_length_limit = "0100"]
+#![no_builtins]
+#![recursion_limit = "0200"]
+#![type_length_limit = "0100"]
// USES OF BUILT-IN ATTRIBUTES IN OTHER ("UNUSUAL") PLACES
@@ -195,84 +191,84 @@
//~^ WARN unused attribute
}
-#[macro_export = "4800"]
+#[macro_export]
//~^ WARN unused attribute
mod macro_export {
- mod inner { #![macro_export="4800"] }
+ mod inner { #![macro_export] }
//~^ WARN unused attribute
- #[macro_export = "4800"] fn f() { }
+ #[macro_export] fn f() { }
//~^ WARN unused attribute
- #[macro_export = "4800"] struct S;
+ #[macro_export] struct S;
//~^ WARN unused attribute
- #[macro_export = "4800"] type T = S;
+ #[macro_export] type T = S;
//~^ WARN unused attribute
- #[macro_export = "4800"] impl S { }
+ #[macro_export] impl S { }
//~^ WARN unused attribute
}
-#[plugin_registrar = "4700"]
+#[plugin_registrar]
//~^ WARN unused attribute
mod plugin_registrar {
- mod inner { #![plugin_registrar="4700"] }
+ mod inner { #![plugin_registrar] }
//~^ WARN unused attribute
// for `fn f()` case, see gated-plugin_registrar.rs
- #[plugin_registrar = "4700"] struct S;
+ #[plugin_registrar] struct S;
//~^ WARN unused attribute
- #[plugin_registrar = "4700"] type T = S;
+ #[plugin_registrar] type T = S;
//~^ WARN unused attribute
- #[plugin_registrar = "4700"] impl S { }
+ #[plugin_registrar] impl S { }
//~^ WARN unused attribute
}
-#[main = "4400"]
+#[main]
//~^ WARN unused attribute
mod main {
- mod inner { #![main="4300"] }
+ mod inner { #![main] }
//~^ WARN unused attribute
// for `fn f()` case, see feature-gate-main.rs
- #[main = "4400"] struct S;
+ #[main] struct S;
//~^ WARN unused attribute
- #[main = "4400"] type T = S;
+ #[main] type T = S;
//~^ WARN unused attribute
- #[main = "4400"] impl S { }
+ #[main] impl S { }
//~^ WARN unused attribute
}
-#[start = "4300"]
+#[start]
//~^ WARN unused attribute
mod start {
- mod inner { #![start="4300"] }
+ mod inner { #![start] }
//~^ WARN unused attribute
// for `fn f()` case, see feature-gate-start.rs
- #[start = "4300"] struct S;
+ #[start] struct S;
//~^ WARN unused attribute
- #[start = "4300"] type T = S;
+ #[start] type T = S;
//~^ WARN unused attribute
- #[start = "4300"] impl S { }
+ #[start] impl S { }
//~^ WARN unused attribute
}
// At time of unit test authorship, if compiling without `--test` then
// non-crate-level #[test] attributes seem to be ignored.
-#[test = "4200"]
-mod test { mod inner { #![test="4200"] }
+#[test]
+mod test { mod inner { #![test] }
fn f() { }
@@ -286,41 +282,31 @@
// At time of unit test authorship, if compiling without `--test` then
// non-crate-level #[bench] attributes seem to be ignored.
-#[bench = "4100"]
+#[bench]
mod bench {
- mod inner { #![bench="4100"] }
+ mod inner { #![bench] }
- #[bench = "4100"]
+ #[bench]
struct S;
- #[bench = "4100"]
+ #[bench]
type T = S;
- #[bench = "4100"]
+ #[bench]
impl S { }
}
-#[repr = "3900"]
-//~^ WARN unused attribute
-//~| WARN `repr` attribute isn't configurable with a literal
+#[repr()]
mod repr {
- mod inner { #![repr="3900"] }
- //~^ WARN unused attribute
- //~| WARN `repr` attribute isn't configurable with a literal
+ mod inner { #![repr()] }
- #[repr = "3900"] fn f() { }
- //~^ WARN unused attribute
- //~| WARN `repr` attribute isn't configurable with a literal
+ #[repr()] fn f() { }
struct S;
- #[repr = "3900"] type T = S;
- //~^ WARN unused attribute
- //~| WARN `repr` attribute isn't configurable with a literal
+ #[repr()] type T = S;
- #[repr = "3900"] impl S { }
- //~^ WARN unused attribute
- //~| WARN `repr` attribute isn't configurable with a literal
+ #[repr()] impl S { }
}
#[path = "3800"]
@@ -340,130 +326,111 @@
//~^ WARN unused attribute
}
-#[abi = "3700"]
-//~^ WARN unused attribute
-mod abi {
- mod inner { #![abi="3700"] }
- //~^ WARN unused attribute
-
- #[abi = "3700"] fn f() { }
- //~^ WARN unused attribute
-
- #[abi = "3700"] struct S;
- //~^ WARN unused attribute
-
- #[abi = "3700"] type T = S;
- //~^ WARN unused attribute
-
- #[abi = "3700"] impl S { }
- //~^ WARN unused attribute
-}
-
-#[automatically_derived = "3600"]
+#[automatically_derived]
//~^ WARN unused attribute
mod automatically_derived {
- mod inner { #![automatically_derived="3600"] }
+ mod inner { #![automatically_derived] }
//~^ WARN unused attribute
- #[automatically_derived = "3600"] fn f() { }
+ #[automatically_derived] fn f() { }
//~^ WARN unused attribute
- #[automatically_derived = "3600"] struct S;
+ #[automatically_derived] struct S;
//~^ WARN unused attribute
- #[automatically_derived = "3600"] type T = S;
+ #[automatically_derived] type T = S;
//~^ WARN unused attribute
- #[automatically_derived = "3600"] impl S { }
+ #[automatically_derived] impl S { }
//~^ WARN unused attribute
}
-#[no_mangle = "3500"]
+#[no_mangle]
mod no_mangle {
- mod inner { #![no_mangle="3500"] }
+ mod inner { #![no_mangle] }
- #[no_mangle = "3500"] fn f() { }
+ #[no_mangle] fn f() { }
- #[no_mangle = "3500"] struct S;
+ #[no_mangle] struct S;
- #[no_mangle = "3500"] type T = S;
+ #[no_mangle] type T = S;
- #[no_mangle = "3500"] impl S { }
+ #[no_mangle] impl S { }
}
-#[no_link = "3400"]
+#[no_link]
//~^ WARN unused attribute
mod no_link {
- mod inner { #![no_link="3400"] }
+ mod inner { #![no_link] }
//~^ WARN unused attribute
- #[no_link = "3400"] fn f() { }
+ #[no_link] fn f() { }
//~^ WARN unused attribute
- #[no_link = "3400"] struct S;
+ #[no_link] struct S;
//~^ WARN unused attribute
- #[no_link = "3400"]type T = S;
+ #[no_link]type T = S;
//~^ WARN unused attribute
- #[no_link = "3400"] impl S { }
+ #[no_link] impl S { }
//~^ WARN unused attribute
}
-#[should_panic = "3200"]
+#[should_panic]
//~^ WARN unused attribute
mod should_panic {
- mod inner { #![should_panic="3200"] }
+ mod inner { #![should_panic] }
//~^ WARN unused attribute
- #[should_panic = "3200"] fn f() { }
+ #[should_panic] fn f() { }
//~^ WARN unused attribute
- #[should_panic = "3200"] struct S;
+ #[should_panic] struct S;
//~^ WARN unused attribute
- #[should_panic = "3200"] type T = S;
+ #[should_panic] type T = S;
//~^ WARN unused attribute
- #[should_panic = "3200"] impl S { }
+ #[should_panic] impl S { }
//~^ WARN unused attribute
}
-#[ignore = "3100"]
+#[ignore]
//~^ WARN unused attribute
mod ignore {
- mod inner { #![ignore="3100"] }
+ mod inner { #![ignore] }
//~^ WARN unused attribute
- #[ignore = "3100"] fn f() { }
+ #[ignore] fn f() { }
//~^ WARN unused attribute
- #[ignore = "3100"] struct S;
+ #[ignore] struct S;
//~^ WARN unused attribute
- #[ignore = "3100"] type T = S;
+ #[ignore] type T = S;
//~^ WARN unused attribute
- #[ignore = "3100"] impl S { }
+ #[ignore] impl S { }
//~^ WARN unused attribute
}
-#[no_implicit_prelude = "3000"]
+#[no_implicit_prelude]
//~^ WARN unused attribute
mod no_implicit_prelude {
- mod inner { #![no_implicit_prelude="3000"] }
+ mod inner { #![no_implicit_prelude] }
//~^ WARN unused attribute
- #[no_implicit_prelude = "3000"] fn f() { }
+ #[no_implicit_prelude] fn f() { }
//~^ WARN unused attribute
- #[no_implicit_prelude = "3000"] struct S;
+ #[no_implicit_prelude] struct S;
//~^ WARN unused attribute
- #[no_implicit_prelude = "3000"] type T = S;
+ #[no_implicit_prelude] type T = S;
//~^ WARN unused attribute
- #[no_implicit_prelude = "3000"] impl S { }
+ #[no_implicit_prelude] impl S { }
//~^ WARN unused attribute
}
@@ -506,27 +473,27 @@
//~^ WARN unused attribute
}
-#[no_std = "2600"]
+#[no_std]
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
mod no_std {
- mod inner { #![no_std="2600"] }
+ mod inner { #![no_std] }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be in the root module
- #[no_std = "2600"] fn f() { }
+ #[no_std] fn f() { }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_std = "2600"] struct S;
+ #[no_std] struct S;
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_std = "2600"] type T = S;
+ #[no_std] type T = S;
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_std = "2600"] impl S { }
+ #[no_std] impl S { }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
}
@@ -548,17 +515,17 @@
#[doc = "2400"] impl S { }
}
-#[cold = "2300"]
+#[cold]
mod cold {
- mod inner { #![cold="2300"] }
+ mod inner { #![cold] }
- #[cold = "2300"] fn f() { }
+ #[cold] fn f() { }
- #[cold = "2300"] struct S;
+ #[cold] struct S;
- #[cold = "2300"] type T = S;
+ #[cold] type T = S;
- #[cold = "2300"] impl S { }
+ #[cold] impl S { }
}
#[export_name = "2200"]
@@ -579,17 +546,17 @@
// out that we allow them at non-crate-level (though I do not know
// whether they have the same effect here as at crate-level).
-#[link = "2000"]
+#[link()]
mod link {
- mod inner { #![link="2000"] }
+ mod inner { #![link()] }
- #[link = "2000"] fn f() { }
+ #[link()] fn f() { }
- #[link = "2000"] struct S;
+ #[link()] struct S;
- #[link = "2000"] type T = S;
+ #[link()] type T = S;
- #[link = "2000"] impl S { }
+ #[link()] impl S { }
}
#[link_name = "1900"]
@@ -620,30 +587,30 @@
struct StructForDeprecated;
-#[deprecated = "1500"]
+#[deprecated]
mod deprecated {
- mod inner { #![deprecated="1500"] }
+ mod inner { #![deprecated] }
- #[deprecated = "1500"] fn f() { }
+ #[deprecated] fn f() { }
- #[deprecated = "1500"] struct S1;
+ #[deprecated] struct S1;
- #[deprecated = "1500"] type T = super::StructForDeprecated;
+ #[deprecated] type T = super::StructForDeprecated;
- #[deprecated = "1500"] impl super::StructForDeprecated { }
+ #[deprecated] impl super::StructForDeprecated { }
}
-#[must_use = "1400"]
+#[must_use]
mod must_use {
- mod inner { #![must_use="1400"] }
+ mod inner { #![must_use] }
- #[must_use = "1400"] fn f() { }
+ #[must_use] fn f() { }
- #[must_use = "1400"] struct S;
+ #[must_use] struct S;
- #[must_use = "1400"] type T = S;
+ #[must_use] type T = S;
- #[must_use = "1400"] impl S { }
+ #[must_use] impl S { }
}
#[windows_subsystem = "1000"]
@@ -737,42 +704,42 @@
}
-#[no_main = "0400"]
+#[no_main]
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
mod no_main_1 {
- mod inner { #![no_main="0400"] }
+ mod inner { #![no_main] }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be in the root module
- #[no_main = "0400"] fn f() { }
+ #[no_main] fn f() { }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_main = "0400"] struct S;
+ #[no_main] struct S;
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_main = "0400"] type T = S;
+ #[no_main] type T = S;
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_main = "0400"] impl S { }
+ #[no_main] impl S { }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
}
-#[no_builtins = "0300"]
+#[no_builtins]
mod no_builtins {
- mod inner { #![no_builtins="0200"] }
+ mod inner { #![no_builtins] }
- #[no_builtins = "0300"] fn f() { }
+ #[no_builtins] fn f() { }
- #[no_builtins = "0300"] struct S;
+ #[no_builtins] struct S;
- #[no_builtins = "0300"] type T = S;
+ #[no_builtins] type T = S;
- #[no_builtins = "0300"] impl S { }
+ #[no_builtins] impl S { }
}
#[recursion_limit="0200"]
@@ -825,12 +792,4 @@
//~| WARN crate-level attribute should be an inner attribute
}
-
-
-
-
-
-
-fn main() {
- println!("Hello World");
-}
+fn main() {}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr
index cb3e9bd..4d15ccb 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr
@@ -1,1307 +1,1180 @@
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:40:33
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:38:9
|
-LL | #![warn (x5400)] //~ WARN unknown lint: `x5400`
- | ^^^^^
+LL | #![warn(x5400)] //~ WARN unknown lint: `x5400`
+ | ^^^^^
|
note: lint level defined here
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:34:28
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:33:28
|
LL | #![warn(unused_attributes, unknown_lints)]
| ^^^^^^^^^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:41:33
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:39:10
|
-LL | #![allow (x5300)] //~ WARN unknown lint: `x5300`
- | ^^^^^
+LL | #![allow(x5300)] //~ WARN unknown lint: `x5300`
+ | ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:42:33
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:40:11
|
-LL | #![forbid (x5200)] //~ WARN unknown lint: `x5200`
- | ^^^^^
+LL | #![forbid(x5200)] //~ WARN unknown lint: `x5200`
+ | ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:43:33
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:41:9
|
-LL | #![deny (x5100)] //~ WARN unknown lint: `x5100`
- | ^^^^^
+LL | #![deny(x5100)] //~ WARN unknown lint: `x5100`
+ | ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:105:8
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:101:8
|
LL | #[warn(x5400)]
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:108:25
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:104:25
|
LL | mod inner { #![warn(x5400)] }
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:111:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:107:12
|
LL | #[warn(x5400)] fn f() { }
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:114:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:110:12
|
LL | #[warn(x5400)] struct S;
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:117:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:113:12
|
LL | #[warn(x5400)] type T = S;
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:120:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:116:12
|
LL | #[warn(x5400)] impl S { }
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:124:9
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:120:9
|
LL | #[allow(x5300)]
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:127:26
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:123:26
|
LL | mod inner { #![allow(x5300)] }
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:130:13
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:126:13
|
LL | #[allow(x5300)] fn f() { }
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:133:13
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:129:13
|
LL | #[allow(x5300)] struct S;
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:136:13
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:132:13
|
LL | #[allow(x5300)] type T = S;
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:139:13
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:135:13
|
LL | #[allow(x5300)] impl S { }
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:143:10
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:139:10
|
LL | #[forbid(x5200)]
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:146:27
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:142:27
|
LL | mod inner { #![forbid(x5200)] }
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:149:14
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:145:14
|
LL | #[forbid(x5200)] fn f() { }
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:152:14
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:148:14
|
LL | #[forbid(x5200)] struct S;
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:155:14
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:151:14
|
LL | #[forbid(x5200)] type T = S;
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:158:14
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:154:14
|
LL | #[forbid(x5200)] impl S { }
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:162:8
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:158:8
|
LL | #[deny(x5100)]
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:165:25
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:161:25
|
LL | mod inner { #![deny(x5100)] }
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:168:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:164:12
|
LL | #[deny(x5100)] fn f() { }
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:171:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:167:12
|
LL | #[deny(x5100)] struct S;
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:174:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:170:12
|
LL | #[deny(x5100)] type T = S;
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:177:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:173:12
|
LL | #[deny(x5100)] impl S { }
| ^^^^^
warning: macro_escape is a deprecated synonym for macro_use
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:490:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:457:1
|
LL | #[macro_escape]
| ^^^^^^^^^^^^^^^
warning: macro_escape is a deprecated synonym for macro_use
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:493:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:460:17
|
LL | mod inner { #![macro_escape] }
| ^^^^^^^^^^^^^^^^
|
= help: consider an outer attribute, #[macro_use] mod ...
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:307:17
- |
-LL | mod inner { #![repr="3900"] }
- | ^^^^^^^^^^^^^^^ needs a hint
- |
- = note: #[warn(bad_repr)] on by default
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:311:5
- |
-LL | #[repr = "3900"] fn f() { }
- | ^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:317:5
- |
-LL | #[repr = "3900"] type T = S;
- | ^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:321:5
- |
-LL | #[repr = "3900"] impl S { }
- | ^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:303:1
- |
-LL | #[repr = "3900"]
- | ^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:53:1
- |
-LL | #![repr = "3900"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:185:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:181:5
|
LL | #[macro_use] fn f() { }
| ^^^^^^^^^^^^
|
note: lint level defined here
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:34:9
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:33:9
|
LL | #![warn(unused_attributes, unknown_lints)]
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:188:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:184:5
|
LL | #[macro_use] struct S;
| ^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:191:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:187:5
|
LL | #[macro_use] type T = S;
| ^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:194:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:190:5
|
LL | #[macro_use] impl S { }
| ^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:201:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:197:17
|
-LL | mod inner { #![macro_export="4800"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:204:5
- |
-LL | #[macro_export = "4800"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:207:5
- |
-LL | #[macro_export = "4800"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:210:5
- |
-LL | #[macro_export = "4800"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:213:5
- |
-LL | #[macro_export = "4800"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:198:1
- |
-LL | #[macro_export = "4800"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:220:17
- |
-LL | mod inner { #![plugin_registrar="4700"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:225:5
- |
-LL | #[plugin_registrar = "4700"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:228:5
- |
-LL | #[plugin_registrar = "4700"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:231:5
- |
-LL | #[plugin_registrar = "4700"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:217:1
- |
-LL | #[plugin_registrar = "4700"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:238:17
- |
-LL | mod inner { #![main="4300"] }
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:243:5
- |
-LL | #[main = "4400"] struct S;
- | ^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:246:5
- |
-LL | #[main = "4400"] type T = S;
- | ^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:249:5
- |
-LL | #[main = "4400"] impl S { }
- | ^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:235:1
- |
-LL | #[main = "4400"]
- | ^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:256:17
- |
-LL | mod inner { #![start="4300"] }
+LL | mod inner { #![macro_export] }
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:261:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:200:5
|
-LL | #[start = "4300"] struct S;
- | ^^^^^^^^^^^^^^^^^
+LL | #[macro_export] fn f() { }
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:264:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:203:5
|
-LL | #[start = "4300"] type T = S;
- | ^^^^^^^^^^^^^^^^^
+LL | #[macro_export] struct S;
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:267:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:206:5
|
-LL | #[start = "4300"] impl S { }
- | ^^^^^^^^^^^^^^^^^
+LL | #[macro_export] type T = S;
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:253:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:209:5
|
-LL | #[start = "4300"]
- | ^^^^^^^^^^^^^^^^^
+LL | #[macro_export] impl S { }
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:307:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:194:1
|
-LL | mod inner { #![repr="3900"] }
- | ^^^^^^^^^^^^^^^
+LL | #[macro_export]
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:311:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:216:17
|
-LL | #[repr = "3900"] fn f() { }
- | ^^^^^^^^^^^^^^^^
+LL | mod inner { #![plugin_registrar] }
+ | ^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:317:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:221:5
|
-LL | #[repr = "3900"] type T = S;
- | ^^^^^^^^^^^^^^^^
+LL | #[plugin_registrar] struct S;
+ | ^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:321:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:224:5
|
-LL | #[repr = "3900"] impl S { }
- | ^^^^^^^^^^^^^^^^
+LL | #[plugin_registrar] type T = S;
+ | ^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:303:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:227:5
|
-LL | #[repr = "3900"]
- | ^^^^^^^^^^^^^^^^
+LL | #[plugin_registrar] impl S { }
+ | ^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:330:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:213:1
+ |
+LL | #[plugin_registrar]
+ | ^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:234:17
+ |
+LL | mod inner { #![main] }
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:239:5
+ |
+LL | #[main] struct S;
+ | ^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:242:5
+ |
+LL | #[main] type T = S;
+ | ^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:245:5
+ |
+LL | #[main] impl S { }
+ | ^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:231:1
+ |
+LL | #[main]
+ | ^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:252:17
+ |
+LL | mod inner { #![start] }
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:257:5
+ |
+LL | #[start] struct S;
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:260:5
+ |
+LL | #[start] type T = S;
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:263:5
+ |
+LL | #[start] impl S { }
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:249:1
+ |
+LL | #[start]
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:316:5
|
LL | #[path = "3800"] fn f() { }
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:333:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:319:5
|
LL | #[path = "3800"] struct S;
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:336:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:322:5
|
LL | #[path = "3800"] type T = S;
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:339:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:325:5
|
LL | #[path = "3800"] impl S { }
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:346:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:332:17
|
-LL | mod inner { #![abi="3700"] }
- | ^^^^^^^^^^^^^^
+LL | mod inner { #![automatically_derived] }
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:349:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:335:5
|
-LL | #[abi = "3700"] fn f() { }
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:352:5
- |
-LL | #[abi = "3700"] struct S;
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:355:5
- |
-LL | #[abi = "3700"] type T = S;
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:358:5
- |
-LL | #[abi = "3700"] impl S { }
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:343:1
- |
-LL | #[abi = "3700"]
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:365:17
- |
-LL | mod inner { #![automatically_derived="3600"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:368:5
- |
-LL | #[automatically_derived = "3600"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:371:5
- |
-LL | #[automatically_derived = "3600"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:374:5
- |
-LL | #[automatically_derived = "3600"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:377:5
- |
-LL | #[automatically_derived = "3600"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:362:1
- |
-LL | #[automatically_derived = "3600"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:397:17
- |
-LL | mod inner { #![no_link="3400"] }
- | ^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:400:5
- |
-LL | #[no_link = "3400"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:403:5
- |
-LL | #[no_link = "3400"] struct S;
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:406:5
- |
-LL | #[no_link = "3400"]type T = S;
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:409:5
- |
-LL | #[no_link = "3400"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:394:1
- |
-LL | #[no_link = "3400"]
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:416:17
- |
-LL | mod inner { #![should_panic="3200"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:419:5
- |
-LL | #[should_panic = "3200"] fn f() { }
+LL | #[automatically_derived] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:422:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:338:5
|
-LL | #[should_panic = "3200"] struct S;
+LL | #[automatically_derived] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:425:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:341:5
|
-LL | #[should_panic = "3200"] type T = S;
+LL | #[automatically_derived] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:428:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:344:5
|
-LL | #[should_panic = "3200"] impl S { }
+LL | #[automatically_derived] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:413:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:329:1
|
-LL | #[should_panic = "3200"]
+LL | #[automatically_derived]
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:435:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:364:17
|
-LL | mod inner { #![ignore="3100"] }
- | ^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_link] }
+ | ^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:438:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:367:5
|
-LL | #[ignore = "3100"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link] fn f() { }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:441:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:370:5
|
-LL | #[ignore = "3100"] struct S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link] struct S;
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:444:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:373:5
|
-LL | #[ignore = "3100"] type T = S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link]type T = S;
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:447:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:376:5
|
-LL | #[ignore = "3100"] impl S { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link] impl S { }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:432:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:361:1
|
-LL | #[ignore = "3100"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link]
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:454:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:383:17
|
-LL | mod inner { #![no_implicit_prelude="3000"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![should_panic] }
+ | ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:457:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:386:5
|
-LL | #[no_implicit_prelude = "3000"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic] fn f() { }
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:460:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:389:5
|
-LL | #[no_implicit_prelude = "3000"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic] struct S;
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:463:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:392:5
|
-LL | #[no_implicit_prelude = "3000"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic] type T = S;
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:466:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:395:5
|
-LL | #[no_implicit_prelude = "3000"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic] impl S { }
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:451:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:380:1
|
-LL | #[no_implicit_prelude = "3000"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic]
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:473:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:402:17
+ |
+LL | mod inner { #![ignore] }
+ | ^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:405:5
+ |
+LL | #[ignore] fn f() { }
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:408:5
+ |
+LL | #[ignore] struct S;
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:411:5
+ |
+LL | #[ignore] type T = S;
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:414:5
+ |
+LL | #[ignore] impl S { }
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:399:1
+ |
+LL | #[ignore]
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:421:17
+ |
+LL | mod inner { #![no_implicit_prelude] }
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:424:5
+ |
+LL | #[no_implicit_prelude] fn f() { }
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:427:5
+ |
+LL | #[no_implicit_prelude] struct S;
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:430:5
+ |
+LL | #[no_implicit_prelude] type T = S;
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:433:5
+ |
+LL | #[no_implicit_prelude] impl S { }
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:418:1
+ |
+LL | #[no_implicit_prelude]
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:440:17
|
LL | mod inner { #![reexport_test_harness_main="2900"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:476:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:443:5
|
LL | #[reexport_test_harness_main = "2900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:479:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:446:5
|
LL | #[reexport_test_harness_main = "2900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:482:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:449:5
|
LL | #[reexport_test_harness_main = "2900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:485:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:452:5
|
LL | #[reexport_test_harness_main = "2900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:470:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:437:1
|
LL | #[reexport_test_harness_main = "2900"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:496:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:463:5
|
LL | #[macro_escape] fn f() { }
| ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:499:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:466:5
|
LL | #[macro_escape] struct S;
| ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:502:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:469:5
|
LL | #[macro_escape] type T = S;
| ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:505:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:472:5
|
LL | #[macro_escape] impl S { }
| ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:513:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:480:17
|
-LL | mod inner { #![no_std="2600"] }
- | ^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_std] }
+ | ^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:513:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:480:17
|
-LL | mod inner { #![no_std="2600"] }
- | ^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_std] }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:517:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:484:5
|
-LL | #[no_std = "2600"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] fn f() { }
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:517:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:484:5
|
-LL | #[no_std = "2600"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] fn f() { }
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:521:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:488:5
|
-LL | #[no_std = "2600"] struct S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] struct S;
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:521:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:488:5
|
-LL | #[no_std = "2600"] struct S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] struct S;
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:525:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:492:5
|
-LL | #[no_std = "2600"] type T = S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] type T = S;
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:525:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:492:5
|
-LL | #[no_std = "2600"] type T = S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] type T = S;
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:529:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:496:5
|
-LL | #[no_std = "2600"] impl S { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] impl S { }
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:529:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:496:5
|
-LL | #[no_std = "2600"] impl S { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] impl S { }
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:509:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:476:1
|
-LL | #[no_std = "2600"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std]
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:509:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:476:1
|
-LL | #[no_std = "2600"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std]
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:668:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:635:17
|
LL | mod inner { #![crate_name="0900"] }
| ^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:668:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:635:17
|
LL | mod inner { #![crate_name="0900"] }
| ^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:672:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:639:5
|
LL | #[crate_name = "0900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:672:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:639:5
|
LL | #[crate_name = "0900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:676:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:643:5
|
LL | #[crate_name = "0900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:676:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:643:5
|
LL | #[crate_name = "0900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:680:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:647:5
|
LL | #[crate_name = "0900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:680:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:647:5
|
LL | #[crate_name = "0900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:684:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:651:5
|
LL | #[crate_name = "0900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:684:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:651:5
|
LL | #[crate_name = "0900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:664:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:631:1
|
LL | #[crate_name = "0900"]
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:664:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:631:1
|
LL | #[crate_name = "0900"]
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:693:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:660:17
|
LL | mod inner { #![crate_type="0800"] }
| ^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:693:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:660:17
|
LL | mod inner { #![crate_type="0800"] }
| ^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:697:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:664:5
|
LL | #[crate_type = "0800"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:697:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:664:5
|
LL | #[crate_type = "0800"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:668:5
|
LL | #[crate_type = "0800"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:668:5
|
LL | #[crate_type = "0800"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:705:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:672:5
|
LL | #[crate_type = "0800"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:705:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:672:5
|
LL | #[crate_type = "0800"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:709:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:676:5
|
LL | #[crate_type = "0800"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:709:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:676:5
|
LL | #[crate_type = "0800"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:689:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:656:1
|
LL | #[crate_type = "0800"]
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:689:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:656:1
|
LL | #[crate_type = "0800"]
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:718:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:685:17
|
LL | mod inner { #![feature(x0600)] }
| ^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:718:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:685:17
|
LL | mod inner { #![feature(x0600)] }
| ^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:722:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:689:5
|
LL | #[feature(x0600)] fn f() { }
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:722:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:689:5
|
LL | #[feature(x0600)] fn f() { }
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:726:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:693:5
|
LL | #[feature(x0600)] struct S;
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:726:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:693:5
|
LL | #[feature(x0600)] struct S;
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:730:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:697:5
|
LL | #[feature(x0600)] type T = S;
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:730:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:697:5
|
LL | #[feature(x0600)] type T = S;
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:734:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:5
|
LL | #[feature(x0600)] impl S { }
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:734:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:5
|
LL | #[feature(x0600)] impl S { }
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:714:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:681:1
|
LL | #[feature(x0600)]
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:714:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:681:1
|
LL | #[feature(x0600)]
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:744:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:711:17
|
-LL | mod inner { #![no_main="0400"] }
- | ^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_main] }
+ | ^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:744:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:711:17
|
-LL | mod inner { #![no_main="0400"] }
- | ^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_main] }
+ | ^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:748:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:715:5
|
-LL | #[no_main = "0400"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] fn f() { }
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:748:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:715:5
|
-LL | #[no_main = "0400"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] fn f() { }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:752:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:719:5
|
-LL | #[no_main = "0400"] struct S;
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] struct S;
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:752:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:719:5
|
-LL | #[no_main = "0400"] struct S;
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] struct S;
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:756:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:723:5
|
-LL | #[no_main = "0400"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] type T = S;
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:756:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:723:5
|
-LL | #[no_main = "0400"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] type T = S;
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:760:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:727:5
|
-LL | #[no_main = "0400"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] impl S { }
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:760:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:727:5
|
-LL | #[no_main = "0400"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] impl S { }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:740:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:707:1
|
-LL | #[no_main = "0400"]
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main]
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:740:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:707:1
|
-LL | #[no_main = "0400"]
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main]
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:749:17
|
LL | mod inner { #![recursion_limit="0200"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:749:17
|
LL | mod inner { #![recursion_limit="0200"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:786:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:753:5
|
LL | #[recursion_limit="0200"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:786:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:753:5
|
LL | #[recursion_limit="0200"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:790:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:757:5
|
LL | #[recursion_limit="0200"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:790:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:757:5
|
LL | #[recursion_limit="0200"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:794:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:761:5
|
LL | #[recursion_limit="0200"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:794:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:761:5
|
LL | #[recursion_limit="0200"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:798:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:765:5
|
LL | #[recursion_limit="0200"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:798:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:765:5
|
LL | #[recursion_limit="0200"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:778:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:745:1
|
LL | #[recursion_limit="0200"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:778:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:745:1
|
LL | #[recursion_limit="0200"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:807:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:774:17
|
LL | mod inner { #![type_length_limit="0100"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:807:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:774:17
|
LL | mod inner { #![type_length_limit="0100"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:811:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:778:5
|
LL | #[type_length_limit="0100"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:811:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:778:5
|
LL | #[type_length_limit="0100"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:815:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:5
|
LL | #[type_length_limit="0100"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:815:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:5
|
LL | #[type_length_limit="0100"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:819:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:786:5
|
LL | #[type_length_limit="0100"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:819:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:786:5
|
LL | #[type_length_limit="0100"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:823:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:790:5
|
LL | #[type_length_limit="0100"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:823:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:790:5
|
LL | #[type_length_limit="0100"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:803:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:770:1
|
LL | #[type_length_limit="0100"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:803:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:770:1
|
LL | #[type_length_limit="0100"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:45:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:43:1
|
-LL | #![macro_export = "4800"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![macro_export] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:46:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:44:1
|
-LL | #![plugin_registrar = "4700"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![plugin_registrar] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:49:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:47:1
|
-LL | #![main = "x4400"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![main] //~ WARN unused attribute
+ | ^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:50:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:48:1
|
-LL | #![start = "x4300"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![start] //~ WARN unused attribute
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:51:1
+ |
+LL | #![repr()]
+ | ^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:53:1
|
-LL | #![repr = "3900"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![path = "3800"] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:54:1
+ |
+LL | #![automatically_derived] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:56:1
|
-LL | #![path = "3800"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:57:1
- |
-LL | #![abi = "3700"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![no_link] //~ WARN unused attribute
+ | ^^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:58:1
|
-LL | #![automatically_derived = "3600"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![should_panic] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:60:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:59:1
|
-LL | #![no_link = "3400"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![ignore] //~ WARN unused attribute
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:62:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:65:1
|
-LL | #![should_panic = "3200"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:63:1
- |
-LL | #![ignore = "3100"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:69:1
- |
-LL | #![proc_macro_derive = "2500"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![proc_macro_derive()] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^^^^^^^^
error: invalid windows subsystem `1000`, only `windows` and `console` are allowed
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-deprecated.rs b/src/test/ui/feature-gate/issue-43106-gating-of-deprecated.rs
index 32f30ce..360d570 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-deprecated.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-deprecated.rs
@@ -7,15 +7,7 @@
// compile-pass
// skip-codegen
-#![allow(dead_code)]
-#![deprecated = "1100"]
-// Since we expect for the mix of attributes used here to compile
-// successfully, and we are just testing for the expected warnings of
-// various (mis)uses of attributes, we use the `rustc_error` attribute
-// on the `fn main()`.
+#![deprecated]
-
-fn main() {
- println!("Hello World");
-}
+fn main() {}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-inline.rs b/src/test/ui/feature-gate/issue-43106-gating-of-inline.rs
index 7c17cd1..bb9e6d4 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-inline.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-inline.rs
@@ -6,23 +6,25 @@
// issue-43106-gating-of-builtin-attrs.rs)
// Crate-level is accepted, though it is almost certainly unused?
-#![inline = "2100"]
+#![inline]
-#[inline = "2100"]
+#[inline]
//~^ ERROR attribute should be applied to function or closure
mod inline {
- mod inner { #![inline="2100"] }
+ mod inner { #![inline] }
//~^ ERROR attribute should be applied to function or closure
#[inline = "2100"] fn f() { }
+ //~^ WARN attribute must be of the form
+ //~| WARN this was previously accepted
- #[inline = "2100"] struct S;
+ #[inline] struct S;
//~^ ERROR attribute should be applied to function or closure
- #[inline = "2100"] type T = S;
+ #[inline] type T = S;
//~^ ERROR attribute should be applied to function or closure
- #[inline = "2100"] impl S { }
+ #[inline] impl S { }
//~^ ERROR attribute should be applied to function or closure
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-inline.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-inline.stderr
index 7eb0b5c..71e8f11 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-inline.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-inline.stderr
@@ -1,11 +1,21 @@
+warning: attribute must be of the form `#[inline]` or `#[inline(always|never)]`
+ --> $DIR/issue-43106-gating-of-inline.rs:17:5
+ |
+LL | #[inline = "2100"] fn f() { }
+ | ^^^^^^^^^^^^^^^^^^
+ |
+ = note: #[warn(ill_formed_attribute_input)] on by default
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-inline.rs:11:1
|
-LL | #[inline = "2100"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[inline]
+ | ^^^^^^^^^
LL | //~^ ERROR attribute should be applied to function or closure
LL | / mod inline {
-LL | | mod inner { #![inline="2100"] }
+LL | | mod inner { #![inline] }
LL | | //~^ ERROR attribute should be applied to function or closure
LL | |
... |
@@ -16,26 +26,26 @@
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-inline.rs:14:17
|
-LL | mod inner { #![inline="2100"] }
- | ------------^^^^^^^^^^^^^^^^^-- not a function or closure
+LL | mod inner { #![inline] }
+ | ------------^^^^^^^^^^-- not a function or closure
error[E0518]: attribute should be applied to function or closure
- --> $DIR/issue-43106-gating-of-inline.rs:19:5
+ --> $DIR/issue-43106-gating-of-inline.rs:21:5
|
-LL | #[inline = "2100"] struct S;
- | ^^^^^^^^^^^^^^^^^^ --------- not a function or closure
+LL | #[inline] struct S;
+ | ^^^^^^^^^ --------- not a function or closure
error[E0518]: attribute should be applied to function or closure
- --> $DIR/issue-43106-gating-of-inline.rs:22:5
+ --> $DIR/issue-43106-gating-of-inline.rs:24:5
|
-LL | #[inline = "2100"] type T = S;
- | ^^^^^^^^^^^^^^^^^^ ----------- not a function or closure
+LL | #[inline] type T = S;
+ | ^^^^^^^^^ ----------- not a function or closure
error[E0518]: attribute should be applied to function or closure
- --> $DIR/issue-43106-gating-of-inline.rs:25:5
+ --> $DIR/issue-43106-gating-of-inline.rs:27:5
|
-LL | #[inline = "2100"] impl S { }
- | ^^^^^^^^^^^^^^^^^^ ---------- not a function or closure
+LL | #[inline] impl S { }
+ | ^^^^^^^^^ ---------- not a function or closure
error: aborting due to 5 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.rs b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.rs
index bb54c00..725f2e0 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.rs
@@ -3,21 +3,23 @@
// corresponds to cases where the attribute is currently unused, so we
// get that warning; see issue-43106-gating-of-builtin-attrs.rs
-#![macro_use = "4900"] //~ ERROR arguments to macro_use are not allowed here
+#![macro_use(my_macro)]
+//~^ ERROR arguments to macro_use are not allowed here
-#[macro_use = "2700"]
+#[macro_use(my_macro)]
//~^ ERROR arguments to macro_use are not allowed here
mod macro_escape {
- mod inner { #![macro_use="2700"] }
+ mod inner { #![macro_use(my_macro)] }
//~^ ERROR arguments to macro_use are not allowed here
- #[macro_use = "2700"] fn f() { }
-
#[macro_use = "2700"] struct S;
+ //~^ ERROR attribute must be of the form
- #[macro_use = "2700"] type T = S;
+ #[macro_use] fn f() { }
- #[macro_use = "2700"] impl S { }
+ #[macro_use] type T = S;
+
+ #[macro_use] impl S { }
}
fn main() { }
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr
index fb0e3b4..8074528 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr
@@ -1,20 +1,26 @@
error: arguments to macro_use are not allowed here
--> $DIR/issue-43106-gating-of-macro_use.rs:6:1
|
-LL | #![macro_use = "4900"] //~ ERROR arguments to macro_use are not allowed here
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![macro_use(my_macro)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^
error: arguments to macro_use are not allowed here
- --> $DIR/issue-43106-gating-of-macro_use.rs:8:1
+ --> $DIR/issue-43106-gating-of-macro_use.rs:9:1
|
-LL | #[macro_use = "2700"]
- | ^^^^^^^^^^^^^^^^^^^^^
+LL | #[macro_use(my_macro)]
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: arguments to macro_use are not allowed here
- --> $DIR/issue-43106-gating-of-macro_use.rs:11:17
+ --> $DIR/issue-43106-gating-of-macro_use.rs:12:17
|
-LL | mod inner { #![macro_use="2700"] }
- | ^^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![macro_use(my_macro)] }
+ | ^^^^^^^^^^^^^^^^^^^^^^^
-error: aborting due to 3 previous errors
+error: attribute must be of the form `#[macro_use]` or `#[macro_use(name1, name2, ...)]`
+ --> $DIR/issue-43106-gating-of-macro_use.rs:15:5
+ |
+LL | #[macro_use = "2700"] struct S;
+ | ^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.rs b/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.rs
index e2d0c26..a94ffd6 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.rs
@@ -7,27 +7,27 @@
// signal errors, making it incompatible with the "warnings only"
// nature of issue-43106-gating-of-builtin-attrs.rs
-#[proc_macro_derive = "2500"]
+#[proc_macro_derive()]
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
mod proc_macro_derive1 {
- mod inner { #![proc_macro_derive="2500"] }
+ mod inner { #![proc_macro_derive()] }
// (no error issued here if there was one on outer module)
}
mod proc_macro_derive2 {
- mod inner { #![proc_macro_derive="2500"] }
+ mod inner { #![proc_macro_derive()] }
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
- #[proc_macro_derive = "2500"] fn f() { }
+ #[proc_macro_derive()] fn f() { }
//~^ ERROR the `#[proc_macro_derive]` attribute is only usable with crates of the `proc-macro`
- #[proc_macro_derive = "2500"] struct S;
+ #[proc_macro_derive()] struct S;
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
- #[proc_macro_derive = "2500"] type T = S;
+ #[proc_macro_derive()] type T = S;
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
- #[proc_macro_derive = "2500"] impl S { }
+ #[proc_macro_derive()] impl S { }
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.stderr
index aa841c3..e202b47 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.stderr
@@ -1,38 +1,38 @@
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:10:1
|
-LL | #[proc_macro_derive = "2500"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()]
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:18:17
|
-LL | mod inner { #![proc_macro_derive="2500"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![proc_macro_derive()] }
+ | ^^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute is only usable with crates of the `proc-macro` crate type
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:21:5
|
-LL | #[proc_macro_derive = "2500"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()] fn f() { }
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:24:5
|
-LL | #[proc_macro_derive = "2500"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()] struct S;
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:27:5
|
-LL | #[proc_macro_derive = "2500"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()] type T = S;
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:30:5
|
-LL | #[proc_macro_derive = "2500"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()] impl S { }
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 6 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.rs b/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.rs
index b2fd6a7..60873f9 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.rs
@@ -4,25 +4,25 @@
// this test incompatible with the "warnings only" nature of
// issue-43106-gating-of-builtin-attrs.rs
-#![rustc_deprecated = "1500"]
+#![rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
-#[rustc_deprecated = "1500"]
+#[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
mod rustc_deprecated {
- mod inner { #![rustc_deprecated="1500"] }
+ mod inner { #![rustc_deprecated()] }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[rustc_deprecated = "1500"] fn f() { }
+ #[rustc_deprecated()] fn f() { }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[rustc_deprecated = "1500"] struct S;
+ #[rustc_deprecated()] struct S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[rustc_deprecated = "1500"] type T = S;
+ #[rustc_deprecated()] type T = S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[rustc_deprecated = "1500"] impl S { }
+ #[rustc_deprecated()] impl S { }
//~^ ERROR stability attributes may not be used outside of the standard library
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.stderr
index af056bc1..4eead36 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.stderr
@@ -1,44 +1,44 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:7:1
|
-LL | #![rustc_deprecated = "1500"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![rustc_deprecated()]
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:10:1
|
-LL | #[rustc_deprecated = "1500"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()]
+ | ^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:13:17
|
-LL | mod inner { #![rustc_deprecated="1500"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![rustc_deprecated()] }
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:16:5
|
-LL | #[rustc_deprecated = "1500"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] fn f() { }
+ | ^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:19:5
|
-LL | #[rustc_deprecated = "1500"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] struct S;
+ | ^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:22:5
|
-LL | #[rustc_deprecated = "1500"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] type T = S;
+ | ^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:25:5
|
-LL | #[rustc_deprecated = "1500"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] impl S { }
+ | ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 7 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-stable.rs b/src/test/ui/feature-gate/issue-43106-gating-of-stable.rs
index 7d9501a..e3ac274 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-stable.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-stable.rs
@@ -4,25 +4,25 @@
// this test incompatible with the "warnings only" nature of
// issue-43106-gating-of-builtin-attrs.rs
-#![stable = "1300"]
+#![stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
-#[stable = "1300"]
+#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
mod stable {
- mod inner { #![stable="1300"] }
+ mod inner { #![stable()] }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[stable = "1300"] fn f() { }
+ #[stable()] fn f() { }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[stable = "1300"] struct S;
+ #[stable()] struct S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[stable = "1300"] type T = S;
+ #[stable()] type T = S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[stable = "1300"] impl S { }
+ #[stable()] impl S { }
//~^ ERROR stability attributes may not be used outside of the standard library
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-stable.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-stable.stderr
index 56066e8..03410ea 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-stable.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-stable.stderr
@@ -1,44 +1,44 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:7:1
|
-LL | #![stable = "1300"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![stable()]
+ | ^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:10:1
|
-LL | #[stable = "1300"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()]
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:13:17
|
-LL | mod inner { #![stable="1300"] }
- | ^^^^^^^^^^^^^^^^^
+LL | mod inner { #![stable()] }
+ | ^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:16:5
|
-LL | #[stable = "1300"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()] fn f() { }
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:19:5
|
-LL | #[stable = "1300"] struct S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()] struct S;
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:22:5
|
-LL | #[stable = "1300"] type T = S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()] type T = S;
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:25:5
|
-LL | #[stable = "1300"] impl S { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()] impl S { }
+ | ^^^^^^^^^^^
error: aborting due to 7 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-unstable.rs b/src/test/ui/feature-gate/issue-43106-gating-of-unstable.rs
index 8be55f0..8d519c3 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-unstable.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-unstable.rs
@@ -4,25 +4,25 @@
// this test incompatible with the "warnings only" nature of
// issue-43106-gating-of-builtin-attrs.rs
-#![unstable = "1200"]
+#![unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
-#[unstable = "1200"]
+#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
mod unstable {
- mod inner { #![unstable="1200"] }
+ mod inner { #![unstable()] }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[unstable = "1200"] fn f() { }
+ #[unstable()] fn f() { }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[unstable = "1200"] struct S;
+ #[unstable()] struct S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[unstable = "1200"] type T = S;
+ #[unstable()] type T = S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[unstable = "1200"] impl S { }
+ #[unstable()] impl S { }
//~^ ERROR stability attributes may not be used outside of the standard library
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-unstable.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-unstable.stderr
index ee8b9d4..5952b38 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-unstable.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-unstable.stderr
@@ -1,44 +1,44 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:7:1
|
-LL | #![unstable = "1200"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![unstable()]
+ | ^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:10:1
|
-LL | #[unstable = "1200"]
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()]
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:13:17
|
-LL | mod inner { #![unstable="1200"] }
- | ^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![unstable()] }
+ | ^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:16:5
|
-LL | #[unstable = "1200"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()] fn f() { }
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:19:5
|
-LL | #[unstable = "1200"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()] struct S;
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:22:5
|
-LL | #[unstable = "1200"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()] type T = S;
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:25:5
|
-LL | #[unstable = "1200"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()] impl S { }
+ | ^^^^^^^^^^^^^
error: aborting due to 7 previous errors
diff --git a/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.rs b/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.rs
deleted file mode 100644
index acd310e..0000000
--- a/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-#[cfg(target_vendor = "x")] //~ ERROR `cfg(target_vendor)` is experimental
-#[cfg_attr(target_vendor = "x", x)] //~ ERROR `cfg(target_vendor)` is experimental
-struct Foo(u64, u64);
-
-#[cfg(not(any(all(target_vendor = "x"))))] //~ ERROR `cfg(target_vendor)` is experimental
-fn foo() {}
-
-fn main() {
- cfg!(target_vendor = "x");
- //~^ ERROR `cfg(target_vendor)` is experimental and subject to change
-}
diff --git a/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.stderr b/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.stderr
deleted file mode 100644
index dd514a5..0000000
--- a/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.stderr
+++ /dev/null
@@ -1,35 +0,0 @@
-error[E0658]: `cfg(target_vendor)` is experimental and subject to change (see issue #29718)
- --> $DIR/feature-gate-cfg-target-vendor.rs:2:12
- |
-LL | #[cfg_attr(target_vendor = "x", x)] //~ ERROR `cfg(target_vendor)` is experimental
- | ^^^^^^^^^^^^^^^^^^^
- |
- = help: add #![feature(cfg_target_vendor)] to the crate attributes to enable
-
-error[E0658]: `cfg(target_vendor)` is experimental and subject to change (see issue #29718)
- --> $DIR/feature-gate-cfg-target-vendor.rs:1:7
- |
-LL | #[cfg(target_vendor = "x")] //~ ERROR `cfg(target_vendor)` is experimental
- | ^^^^^^^^^^^^^^^^^^^
- |
- = help: add #![feature(cfg_target_vendor)] to the crate attributes to enable
-
-error[E0658]: `cfg(target_vendor)` is experimental and subject to change (see issue #29718)
- --> $DIR/feature-gate-cfg-target-vendor.rs:5:19
- |
-LL | #[cfg(not(any(all(target_vendor = "x"))))] //~ ERROR `cfg(target_vendor)` is experimental
- | ^^^^^^^^^^^^^^^^^^^
- |
- = help: add #![feature(cfg_target_vendor)] to the crate attributes to enable
-
-error[E0658]: `cfg(target_vendor)` is experimental and subject to change (see issue #29718)
- --> $DIR/feature-gate-cfg-target-vendor.rs:9:10
- |
-LL | cfg!(target_vendor = "x");
- | ^^^^^^^^^^^^^^^^^^^
- |
- = help: add #![feature(cfg_target_vendor)] to the crate attributes to enable
-
-error: aborting due to 4 previous errors
-
-For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/feature-gates/feature-gate-extern_in_paths.rs b/src/test/ui/feature-gates/feature-gate-extern_in_paths.rs
deleted file mode 100644
index 2d23d13..0000000
--- a/src/test/ui/feature-gates/feature-gate-extern_in_paths.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-struct S;
-
-fn main() {
- let _ = extern::std::vec::Vec::new(); //~ ERROR `extern` in paths is experimental
-}
diff --git a/src/test/ui/feature-gates/feature-gate-extern_in_paths.stderr b/src/test/ui/feature-gates/feature-gate-extern_in_paths.stderr
deleted file mode 100644
index 6b5963b..0000000
--- a/src/test/ui/feature-gates/feature-gate-extern_in_paths.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error[E0658]: `extern` in paths is experimental (see issue #55600)
- --> $DIR/feature-gate-extern_in_paths.rs:4:13
- |
-LL | let _ = extern::std::vec::Vec::new(); //~ ERROR `extern` in paths is experimental
- | ^^^^^^
- |
- = help: add #![feature(extern_in_paths)] to the crate attributes to enable
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.rs b/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.rs
index 8997c18..c7d3304 100644
--- a/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.rs
+++ b/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.rs
@@ -1,13 +1,3 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
enum Foo {
Bar(i32),
Baz { i: i32 },
diff --git a/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.stderr b/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.stderr
index cba643e..43535af 100644
--- a/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.stderr
+++ b/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.stderr
@@ -1,5 +1,5 @@
error: enum variants on type aliases are experimental
- --> $DIR/feature-gate-type_alias_enum_variants.rs:19:13
+ --> $DIR/feature-gate-type_alias_enum_variants.rs:9:13
|
LL | let t = Alias::Bar(0);
| ^^^^^^^^^^
@@ -7,7 +7,7 @@
= help: add `#![feature(type_alias_enum_variants)]` to the crate attributes to enable
error: enum variants on type aliases are experimental
- --> $DIR/feature-gate-type_alias_enum_variants.rs:21:13
+ --> $DIR/feature-gate-type_alias_enum_variants.rs:11:13
|
LL | let t = Alias::Baz { i: 0 };
| ^^^^^^^^^^
@@ -15,7 +15,7 @@
= help: add `#![feature(type_alias_enum_variants)]` to the crate attributes to enable
error: enum variants on type aliases are experimental
- --> $DIR/feature-gate-type_alias_enum_variants.rs:24:9
+ --> $DIR/feature-gate-type_alias_enum_variants.rs:14:9
|
LL | Alias::Bar(_i) => {}
| ^^^^^^^^^^^^^^
@@ -23,7 +23,7 @@
= help: add `#![feature(type_alias_enum_variants)]` to the crate attributes to enable
error: enum variants on type aliases are experimental
- --> $DIR/feature-gate-type_alias_enum_variants.rs:26:9
+ --> $DIR/feature-gate-type_alias_enum_variants.rs:16:9
|
LL | Alias::Baz { i: _i } => {}
| ^^^^^^^^^^
diff --git a/src/test/ui/feature-gates/feature-gate-unwind-attributes.rs b/src/test/ui/feature-gates/feature-gate-unwind-attributes.rs
index 6dda2c5..e0cb9c8 100644
--- a/src/test/ui/feature-gates/feature-gate-unwind-attributes.rs
+++ b/src/test/ui/feature-gates/feature-gate-unwind-attributes.rs
@@ -8,7 +8,7 @@
fn extern_fn();
// CHECK-NOT: Function Attrs: nounwind
// CHECK: declare void @unwinding_extern_fn
- #[unwind] //~ ERROR #[unwind] is experimental
+ #[unwind(allowed)] //~ ERROR #[unwind] is experimental
fn unwinding_extern_fn();
}
diff --git a/src/test/ui/feature-gates/feature-gate-unwind-attributes.stderr b/src/test/ui/feature-gates/feature-gate-unwind-attributes.stderr
index e558712..918d40d 100644
--- a/src/test/ui/feature-gates/feature-gate-unwind-attributes.stderr
+++ b/src/test/ui/feature-gates/feature-gate-unwind-attributes.stderr
@@ -1,8 +1,8 @@
error[E0658]: #[unwind] is experimental
--> $DIR/feature-gate-unwind-attributes.rs:11:5
|
-LL | #[unwind] //~ ERROR #[unwind] is experimental
- | ^^^^^^^^^
+LL | #[unwind(allowed)] //~ ERROR #[unwind] is experimental
+ | ^^^^^^^^^^^^^^^^^^
|
= help: add #![feature(unwind_attributes)] to the crate attributes to enable
diff --git a/src/test/ui/gated-bad-feature.rs b/src/test/ui/gated-bad-feature.rs
index 0782fe4..fb4cc94 100644
--- a/src/test/ui/gated-bad-feature.rs
+++ b/src/test/ui/gated-bad-feature.rs
@@ -6,8 +6,8 @@
//~^^^ ERROR: malformed feature
//~^^^ ERROR: malformed feature
-#![feature] //~ ERROR: malformed feature
-#![feature = "foo"] //~ ERROR: malformed feature
+#![feature] //~ ERROR: attribute must be of the form
+#![feature = "foo"] //~ ERROR: attribute must be of the form
#![feature(test_removed_feature)] //~ ERROR: feature has been removed
diff --git a/src/test/ui/gated-bad-feature.stderr b/src/test/ui/gated-bad-feature.stderr
index a8c35dd..141c516 100644
--- a/src/test/ui/gated-bad-feature.stderr
+++ b/src/test/ui/gated-bad-feature.stderr
@@ -10,25 +10,25 @@
LL | foo = "baz"
| ^^^^^^^^^^^
-error[E0555]: malformed feature attribute, expected #![feature(...)]
- --> $DIR/gated-bad-feature.rs:9:1
- |
-LL | #![feature] //~ ERROR: malformed feature
- | ^^^^^^^^^^^
-
-error[E0555]: malformed feature attribute, expected #![feature(...)]
- --> $DIR/gated-bad-feature.rs:10:1
- |
-LL | #![feature = "foo"] //~ ERROR: malformed feature
- | ^^^^^^^^^^^^^^^^^^^
-
error[E0557]: feature has been removed
--> $DIR/gated-bad-feature.rs:12:12
|
LL | #![feature(test_removed_feature)] //~ ERROR: feature has been removed
| ^^^^^^^^^^^^^^^^^^^^
+error: attribute must be of the form `#[feature(name1, name1, ...)]`
+ --> $DIR/gated-bad-feature.rs:9:1
+ |
+LL | #![feature] //~ ERROR: attribute must be of the form
+ | ^^^^^^^^^^^
+
+error: attribute must be of the form `#[feature(name1, name1, ...)]`
+ --> $DIR/gated-bad-feature.rs:10:1
+ |
+LL | #![feature = "foo"] //~ ERROR: attribute must be of the form
+ | ^^^^^^^^^^^^^^^^^^^
+
error: aborting due to 5 previous errors
-Some errors occurred: E0555, E0556, E0557.
-For more information about an error, try `rustc --explain E0555`.
+Some errors occurred: E0556, E0557.
+For more information about an error, try `rustc --explain E0556`.
diff --git a/src/test/ui/glob-resolve1.stderr b/src/test/ui/glob-resolve1.stderr
index 899ffbf..10a57aa 100644
--- a/src/test/ui/glob-resolve1.stderr
+++ b/src/test/ui/glob-resolve1.stderr
@@ -47,7 +47,11 @@
--> $DIR/glob-resolve1.rs:28:11
|
LL | foo::<A>(); //~ ERROR: cannot find type `A` in this scope
- | ^ did you mean `B`?
+ | ^
+help: an enum with a similar name exists
+ |
+LL | foo::<B>(); //~ ERROR: cannot find type `A` in this scope
+ | ^
help: possible candidate is found in another module, you can import it into scope
|
LL | use bar::A;
@@ -57,7 +61,11 @@
--> $DIR/glob-resolve1.rs:29:11
|
LL | foo::<C>(); //~ ERROR: cannot find type `C` in this scope
- | ^ did you mean `B`?
+ | ^
+help: an enum with a similar name exists
+ |
+LL | foo::<B>(); //~ ERROR: cannot find type `C` in this scope
+ | ^
help: possible candidate is found in another module, you can import it into scope
|
LL | use bar::C;
@@ -67,7 +75,11 @@
--> $DIR/glob-resolve1.rs:30:11
|
LL | foo::<D>(); //~ ERROR: cannot find type `D` in this scope
- | ^ did you mean `B`?
+ | ^
+help: an enum with a similar name exists
+ |
+LL | foo::<B>(); //~ ERROR: cannot find type `D` in this scope
+ | ^
help: possible candidate is found in another module, you can import it into scope
|
LL | use bar::D;
diff --git a/src/test/ui/huge-enum.rs b/src/test/ui/huge-enum.rs
index 18ef457..71c8fd5 100644
--- a/src/test/ui/huge-enum.rs
+++ b/src/test/ui/huge-enum.rs
@@ -1,7 +1,5 @@
-// error-pattern: Option
-// normalize-stderr-test "<\[u32; \d+\]>" -> "<[u32; N]>"
-
-// FIXME: work properly with higher limits
+// normalize-stderr-test "std::option::Option<\[u32; \d+\]>" -> "TYPE"
+// normalize-stderr-test "\[u32; \d+\]" -> "TYPE"
#[cfg(target_pointer_width = "32")]
fn main() {
diff --git a/src/test/ui/huge-enum.stderr b/src/test/ui/huge-enum.stderr
index b7cf255..67cae3d 100644
--- a/src/test/ui/huge-enum.stderr
+++ b/src/test/ui/huge-enum.stderr
@@ -1,4 +1,4 @@
-error: the type `std::option::Option<[u32; N]>` is too big for the current architecture
+error: the type `TYPE` is too big for the current architecture
error: aborting due to previous error
diff --git a/src/test/ui/if-else-type-mismatch.rs b/src/test/ui/if-else-type-mismatch.rs
new file mode 100644
index 0000000..583c3d0
--- /dev/null
+++ b/src/test/ui/if-else-type-mismatch.rs
@@ -0,0 +1,46 @@
+fn main() {
+ let _ = if true {
+ 1i32
+ } else {
+ 2u32
+ };
+ //~^^ ERROR if and else have incompatible types
+ let _ = if true { 42i32 } else { 42u32 };
+ //~^ ERROR if and else have incompatible types
+ let _ = if true {
+ 3u32;
+ } else {
+ 4u32
+ };
+ //~^^ ERROR if and else have incompatible types
+ let _ = if true {
+ 5u32
+ } else {
+ 6u32;
+ };
+ //~^^ ERROR if and else have incompatible types
+ let _ = if true {
+ 7i32;
+ } else {
+ 8u32
+ };
+ //~^^ ERROR if and else have incompatible types
+ let _ = if true {
+ 9i32
+ } else {
+ 10u32;
+ };
+ //~^^ ERROR if and else have incompatible types
+ let _ = if true {
+
+ } else {
+ 11u32
+ };
+ //~^^ ERROR if and else have incompatible types
+ let _ = if true {
+ 12i32
+ } else {
+
+ };
+ //~^^^ ERROR if and else have incompatible types
+}
diff --git a/src/test/ui/if-else-type-mismatch.stderr b/src/test/ui/if-else-type-mismatch.stderr
new file mode 100644
index 0000000..b418c96
--- /dev/null
+++ b/src/test/ui/if-else-type-mismatch.stderr
@@ -0,0 +1,130 @@
+error[E0308]: if and else have incompatible types
+ --> $DIR/if-else-type-mismatch.rs:5:9
+ |
+LL | let _ = if true {
+ | _____________-
+LL | | 1i32
+ | | ---- expected because of this
+LL | | } else {
+LL | | 2u32
+ | | ^^^^ expected i32, found u32
+LL | | };
+ | |_____- if and else have incompatible types
+ |
+ = note: expected type `i32`
+ found type `u32`
+
+error[E0308]: if and else have incompatible types
+ --> $DIR/if-else-type-mismatch.rs:8:38
+ |
+LL | let _ = if true { 42i32 } else { 42u32 };
+ | ----- ^^^^^ expected i32, found u32
+ | |
+ | expected because of this
+ |
+ = note: expected type `i32`
+ found type `u32`
+
+error[E0308]: if and else have incompatible types
+ --> $DIR/if-else-type-mismatch.rs:13:9
+ |
+LL | let _ = if true {
+ | _____________-
+LL | | 3u32;
+ | | -----
+ | | | |
+ | | | help: consider removing this semicolon
+ | | expected because of this
+LL | | } else {
+LL | | 4u32
+ | | ^^^^ expected (), found u32
+LL | | };
+ | |_____- if and else have incompatible types
+ |
+ = note: expected type `()`
+ found type `u32`
+
+error[E0308]: if and else have incompatible types
+ --> $DIR/if-else-type-mismatch.rs:19:9
+ |
+LL | let _ = if true {
+ | _____________-
+LL | | 5u32
+ | | ---- expected because of this
+LL | | } else {
+LL | | 6u32;
+ | | ^^^^-
+ | | | |
+ | | | help: consider removing this semicolon
+ | | expected u32, found ()
+LL | | };
+ | |_____- if and else have incompatible types
+ |
+ = note: expected type `u32`
+ found type `()`
+
+error[E0308]: if and else have incompatible types
+ --> $DIR/if-else-type-mismatch.rs:25:9
+ |
+LL | let _ = if true {
+ | _____________-
+LL | | 7i32;
+ | | ----- expected because of this
+LL | | } else {
+LL | | 8u32
+ | | ^^^^ expected (), found u32
+LL | | };
+ | |_____- if and else have incompatible types
+ |
+ = note: expected type `()`
+ found type `u32`
+
+error[E0308]: if and else have incompatible types
+ --> $DIR/if-else-type-mismatch.rs:31:9
+ |
+LL | let _ = if true {
+ | _____________-
+LL | | 9i32
+ | | ---- expected because of this
+LL | | } else {
+LL | | 10u32;
+ | | ^^^^^^ expected i32, found ()
+LL | | };
+ | |_____- if and else have incompatible types
+ |
+ = note: expected type `i32`
+ found type `()`
+
+error[E0308]: if and else have incompatible types
+ --> $DIR/if-else-type-mismatch.rs:37:9
+ |
+LL | let _ = if true {
+ | _____________________-
+LL | |
+LL | | } else {
+ | |_____- expected because of this
+LL | 11u32
+ | ^^^^^ expected (), found u32
+ |
+ = note: expected type `()`
+ found type `u32`
+
+error[E0308]: if and else have incompatible types
+ --> $DIR/if-else-type-mismatch.rs:42:12
+ |
+LL | let _ = if true {
+ | ------- if and else have incompatible types
+LL | 12i32
+ | ----- expected because of this
+LL | } else {
+ | ____________^
+LL | |
+LL | | };
+ | |_____^ expected i32, found ()
+ |
+ = note: expected type `i32`
+ found type `()`
+
+error: aborting due to 8 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/if/if-branch-types.stderr b/src/test/ui/if/if-branch-types.stderr
index 44e172d..74b925f 100644
--- a/src/test/ui/if/if-branch-types.stderr
+++ b/src/test/ui/if/if-branch-types.stderr
@@ -1,8 +1,10 @@
error[E0308]: if and else have incompatible types
- --> $DIR/if-branch-types.rs:2:13
+ --> $DIR/if-branch-types.rs:2:38
|
LL | let x = if true { 10i32 } else { 10u32 };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected i32, found u32
+ | ----- ^^^^^ expected i32, found u32
+ | |
+ | expected because of this
|
= note: expected type `i32`
found type `u32`
diff --git a/src/test/ui/impl-trait/auto-trait-leak.stderr b/src/test/ui/impl-trait/auto-trait-leak.stderr
index d692858..4acc400 100644
--- a/src/test/ui/impl-trait/auto-trait-leak.stderr
+++ b/src/test/ui/impl-trait/auto-trait-leak.stderr
@@ -22,6 +22,17 @@
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires evaluating trait selection obligation `impl std::clone::Clone: std::marker::Send`...
= note: ...which again requires processing `cycle1::{{impl-Trait}}`, completing the cycle
+note: cycle used when checking item types in top-level module
+ --> $DIR/auto-trait-leak.rs:3:1
+ |
+LL | / use std::cell::Cell;
+LL | | use std::rc::Rc;
+LL | |
+LL | | fn send<T: Send>(_: T) {}
+... |
+LL | | Rc::new(String::from("foo"))
+LL | | }
+ | |_^
error[E0391]: cycle detected when processing `cycle1::{{impl-Trait}}`
--> $DIR/auto-trait-leak.rs:14:16
@@ -46,6 +57,17 @@
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
= note: ...which again requires processing `cycle1::{{impl-Trait}}`, completing the cycle
+note: cycle used when checking item types in top-level module
+ --> $DIR/auto-trait-leak.rs:3:1
+ |
+LL | / use std::cell::Cell;
+LL | | use std::rc::Rc;
+LL | |
+LL | | fn send<T: Send>(_: T) {}
+... |
+LL | | Rc::new(String::from("foo"))
+LL | | }
+ | |_^
error[E0277]: `std::rc::Rc<std::string::String>` cannot be sent between threads safely
--> $DIR/auto-trait-leak.rs:17:5
diff --git a/src/test/ui/imports/issue-57539.rs b/src/test/ui/imports/issue-57539.rs
new file mode 100644
index 0000000..90b74eb
--- /dev/null
+++ b/src/test/ui/imports/issue-57539.rs
@@ -0,0 +1,8 @@
+// edition:2018
+
+mod core {
+ use core; //~ ERROR `core` is ambiguous
+ use crate::*;
+}
+
+fn main() {}
diff --git a/src/test/ui/imports/issue-57539.stderr b/src/test/ui/imports/issue-57539.stderr
new file mode 100644
index 0000000..3f745fd
--- /dev/null
+++ b/src/test/ui/imports/issue-57539.stderr
@@ -0,0 +1,18 @@
+error[E0659]: `core` is ambiguous (name vs any other name during import resolution)
+ --> $DIR/issue-57539.rs:4:9
+ |
+LL | use core; //~ ERROR `core` is ambiguous
+ | ^^^^ ambiguous name
+ |
+ = note: `core` could refer to a built-in extern crate
+ = help: use `::core` to refer to this extern crate unambiguously
+note: `core` could also refer to the module imported here
+ --> $DIR/issue-57539.rs:5:9
+ |
+LL | use crate::*;
+ | ^^^^^^^^
+ = help: use `self::core` to refer to this module unambiguously
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0659`.
diff --git a/src/test/ui/infinite/infinite-vec-type-recursion.stderr b/src/test/ui/infinite/infinite-vec-type-recursion.stderr
index eb1461a..daa18a7 100644
--- a/src/test/ui/infinite/infinite-vec-type-recursion.stderr
+++ b/src/test/ui/infinite/infinite-vec-type-recursion.stderr
@@ -5,6 +5,14 @@
| ^
|
= note: ...which again requires processing `X`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/infinite-vec-type-recursion.rs:1:1
+ |
+LL | / type X = Vec<X>;
+LL | | //~^ ERROR cycle detected
+LL | |
+LL | | fn main() { let b: X = Vec::new(); }
+ | |____________________________________^
error: aborting due to previous error
diff --git a/src/test/ui/intrinsic-invalid-number-of-arguments.rs b/src/test/ui/intrinsic-invalid-number-of-arguments.rs
deleted file mode 100644
index 7823e7d..0000000
--- a/src/test/ui/intrinsic-invalid-number-of-arguments.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Test number of arguments in platform-specific intrinsic function
-// This is the error E0444
-
-#![feature(repr_simd, platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ platform-specific intrinsic
-}
-
-pub fn main() {
-}
diff --git a/src/test/ui/intrinsic-invalid-number-of-arguments.stderr b/src/test/ui/intrinsic-invalid-number-of-arguments.stderr
deleted file mode 100644
index e2874d5..0000000
--- a/src/test/ui/intrinsic-invalid-number-of-arguments.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0444]: platform-specific intrinsic has invalid number of arguments: found 3, expected 1
- --> $DIR/intrinsic-invalid-number-of-arguments.rs:11:5
- |
-LL | fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ platform-specific intrinsic
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0444`.
diff --git a/src/test/ui/invalid_crate_type_syntax.rs b/src/test/ui/invalid_crate_type_syntax.rs
index eae4fad..8157ccd 100644
--- a/src/test/ui/invalid_crate_type_syntax.rs
+++ b/src/test/ui/invalid_crate_type_syntax.rs
@@ -1,5 +1,5 @@
// regression test for issue 16974
-#![crate_type(lib)] //~ ERROR `crate_type` requires a value
+#![crate_type(lib)] //~ ERROR attribute must be of the form
fn my_lib_fn() {}
diff --git a/src/test/ui/invalid_crate_type_syntax.stderr b/src/test/ui/invalid_crate_type_syntax.stderr
index 8494f71..8d6948b 100644
--- a/src/test/ui/invalid_crate_type_syntax.stderr
+++ b/src/test/ui/invalid_crate_type_syntax.stderr
@@ -1,10 +1,8 @@
-error: `crate_type` requires a value
+error: attribute must be of the form `#[crate_type = "bin|lib|..."]`
--> $DIR/invalid_crate_type_syntax.rs:2:1
|
-LL | #![crate_type(lib)] //~ ERROR `crate_type` requires a value
+LL | #![crate_type(lib)] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^
- |
- = note: for example: `#![crate_type="lib"]`
error: aborting due to previous error
diff --git a/src/test/ui/issue-53787-inline-assembler-macro.rs b/src/test/ui/issue-53787-inline-assembler-macro.rs
new file mode 100644
index 0000000..937bce1
--- /dev/null
+++ b/src/test/ui/issue-53787-inline-assembler-macro.rs
@@ -0,0 +1,23 @@
+// Regression test for Issue #53787: Fix ICE when creating a label in inline assembler with macros.
+
+#![feature(asm)]
+
+macro_rules! fake_jump {
+ ($id:expr) => {
+ unsafe {
+ asm!(
+ "
+ jmp $0
+ lea eax, [ebx]
+ xor eax, 0xDEADBEEF
+ retn
+ $0:
+ "::"0"($id)::"volatile", "intel");
+ }
+ };
+}
+
+fn main() {
+ fake_jump!("FirstFunc"); //~ ERROR invalid value for constraint in inline assembly
+ println!("Hello, world!");
+}
diff --git a/src/test/ui/issue-53787-inline-assembler-macro.stderr b/src/test/ui/issue-53787-inline-assembler-macro.stderr
new file mode 100644
index 0000000..69f380b
--- /dev/null
+++ b/src/test/ui/issue-53787-inline-assembler-macro.stderr
@@ -0,0 +1,9 @@
+error[E0669]: invalid value for constraint in inline assembly
+ --> $DIR/issue-53787-inline-assembler-macro.rs:21:16
+ |
+LL | fake_jump!("FirstFunc"); //~ ERROR invalid value for constraint in inline assembly
+ | ^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0669`.
diff --git a/src/test/ui/issues/issue-10200.stderr b/src/test/ui/issues/issue-10200.stderr
index 78e6015..ac1ad11 100644
--- a/src/test/ui/issues/issue-10200.stderr
+++ b/src/test/ui/issues/issue-10200.stderr
@@ -2,7 +2,7 @@
--> $DIR/issue-10200.rs:6:9
|
LL | foo(x) //~ ERROR expected tuple struct/variant, found function `foo`
- | ^^^ did you mean `Foo`?
+ | ^^^ help: a tuple struct with a similar name exists: `Foo`
error: aborting due to previous error
diff --git a/src/test/ui/issues/issue-11844.stderr b/src/test/ui/issues/issue-11844.stderr
index 05d2685..683ad48 100644
--- a/src/test/ui/issues/issue-11844.stderr
+++ b/src/test/ui/issues/issue-11844.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/issue-11844.rs:6:9
|
+LL | match a {
+ | - this match expression has type `std::option::Option<std::boxed::Box<{integer}>>`
LL | Ok(a) => //~ ERROR: mismatched types
| ^^^^^ expected enum `std::option::Option`, found enum `std::result::Result`
|
diff --git a/src/test/ui/issues/issue-12511.stderr b/src/test/ui/issues/issue-12511.stderr
index 945cdc7..37e38ff 100644
--- a/src/test/ui/issues/issue-12511.stderr
+++ b/src/test/ui/issues/issue-12511.stderr
@@ -10,6 +10,11 @@
LL | trait T2 : T1 {
| ^^
= note: ...which again requires computing the supertraits of `T1`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/issue-12511.rs:1:1
+ |
+LL | trait T1 : T2 {
+ | ^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/src/test/ui/issues/issue-12552.stderr b/src/test/ui/issues/issue-12552.stderr
index ca5efcd..768d11b 100644
--- a/src/test/ui/issues/issue-12552.stderr
+++ b/src/test/ui/issues/issue-12552.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/issue-12552.rs:6:5
|
+LL | match t {
+ | - this match expression has type `std::result::Result<_, {integer}>`
LL | Some(k) => match k { //~ ERROR mismatched types
| ^^^^^^^ expected enum `std::result::Result`, found enum `std::option::Option`
|
diff --git a/src/test/ui/issues/issue-13466.stderr b/src/test/ui/issues/issue-13466.stderr
index 2f60070..6625589 100644
--- a/src/test/ui/issues/issue-13466.stderr
+++ b/src/test/ui/issues/issue-13466.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/issue-13466.rs:8:9
|
+LL | let _x: usize = match Some(1) {
+ | ------- this match expression has type `std::option::Option<{integer}>`
LL | Ok(u) => u,
| ^^^^^ expected enum `std::option::Option`, found enum `std::result::Result`
|
@@ -10,6 +12,9 @@
error[E0308]: mismatched types
--> $DIR/issue-13466.rs:14:9
|
+LL | let _x: usize = match Some(1) {
+ | ------- this match expression has type `std::option::Option<{integer}>`
+...
LL | Err(e) => panic!(e)
| ^^^^^^ expected enum `std::option::Option`, found enum `std::result::Result`
|
diff --git a/src/test/ui/issues/issue-15896.stderr b/src/test/ui/issues/issue-15896.stderr
index cd62984..de9757d 100644
--- a/src/test/ui/issues/issue-15896.stderr
+++ b/src/test/ui/issues/issue-15896.stderr
@@ -1,6 +1,9 @@
error[E0308]: mismatched types
--> $DIR/issue-15896.rs:11:11
|
+LL | let u = match e {
+ | - this match expression has type `main::R`
+LL | E::B(
LL | Tau{t: x},
| ^^^^^^^^^ expected enum `main::R`, found struct `main::Tau`
|
diff --git a/src/test/ui/issues/issue-16401.stderr b/src/test/ui/issues/issue-16401.stderr
index a1cf6c9..1779d0b 100644
--- a/src/test/ui/issues/issue-16401.stderr
+++ b/src/test/ui/issues/issue-16401.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/issue-16401.rs:8:9
|
+LL | match () {
+ | -- this match expression has type `()`
LL | Slice { data: data, len: len } => (),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected (), found struct `Slice`
|
diff --git a/src/test/ui/issues/issue-17546.stderr b/src/test/ui/issues/issue-17546.stderr
index 4f2c6cf..1fbb229 100644
--- a/src/test/ui/issues/issue-17546.stderr
+++ b/src/test/ui/issues/issue-17546.stderr
@@ -2,10 +2,15 @@
--> $DIR/issue-17546.rs:12:17
|
LL | fn new() -> NoResult<MyEnum, String> {
- | --------^^^^^^^^^^^^^^^^
- | |
- | did you mean `Result`?
- | help: try using the variant's enum: `foo::MyEnum`
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+help: try using the variant's enum
+ |
+LL | fn new() -> foo::MyEnum {
+ | ^^^^^^^^^^^
+help: an enum with a similar name exists
+ |
+LL | fn new() -> Result<MyEnum, String> {
+ | ^^^^^^
error[E0573]: expected type, found variant `Result`
--> $DIR/issue-17546.rs:22:17
@@ -45,10 +50,15 @@
--> $DIR/issue-17546.rs:33:15
|
LL | fn newer() -> NoResult<foo::MyEnum, String> {
- | --------^^^^^^^^^^^^^^^^^^^^^
- | |
- | did you mean `Result`?
- | help: try using the variant's enum: `foo::MyEnum`
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+help: try using the variant's enum
+ |
+LL | fn newer() -> foo::MyEnum {
+ | ^^^^^^^^^^^
+help: an enum with a similar name exists
+ |
+LL | fn newer() -> Result<foo::MyEnum, String> {
+ | ^^^^^^
error: aborting due to 4 previous errors
diff --git a/src/test/ui/issues/issue-17718-const-naming.rs b/src/test/ui/issues/issue-17718-const-naming.rs
index 9b3d84b..d30b958 100644
--- a/src/test/ui/issues/issue-17718-const-naming.rs
+++ b/src/test/ui/issues/issue-17718-const-naming.rs
@@ -1,8 +1,8 @@
#![warn(unused)]
-#[deny(warnings)]
+#![deny(warnings)]
const foo: isize = 3;
-//~^ ERROR: should have an upper case name such as
+//~^ ERROR: should have an upper case name
//~^^ ERROR: constant item is never used
fn main() {}
diff --git a/src/test/ui/issues/issue-17718-const-naming.stderr b/src/test/ui/issues/issue-17718-const-naming.stderr
index 641e50a..b92acec 100644
--- a/src/test/ui/issues/issue-17718-const-naming.stderr
+++ b/src/test/ui/issues/issue-17718-const-naming.stderr
@@ -5,23 +5,23 @@
| ^^^^^^^^^^^^^^^^^^^^^
|
note: lint level defined here
- --> $DIR/issue-17718-const-naming.rs:2:8
+ --> $DIR/issue-17718-const-naming.rs:2:9
|
-LL | #[deny(warnings)]
- | ^^^^^^^^
+LL | #![deny(warnings)]
+ | ^^^^^^^^
= note: #[deny(dead_code)] implied by #[deny(warnings)]
-error: constant `foo` should have an upper case name such as `FOO`
- --> $DIR/issue-17718-const-naming.rs:4:1
+error: constant `foo` should have an upper case name
+ --> $DIR/issue-17718-const-naming.rs:4:7
|
LL | const foo: isize = 3;
- | ^^^^^^^^^^^^^^^^^^^^^
+ | ^^^ help: convert the identifier to upper case: `FOO`
|
note: lint level defined here
- --> $DIR/issue-17718-const-naming.rs:2:8
+ --> $DIR/issue-17718-const-naming.rs:2:9
|
-LL | #[deny(warnings)]
- | ^^^^^^^^
+LL | #![deny(warnings)]
+ | ^^^^^^^^
= note: #[deny(non_upper_case_globals)] implied by #[deny(warnings)]
error: aborting due to 2 previous errors
diff --git a/src/test/ui/issues/issue-20413.stderr b/src/test/ui/issues/issue-20413.stderr
index 20e5758..1c353fe 100644
--- a/src/test/ui/issues/issue-20413.stderr
+++ b/src/test/ui/issues/issue-20413.stderr
@@ -6,7 +6,7 @@
|
= help: consider removing `T` or using a marker such as `std::marker::PhantomData`
-error[E0275]: overflow evaluating the requirement `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: std::marker::Sized`
+error[E0275]: overflow evaluating the requirement `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: Foo`
--> $DIR/issue-20413.rs:8:1
|
LL | / impl<T> Foo for T where NoData<T>: Foo {
@@ -18,7 +18,6 @@
| |_^
|
= help: consider adding a `#![recursion_limit="128"]` attribute to your crate
- = note: required because of the requirements on the impl of `Foo` for `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
diff --git a/src/test/ui/issues/issue-20772.stderr b/src/test/ui/issues/issue-20772.stderr
index 15a5fc4..7dc4e43 100644
--- a/src/test/ui/issues/issue-20772.stderr
+++ b/src/test/ui/issues/issue-20772.stderr
@@ -8,6 +8,14 @@
| |__^
|
= note: ...which again requires computing the supertraits of `T`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/issue-20772.rs:1:1
+ |
+LL | / trait T : Iterator<Item=Self::Item>
+LL | | //~^ ERROR cycle detected
+LL | | //~| ERROR associated type `Item` not found for `Self`
+LL | | {}
+ | |__^
error[E0220]: associated type `Item` not found for `Self`
--> $DIR/issue-20772.rs:1:25
diff --git a/src/test/ui/issues/issue-20825.stderr b/src/test/ui/issues/issue-20825.stderr
index 1df51dc..5f9709d 100644
--- a/src/test/ui/issues/issue-20825.stderr
+++ b/src/test/ui/issues/issue-20825.stderr
@@ -5,6 +5,11 @@
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: ...which again requires computing the supertraits of `Processor`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/issue-20825.rs:5:1
+ |
+LL | pub trait Processor: Subscriber<Input = Self::Input> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/src/test/ui/issues/issue-22673.stderr b/src/test/ui/issues/issue-22673.stderr
index 4b5730c..9e7e4b2 100644
--- a/src/test/ui/issues/issue-22673.stderr
+++ b/src/test/ui/issues/issue-22673.stderr
@@ -5,6 +5,11 @@
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: ...which again requires computing the supertraits of `Expr`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/issue-22673.rs:1:1
+ |
+LL | trait Expr : PartialEq<Self::Item> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/src/test/ui/issues/issue-31845.stderr b/src/test/ui/issues/issue-31845.stderr
index d04a884..7ee1a41 100644
--- a/src/test/ui/issues/issue-31845.stderr
+++ b/src/test/ui/issues/issue-31845.stderr
@@ -2,7 +2,7 @@
--> $DIR/issue-31845.rs:7:12
|
LL | g(); //~ ERROR cannot find function `g` in this scope
- | ^ did you mean `h`?
+ | ^ help: a function with a similar name exists: `h`
error: aborting due to previous error
diff --git a/src/test/ui/issues/issue-32004.stderr b/src/test/ui/issues/issue-32004.stderr
index 04cd27b..f8c418b 100644
--- a/src/test/ui/issues/issue-32004.stderr
+++ b/src/test/ui/issues/issue-32004.stderr
@@ -4,7 +4,7 @@
LL | Foo::Bar => {}
| ^^^^^---
| |
- | did you mean `Baz`?
+ | help: a unit variant with a similar name exists: `Baz`
error[E0532]: expected tuple struct/variant, found unit struct `S`
--> $DIR/issue-32004.rs:16:9
diff --git a/src/test/ui/issues/issue-32086.stderr b/src/test/ui/issues/issue-32086.stderr
index 98a6200..bb2cc7c 100644
--- a/src/test/ui/issues/issue-32086.stderr
+++ b/src/test/ui/issues/issue-32086.stderr
@@ -2,13 +2,13 @@
--> $DIR/issue-32086.rs:5:9
|
LL | let C(a) = S(11); //~ ERROR expected tuple struct/variant, found constant `C`
- | ^ did you mean `S`?
+ | ^ help: a tuple struct with a similar name exists: `S`
error[E0532]: expected tuple struct/variant, found constant `C`
--> $DIR/issue-32086.rs:6:9
|
LL | let C(..) = S(11); //~ ERROR expected tuple struct/variant, found constant `C`
- | ^ did you mean `S`?
+ | ^ help: a tuple struct with a similar name exists: `S`
error: aborting due to 2 previous errors
diff --git a/src/test/ui/issues/issue-34373.stderr b/src/test/ui/issues/issue-34373.stderr
index 45e8d1b..07ac421 100644
--- a/src/test/ui/issues/issue-34373.stderr
+++ b/src/test/ui/issues/issue-34373.stderr
@@ -10,6 +10,17 @@
LL | type DefaultFoo = Foo;
| ^^^
= note: ...which again requires processing `Foo::T`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/issue-34373.rs:1:1
+ |
+LL | / #![allow(warnings)]
+LL | |
+LL | | trait Trait<T> {
+LL | | fn foo(_: T) {}
+... |
+LL | | fn main() {
+LL | | }
+ | |_^
error: aborting due to previous error
diff --git a/src/test/ui/issues/issue-3680.stderr b/src/test/ui/issues/issue-3680.stderr
index 78c3f92..51903cf 100644
--- a/src/test/ui/issues/issue-3680.stderr
+++ b/src/test/ui/issues/issue-3680.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/issue-3680.rs:3:9
|
+LL | match None {
+ | ---- this match expression has type `std::option::Option<_>`
LL | Err(_) => ()
| ^^^^^^ expected enum `std::option::Option`, found enum `std::result::Result`
|
diff --git a/src/test/ui/issues/issue-43988.rs b/src/test/ui/issues/issue-43988.rs
index b2a2035..74667d7 100644
--- a/src/test/ui/issues/issue-43988.rs
+++ b/src/test/ui/issues/issue-43988.rs
@@ -24,8 +24,7 @@
#[repr]
let _y = "123";
//~^^ ERROR attribute should not be applied to a statement
- //~| WARN `repr` attribute must have a hint
-
+ //~| ERROR attribute must be of the form
fn foo() {}
@@ -35,5 +34,5 @@
let _z = #[repr] 1;
//~^ ERROR attribute should not be applied to an expression
- //~| WARN `repr` attribute must have a hint
+ //~| ERROR attribute must be of the form
}
diff --git a/src/test/ui/issues/issue-43988.stderr b/src/test/ui/issues/issue-43988.stderr
index 811816d..6fe41a3 100644
--- a/src/test/ui/issues/issue-43988.stderr
+++ b/src/test/ui/issues/issue-43988.stderr
@@ -1,21 +1,14 @@
-warning: `repr` attribute must have a hint
+error: attribute must be of the form `#[repr(C, packed, ...)]`
--> $DIR/issue-43988.rs:24:5
|
LL | #[repr]
- | ^^^^^^^ needs a hint
- |
- = note: #[warn(bad_repr)] on by default
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
+ | ^^^^^^^
-warning: `repr` attribute must have a hint
- --> $DIR/issue-43988.rs:36:14
+error: attribute must be of the form `#[repr(C, packed, ...)]`
+ --> $DIR/issue-43988.rs:35:14
|
LL | let _z = #[repr] 1;
- | ^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
+ | ^^^^^^^
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43988.rs:5:5
@@ -60,7 +53,7 @@
| --------------- not a struct, enum or union
error[E0518]: attribute should be applied to function or closure
- --> $DIR/issue-43988.rs:32:5
+ --> $DIR/issue-43988.rs:31:5
|
LL | #[inline(ABC)]
| ^^^^^^^^^^^^^^
@@ -68,12 +61,12 @@
| ----- not a function or closure
error[E0517]: attribute should not be applied to an expression
- --> $DIR/issue-43988.rs:36:14
+ --> $DIR/issue-43988.rs:35:14
|
LL | let _z = #[repr] 1;
| ^^^^^^^ - not defining a struct, enum or union
-error: aborting due to 7 previous errors
+error: aborting due to 9 previous errors
Some errors occurred: E0517, E0518.
For more information about an error, try `rustc --explain E0517`.
diff --git a/src/test/ui/issues/issue-46186.rs b/src/test/ui/issues/issue-46186.rs
index de7d13a..9dfd61f 100644
--- a/src/test/ui/issues/issue-46186.rs
+++ b/src/test/ui/issues/issue-46186.rs
@@ -1,5 +1,6 @@
struct Struct {
a: usize,
-}; //~ ERROR expected item, found `;`
+};
+//~^ ERROR expected item, found `;`
fn main() {}
diff --git a/src/test/ui/issues/issue-46186.stderr b/src/test/ui/issues/issue-46186.stderr
index 11a1fc0..eb0dbb8 100644
--- a/src/test/ui/issues/issue-46186.stderr
+++ b/src/test/ui/issues/issue-46186.stderr
@@ -1,8 +1,8 @@
error: expected item, found `;`
--> $DIR/issue-46186.rs:3:2
|
-LL | }; //~ ERROR expected item, found `;`
- | ^ help: consider removing this semicolon
+LL | };
+ | ^ help: remove this semicolon
|
= help: braced struct declarations are not followed by a semicolon
diff --git a/src/test/ui/issues/issue-46332.stderr b/src/test/ui/issues/issue-46332.stderr
index 785deb7..812a500 100644
--- a/src/test/ui/issues/issue-46332.stderr
+++ b/src/test/ui/issues/issue-46332.stderr
@@ -2,7 +2,7 @@
--> $DIR/issue-46332.rs:9:5
|
LL | TyUInt {};
- | ^^^^^^ did you mean `TyUint`?
+ | ^^^^^^ help: a struct with a similar name exists: `TyUint`
error: aborting due to previous error
diff --git a/src/test/ui/issues/issue-49040.rs b/src/test/ui/issues/issue-49040.rs
index 7c8d3d0..a5f05d2 100644
--- a/src/test/ui/issues/issue-49040.rs
+++ b/src/test/ui/issues/issue-49040.rs
@@ -1,2 +1,2 @@
#![allow(unused_variables)]; //~ ERROR expected item, found `;`
-fn main() {}
+fn foo() {}
diff --git a/src/test/ui/issues/issue-49040.stderr b/src/test/ui/issues/issue-49040.stderr
index eec88f0..12e78e2 100644
--- a/src/test/ui/issues/issue-49040.stderr
+++ b/src/test/ui/issues/issue-49040.stderr
@@ -2,7 +2,12 @@
--> $DIR/issue-49040.rs:1:28
|
LL | #![allow(unused_variables)]; //~ ERROR expected item, found `;`
- | ^ help: consider removing this semicolon
+ | ^ help: remove this semicolon
-error: aborting due to previous error
+error[E0601]: `main` function not found in crate `issue_49040`
+ |
+ = note: consider adding a `main` function to `$DIR/issue-49040.rs`
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0601`.
diff --git a/src/test/ui/issues/issue-5067.rs b/src/test/ui/issues/issue-5067.rs
index 526a683..616fd09 100644
--- a/src/test/ui/issues/issue-5067.rs
+++ b/src/test/ui/issues/issue-5067.rs
@@ -1,37 +1,59 @@
#![allow(unused_macros)]
+// Tests that repetition matchers cannot match the empty token tree (since that would be
+// ambiguous).
+
+// edition:2018
+
macro_rules! foo {
( $()* ) => {};
//~^ ERROR repetition matches empty token tree
( $()+ ) => {};
//~^ ERROR repetition matches empty token tree
-
+ ( $()? ) => {};
+ //~^ ERROR repetition matches empty token tree
( $(),* ) => {}; // PASS
( $(),+ ) => {}; // PASS
-
+ // `?` cannot have a separator...
( [$()*] ) => {};
//~^ ERROR repetition matches empty token tree
( [$()+] ) => {};
//~^ ERROR repetition matches empty token tree
-
+ ( [$()?] ) => {};
+ //~^ ERROR repetition matches empty token tree
( [$(),*] ) => {}; // PASS
( [$(),+] ) => {}; // PASS
-
+ // `?` cannot have a separator...
( $($()* $(),* $(a)* $(a),* )* ) => {};
//~^ ERROR repetition matches empty token tree
( $($()* $(),* $(a)* $(a),* )+ ) => {};
//~^ ERROR repetition matches empty token tree
-
+ ( $($()* $(),* $(a)* $(a),* )? ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()? $(),* $(a)? $(a),* )* ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()? $(),* $(a)? $(a),* )+ ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()? $(),* $(a)? $(a),* )? ) => {};
+ //~^ ERROR repetition matches empty token tree
( $(a $(),* $(a)* $(a),* )* ) => {}; // PASS
( $($(a)+ $(),* $(a)* $(a),* )+ ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)* $(a),* )? ) => {}; // PASS
+
+ ( $(a $(),* $(a)? $(a),* )* ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)? $(a),* )+ ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)? $(a),* )? ) => {}; // PASS
( $(a $()+)* ) => {};
//~^ ERROR repetition matches empty token tree
( $(a $()*)+ ) => {};
//~^ ERROR repetition matches empty token tree
+ ( $(a $()+)? ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $(a $()?)+ ) => {};
+ //~^ ERROR repetition matches empty token tree
}
-
// --- Original Issue --- //
macro_rules! make_vec {
@@ -43,11 +65,10 @@
let _ = make_vec![a 1, a 2, a 3];
}
-
// --- Minified Issue --- //
macro_rules! m {
- ( $()* ) => {}
+ ( $()* ) => {};
//~^ ERROR repetition matches empty token tree
}
diff --git a/src/test/ui/issues/issue-5067.stderr b/src/test/ui/issues/issue-5067.stderr
index 433b7c8..7ffc607 100644
--- a/src/test/ui/issues/issue-5067.stderr
+++ b/src/test/ui/issues/issue-5067.stderr
@@ -1,62 +1,110 @@
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:4:8
+ --> $DIR/issue-5067.rs:9:8
|
LL | ( $()* ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:6:8
+ --> $DIR/issue-5067.rs:11:8
|
LL | ( $()+ ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:12:9
+ --> $DIR/issue-5067.rs:13:8
+ |
+LL | ( $()? ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:18:9
|
LL | ( [$()*] ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:14:9
+ --> $DIR/issue-5067.rs:20:9
|
LL | ( [$()+] ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:20:8
+ --> $DIR/issue-5067.rs:22:9
+ |
+LL | ( [$()?] ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:27:8
|
LL | ( $($()* $(),* $(a)* $(a),* )* ) => {};
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:22:8
+ --> $DIR/issue-5067.rs:29:8
|
LL | ( $($()* $(),* $(a)* $(a),* )+ ) => {};
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:28:12
+ --> $DIR/issue-5067.rs:31:8
+ |
+LL | ( $($()* $(),* $(a)* $(a),* )? ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:33:8
+ |
+LL | ( $($()? $(),* $(a)? $(a),* )* ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:35:8
+ |
+LL | ( $($()? $(),* $(a)? $(a),* )+ ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:37:8
+ |
+LL | ( $($()? $(),* $(a)? $(a),* )? ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:47:12
|
LL | ( $(a $()+)* ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:30:12
+ --> $DIR/issue-5067.rs:49:12
|
LL | ( $(a $()*)+ ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:38:18
+ --> $DIR/issue-5067.rs:51:12
+ |
+LL | ( $(a $()+)? ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:53:12
+ |
+LL | ( $(a $()?)+ ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:60:18
|
LL | (a $e1:expr $($(, a $e2:expr)*)*) => ([$e1 $($(, $e2)*)*]);
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:50:8
+ --> $DIR/issue-5067.rs:71:8
|
-LL | ( $()* ) => {}
+LL | ( $()* ) => {};
| ^^
-error: aborting due to 10 previous errors
+error: aborting due to 18 previous errors
diff --git a/src/test/ui/issues/issue-5100.stderr b/src/test/ui/issues/issue-5100.stderr
index a6f6229..0a918a7 100644
--- a/src/test/ui/issues/issue-5100.stderr
+++ b/src/test/ui/issues/issue-5100.stderr
@@ -28,6 +28,8 @@
error[E0308]: mismatched types
--> $DIR/issue-5100.rs:33:9
|
+LL | match (true, false) {
+ | ------------- this match expression has type `(bool, bool)`
LL | box (true, false) => ()
| ^^^^^^^^^^^^^^^^^ expected tuple, found struct `std::boxed::Box`
|
diff --git a/src/test/ui/issues/issue-5358-1.stderr b/src/test/ui/issues/issue-5358-1.stderr
index dbbafb3..649a0c1 100644
--- a/src/test/ui/issues/issue-5358-1.stderr
+++ b/src/test/ui/issues/issue-5358-1.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/issue-5358-1.rs:6:9
|
+LL | match S(Either::Left(5)) {
+ | ------------------ this match expression has type `S`
LL | Either::Right(_) => {}
| ^^^^^^^^^^^^^^^^ expected struct `S`, found enum `Either`
|
diff --git a/src/test/ui/issues/issue-57472.rs b/src/test/ui/issues/issue-57472.rs
new file mode 100644
index 0000000..1131006
--- /dev/null
+++ b/src/test/ui/issues/issue-57472.rs
@@ -0,0 +1,35 @@
+#![crate_type="lib"]
+#![deny(unreachable_patterns)]
+
+mod test_struct {
+ // Test the exact copy of the minimal example
+ // posted in the issue.
+ pub struct Punned {
+ foo: [u8; 1],
+ bar: [u8; 1],
+ }
+
+ pub fn test(punned: Punned) {
+ match punned {
+ Punned { foo: [_], .. } => println!("foo"),
+ Punned { bar: [_], .. } => println!("bar"),
+ //~^ ERROR unreachable pattern [unreachable_patterns]
+ }
+ }
+}
+
+mod test_union {
+ // Test the same thing using a union.
+ pub union Punned {
+ foo: [u8; 1],
+ bar: [u8; 1],
+ }
+
+ pub fn test(punned: Punned) {
+ match punned {
+ Punned { foo: [_] } => println!("foo"),
+ Punned { bar: [_] } => println!("bar"),
+ //~^ ERROR unreachable pattern [unreachable_patterns]
+ }
+ }
+}
diff --git a/src/test/ui/issues/issue-57472.stderr b/src/test/ui/issues/issue-57472.stderr
new file mode 100644
index 0000000..b6dd7e2
--- /dev/null
+++ b/src/test/ui/issues/issue-57472.stderr
@@ -0,0 +1,20 @@
+error: unreachable pattern
+ --> $DIR/issue-57472.rs:15:13
+ |
+LL | Punned { bar: [_], .. } => println!("bar"),
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: lint level defined here
+ --> $DIR/issue-57472.rs:2:9
+ |
+LL | #![deny(unreachable_patterns)]
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: unreachable pattern
+ --> $DIR/issue-57472.rs:31:13
+ |
+LL | Punned { bar: [_] } => println!("bar"),
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/issues/issue-57597.rs b/src/test/ui/issues/issue-57597.rs
new file mode 100644
index 0000000..ebeb3fe
--- /dev/null
+++ b/src/test/ui/issues/issue-57597.rs
@@ -0,0 +1,80 @@
+// Regression test for #57597.
+//
+// Make sure that nested matchers work correctly rather than causing an infinite loop or crash.
+
+// edition:2018
+
+macro_rules! foo1 {
+ ($($($i:ident)?)+) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo2 {
+ ($($($i:ident)?)*) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo3 {
+ ($($($i:ident)?)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo4 {
+ ($($($($i:ident)?)?)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo5 {
+ ($($($($i:ident)*)?)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo6 {
+ ($($($($i:ident)?)*)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo7 {
+ ($($($($i:ident)?)?)*) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo8 {
+ ($($($($i:ident)*)*)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo9 {
+ ($($($($i:ident)?)*)*) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo10 {
+ ($($($($i:ident)?)*)+) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo11 {
+ ($($($($i:ident)+)?)*) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo12 {
+ ($($($($i:ident)+)*)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+fn main() {
+ foo1!();
+ foo2!();
+ foo3!();
+ foo4!();
+ foo5!();
+ foo6!();
+ foo7!();
+ foo8!();
+ foo9!();
+ foo10!();
+ foo11!();
+ foo12!();
+}
diff --git a/src/test/ui/issues/issue-57597.stderr b/src/test/ui/issues/issue-57597.stderr
new file mode 100644
index 0000000..0a02ac8
--- /dev/null
+++ b/src/test/ui/issues/issue-57597.stderr
@@ -0,0 +1,74 @@
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:8:7
+ |
+LL | ($($($i:ident)?)+) => {};
+ | ^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:13:7
+ |
+LL | ($($($i:ident)?)*) => {};
+ | ^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:18:7
+ |
+LL | ($($($i:ident)?)?) => {};
+ | ^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:23:7
+ |
+LL | ($($($($i:ident)?)?)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:28:7
+ |
+LL | ($($($($i:ident)*)?)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:33:7
+ |
+LL | ($($($($i:ident)?)*)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:38:7
+ |
+LL | ($($($($i:ident)?)?)*) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:43:7
+ |
+LL | ($($($($i:ident)*)*)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:48:7
+ |
+LL | ($($($($i:ident)?)*)*) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:53:7
+ |
+LL | ($($($($i:ident)?)*)+) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:58:7
+ |
+LL | ($($($($i:ident)+)?)*) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:63:7
+ |
+LL | ($($($($i:ident)+)*)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 12 previous errors
+
diff --git a/src/test/ui/issues/issue-7092.stderr b/src/test/ui/issues/issue-7092.stderr
index aa24182..7bb6820 100644
--- a/src/test/ui/issues/issue-7092.stderr
+++ b/src/test/ui/issues/issue-7092.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/issue-7092.rs:6:9
|
+LL | match x {
+ | - this match expression has type `Whatever`
LL | Some(field) =>
| ^^^^^^^^^^^ expected enum `Whatever`, found enum `std::option::Option`
|
diff --git a/src/test/ui/issues/issue-7607-1.stderr b/src/test/ui/issues/issue-7607-1.stderr
index ffe03f5..aa0a6c7 100644
--- a/src/test/ui/issues/issue-7607-1.stderr
+++ b/src/test/ui/issues/issue-7607-1.stderr
@@ -2,7 +2,7 @@
--> $DIR/issue-7607-1.rs:5:6
|
LL | impl Fo { //~ ERROR cannot find type `Fo` in this scope
- | ^^ did you mean `Fn`?
+ | ^^ help: a trait with a similar name exists: `Fn`
error: aborting due to previous error
diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-expr.rs b/src/test/ui/keyword/extern/keyword-extern-as-identifier-expr.rs
new file mode 100644
index 0000000..b738eb4
--- /dev/null
+++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-expr.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let s = extern::foo::Bar; //~ ERROR expected expression, found keyword `extern`
+}
diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-expr.stderr b/src/test/ui/keyword/extern/keyword-extern-as-identifier-expr.stderr
new file mode 100644
index 0000000..150fc88
--- /dev/null
+++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-expr.stderr
@@ -0,0 +1,8 @@
+error: expected expression, found keyword `extern`
+ --> $DIR/keyword-extern-as-identifier-expr.rs:2:13
+ |
+LL | let s = extern::foo::Bar; //~ ERROR expected expression, found keyword `extern`
+ | ^^^^^^ expected expression
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.rs b/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.rs
new file mode 100644
index 0000000..f9b6bad
--- /dev/null
+++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let extern = 0; //~ ERROR expected pattern, found keyword `extern`
+}
diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.stderr b/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.stderr
new file mode 100644
index 0000000..426b4ee
--- /dev/null
+++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.stderr
@@ -0,0 +1,8 @@
+error: expected pattern, found keyword `extern`
+ --> $DIR/keyword-extern-as-identifier-pat.rs:2:9
+ |
+LL | let extern = 0; //~ ERROR expected pattern, found keyword `extern`
+ | ^^^^^^ expected pattern
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-type.rs b/src/test/ui/keyword/extern/keyword-extern-as-identifier-type.rs
new file mode 100644
index 0000000..3845a9a
--- /dev/null
+++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-type.rs
@@ -0,0 +1,3 @@
+type A = extern::foo::bar; //~ ERROR expected `fn`, found `::`
+
+fn main() {}
diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-type.stderr b/src/test/ui/keyword/extern/keyword-extern-as-identifier-type.stderr
new file mode 100644
index 0000000..97b641f
--- /dev/null
+++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-type.stderr
@@ -0,0 +1,8 @@
+error: expected `fn`, found `::`
+ --> $DIR/keyword-extern-as-identifier-type.rs:1:16
+ |
+LL | type A = extern::foo::bar; //~ ERROR expected `fn`, found `::`
+ | ^^ expected `fn` here
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.rs b/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.rs
new file mode 100644
index 0000000..b07de3e
--- /dev/null
+++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.rs
@@ -0,0 +1,3 @@
+use extern::foo; //~ ERROR expected identifier, found keyword `extern`
+
+fn main() {}
diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.stderr b/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.stderr
new file mode 100644
index 0000000..31b575a
--- /dev/null
+++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.stderr
@@ -0,0 +1,12 @@
+error: expected identifier, found keyword `extern`
+ --> $DIR/keyword-extern-as-identifier-use.rs:1:5
+ |
+LL | use extern::foo; //~ ERROR expected identifier, found keyword `extern`
+ | ^^^^^^ expected identifier, found keyword
+help: you can escape reserved keywords to use them as identifiers
+ |
+LL | use r#extern::foo; //~ ERROR expected identifier, found keyword `extern`
+ | ^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/keyword/keyword-extern-as-identifier.rs b/src/test/ui/keyword/keyword-extern-as-identifier.rs
deleted file mode 100644
index 6775290..0000000
--- a/src/test/ui/keyword/keyword-extern-as-identifier.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-#![feature(extern_in_paths)]
-
-fn main() {
- let extern = 0; //~ ERROR cannot find unit struct/variant or constant `extern` in this scope
-}
diff --git a/src/test/ui/keyword/keyword-extern-as-identifier.stderr b/src/test/ui/keyword/keyword-extern-as-identifier.stderr
deleted file mode 100644
index ef2a4b3..0000000
--- a/src/test/ui/keyword/keyword-extern-as-identifier.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0531]: cannot find unit struct/variant or constant `extern` in this scope
- --> $DIR/keyword-extern-as-identifier.rs:4:9
- |
-LL | let extern = 0; //~ ERROR cannot find unit struct/variant or constant `extern` in this scope
- | ^^^^^^ not found in this scope
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0531`.
diff --git a/src/test/ui/lifetime-before-type-params.rs b/src/test/ui/lifetime-before-type-params.rs
new file mode 100644
index 0000000..9b905d4
--- /dev/null
+++ b/src/test/ui/lifetime-before-type-params.rs
@@ -0,0 +1,9 @@
+#![allow(unused)]
+fn first<T, 'a, 'b>() {}
+//~^ ERROR lifetime parameters must be declared prior to type parameters
+fn second<'a, T, 'b>() {}
+//~^ ERROR lifetime parameters must be declared prior to type parameters
+fn third<T, U, 'a>() {}
+//~^ ERROR lifetime parameters must be declared prior to type parameters
+fn fourth<'a, T, 'b, U, 'c, V>() {}
+//~^ ERROR lifetime parameters must be declared prior to type parameters
diff --git a/src/test/ui/lifetime-before-type-params.stderr b/src/test/ui/lifetime-before-type-params.stderr
new file mode 100644
index 0000000..7ac8dff
--- /dev/null
+++ b/src/test/ui/lifetime-before-type-params.stderr
@@ -0,0 +1,47 @@
+error: lifetime parameters must be declared prior to type parameters
+ --> $DIR/lifetime-before-type-params.rs:2:13
+ |
+LL | fn first<T, 'a, 'b>() {}
+ | ^^ ^^
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | fn first<'a, 'b, T>() {}
+ | ^^^ ^^^ --
+
+error: lifetime parameters must be declared prior to type parameters
+ --> $DIR/lifetime-before-type-params.rs:4:18
+ |
+LL | fn second<'a, T, 'b>() {}
+ | ^^
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | fn second<'a, 'b, T>() {}
+ | ^^^ --
+
+error: lifetime parameters must be declared prior to type parameters
+ --> $DIR/lifetime-before-type-params.rs:6:16
+ |
+LL | fn third<T, U, 'a>() {}
+ | ^^
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | fn third<'a, T, U>() {}
+ | ^^^ --
+
+error: lifetime parameters must be declared prior to type parameters
+ --> $DIR/lifetime-before-type-params.rs:8:18
+ |
+LL | fn fourth<'a, T, 'b, U, 'c, V>() {}
+ | ^^ ^^
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | fn fourth<'a, 'b, 'c, T, U, V>() {}
+ | ^^^ ^^^ -- --
+
+error[E0601]: `main` function not found in crate `lifetime_before_type_params`
+ |
+ = note: consider adding a `main` function to `$DIR/lifetime-before-type-params.rs`
+
+error: aborting due to 5 previous errors
+
+For more information about this error, try `rustc --explain E0601`.
diff --git a/src/test/ui/lint/command-line-lint-group-deny.stderr b/src/test/ui/lint/command-line-lint-group-deny.stderr
index c6a8f33..3250a41 100644
--- a/src/test/ui/lint/command-line-lint-group-deny.stderr
+++ b/src/test/ui/lint/command-line-lint-group-deny.stderr
@@ -1,8 +1,8 @@
-error: variable `_InappropriateCamelCasing` should have a snake case name such as `_inappropriate_camel_casing`
+error: variable `_InappropriateCamelCasing` should have a snake case name
--> $DIR/command-line-lint-group-deny.rs:4:9
|
LL | let _InappropriateCamelCasing = true; //~ ERROR should have a snake
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `_inappropriate_camel_casing`
|
= note: `-D non-snake-case` implied by `-D bad-style`
diff --git a/src/test/ui/lint/command-line-lint-group-forbid.stderr b/src/test/ui/lint/command-line-lint-group-forbid.stderr
index 2c11cca..39f6da4 100644
--- a/src/test/ui/lint/command-line-lint-group-forbid.stderr
+++ b/src/test/ui/lint/command-line-lint-group-forbid.stderr
@@ -1,8 +1,8 @@
-error: variable `_InappropriateCamelCasing` should have a snake case name such as `_inappropriate_camel_casing`
+error: variable `_InappropriateCamelCasing` should have a snake case name
--> $DIR/command-line-lint-group-forbid.rs:4:9
|
LL | let _InappropriateCamelCasing = true; //~ ERROR should have a snake
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `_inappropriate_camel_casing`
|
= note: `-F non-snake-case` implied by `-F bad-style`
diff --git a/src/test/ui/lint/command-line-lint-group-warn.stderr b/src/test/ui/lint/command-line-lint-group-warn.stderr
index 3939461e..42a198f 100644
--- a/src/test/ui/lint/command-line-lint-group-warn.stderr
+++ b/src/test/ui/lint/command-line-lint-group-warn.stderr
@@ -1,8 +1,8 @@
-warning: variable `_InappropriateCamelCasing` should have a snake case name such as `_inappropriate_camel_casing`
+warning: variable `_InappropriateCamelCasing` should have a snake case name
--> $DIR/command-line-lint-group-warn.rs:5:9
|
LL | let _InappropriateCamelCasing = true;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `_inappropriate_camel_casing`
|
= note: `-W non-snake-case` implied by `-W bad-style`
diff --git a/src/test/ui/lint/lint-forbid-internal-unsafe.rs b/src/test/ui/lint/lint-forbid-internal-unsafe.rs
new file mode 100644
index 0000000..b08fbf6
--- /dev/null
+++ b/src/test/ui/lint/lint-forbid-internal-unsafe.rs
@@ -0,0 +1,16 @@
+#![forbid(unsafe_code)]
+#![feature(allow_internal_unsafe)]
+
+#[allow_internal_unsafe]
+//~^ ERROR: `allow_internal_unsafe` allows defining
+macro_rules! evil {
+ ($e:expr) => {
+ unsafe {
+ $e
+ }
+ }
+}
+
+fn main() {
+ println!("{}", evil!(*(0 as *const u8)));
+}
diff --git a/src/test/ui/lint/lint-forbid-internal-unsafe.stderr b/src/test/ui/lint/lint-forbid-internal-unsafe.stderr
new file mode 100644
index 0000000..59dab11
--- /dev/null
+++ b/src/test/ui/lint/lint-forbid-internal-unsafe.stderr
@@ -0,0 +1,14 @@
+error: `allow_internal_unsafe` allows defining macros using unsafe without triggering the `unsafe_code` lint at their call site
+ --> $DIR/lint-forbid-internal-unsafe.rs:4:1
+ |
+LL | #[allow_internal_unsafe]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: lint level defined here
+ --> $DIR/lint-forbid-internal-unsafe.rs:1:11
+ |
+LL | #![forbid(unsafe_code)]
+ | ^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/lint/lint-group-nonstandard-style.stderr b/src/test/ui/lint/lint-group-nonstandard-style.stderr
index d85ca78..f3c7d70 100644
--- a/src/test/ui/lint/lint-group-nonstandard-style.stderr
+++ b/src/test/ui/lint/lint-group-nonstandard-style.stderr
@@ -1,8 +1,8 @@
-warning: type `snake_case` should have a camel case name such as `SnakeCase`
- --> $DIR/lint-group-nonstandard-style.rs:22:9
+warning: type `snake_case` should have a camel case name
+ --> $DIR/lint-group-nonstandard-style.rs:22:16
|
LL | struct snake_case; //~ WARN should have a camel
- | ^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^ help: convert the identifier to camel case: `SnakeCase`
|
note: lint level defined here
--> $DIR/lint-group-nonstandard-style.rs:18:17
@@ -11,11 +11,11 @@
| ^^^^^^^^^^^^^^^^^
= note: #[warn(non_camel_case_types)] implied by #[warn(nonstandard_style)]
-error: function `CamelCase` should have a snake case name such as `camel_case`
- --> $DIR/lint-group-nonstandard-style.rs:4:1
+error: function `CamelCase` should have a snake case name
+ --> $DIR/lint-group-nonstandard-style.rs:4:4
|
LL | fn CamelCase() {} //~ ERROR should have a snake
- | ^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^ help: convert the identifier to snake case: `camel_case`
|
note: lint level defined here
--> $DIR/lint-group-nonstandard-style.rs:1:9
@@ -24,11 +24,11 @@
| ^^^^^^^^^^^^^^^^^
= note: #[deny(non_snake_case)] implied by #[deny(nonstandard_style)]
-error: function `CamelCase` should have a snake case name such as `camel_case`
- --> $DIR/lint-group-nonstandard-style.rs:12:9
+error: function `CamelCase` should have a snake case name
+ --> $DIR/lint-group-nonstandard-style.rs:12:12
|
LL | fn CamelCase() {} //~ ERROR should have a snake
- | ^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^ help: convert the identifier to snake case: `camel_case`
|
note: lint level defined here
--> $DIR/lint-group-nonstandard-style.rs:10:14
@@ -37,11 +37,11 @@
| ^^^^^^^^^^^^^^^^^
= note: #[forbid(non_snake_case)] implied by #[forbid(nonstandard_style)]
-error: static variable `bad` should have an upper case name such as `BAD`
- --> $DIR/lint-group-nonstandard-style.rs:14:9
+error: static variable `bad` should have an upper case name
+ --> $DIR/lint-group-nonstandard-style.rs:14:16
|
LL | static bad: isize = 1; //~ ERROR should have an upper
- | ^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^ help: convert the identifier to upper case: `BAD`
|
note: lint level defined here
--> $DIR/lint-group-nonstandard-style.rs:10:14
@@ -50,11 +50,11 @@
| ^^^^^^^^^^^^^^^^^
= note: #[forbid(non_upper_case_globals)] implied by #[forbid(nonstandard_style)]
-warning: function `CamelCase` should have a snake case name such as `camel_case`
- --> $DIR/lint-group-nonstandard-style.rs:20:9
+warning: function `CamelCase` should have a snake case name
+ --> $DIR/lint-group-nonstandard-style.rs:20:12
|
LL | fn CamelCase() {} //~ WARN should have a snake
- | ^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^ help: convert the identifier to snake case: `camel_case`
|
note: lint level defined here
--> $DIR/lint-group-nonstandard-style.rs:18:17
diff --git a/src/test/run-pass/binding/match-static-const-rename.rs b/src/test/ui/lint/lint-lowercase-static-const-pattern-rename.rs
similarity index 92%
rename from src/test/run-pass/binding/match-static-const-rename.rs
rename to src/test/ui/lint/lint-lowercase-static-const-pattern-rename.rs
index e78ae40..8ca5af2 100644
--- a/src/test/run-pass/binding/match-static-const-rename.rs
+++ b/src/test/ui/lint/lint-lowercase-static-const-pattern-rename.rs
@@ -1,13 +1,12 @@
-// run-pass
+// compile-pass
// Issue #7526: lowercase static constants in patterns look like bindings
-// This is similar to compile-fail/match-static-const-lc, except it
+// This is similar to lint-lowercase-static-const-pattern.rs, except it
// shows the expected usual workaround (choosing a different name for
// the static definition) and also demonstrates that one can work
// around this problem locally by renaming the constant in the `use`
// form to an uppercase identifier that placates the lint.
-
#![deny(non_upper_case_globals)]
pub const A : isize = 97;
diff --git a/src/test/ui/match/match-static-const-lc.rs b/src/test/ui/lint/lint-lowercase-static-const-pattern.rs
similarity index 91%
rename from src/test/ui/match/match-static-const-lc.rs
rename to src/test/ui/lint/lint-lowercase-static-const-pattern.rs
index c79da6e..c2e159e 100644
--- a/src/test/ui/match/match-static-const-lc.rs
+++ b/src/test/ui/lint/lint-lowercase-static-const-pattern.rs
@@ -9,7 +9,7 @@
fn f() {
let r = match (0,0) {
(0, a) => 0,
- //~^ ERROR constant in pattern `a` should have an upper case name such as `A`
+ //~^ ERROR constant in pattern `a` should have an upper case name
(x, y) => 1 + x + y,
};
assert_eq!(r, 1);
@@ -24,7 +24,7 @@
use self::m::aha;
let r = match (0,0) {
(0, aha) => 0,
- //~^ ERROR constant in pattern `aha` should have an upper case name such as `AHA`
+ //~^ ERROR constant in pattern `aha` should have an upper case name
(x, y) => 1 + x + y,
};
assert_eq!(r, 1);
@@ -38,7 +38,7 @@
use self::n::OKAY as not_okay;
let r = match (0,0) {
(0, not_okay) => 0,
-//~^ ERROR constant in pattern `not_okay` should have an upper case name such as `NOT_OKAY`
+//~^ ERROR constant in pattern `not_okay` should have an upper case name
(x, y) => 1 + x + y,
};
assert_eq!(r, 1);
diff --git a/src/test/ui/lint/lint-lowercase-static-const-pattern.stderr b/src/test/ui/lint/lint-lowercase-static-const-pattern.stderr
new file mode 100644
index 0000000..d95510c
--- /dev/null
+++ b/src/test/ui/lint/lint-lowercase-static-const-pattern.stderr
@@ -0,0 +1,26 @@
+error: constant in pattern `a` should have an upper case name
+ --> $DIR/lint-lowercase-static-const-pattern.rs:11:13
+ |
+LL | (0, a) => 0,
+ | ^ help: convert the identifier to upper case: `A`
+ |
+note: lint level defined here
+ --> $DIR/lint-lowercase-static-const-pattern.rs:4:9
+ |
+LL | #![deny(non_upper_case_globals)]
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+error: constant in pattern `aha` should have an upper case name
+ --> $DIR/lint-lowercase-static-const-pattern.rs:26:13
+ |
+LL | (0, aha) => 0,
+ | ^^^ help: convert the identifier to upper case: `AHA`
+
+error: constant in pattern `not_okay` should have an upper case name
+ --> $DIR/lint-lowercase-static-const-pattern.rs:40:13
+ |
+LL | (0, not_okay) => 0,
+ | ^^^^^^^^ help: convert the identifier to upper case: `NOT_OKAY`
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/lint/lint-malformed.rs b/src/test/ui/lint/lint-malformed.rs
index e923249..c97a432 100644
--- a/src/test/ui/lint/lint-malformed.rs
+++ b/src/test/ui/lint/lint-malformed.rs
@@ -1,4 +1,4 @@
-#![deny = "foo"] //~ ERROR malformed lint attribute
+#![deny = "foo"] //~ ERROR attribute must be of the form
#![allow(bar = "baz")] //~ ERROR malformed lint attribute
fn main() { }
diff --git a/src/test/ui/lint/lint-malformed.stderr b/src/test/ui/lint/lint-malformed.stderr
index 554b025..98a7cec 100644
--- a/src/test/ui/lint/lint-malformed.stderr
+++ b/src/test/ui/lint/lint-malformed.stderr
@@ -1,15 +1,15 @@
error[E0452]: malformed lint attribute
- --> $DIR/lint-malformed.rs:1:1
- |
-LL | #![deny = "foo"] //~ ERROR malformed lint attribute
- | ^^^^^^^^^^^^^^^^
-
-error[E0452]: malformed lint attribute
--> $DIR/lint-malformed.rs:2:10
|
LL | #![allow(bar = "baz")] //~ ERROR malformed lint attribute
| ^^^^^^^^^^^
+error: attribute must be of the form `#[deny(lint1, lint2, ..., /*opt*/ reason = "...")]`
+ --> $DIR/lint-malformed.rs:1:1
+ |
+LL | #![deny = "foo"] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^^
+
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0452`.
diff --git a/src/test/ui/lint/lint-non-camel-case-types.rs b/src/test/ui/lint/lint-non-camel-case-types.rs
index 436763b..bca1992 100644
--- a/src/test/ui/lint/lint-non-camel-case-types.rs
+++ b/src/test/ui/lint/lint-non-camel-case-types.rs
@@ -2,31 +2,31 @@
#![allow(dead_code)]
struct ONE_TWO_THREE;
-//~^ ERROR type `ONE_TWO_THREE` should have a camel case name such as `OneTwoThree`
+//~^ ERROR type `ONE_TWO_THREE` should have a camel case name
-struct foo { //~ ERROR type `foo` should have a camel case name such as `Foo`
+struct foo { //~ ERROR type `foo` should have a camel case name
bar: isize,
}
-enum foo2 { //~ ERROR type `foo2` should have a camel case name such as `Foo2`
+enum foo2 { //~ ERROR type `foo2` should have a camel case name
Bar
}
-struct foo3 { //~ ERROR type `foo3` should have a camel case name such as `Foo3`
+struct foo3 { //~ ERROR type `foo3` should have a camel case name
bar: isize
}
-type foo4 = isize; //~ ERROR type `foo4` should have a camel case name such as `Foo4`
+type foo4 = isize; //~ ERROR type `foo4` should have a camel case name
enum Foo5 {
- bar //~ ERROR variant `bar` should have a camel case name such as `Bar`
+ bar //~ ERROR variant `bar` should have a camel case name
}
-trait foo6 { //~ ERROR trait `foo6` should have a camel case name such as `Foo6`
+trait foo6 { //~ ERROR trait `foo6` should have a camel case name
fn dummy(&self) { }
}
-fn f<ty>(_: ty) {} //~ ERROR type parameter `ty` should have a camel case name such as `Ty`
+fn f<ty>(_: ty) {} //~ ERROR type parameter `ty` should have a camel case name
#[repr(C)]
struct foo7 {
@@ -35,10 +35,10 @@
struct X86_64;
-struct X86__64; //~ ERROR type `X86__64` should have a camel case name such as `X86_64`
+struct X86__64; //~ ERROR type `X86__64` should have a camel case name
-struct Abc_123; //~ ERROR type `Abc_123` should have a camel case name such as `Abc123`
+struct Abc_123; //~ ERROR type `Abc_123` should have a camel case name
-struct A1_b2_c3; //~ ERROR type `A1_b2_c3` should have a camel case name such as `A1B2C3`
+struct A1_b2_c3; //~ ERROR type `A1_b2_c3` should have a camel case name
fn main() { }
diff --git a/src/test/ui/lint/lint-non-camel-case-types.stderr b/src/test/ui/lint/lint-non-camel-case-types.stderr
index 31a8555..74f9a59 100644
--- a/src/test/ui/lint/lint-non-camel-case-types.stderr
+++ b/src/test/ui/lint/lint-non-camel-case-types.stderr
@@ -1,8 +1,8 @@
-error: type `ONE_TWO_THREE` should have a camel case name such as `OneTwoThree`
- --> $DIR/lint-non-camel-case-types.rs:4:1
+error: type `ONE_TWO_THREE` should have a camel case name
+ --> $DIR/lint-non-camel-case-types.rs:4:8
|
LL | struct ONE_TWO_THREE;
- | ^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^^ help: convert the identifier to camel case: `OneTwoThree`
|
note: lint level defined here
--> $DIR/lint-non-camel-case-types.rs:1:11
@@ -10,73 +10,65 @@
LL | #![forbid(non_camel_case_types)]
| ^^^^^^^^^^^^^^^^^^^^
-error: type `foo` should have a camel case name such as `Foo`
- --> $DIR/lint-non-camel-case-types.rs:7:1
+error: type `foo` should have a camel case name
+ --> $DIR/lint-non-camel-case-types.rs:7:8
|
-LL | / struct foo { //~ ERROR type `foo` should have a camel case name such as `Foo`
-LL | | bar: isize,
-LL | | }
- | |_^
+LL | struct foo { //~ ERROR type `foo` should have a camel case name
+ | ^^^ help: convert the identifier to camel case: `Foo`
-error: type `foo2` should have a camel case name such as `Foo2`
- --> $DIR/lint-non-camel-case-types.rs:11:1
+error: type `foo2` should have a camel case name
+ --> $DIR/lint-non-camel-case-types.rs:11:6
|
-LL | / enum foo2 { //~ ERROR type `foo2` should have a camel case name such as `Foo2`
-LL | | Bar
-LL | | }
- | |_^
+LL | enum foo2 { //~ ERROR type `foo2` should have a camel case name
+ | ^^^^ help: convert the identifier to camel case: `Foo2`
-error: type `foo3` should have a camel case name such as `Foo3`
- --> $DIR/lint-non-camel-case-types.rs:15:1
+error: type `foo3` should have a camel case name
+ --> $DIR/lint-non-camel-case-types.rs:15:8
|
-LL | / struct foo3 { //~ ERROR type `foo3` should have a camel case name such as `Foo3`
-LL | | bar: isize
-LL | | }
- | |_^
+LL | struct foo3 { //~ ERROR type `foo3` should have a camel case name
+ | ^^^^ help: convert the identifier to camel case: `Foo3`
-error: type `foo4` should have a camel case name such as `Foo4`
- --> $DIR/lint-non-camel-case-types.rs:19:1
+error: type `foo4` should have a camel case name
+ --> $DIR/lint-non-camel-case-types.rs:19:6
|
-LL | type foo4 = isize; //~ ERROR type `foo4` should have a camel case name such as `Foo4`
- | ^^^^^^^^^^^^^^^^^^
+LL | type foo4 = isize; //~ ERROR type `foo4` should have a camel case name
+ | ^^^^ help: convert the identifier to camel case: `Foo4`
-error: variant `bar` should have a camel case name such as `Bar`
+error: variant `bar` should have a camel case name
--> $DIR/lint-non-camel-case-types.rs:22:5
|
-LL | bar //~ ERROR variant `bar` should have a camel case name such as `Bar`
- | ^^^
+LL | bar //~ ERROR variant `bar` should have a camel case name
+ | ^^^ help: convert the identifier to camel case: `Bar`
-error: trait `foo6` should have a camel case name such as `Foo6`
- --> $DIR/lint-non-camel-case-types.rs:25:1
+error: trait `foo6` should have a camel case name
+ --> $DIR/lint-non-camel-case-types.rs:25:7
|
-LL | / trait foo6 { //~ ERROR trait `foo6` should have a camel case name such as `Foo6`
-LL | | fn dummy(&self) { }
-LL | | }
- | |_^
+LL | trait foo6 { //~ ERROR trait `foo6` should have a camel case name
+ | ^^^^ help: convert the identifier to camel case: `Foo6`
-error: type parameter `ty` should have a camel case name such as `Ty`
+error: type parameter `ty` should have a camel case name
--> $DIR/lint-non-camel-case-types.rs:29:6
|
-LL | fn f<ty>(_: ty) {} //~ ERROR type parameter `ty` should have a camel case name such as `Ty`
- | ^^
+LL | fn f<ty>(_: ty) {} //~ ERROR type parameter `ty` should have a camel case name
+ | ^^ help: convert the identifier to camel case: `Ty`
-error: type `X86__64` should have a camel case name such as `X86_64`
- --> $DIR/lint-non-camel-case-types.rs:38:1
+error: type `X86__64` should have a camel case name
+ --> $DIR/lint-non-camel-case-types.rs:38:8
|
-LL | struct X86__64; //~ ERROR type `X86__64` should have a camel case name such as `X86_64`
- | ^^^^^^^^^^^^^^^
+LL | struct X86__64; //~ ERROR type `X86__64` should have a camel case name
+ | ^^^^^^^ help: convert the identifier to camel case: `X86_64`
-error: type `Abc_123` should have a camel case name such as `Abc123`
- --> $DIR/lint-non-camel-case-types.rs:40:1
+error: type `Abc_123` should have a camel case name
+ --> $DIR/lint-non-camel-case-types.rs:40:8
|
-LL | struct Abc_123; //~ ERROR type `Abc_123` should have a camel case name such as `Abc123`
- | ^^^^^^^^^^^^^^^
+LL | struct Abc_123; //~ ERROR type `Abc_123` should have a camel case name
+ | ^^^^^^^ help: convert the identifier to camel case: `Abc123`
-error: type `A1_b2_c3` should have a camel case name such as `A1B2C3`
- --> $DIR/lint-non-camel-case-types.rs:42:1
+error: type `A1_b2_c3` should have a camel case name
+ --> $DIR/lint-non-camel-case-types.rs:42:8
|
-LL | struct A1_b2_c3; //~ ERROR type `A1_b2_c3` should have a camel case name such as `A1B2C3`
- | ^^^^^^^^^^^^^^^^
+LL | struct A1_b2_c3; //~ ERROR type `A1_b2_c3` should have a camel case name
+ | ^^^^^^^^ help: convert the identifier to camel case: `A1B2C3`
error: aborting due to 11 previous errors
diff --git a/src/test/run-pass/test-allow-non-camel-case-variant.rs b/src/test/ui/lint/lint-non-camel-case-variant.rs
similarity index 85%
rename from src/test/run-pass/test-allow-non-camel-case-variant.rs
rename to src/test/ui/lint/lint-non-camel-case-variant.rs
index da3ef7e..1f06b28 100644
--- a/src/test/run-pass/test-allow-non-camel-case-variant.rs
+++ b/src/test/ui/lint/lint-non-camel-case-variant.rs
@@ -1,3 +1,5 @@
+// compile-pass
+
#![deny(non_camel_case_types)]
pub enum Foo {
diff --git a/src/test/run-pass/lint-non-camel-case-with-trailing-underscores.rs b/src/test/ui/lint/lint-non-camel-case-with-trailing-underscores.rs
similarity index 91%
rename from src/test/run-pass/lint-non-camel-case-with-trailing-underscores.rs
rename to src/test/ui/lint/lint-non-camel-case-with-trailing-underscores.rs
index 6c0ea83..c2fdfb4 100644
--- a/src/test/run-pass/lint-non-camel-case-with-trailing-underscores.rs
+++ b/src/test/ui/lint/lint-non-camel-case-with-trailing-underscores.rs
@@ -1,3 +1,5 @@
+// compile-pass
+
#![allow(dead_code)]
// This is ok because we often use the trailing underscore to mean 'prime'
diff --git a/src/test/ui/lint/lint-non-snake-case-crate-2.rs b/src/test/ui/lint/lint-non-snake-case-crate-2.rs
index 56c35c2..1b763a9 100644
--- a/src/test/ui/lint/lint-non-snake-case-crate-2.rs
+++ b/src/test/ui/lint/lint-non-snake-case-crate-2.rs
@@ -1,5 +1,5 @@
// compile-flags: --crate-name NonSnakeCase
-// error-pattern: crate `NonSnakeCase` should have a snake case name such as `non_snake_case`
+// error-pattern: crate `NonSnakeCase` should have a snake case name
#![deny(non_snake_case)]
diff --git a/src/test/ui/lint/lint-non-snake-case-crate-2.stderr b/src/test/ui/lint/lint-non-snake-case-crate-2.stderr
index eef7f1c..f330319 100644
--- a/src/test/ui/lint/lint-non-snake-case-crate-2.stderr
+++ b/src/test/ui/lint/lint-non-snake-case-crate-2.stderr
@@ -1,10 +1,11 @@
-error: crate `NonSnakeCase` should have a snake case name such as `non_snake_case`
+error: crate `NonSnakeCase` should have a snake case name
|
note: lint level defined here
--> $DIR/lint-non-snake-case-crate-2.rs:4:9
|
LL | #![deny(non_snake_case)]
| ^^^^^^^^^^^^^^
+ = help: convert the identifier to snake case: `non_snake_case`
error: aborting due to previous error
diff --git a/src/test/ui/lint/lint-non-snake-case-crate.rs b/src/test/ui/lint/lint-non-snake-case-crate.rs
index 221ce61..e4e8426 100644
--- a/src/test/ui/lint/lint-non-snake-case-crate.rs
+++ b/src/test/ui/lint/lint-non-snake-case-crate.rs
@@ -1,5 +1,5 @@
#![crate_name = "NonSnakeCase"]
-//~^ ERROR crate `NonSnakeCase` should have a snake case name such as `non_snake_case`
+//~^ ERROR crate `NonSnakeCase` should have a snake case name
#![deny(non_snake_case)]
fn main() {}
diff --git a/src/test/ui/lint/lint-non-snake-case-crate.stderr b/src/test/ui/lint/lint-non-snake-case-crate.stderr
index 6d81120..5cfd60a 100644
--- a/src/test/ui/lint/lint-non-snake-case-crate.stderr
+++ b/src/test/ui/lint/lint-non-snake-case-crate.stderr
@@ -1,8 +1,8 @@
-error: crate `NonSnakeCase` should have a snake case name such as `non_snake_case`
- --> $DIR/lint-non-snake-case-crate.rs:1:1
+error: crate `NonSnakeCase` should have a snake case name
+ --> $DIR/lint-non-snake-case-crate.rs:1:18
|
LL | #![crate_name = "NonSnakeCase"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^ help: convert the identifier to snake case: `non_snake_case`
|
note: lint level defined here
--> $DIR/lint-non-snake-case-crate.rs:3:9
diff --git a/src/test/ui/lint/lint-non-snake-case-functions.rs b/src/test/ui/lint/lint-non-snake-case-functions.rs
index 5ad454a..fa64a9f 100644
--- a/src/test/ui/lint/lint-non-snake-case-functions.rs
+++ b/src/test/ui/lint/lint-non-snake-case-functions.rs
@@ -5,28 +5,28 @@
impl Foo {
fn Foo_Method() {}
- //~^ ERROR method `Foo_Method` should have a snake case name such as `foo_method`
+ //~^ ERROR method `Foo_Method` should have a snake case name
// Don't allow two underscores in a row
fn foo__method(&self) {}
- //~^ ERROR method `foo__method` should have a snake case name such as `foo_method`
+ //~^ ERROR method `foo__method` should have a snake case name
pub fn xyZ(&mut self) {}
- //~^ ERROR method `xyZ` should have a snake case name such as `xy_z`
+ //~^ ERROR method `xyZ` should have a snake case name
fn render_HTML() {}
- //~^ ERROR method `render_HTML` should have a snake case name such as `render_html`
+ //~^ ERROR method `render_HTML` should have a snake case name
}
trait X {
fn ABC();
- //~^ ERROR trait method `ABC` should have a snake case name such as `abc`
+ //~^ ERROR trait method `ABC` should have a snake case name
fn a_b_C(&self) {}
- //~^ ERROR trait method `a_b_C` should have a snake case name such as `a_b_c`
+ //~^ ERROR trait method `a_b_C` should have a snake case name
fn something__else(&mut self);
- //~^ ERROR trait method `something__else` should have a snake case name such as `something_else`
+ //~^ ERROR trait method `something__else` should have a snake case name
}
impl X for Foo {
@@ -36,9 +36,9 @@
}
fn Cookie() {}
-//~^ ERROR function `Cookie` should have a snake case name such as `cookie`
+//~^ ERROR function `Cookie` should have a snake case name
pub fn bi_S_Cuit() {}
-//~^ ERROR function `bi_S_Cuit` should have a snake case name such as `bi_s_cuit`
+//~^ ERROR function `bi_S_Cuit` should have a snake case name
fn main() { }
diff --git a/src/test/ui/lint/lint-non-snake-case-functions.stderr b/src/test/ui/lint/lint-non-snake-case-functions.stderr
index 508fb22..49cbfa9 100644
--- a/src/test/ui/lint/lint-non-snake-case-functions.stderr
+++ b/src/test/ui/lint/lint-non-snake-case-functions.stderr
@@ -1,8 +1,8 @@
-error: method `Foo_Method` should have a snake case name such as `foo_method`
- --> $DIR/lint-non-snake-case-functions.rs:7:5
+error: method `Foo_Method` should have a snake case name
+ --> $DIR/lint-non-snake-case-functions.rs:7:8
|
LL | fn Foo_Method() {}
- | ^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^ help: convert the identifier to snake case: `foo_method`
|
note: lint level defined here
--> $DIR/lint-non-snake-case-functions.rs:1:9
@@ -10,53 +10,53 @@
LL | #![deny(non_snake_case)]
| ^^^^^^^^^^^^^^
-error: method `foo__method` should have a snake case name such as `foo_method`
- --> $DIR/lint-non-snake-case-functions.rs:11:5
+error: method `foo__method` should have a snake case name
+ --> $DIR/lint-non-snake-case-functions.rs:11:8
|
LL | fn foo__method(&self) {}
- | ^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^ help: convert the identifier to snake case: `foo_method`
-error: method `xyZ` should have a snake case name such as `xy_z`
- --> $DIR/lint-non-snake-case-functions.rs:14:5
+error: method `xyZ` should have a snake case name
+ --> $DIR/lint-non-snake-case-functions.rs:14:12
|
LL | pub fn xyZ(&mut self) {}
- | ^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^ help: convert the identifier to snake case: `xy_z`
-error: method `render_HTML` should have a snake case name such as `render_html`
- --> $DIR/lint-non-snake-case-functions.rs:17:5
+error: method `render_HTML` should have a snake case name
+ --> $DIR/lint-non-snake-case-functions.rs:17:8
|
LL | fn render_HTML() {}
- | ^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^ help: convert the identifier to snake case: `render_html`
-error: trait method `ABC` should have a snake case name such as `abc`
- --> $DIR/lint-non-snake-case-functions.rs:22:5
+error: trait method `ABC` should have a snake case name
+ --> $DIR/lint-non-snake-case-functions.rs:22:8
|
LL | fn ABC();
- | ^^^^^^^^^
+ | ^^^ help: convert the identifier to snake case: `abc`
-error: trait method `a_b_C` should have a snake case name such as `a_b_c`
- --> $DIR/lint-non-snake-case-functions.rs:25:5
+error: trait method `a_b_C` should have a snake case name
+ --> $DIR/lint-non-snake-case-functions.rs:25:8
|
LL | fn a_b_C(&self) {}
- | ^^^^^^^^^^^^^^^^^^
+ | ^^^^^ help: convert the identifier to snake case: `a_b_c`
-error: trait method `something__else` should have a snake case name such as `something_else`
- --> $DIR/lint-non-snake-case-functions.rs:28:5
+error: trait method `something__else` should have a snake case name
+ --> $DIR/lint-non-snake-case-functions.rs:28:8
|
LL | fn something__else(&mut self);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `something_else`
-error: function `Cookie` should have a snake case name such as `cookie`
- --> $DIR/lint-non-snake-case-functions.rs:38:1
+error: function `Cookie` should have a snake case name
+ --> $DIR/lint-non-snake-case-functions.rs:38:4
|
LL | fn Cookie() {}
- | ^^^^^^^^^^^^^^
+ | ^^^^^^ help: convert the identifier to snake case: `cookie`
-error: function `bi_S_Cuit` should have a snake case name such as `bi_s_cuit`
- --> $DIR/lint-non-snake-case-functions.rs:41:1
+error: function `bi_S_Cuit` should have a snake case name
+ --> $DIR/lint-non-snake-case-functions.rs:41:8
|
LL | pub fn bi_S_Cuit() {}
- | ^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^ help: convert the identifier to snake case: `bi_s_cuit`
error: aborting due to 9 previous errors
diff --git a/src/test/ui/lint/lint-non-snake-case-lifetimes.rs b/src/test/ui/lint/lint-non-snake-case-lifetimes.rs
index c7af431..de76d2d 100644
--- a/src/test/ui/lint/lint-non-snake-case-lifetimes.rs
+++ b/src/test/ui/lint/lint-non-snake-case-lifetimes.rs
@@ -1,7 +1,7 @@
#![deny(non_snake_case)]
#![allow(dead_code)]
-fn f<'FooBar>( //~ ERROR lifetime `'FooBar` should have a snake case name such as `'foo_bar`
+fn f<'FooBar>( //~ ERROR lifetime `'FooBar` should have a snake case name
_: &'FooBar ()
) {}
diff --git a/src/test/ui/lint/lint-non-snake-case-lifetimes.stderr b/src/test/ui/lint/lint-non-snake-case-lifetimes.stderr
index 694a5a2..970666e 100644
--- a/src/test/ui/lint/lint-non-snake-case-lifetimes.stderr
+++ b/src/test/ui/lint/lint-non-snake-case-lifetimes.stderr
@@ -1,8 +1,8 @@
-error: lifetime `'FooBar` should have a snake case name such as `'foo_bar`
+error: lifetime `'FooBar` should have a snake case name
--> $DIR/lint-non-snake-case-lifetimes.rs:4:6
|
-LL | fn f<'FooBar>( //~ ERROR lifetime `'FooBar` should have a snake case name such as `'foo_bar`
- | ^^^^^^^
+LL | fn f<'FooBar>( //~ ERROR lifetime `'FooBar` should have a snake case name
+ | ^^^^^^^ help: convert the identifier to snake case: `'foo_bar`
|
note: lint level defined here
--> $DIR/lint-non-snake-case-lifetimes.rs:1:9
diff --git a/src/test/ui/lint/lint-non-snake-case-modules.rs b/src/test/ui/lint/lint-non-snake-case-modules.rs
index 90f45a4..73f1233 100644
--- a/src/test/ui/lint/lint-non-snake-case-modules.rs
+++ b/src/test/ui/lint/lint-non-snake-case-modules.rs
@@ -1,7 +1,7 @@
#![deny(non_snake_case)]
#![allow(dead_code)]
-mod FooBar { //~ ERROR module `FooBar` should have a snake case name such as `foo_bar`
+mod FooBar { //~ ERROR module `FooBar` should have a snake case name
pub struct S;
}
diff --git a/src/test/ui/lint/lint-non-snake-case-modules.stderr b/src/test/ui/lint/lint-non-snake-case-modules.stderr
index ec3accf..651132e 100644
--- a/src/test/ui/lint/lint-non-snake-case-modules.stderr
+++ b/src/test/ui/lint/lint-non-snake-case-modules.stderr
@@ -1,10 +1,8 @@
-error: module `FooBar` should have a snake case name such as `foo_bar`
- --> $DIR/lint-non-snake-case-modules.rs:4:1
+error: module `FooBar` should have a snake case name
+ --> $DIR/lint-non-snake-case-modules.rs:4:5
|
-LL | / mod FooBar { //~ ERROR module `FooBar` should have a snake case name such as `foo_bar`
-LL | | pub struct S;
-LL | | }
- | |_^
+LL | mod FooBar { //~ ERROR module `FooBar` should have a snake case name
+ | ^^^^^^ help: convert the identifier to snake case: `foo_bar`
|
note: lint level defined here
--> $DIR/lint-non-snake-case-modules.rs:1:9
diff --git a/src/test/run-pass/snake-case-no-lowercase-equivalent.rs b/src/test/ui/lint/lint-non-snake-case-no-lowercase-equivalent.rs
similarity index 91%
rename from src/test/run-pass/snake-case-no-lowercase-equivalent.rs
rename to src/test/ui/lint/lint-non-snake-case-no-lowercase-equivalent.rs
index cf7a163..9a6487d 100644
--- a/src/test/run-pass/snake-case-no-lowercase-equivalent.rs
+++ b/src/test/ui/lint/lint-non-snake-case-no-lowercase-equivalent.rs
@@ -1,3 +1,5 @@
+// compile-pass
+
#![allow(dead_code)]
// pretty-expanded FIXME #23616
diff --git a/src/test/ui/associated-const/associated-const-upper-case-lint.rs b/src/test/ui/lint/lint-non-uppercase-associated-const.rs
similarity index 85%
rename from src/test/ui/associated-const/associated-const-upper-case-lint.rs
rename to src/test/ui/lint/lint-non-uppercase-associated-const.rs
index c851b27..7b0d939 100644
--- a/src/test/ui/associated-const/associated-const-upper-case-lint.rs
+++ b/src/test/ui/lint/lint-non-uppercase-associated-const.rs
@@ -6,6 +6,6 @@
impl Foo {
const not_upper: bool = true;
}
-//~^^ ERROR associated constant `not_upper` should have an upper case name such as `NOT_UPPER`
+//~^^ ERROR associated constant `not_upper` should have an upper case name
fn main() {}
diff --git a/src/test/ui/lint/lint-non-uppercase-associated-const.stderr b/src/test/ui/lint/lint-non-uppercase-associated-const.stderr
new file mode 100644
index 0000000..2185d5a
--- /dev/null
+++ b/src/test/ui/lint/lint-non-uppercase-associated-const.stderr
@@ -0,0 +1,14 @@
+error: associated constant `not_upper` should have an upper case name
+ --> $DIR/lint-non-uppercase-associated-const.rs:7:11
+ |
+LL | const not_upper: bool = true;
+ | ^^^^^^^^^ help: convert the identifier to upper case: `NOT_UPPER`
+ |
+note: lint level defined here
+ --> $DIR/lint-non-uppercase-associated-const.rs:1:9
+ |
+LL | #![deny(non_upper_case_globals)]
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/lint/lint-non-uppercase-statics.rs b/src/test/ui/lint/lint-non-uppercase-statics.rs
index 9424bef..5bd1430 100644
--- a/src/test/ui/lint/lint-non-uppercase-statics.rs
+++ b/src/test/ui/lint/lint-non-uppercase-statics.rs
@@ -1,10 +1,9 @@
#![forbid(non_upper_case_globals)]
#![allow(dead_code)]
-static foo: isize = 1; //~ ERROR static variable `foo` should have an upper case name such as `FOO`
+static foo: isize = 1; //~ ERROR static variable `foo` should have an upper case name
-static mut bar: isize = 1;
- //~^ ERROR static variable `bar` should have an upper case name such as `BAR`
+static mut bar: isize = 1; //~ ERROR static variable `bar` should have an upper case name
#[no_mangle]
pub static extern_foo: isize = 1; // OK, because #[no_mangle] supersedes the warning
diff --git a/src/test/ui/lint/lint-non-uppercase-statics.stderr b/src/test/ui/lint/lint-non-uppercase-statics.stderr
index 9c3dbb2..f5bba5f 100644
--- a/src/test/ui/lint/lint-non-uppercase-statics.stderr
+++ b/src/test/ui/lint/lint-non-uppercase-statics.stderr
@@ -1,8 +1,8 @@
-error: static variable `foo` should have an upper case name such as `FOO`
- --> $DIR/lint-non-uppercase-statics.rs:4:1
+error: static variable `foo` should have an upper case name
+ --> $DIR/lint-non-uppercase-statics.rs:4:8
|
-LL | static foo: isize = 1; //~ ERROR static variable `foo` should have an upper case name such as `FOO`
- | ^^^^^^^^^^^^^^^^^^^^^^
+LL | static foo: isize = 1; //~ ERROR static variable `foo` should have an upper case name
+ | ^^^ help: convert the identifier to upper case: `FOO`
|
note: lint level defined here
--> $DIR/lint-non-uppercase-statics.rs:1:11
@@ -10,11 +10,11 @@
LL | #![forbid(non_upper_case_globals)]
| ^^^^^^^^^^^^^^^^^^^^^^
-error: static variable `bar` should have an upper case name such as `BAR`
- --> $DIR/lint-non-uppercase-statics.rs:6:1
+error: static variable `bar` should have an upper case name
+ --> $DIR/lint-non-uppercase-statics.rs:6:12
|
-LL | static mut bar: isize = 1;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | static mut bar: isize = 1; //~ ERROR static variable `bar` should have an upper case name
+ | ^^^ help: convert the identifier to upper case: `BAR`
error: aborting due to 2 previous errors
diff --git a/src/test/run-pass/lint-non-camel-case-types-non-uppercase-statics-unicode.rs b/src/test/ui/lint/lint-nonstandard-style-unicode.rs
similarity index 93%
rename from src/test/run-pass/lint-non-camel-case-types-non-uppercase-statics-unicode.rs
rename to src/test/ui/lint/lint-nonstandard-style-unicode.rs
index a123abd..a0b4130 100644
--- a/src/test/run-pass/lint-non-camel-case-types-non-uppercase-statics-unicode.rs
+++ b/src/test/ui/lint/lint-nonstandard-style-unicode.rs
@@ -1,6 +1,6 @@
-//
-#![allow(dead_code)]
+// compile-pass
+#![allow(dead_code)]
#![forbid(non_camel_case_types)]
#![forbid(non_upper_case_globals)]
diff --git a/src/test/ui/lint/lint-uppercase-variables.rs b/src/test/ui/lint/lint-uppercase-variables.rs
index 33c2968..86a3950 100644
--- a/src/test/ui/lint/lint-uppercase-variables.rs
+++ b/src/test/ui/lint/lint-uppercase-variables.rs
@@ -7,20 +7,20 @@
}
struct Something {
- X: usize //~ ERROR structure field `X` should have a snake case name such as `x`
+ X: usize //~ ERROR structure field `X` should have a snake case name
}
-fn test(Xx: usize) { //~ ERROR variable `Xx` should have a snake case name such as `xx`
+fn test(Xx: usize) { //~ ERROR variable `Xx` should have a snake case name
println!("{}", Xx);
}
fn main() {
- let Test: usize = 0; //~ ERROR variable `Test` should have a snake case name such as `test`
+ let Test: usize = 0; //~ ERROR variable `Test` should have a snake case name
println!("{}", Test);
match foo::Foo::Foo {
Foo => {}
-//~^ ERROR variable `Foo` should have a snake case name such as `foo`
+//~^ ERROR variable `Foo` should have a snake case name
//~^^ WARN `Foo` is named the same as one of the variants of the type `foo::Foo`
//~^^^ WARN unused variable: `Foo`
}
diff --git a/src/test/ui/lint/lint-uppercase-variables.stderr b/src/test/ui/lint/lint-uppercase-variables.stderr
index f856466..0741179 100644
--- a/src/test/ui/lint/lint-uppercase-variables.stderr
+++ b/src/test/ui/lint/lint-uppercase-variables.stderr
@@ -17,11 +17,11 @@
| ^^^^^^
= note: #[warn(unused_variables)] implied by #[warn(unused)]
-error: structure field `X` should have a snake case name such as `x`
+error: structure field `X` should have a snake case name
--> $DIR/lint-uppercase-variables.rs:10:5
|
-LL | X: usize //~ ERROR structure field `X` should have a snake case name such as `x`
- | ^^^^^^^^
+LL | X: usize //~ ERROR structure field `X` should have a snake case name
+ | ^ help: convert the identifier to snake case: `x`
|
note: lint level defined here
--> $DIR/lint-uppercase-variables.rs:3:9
@@ -29,23 +29,23 @@
LL | #![deny(non_snake_case)]
| ^^^^^^^^^^^^^^
-error: variable `Xx` should have a snake case name such as `xx`
+error: variable `Xx` should have a snake case name
--> $DIR/lint-uppercase-variables.rs:13:9
|
-LL | fn test(Xx: usize) { //~ ERROR variable `Xx` should have a snake case name such as `xx`
- | ^^
+LL | fn test(Xx: usize) { //~ ERROR variable `Xx` should have a snake case name
+ | ^^ help: convert the identifier to snake case: `xx`
-error: variable `Test` should have a snake case name such as `test`
+error: variable `Test` should have a snake case name
--> $DIR/lint-uppercase-variables.rs:18:9
|
-LL | let Test: usize = 0; //~ ERROR variable `Test` should have a snake case name such as `test`
- | ^^^^
+LL | let Test: usize = 0; //~ ERROR variable `Test` should have a snake case name
+ | ^^^^ help: convert the identifier to snake case: `test`
-error: variable `Foo` should have a snake case name such as `foo`
+error: variable `Foo` should have a snake case name
--> $DIR/lint-uppercase-variables.rs:22:9
|
LL | Foo => {}
- | ^^^
+ | ^^^ help: convert the identifier to snake case: `foo`
error: aborting due to 4 previous errors
diff --git a/src/test/ui/lint/reasons.stderr b/src/test/ui/lint/reasons.stderr
index df0f9cb..3bb1480 100644
--- a/src/test/ui/lint/reasons.stderr
+++ b/src/test/ui/lint/reasons.stderr
@@ -11,11 +11,11 @@
LL | #![warn(elided_lifetimes_in_paths,
| ^^^^^^^^^^^^^^^^^^^^^^^^^
-warning: variable `Social_exchange_psychology` should have a snake case name such as `social_exchange_psychology`
+warning: variable `Social_exchange_psychology` should have a snake case name
--> $DIR/reasons.rs:30:9
|
LL | let Social_exchange_psychology = CheaterDetectionMechanism {};
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `social_exchange_psychology`
|
= note: people shouldn't have to change their usual style habits
to contribute to our project
diff --git a/src/test/ui/liveness/liveness-dead.rs b/src/test/ui/liveness/liveness-dead.rs
index 7d420af..004663c 100644
--- a/src/test/ui/liveness/liveness-dead.rs
+++ b/src/test/ui/liveness/liveness-dead.rs
@@ -27,4 +27,13 @@
x = 4; //~ ERROR: value assigned to `x` is never read
}
+// #22630
+fn f6() {
+ let mut done = false;
+ while !done {
+ done = true; // no error
+ continue;
+ }
+}
+
fn main() {}
diff --git a/src/test/ui/macros/meta-item-absolute-path.rs b/src/test/ui/macros/meta-item-absolute-path.rs
new file mode 100644
index 0000000..14d23be
--- /dev/null
+++ b/src/test/ui/macros/meta-item-absolute-path.rs
@@ -0,0 +1,4 @@
+#[derive(::Absolute)] //~ ERROR failed to resolve
+struct S;
+
+fn main() {}
diff --git a/src/test/ui/macros/meta-item-absolute-path.stderr b/src/test/ui/macros/meta-item-absolute-path.stderr
new file mode 100644
index 0000000..31b0a27
--- /dev/null
+++ b/src/test/ui/macros/meta-item-absolute-path.stderr
@@ -0,0 +1,9 @@
+error[E0433]: failed to resolve: maybe a missing `extern crate Absolute;`?
+ --> $DIR/meta-item-absolute-path.rs:1:12
+ |
+LL | #[derive(::Absolute)] //~ ERROR failed to resolve
+ | ^^^^^^^^ maybe a missing `extern crate Absolute;`?
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0433`.
diff --git a/src/test/ui/malformed/malformed-derive-entry.rs b/src/test/ui/malformed/malformed-derive-entry.rs
index 2c8ebc4..74d2210 100644
--- a/src/test/ui/malformed/malformed-derive-entry.rs
+++ b/src/test/ui/malformed/malformed-derive-entry.rs
@@ -11,7 +11,7 @@
struct Test3;
#[derive]
-//~^ WARNING empty trait list
+//~^ ERROR attribute must be of the form
struct Test4;
fn main() {}
diff --git a/src/test/ui/malformed/malformed-derive-entry.stderr b/src/test/ui/malformed/malformed-derive-entry.stderr
index b347422..f546f74 100644
--- a/src/test/ui/malformed/malformed-derive-entry.stderr
+++ b/src/test/ui/malformed/malformed-derive-entry.stderr
@@ -16,11 +16,11 @@
LL | #[derive()]
| ^^^^^^^^^^^
-warning: empty trait list in `derive`
+error: attribute must be of the form `#[derive(Trait1, Trait2, ...)]`
--> $DIR/malformed-derive-entry.rs:13:1
|
LL | #[derive]
| ^^^^^^^^^
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
diff --git a/src/test/ui/malformed/malformed-plugin-1.rs b/src/test/ui/malformed/malformed-plugin-1.rs
index c5a251d..16e7a95 100644
--- a/src/test/ui/malformed/malformed-plugin-1.rs
+++ b/src/test/ui/malformed/malformed-plugin-1.rs
@@ -1,4 +1,4 @@
#![feature(plugin)]
-#![plugin] //~ ERROR malformed plugin attribute
+#![plugin] //~ ERROR attribute must be of the form
fn main() {}
diff --git a/src/test/ui/malformed/malformed-plugin-1.stderr b/src/test/ui/malformed/malformed-plugin-1.stderr
index 4124fd6..f42e66e 100644
--- a/src/test/ui/malformed/malformed-plugin-1.stderr
+++ b/src/test/ui/malformed/malformed-plugin-1.stderr
@@ -1,9 +1,8 @@
-error[E0498]: malformed plugin attribute
+error: attribute must be of the form `#[plugin(name|name(args))]`
--> $DIR/malformed-plugin-1.rs:2:1
|
-LL | #![plugin] //~ ERROR malformed plugin attribute
+LL | #![plugin] //~ ERROR attribute must be of the form
| ^^^^^^^^^^
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0498`.
diff --git a/src/test/ui/malformed/malformed-plugin-2.rs b/src/test/ui/malformed/malformed-plugin-2.rs
index 96a3138..70a1d7f 100644
--- a/src/test/ui/malformed/malformed-plugin-2.rs
+++ b/src/test/ui/malformed/malformed-plugin-2.rs
@@ -1,4 +1,4 @@
#![feature(plugin)]
-#![plugin="bleh"] //~ ERROR malformed plugin attribute
+#![plugin="bleh"] //~ ERROR attribute must be of the form
fn main() {}
diff --git a/src/test/ui/malformed/malformed-plugin-2.stderr b/src/test/ui/malformed/malformed-plugin-2.stderr
index 308db46..923cbc1 100644
--- a/src/test/ui/malformed/malformed-plugin-2.stderr
+++ b/src/test/ui/malformed/malformed-plugin-2.stderr
@@ -1,9 +1,8 @@
-error[E0498]: malformed plugin attribute
+error: attribute must be of the form `#[plugin(name|name(args))]`
--> $DIR/malformed-plugin-2.rs:2:1
|
-LL | #![plugin="bleh"] //~ ERROR malformed plugin attribute
+LL | #![plugin="bleh"] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0498`.
diff --git a/src/test/ui/malformed/malformed-regressions.rs b/src/test/ui/malformed/malformed-regressions.rs
new file mode 100644
index 0000000..b5c9924
--- /dev/null
+++ b/src/test/ui/malformed/malformed-regressions.rs
@@ -0,0 +1,8 @@
+// compile-pass
+
+#[doc] //~ WARN attribute must be of the form
+#[ignore()] //~ WARN attribute must be of the form
+#[inline = ""] //~ WARN attribute must be of the form
+#[link] //~ WARN attribute must be of the form
+#[link = ""] //~ WARN attribute must be of the form
+fn main() {}
diff --git a/src/test/ui/malformed/malformed-regressions.stderr b/src/test/ui/malformed/malformed-regressions.stderr
new file mode 100644
index 0000000..a3b2bda
--- /dev/null
+++ b/src/test/ui/malformed/malformed-regressions.stderr
@@ -0,0 +1,48 @@
+warning: attribute must be of the form `#[doc(hidden|inline|...)]` or `#[doc = "string"]`
+ --> $DIR/malformed-regressions.rs:3:1
+ |
+LL | #[doc] //~ WARN attribute must be of the form
+ | ^^^^^^
+ |
+ = note: #[warn(ill_formed_attribute_input)] on by default
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
+warning: attribute must be of the form `#[ignore]` or `#[ignore = "reason"]`
+ --> $DIR/malformed-regressions.rs:4:1
+ |
+LL | #[ignore()] //~ WARN attribute must be of the form
+ | ^^^^^^^^^^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
+warning: attribute must be of the form `#[inline]` or `#[inline(always|never)]`
+ --> $DIR/malformed-regressions.rs:5:1
+ |
+LL | #[inline = ""] //~ WARN attribute must be of the form
+ | ^^^^^^^^^^^^^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
+warning: attribute must be of the form `#[link(name = "...", /*opt*/ kind = "dylib|static|...",
+ /*opt*/ cfg = "...")]`
+ --> $DIR/malformed-regressions.rs:6:1
+ |
+LL | #[link] //~ WARN attribute must be of the form
+ | ^^^^^^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
+warning: attribute must be of the form `#[link(name = "...", /*opt*/ kind = "dylib|static|...",
+ /*opt*/ cfg = "...")]`
+ --> $DIR/malformed-regressions.rs:7:1
+ |
+LL | #[link = ""] //~ WARN attribute must be of the form
+ | ^^^^^^^^^^^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
diff --git a/src/test/ui/malformed/malformed-special-attrs.rs b/src/test/ui/malformed/malformed-special-attrs.rs
new file mode 100644
index 0000000..f91c6be
--- /dev/null
+++ b/src/test/ui/malformed/malformed-special-attrs.rs
@@ -0,0 +1,13 @@
+#[cfg_attr] //~ ERROR expected `(`, found `<eof>`
+struct S1;
+
+#[cfg_attr = ""] //~ ERROR expected `(`, found `=`
+struct S2;
+
+#[derive] //~ ERROR attribute must be of the form
+struct S3;
+
+#[derive = ""] //~ ERROR attribute must be of the form
+struct S4;
+
+fn main() {}
diff --git a/src/test/ui/malformed/malformed-special-attrs.stderr b/src/test/ui/malformed/malformed-special-attrs.stderr
new file mode 100644
index 0000000..1653aa1
--- /dev/null
+++ b/src/test/ui/malformed/malformed-special-attrs.stderr
@@ -0,0 +1,25 @@
+error: expected `(`, found `<eof>`
+
+error: expected `(`, found `=`
+ --> $DIR/malformed-special-attrs.rs:4:12
+ |
+LL | #[cfg_attr] //~ ERROR expected `(`, found `<eof>`
+ | - expected `(`
+...
+LL | #[cfg_attr = ""] //~ ERROR expected `(`, found `=`
+ | ^ unexpected token
+
+error: attribute must be of the form `#[derive(Trait1, Trait2, ...)]`
+ --> $DIR/malformed-special-attrs.rs:7:1
+ |
+LL | #[derive] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^
+
+error: attribute must be of the form `#[derive(Trait1, Trait2, ...)]`
+ --> $DIR/malformed-special-attrs.rs:10:1
+ |
+LL | #[derive = ""] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
+
diff --git a/src/test/ui/marker_trait_attr/marker-attribute-with-values.rs b/src/test/ui/marker_trait_attr/marker-attribute-with-values.rs
index 4756bb1..ea356d5 100644
--- a/src/test/ui/marker_trait_attr/marker-attribute-with-values.rs
+++ b/src/test/ui/marker_trait_attr/marker-attribute-with-values.rs
@@ -3,14 +3,14 @@
#[marker(always)]
trait Marker1 {}
-//~^^ ERROR attribute should be empty
+//~^^ ERROR attribute must be of the form
#[marker("never")]
trait Marker2 {}
-//~^^ ERROR attribute should be empty
+//~^^ ERROR attribute must be of the form
#[marker(key = value)]
trait Marker3 {}
-//~^^ ERROR attribute should be empty
+//~^^ ERROR expected unsuffixed literal or identifier, found value
fn main() {}
diff --git a/src/test/ui/marker_trait_attr/marker-attribute-with-values.stderr b/src/test/ui/marker_trait_attr/marker-attribute-with-values.stderr
index e7c1e90..c683b39 100644
--- a/src/test/ui/marker_trait_attr/marker-attribute-with-values.stderr
+++ b/src/test/ui/marker_trait_attr/marker-attribute-with-values.stderr
@@ -1,20 +1,20 @@
-error: attribute should be empty
+error: attribute must be of the form `#[marker]`
--> $DIR/marker-attribute-with-values.rs:4:1
|
LL | #[marker(always)]
| ^^^^^^^^^^^^^^^^^
-error: attribute should be empty
+error: attribute must be of the form `#[marker]`
--> $DIR/marker-attribute-with-values.rs:8:1
|
LL | #[marker("never")]
| ^^^^^^^^^^^^^^^^^^
-error: attribute should be empty
- --> $DIR/marker-attribute-with-values.rs:12:1
+error: expected unsuffixed literal or identifier, found value
+ --> $DIR/marker-attribute-with-values.rs:12:10
|
LL | #[marker(key = value)]
- | ^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^
error: aborting due to 3 previous errors
diff --git a/src/test/ui/match/match-static-const-lc.stderr b/src/test/ui/match/match-static-const-lc.stderr
deleted file mode 100644
index 1ddb831..0000000
--- a/src/test/ui/match/match-static-const-lc.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-error: constant in pattern `a` should have an upper case name such as `A`
- --> $DIR/match-static-const-lc.rs:11:13
- |
-LL | (0, a) => 0,
- | ^
- |
-note: lint level defined here
- --> $DIR/match-static-const-lc.rs:4:9
- |
-LL | #![deny(non_upper_case_globals)]
- | ^^^^^^^^^^^^^^^^^^^^^^
-
-error: constant in pattern `aha` should have an upper case name such as `AHA`
- --> $DIR/match-static-const-lc.rs:26:13
- |
-LL | (0, aha) => 0,
- | ^^^
-
-error: constant in pattern `not_okay` should have an upper case name such as `NOT_OKAY`
- --> $DIR/match-static-const-lc.rs:40:13
- |
-LL | (0, not_okay) => 0,
- | ^^^^^^^^
-
-error: aborting due to 3 previous errors
-
diff --git a/src/test/ui/match/match-struct.stderr b/src/test/ui/match/match-struct.stderr
index bad4148..2a24a29 100644
--- a/src/test/ui/match/match-struct.stderr
+++ b/src/test/ui/match/match-struct.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/match-struct.rs:6:9
|
+LL | match (S { a: 1 }) {
+ | ------------ this match expression has type `S`
LL | E::C(_) => (),
| ^^^^^^^ expected struct `S`, found enum `E`
|
diff --git a/src/test/ui/match/match-tag-unary.stderr b/src/test/ui/match/match-tag-unary.stderr
index c90029b..53b6635 100644
--- a/src/test/ui/match/match-tag-unary.stderr
+++ b/src/test/ui/match/match-tag-unary.stderr
@@ -2,7 +2,9 @@
--> $DIR/match-tag-unary.rs:4:43
|
LL | fn main() { let x: A = A::A(0); match x { B::B(y) => { } } } //~ ERROR mismatched types
- | ^^^^^^^ expected enum `A`, found enum `B`
+ | - ^^^^^^^ expected enum `A`, found enum `B`
+ | |
+ | this match expression has type `A`
|
= note: expected type `A`
found type `B`
diff --git a/src/test/ui/mismatched_types/cast-rfc0401.stderr b/src/test/ui/mismatched_types/cast-rfc0401.stderr
index fbe5e6d..76091f2 100644
--- a/src/test/ui/mismatched_types/cast-rfc0401.stderr
+++ b/src/test/ui/mismatched_types/cast-rfc0401.stderr
@@ -90,17 +90,13 @@
--> $DIR/cast-rfc0401.rs:39:13
|
LL | let _ = 3_i32 as bool; //~ ERROR cannot cast
- | ^^^^^^^^^^^^^ unsupported cast
- |
- = help: compare with zero instead
+ | ^^^^^^^^^^^^^ help: compare with zero instead: `3_i32 != 0`
error[E0054]: cannot cast as `bool`
--> $DIR/cast-rfc0401.rs:40:13
|
LL | let _ = E::A as bool; //~ ERROR cannot cast
| ^^^^^^^^^^^^ unsupported cast
- |
- = help: compare with zero instead
error[E0604]: only `u8` can be cast as `char`, not `u32`
--> $DIR/cast-rfc0401.rs:41:13
diff --git a/src/test/ui/namespace/namespace-mix.stderr b/src/test/ui/namespace/namespace-mix.stderr
index 18d4269..5ebb40e 100644
--- a/src/test/ui/namespace/namespace-mix.stderr
+++ b/src/test/ui/namespace/namespace-mix.stderr
@@ -2,11 +2,13 @@
--> $DIR/namespace-mix.rs:34:11
|
LL | check(m1::S); //~ ERROR expected value, found type alias `m1::S`
- | ^^^^-
- | |
- | did you mean `TS`?
+ | ^^^^^
|
= note: can't use a type alias as a constructor
+help: a tuple struct with a similar name exists
+ |
+LL | check(m1::TS); //~ ERROR expected value, found type alias `m1::S`
+ | ^^
help: possible better candidates are found in other modules, you can import them into scope
|
LL | use m2::S;
@@ -18,11 +20,13 @@
--> $DIR/namespace-mix.rs:40:11
|
LL | check(xm1::S); //~ ERROR expected value, found type alias `xm1::S`
- | ^^^^^-
- | |
- | did you mean `TS`?
+ | ^^^^^^
|
= note: can't use a type alias as a constructor
+help: a tuple struct with a similar name exists
+ |
+LL | check(xm1::TS); //~ ERROR expected value, found type alias `xm1::S`
+ | ^^
help: possible better candidates are found in other modules, you can import them into scope
|
LL | use m2::S;
@@ -34,10 +38,11 @@
--> $DIR/namespace-mix.rs:100:11
|
LL | check(m7::V); //~ ERROR expected value, found struct variant `m7::V`
- | ^^^^-
- | | |
- | | did you mean `TV`?
- | did you mean `m7::V { /* fields */ }`?
+ | ^^^^^ did you mean `m7::V { /* fields */ }`?
+help: a tuple variant with a similar name exists
+ |
+LL | check(m7::TV); //~ ERROR expected value, found struct variant `m7::V`
+ | ^^
help: possible better candidates are found in other modules, you can import them into scope
|
LL | use m8::V;
@@ -49,10 +54,11 @@
--> $DIR/namespace-mix.rs:106:11
|
LL | check(xm7::V); //~ ERROR expected value, found struct variant `xm7::V`
- | ^^^^^-
- | | |
- | | did you mean `TV`?
- | did you mean `xm7::V { /* fields */ }`?
+ | ^^^^^^ did you mean `xm7::V { /* fields */ }`?
+help: a tuple variant with a similar name exists
+ |
+LL | check(xm7::TV); //~ ERROR expected value, found struct variant `xm7::V`
+ | ^^
help: possible better candidates are found in other modules, you can import them into scope
|
LL | use m8::V;
diff --git a/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr b/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr
index 66f8791..8e40707 100644
--- a/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr
+++ b/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr
@@ -9,7 +9,7 @@
for<'r, 's, 't0> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 'r)) mut &ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 's)) i32, &ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 't0)) i32))
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/escape-argument-callee.rs:26:45
|
LL | let mut closure = expect_sig(|p, y| *p = y);
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr
index 5594271..55e4573 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr
@@ -16,7 +16,7 @@
= note: late-bound region is '_#5r
= note: late-bound region is '_#6r
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/propagate-approximated-fail-no-postdom.rs:46:13
|
LL | |_outlives1, _outlives2, _outlives3, x, y| {
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs
index 7296bba..1c409a1 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs
@@ -41,10 +41,9 @@
#[rustc_regions]
fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
-
// Only works if 'x: 'y:
demand_y(x, y, x.get())
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
});
}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr
index a827b85..5863b9b 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr
@@ -3,10 +3,9 @@
|
LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
| _______________________________________________^
-LL | |
LL | | // Only works if 'x: 'y:
LL | | demand_y(x, y, x.get())
-LL | | //~^ ERROR unsatisfied lifetime constraints
+LL | | //~^ ERROR lifetime may not live long enough
LL | | });
| |_____^
|
@@ -24,17 +23,17 @@
|
LL | / fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
LL | | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
-LL | |
LL | | // Only works if 'x: 'y:
-... |
+LL | | demand_y(x, y, x.get())
+LL | | //~^ ERROR lifetime may not live long enough
LL | | });
LL | | }
| |_^
|
= note: defining type: DefId(0/0:6 ~ propagate_approximated_ref[317d]::supply[0]) with substs []
-error: unsatisfied lifetime constraints
- --> $DIR/propagate-approximated-ref.rs:46:9
+error: lifetime may not live long enough
+ --> $DIR/propagate-approximated-ref.rs:45:9
|
LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
| -- -- lifetime `'b` defined here
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs
index eb6159c..233a5dc 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs
@@ -34,10 +34,9 @@
#[rustc_regions]
fn test<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
establish_relationships(cell_a, cell_b, |outlives1, outlives2, x, y| {
-
// Only works if 'x: 'y:
demand_y(outlives1, outlives2, x.get())
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
});
}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr
index 1f9d1d7..b6d9d85 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr
@@ -3,10 +3,9 @@
|
LL | establish_relationships(cell_a, cell_b, |outlives1, outlives2, x, y| {
| _____________________________________________^
-LL | |
LL | | // Only works if 'x: 'y:
LL | | demand_y(outlives1, outlives2, x.get())
-LL | | //~^ ERROR unsatisfied lifetime constraints
+LL | | //~^ ERROR lifetime may not live long enough
LL | | });
| |_____^
|
@@ -24,17 +23,17 @@
|
LL | / fn test<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
LL | | establish_relationships(cell_a, cell_b, |outlives1, outlives2, x, y| {
-LL | |
LL | | // Only works if 'x: 'y:
-... |
+LL | | demand_y(outlives1, outlives2, x.get())
+LL | | //~^ ERROR lifetime may not live long enough
LL | | });
LL | | }
| |_^
|
= note: defining type: DefId(0/0:6 ~ propagate_approximated_val[317d]::test[0]) with substs []
-error: unsatisfied lifetime constraints
- --> $DIR/propagate-approximated-val.rs:39:9
+error: lifetime may not live long enough
+ --> $DIR/propagate-approximated-val.rs:38:9
|
LL | fn test<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
| -- -- lifetime `'b` defined here
diff --git a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr
index 1a8988f..93eb93b 100644
--- a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr
@@ -16,7 +16,7 @@
= note: late-bound region is '_#2r
= note: late-bound region is '_#3r
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/propagate-fail-to-approximate-longer-no-bounds.rs:37:9
|
LL | establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
diff --git a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr
index d0492bd..c7809de 100644
--- a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr
@@ -16,7 +16,7 @@
= note: late-bound region is '_#3r
= note: late-bound region is '_#4r
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/propagate-fail-to-approximate-longer-wrong-bounds.rs:41:9
|
LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
diff --git a/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr b/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr
index 0bc0592..d0a24a2 100644
--- a/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr
+++ b/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/region-lbr-named-does-not-outlive-static.rs:9:5
|
LL | fn foo<'a>(x: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs
index 1be27ae..4d864c6 100644
--- a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs
+++ b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs
@@ -7,7 +7,7 @@
fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
&*x
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
-fn main() { }
+fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr
index 2332332..6dc98a9 100644
--- a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr
+++ b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/region-lbr1-does-not-outlive-ebr2.rs:9:5
|
LL | fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
diff --git a/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr b/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr
index 26243f9..4a035d0 100644
--- a/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr
+++ b/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr
@@ -9,7 +9,7 @@
for<'r, 's> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 'r)) i32, &ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 's)) i32)) -> &ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 'r)) i32
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/return-wrong-bound-region.rs:11:23
|
LL | expect_sig(|a, b| b); // ought to return `a`
diff --git a/src/test/ui/nll/issue-48238.stderr b/src/test/ui/nll/issue-48238.stderr
index 913effa..7cb5eb7 100644
--- a/src/test/ui/nll/issue-48238.stderr
+++ b/src/test/ui/nll/issue-48238.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-48238.rs:11:13
|
LL | move || use_val(&orig); //~ ERROR
diff --git a/src/test/ui/nll/issue-50716.stderr b/src/test/ui/nll/issue-50716.stderr
index fa893df..229bb17 100644
--- a/src/test/ui/nll/issue-50716.stderr
+++ b/src/test/ui/nll/issue-50716.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-50716.rs:16:14
|
LL | fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>)
diff --git a/src/test/ui/nll/issue-52113.rs b/src/test/ui/nll/issue-52113.rs
index 8428e55..795f4f4 100644
--- a/src/test/ui/nll/issue-52113.rs
+++ b/src/test/ui/nll/issue-52113.rs
@@ -3,8 +3,8 @@
#![allow(warnings)]
#![feature(nll)]
-trait Bazinga { }
-impl<F> Bazinga for F { }
+trait Bazinga {}
+impl<F> Bazinga for F {}
fn produce1<'a>(data: &'a u32) -> impl Bazinga + 'a {
let x = move || {
@@ -21,7 +21,6 @@
x
}
-
fn produce3<'a, 'b: 'a>(data: &'a mut Vec<&'a u32>, value: &'b u32) -> impl Bazinga + 'a {
let x = move || {
let value: &'a u32 = value;
@@ -35,7 +34,7 @@
let value: &'a u32 = value;
data.push(value);
};
- x //~ ERROR unsatisfied lifetime constraints
+ x //~ ERROR lifetime may not live long enough
}
-fn main() { }
+fn main() {}
diff --git a/src/test/ui/nll/issue-52113.stderr b/src/test/ui/nll/issue-52113.stderr
index 873612d..ceae161 100644
--- a/src/test/ui/nll/issue-52113.stderr
+++ b/src/test/ui/nll/issue-52113.stderr
@@ -1,12 +1,12 @@
-error: unsatisfied lifetime constraints
- --> $DIR/issue-52113.rs:38:5
+error: lifetime may not live long enough
+ --> $DIR/issue-52113.rs:37:5
|
LL | fn produce_err<'a, 'b: 'a>(data: &'b mut Vec<&'b u32>, value: &'a u32) -> impl Bazinga + 'b {
| -- -- lifetime `'b` defined here
| |
| lifetime `'a` defined here
...
-LL | x //~ ERROR unsatisfied lifetime constraints
+LL | x //~ ERROR lifetime may not live long enough
| ^ returning this value requires that `'a` must outlive `'b`
error: aborting due to previous error
diff --git a/src/test/ui/nll/issue-52742.rs b/src/test/ui/nll/issue-52742.rs
index d8251cb..150e67f 100644
--- a/src/test/ui/nll/issue-52742.rs
+++ b/src/test/ui/nll/issue-52742.rs
@@ -7,14 +7,14 @@
}
struct Bar<'b> {
- z: &'b u32
+ z: &'b u32,
}
impl Foo<'_, '_> {
fn take_bar(&mut self, b: Bar<'_>) {
self.y = b.z
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
}
-fn main() { }
+fn main() {}
diff --git a/src/test/ui/nll/issue-52742.stderr b/src/test/ui/nll/issue-52742.stderr
index f733702..6b25296 100644
--- a/src/test/ui/nll/issue-52742.stderr
+++ b/src/test/ui/nll/issue-52742.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-52742.rs:15:9
|
LL | fn take_bar(&mut self, b: Bar<'_>) {
diff --git a/src/test/ui/nll/issue-55394.rs b/src/test/ui/nll/issue-55394.rs
index 4a83c33..deb1034 100644
--- a/src/test/ui/nll/issue-55394.rs
+++ b/src/test/ui/nll/issue-55394.rs
@@ -8,7 +8,7 @@
impl Foo<'_> {
fn new(bar: &mut Bar) -> Self {
- Foo { bar } //~ ERROR unsatisfied lifetime constraints
+ Foo { bar } //~ERROR lifetime may not live long enough
}
}
diff --git a/src/test/ui/nll/issue-55394.stderr b/src/test/ui/nll/issue-55394.stderr
index a4c5160..bcdd782 100644
--- a/src/test/ui/nll/issue-55394.stderr
+++ b/src/test/ui/nll/issue-55394.stderr
@@ -1,11 +1,11 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-55394.rs:11:9
|
LL | fn new(bar: &mut Bar) -> Self {
| - ---- return type is Foo<'2>
| |
| let's call the lifetime of this reference `'1`
-LL | Foo { bar } //~ ERROR unsatisfied lifetime constraints
+LL | Foo { bar } //~ERROR lifetime may not live long enough
| ^^^^^^^^^^^ returning this value requires that `'1` must outlive `'2`
error: aborting due to previous error
diff --git a/src/test/ui/nll/issue-55401.stderr b/src/test/ui/nll/issue-55401.stderr
index 9e50db7..952b544 100644
--- a/src/test/ui/nll/issue-55401.stderr
+++ b/src/test/ui/nll/issue-55401.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-55401.rs:5:5
|
LL | fn static_to_a_to_static_through_ref_in_tuple<'a>(x: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/mir_check_cast_closure.rs b/src/test/ui/nll/mir_check_cast_closure.rs
index 5298e84..0619ff3 100644
--- a/src/test/ui/nll/mir_check_cast_closure.rs
+++ b/src/test/ui/nll/mir_check_cast_closure.rs
@@ -5,7 +5,7 @@
fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 {
let g: fn(_, _) -> _ = |_x, y| y;
g
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_closure.stderr b/src/test/ui/nll/mir_check_cast_closure.stderr
index b883533..e14cb07 100644
--- a/src/test/ui/nll/mir_check_cast_closure.stderr
+++ b/src/test/ui/nll/mir_check_cast_closure.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/mir_check_cast_closure.rs:7:5
|
LL | fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 {
diff --git a/src/test/ui/nll/mir_check_cast_reify.rs b/src/test/ui/nll/mir_check_cast_reify.rs
index b0ad8e3..be12e31 100644
--- a/src/test/ui/nll/mir_check_cast_reify.rs
+++ b/src/test/ui/nll/mir_check_cast_reify.rs
@@ -35,7 +35,7 @@
// as part of checking the `ReifyFnPointer`.
let f: fn(_) -> _ = foo;
f(x)
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_reify.stderr b/src/test/ui/nll/mir_check_cast_reify.stderr
index 2585486..4e8eec3 100644
--- a/src/test/ui/nll/mir_check_cast_reify.stderr
+++ b/src/test/ui/nll/mir_check_cast_reify.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/mir_check_cast_reify.rs:37:5
|
LL | fn bar<'a>(x: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/mir_check_cast_unsafe_fn.rs b/src/test/ui/nll/mir_check_cast_unsafe_fn.rs
index 29fbf46..9df9c05 100644
--- a/src/test/ui/nll/mir_check_cast_unsafe_fn.rs
+++ b/src/test/ui/nll/mir_check_cast_unsafe_fn.rs
@@ -7,7 +7,7 @@
// in `g`. These are related via the `UnsafeFnPointer` cast.
let g: unsafe fn(_) -> _ = f;
unsafe { g(input) }
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr b/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr
index e7b945a..5295985 100644
--- a/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr
+++ b/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/mir_check_cast_unsafe_fn.rs:9:14
|
LL | fn bar<'a>(input: &'a u32, f: fn(&'a u32) -> &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/mir_check_cast_unsize.rs b/src/test/ui/nll/mir_check_cast_unsize.rs
index e98d5e1..d15c4e4 100644
--- a/src/test/ui/nll/mir_check_cast_unsize.rs
+++ b/src/test/ui/nll/mir_check_cast_unsize.rs
@@ -6,7 +6,7 @@
fn bar<'a>(x: &'a u32) -> &'static dyn Debug {
x
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_unsize.stderr b/src/test/ui/nll/mir_check_cast_unsize.stderr
index 189bb2d..364d6c1 100644
--- a/src/test/ui/nll/mir_check_cast_unsize.stderr
+++ b/src/test/ui/nll/mir_check_cast_unsize.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/mir_check_cast_unsize.rs:8:5
|
LL | fn bar<'a>(x: &'a u32) -> &'static dyn Debug {
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr b/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr
index f2bfdae..e8283d1 100644
--- a/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr
+++ b/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr
@@ -40,7 +40,7 @@
|
= help: consider adding an explicit lifetime bound `T: ReFree(DefId(0/0:8 ~ projection_one_region_closure[317d]::no_relationships_late[0]), BrNamed(crate0:DefIndex(1:16), 'a))`...
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-one-region-closure.rs:45:39
|
LL | fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
@@ -94,7 +94,7 @@
|
= help: consider adding an explicit lifetime bound `T: ReEarlyBound(0, 'a)`...
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-one-region-closure.rs:56:39
|
LL | fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr b/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr
index fc59100..78a8c80 100644
--- a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr
+++ b/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr
@@ -31,7 +31,7 @@
T
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-one-region-trait-bound-closure.rs:37:39
|
LL | fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
@@ -76,7 +76,7 @@
T
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-one-region-trait-bound-closure.rs:47:39
|
LL | fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
diff --git a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs
index 25877e6..20edfb3 100644
--- a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs
+++ b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs
@@ -85,7 +85,7 @@
T: Anything<'b, 'b>,
{
with_signature(cell, t, |cell, t| require(cell, t));
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
#[rustc_regions]
diff --git a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr
index c2b54b6..d8725dc 100644
--- a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr
+++ b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr
@@ -217,7 +217,7 @@
LL | | T: Anything<'b, 'b>,
LL | | {
LL | | with_signature(cell, t, |cell, t| require(cell, t));
-LL | | //~^ ERROR unsatisfied lifetime constraints
+LL | | //~^ ERROR lifetime may not live long enough
LL | | }
| |_^
|
@@ -226,7 +226,7 @@
T
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-two-region-trait-bound-closure.rs:87:29
|
LL | fn two_regions<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
diff --git a/src/test/ui/nll/type-alias-free-regions.stderr b/src/test/ui/nll/type-alias-free-regions.stderr
index 6b3bb60..bcd141b 100644
--- a/src/test/ui/nll/type-alias-free-regions.stderr
+++ b/src/test/ui/nll/type-alias-free-regions.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/type-alias-free-regions.rs:19:9
|
LL | impl<'a> FromBox<'a> for C<'a> {
@@ -8,7 +8,7 @@
LL | C { f: b } //~ ERROR
| ^^^^^^^^^^ returning this value requires that `'1` must outlive `'a`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/type-alias-free-regions.rs:29:9
|
LL | impl<'a> FromTuple<'a> for C<'a> {
diff --git a/src/test/ui/nll/user-annotations/closure-substs.rs b/src/test/ui/nll/user-annotations/closure-substs.rs
index 9dc84aa..cafdd92 100644
--- a/src/test/ui/nll/user-annotations/closure-substs.rs
+++ b/src/test/ui/nll/user-annotations/closure-substs.rs
@@ -5,21 +5,21 @@
fn foo<'a>() {
// Here `x` is free in the closure sig:
|x: &'a i32| -> &'static i32 {
- return x; //~ ERROR unsatisfied lifetime constraints
+ return x; //~ ERROR lifetime may not live long enough
};
}
fn foo1() {
// Here `x` is bound in the closure sig:
|x: &i32| -> &'static i32 {
- return x; //~ ERROR unsatisfied lifetime constraints
+ return x; //~ ERROR lifetime may not live long enough
};
}
fn bar<'a>() {
// Here `x` is free in the closure sig:
|x: &'a i32, b: fn(&'static i32)| {
- b(x); //~ ERROR unsatisfied lifetime constraints
+ b(x); //~ ERROR lifetime may not live long enough
};
}
@@ -30,4 +30,4 @@
};
}
-fn main() { }
+fn main() {}
diff --git a/src/test/ui/nll/user-annotations/closure-substs.stderr b/src/test/ui/nll/user-annotations/closure-substs.stderr
index ffc6e5a..a46ab61 100644
--- a/src/test/ui/nll/user-annotations/closure-substs.stderr
+++ b/src/test/ui/nll/user-annotations/closure-substs.stderr
@@ -1,27 +1,27 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/closure-substs.rs:8:16
|
LL | fn foo<'a>() {
| -- lifetime `'a` defined here
...
-LL | return x; //~ ERROR unsatisfied lifetime constraints
+LL | return x; //~ ERROR lifetime may not live long enough
| ^ returning this value requires that `'a` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/closure-substs.rs:15:16
|
LL | |x: &i32| -> &'static i32 {
| - let's call the lifetime of this reference `'1`
-LL | return x; //~ ERROR unsatisfied lifetime constraints
+LL | return x; //~ ERROR lifetime may not live long enough
| ^ returning this value requires that `'1` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/closure-substs.rs:22:9
|
LL | fn bar<'a>() {
| -- lifetime `'a` defined here
...
-LL | b(x); //~ ERROR unsatisfied lifetime constraints
+LL | b(x); //~ ERROR lifetime may not live long enough
| ^^^^ argument requires that `'a` must outlive `'static`
error[E0521]: borrowed data escapes outside of closure
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr
index 94fbe01..541a711 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-inherent-1.rs:10:5
|
LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr
index 7aeb276..5b97c12 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-normalize.rs:20:5
|
LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr
index fee9abc..10e48b5 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-trait-item-1.rs:12:5
|
LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr
index 047aad9..5bfa32e 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-trait-item-2.rs:12:5
|
LL | fn foo<'a, T: Foo<'a>>() -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr
index b373ceb..a1e60db 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-trait-item-3.rs:12:5
|
LL | fn foo<'a, T: Foo<'a>>() -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/issue-54124.rs b/src/test/ui/nll/user-annotations/issue-54124.rs
index 042ad02..e1de67a 100644
--- a/src/test/ui/nll/user-annotations/issue-54124.rs
+++ b/src/test/ui/nll/user-annotations/issue-54124.rs
@@ -1,8 +1,8 @@
#![feature(nll)]
fn test<'a>() {
- let _:fn(&()) = |_:&'a ()| {}; //~ ERROR unsatisfied lifetime constraints
- //~^ ERROR unsatisfied lifetime constraints
+ let _:fn(&()) = |_:&'a ()| {}; //~ ERROR lifetime may not live long enough
+ //~^ ERROR lifetime may not live long enough
}
fn main() {
diff --git a/src/test/ui/nll/user-annotations/issue-54124.stderr b/src/test/ui/nll/user-annotations/issue-54124.stderr
index 5b5afaee..b1c2411 100644
--- a/src/test/ui/nll/user-annotations/issue-54124.stderr
+++ b/src/test/ui/nll/user-annotations/issue-54124.stderr
@@ -1,19 +1,19 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-54124.rs:4:22
|
LL | fn test<'a>() {
| -- lifetime `'a` defined here
-LL | let _:fn(&()) = |_:&'a ()| {}; //~ ERROR unsatisfied lifetime constraints
+LL | let _:fn(&()) = |_:&'a ()| {}; //~ ERROR lifetime may not live long enough
| ^ - let's call the lifetime of this reference `'1`
| |
| requires that `'1` must outlive `'a`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-54124.rs:4:22
|
LL | fn test<'a>() {
| -- lifetime `'a` defined here
-LL | let _:fn(&()) = |_:&'a ()| {}; //~ ERROR unsatisfied lifetime constraints
+LL | let _:fn(&()) = |_:&'a ()| {}; //~ ERROR lifetime may not live long enough
| ^ requires that `'a` must outlive `'static`
error: aborting due to 2 previous errors
diff --git a/src/test/ui/nll/user-annotations/normalization.rs b/src/test/ui/nll/user-annotations/normalization.rs
index 51d9adc..e0af2e6 100644
--- a/src/test/ui/nll/user-annotations/normalization.rs
+++ b/src/test/ui/nll/user-annotations/normalization.rs
@@ -2,7 +2,6 @@
// after normalization.
#![feature(nll)]
-#![ignore(unused)]
trait Foo { type Out; }
impl Foo for () { type Out = &'static u32; }
diff --git a/src/test/ui/nll/user-annotations/normalization.stderr b/src/test/ui/nll/user-annotations/normalization.stderr
index b059d5a..71bf850 100644
--- a/src/test/ui/nll/user-annotations/normalization.stderr
+++ b/src/test/ui/nll/user-annotations/normalization.stderr
@@ -1,5 +1,5 @@
error[E0597]: `a` does not live long enough
- --> $DIR/normalization.rs:12:31
+ --> $DIR/normalization.rs:11:31
|
LL | let b: <() as Foo>::Out = &a; //~ ERROR
| ---------------- ^^ borrowed value does not live long enough
diff --git a/src/test/ui/nll/user-annotations/patterns.stderr b/src/test/ui/nll/user-annotations/patterns.stderr
index b0c554e..476578e 100644
--- a/src/test/ui/nll/user-annotations/patterns.stderr
+++ b/src/test/ui/nll/user-annotations/patterns.stderr
@@ -148,7 +148,7 @@
LL | }
| - `x` dropped here while still borrowed
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/patterns.rs:113:5
|
LL | fn static_to_a_to_static_through_variable<'a>(x: &'a u32) -> &'static u32 {
@@ -157,7 +157,7 @@
LL | y //~ ERROR
| ^ returning this value requires that `'a` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/patterns.rs:125:5
|
LL | fn static_to_a_to_static_through_tuple<'a>(x: &'a u32) -> &'static u32 {
@@ -166,7 +166,7 @@
LL | y //~ ERROR
| ^ returning this value requires that `'a` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/patterns.rs:130:5
|
LL | fn static_to_a_to_static_through_struct<'a>(_x: &'a u32) -> &'static u32 {
@@ -175,7 +175,7 @@
LL | y //~ ERROR
| ^ returning this value requires that `'a` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/patterns.rs:134:18
|
LL | fn a_to_static_then_static<'a>(x: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/wf-self-type.rs b/src/test/ui/nll/user-annotations/wf-self-type.rs
index da9ef8c..d8caf46 100644
--- a/src/test/ui/nll/user-annotations/wf-self-type.rs
+++ b/src/test/ui/nll/user-annotations/wf-self-type.rs
@@ -9,7 +9,7 @@
}
pub fn foo<'a, 'b>(u: &'b ()) -> &'a () {
- Foo::xmute(u) //~ ERROR unsatisfied lifetime constraints
+ Foo::xmute(u) //~ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/user-annotations/wf-self-type.stderr b/src/test/ui/nll/user-annotations/wf-self-type.stderr
index 401fe2a..00500c8 100644
--- a/src/test/ui/nll/user-annotations/wf-self-type.stderr
+++ b/src/test/ui/nll/user-annotations/wf-self-type.stderr
@@ -1,11 +1,11 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/wf-self-type.rs:12:5
|
LL | pub fn foo<'a, 'b>(u: &'b ()) -> &'a () {
| -- -- lifetime `'b` defined here
| |
| lifetime `'a` defined here
-LL | Foo::xmute(u) //~ ERROR unsatisfied lifetime constraints
+LL | Foo::xmute(u) //~ ERROR lifetime may not live long enough
| ^^^^^^^^^^^^^ returning this value requires that `'b` must outlive `'a`
error: aborting due to previous error
diff --git a/src/test/ui/nll/where_clauses_in_functions.rs b/src/test/ui/nll/where_clauses_in_functions.rs
index 256ec60..0d35c09 100644
--- a/src/test/ui/nll/where_clauses_in_functions.rs
+++ b/src/test/ui/nll/where_clauses_in_functions.rs
@@ -11,7 +11,7 @@
fn bar<'a, 'b>(x: &'a u32, y: &'b u32) -> (&'a u32, &'b u32) {
foo(x, y)
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/where_clauses_in_functions.stderr b/src/test/ui/nll/where_clauses_in_functions.stderr
index 4419a19..f3b65ec 100644
--- a/src/test/ui/nll/where_clauses_in_functions.stderr
+++ b/src/test/ui/nll/where_clauses_in_functions.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/where_clauses_in_functions.rs:13:5
|
LL | fn bar<'a, 'b>(x: &'a u32, y: &'b u32) -> (&'a u32, &'b u32) {
diff --git a/src/test/ui/nll/where_clauses_in_structs.rs b/src/test/ui/nll/where_clauses_in_structs.rs
index 1b02f26..8bc6b2e 100644
--- a/src/test/ui/nll/where_clauses_in_structs.rs
+++ b/src/test/ui/nll/where_clauses_in_structs.rs
@@ -11,7 +11,7 @@
fn bar<'a, 'b>(x: Cell<&'a u32>, y: Cell<&'b u32>) {
Foo { x, y };
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/where_clauses_in_structs.stderr b/src/test/ui/nll/where_clauses_in_structs.stderr
index 8704b0dc..e0feb40 100644
--- a/src/test/ui/nll/where_clauses_in_structs.stderr
+++ b/src/test/ui/nll/where_clauses_in_structs.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/where_clauses_in_structs.rs:13:11
|
LL | fn bar<'a, 'b>(x: Cell<&'a u32>, y: Cell<&'b u32>) {
diff --git a/src/test/ui/no_crate_type.rs b/src/test/ui/no_crate_type.rs
index 43efdac..392c6fd 100644
--- a/src/test/ui/no_crate_type.rs
+++ b/src/test/ui/no_crate_type.rs
@@ -1,5 +1,5 @@
// regression test for issue 11256
-#![crate_type] //~ ERROR `crate_type` requires a value
+#![crate_type] //~ ERROR attribute must be of the form
fn main() {
return
diff --git a/src/test/ui/no_crate_type.stderr b/src/test/ui/no_crate_type.stderr
index 9d691f3..6b76ab6 100644
--- a/src/test/ui/no_crate_type.stderr
+++ b/src/test/ui/no_crate_type.stderr
@@ -1,10 +1,8 @@
-error: `crate_type` requires a value
+error: attribute must be of the form `#[crate_type = "bin|lib|..."]`
--> $DIR/no_crate_type.rs:2:1
|
-LL | #![crate_type] //~ ERROR `crate_type` requires a value
+LL | #![crate_type] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^
- |
- = note: for example: `#![crate_type="lib"]`
error: aborting due to previous error
diff --git a/src/test/ui/old-suffixes-are-really-forbidden.stderr b/src/test/ui/old-suffixes-are-really-forbidden.stderr
index 557e7ef..c54b72a 100644
--- a/src/test/ui/old-suffixes-are-really-forbidden.stderr
+++ b/src/test/ui/old-suffixes-are-really-forbidden.stderr
@@ -2,7 +2,7 @@
--> $DIR/old-suffixes-are-really-forbidden.rs:2:13
|
LL | let a = 1_is; //~ ERROR invalid suffix
- | ^^^^
+ | ^^^^ invalid suffix `is`
|
= help: the suffix must be one of the integral types (`u32`, `isize`, etc)
@@ -10,7 +10,7 @@
--> $DIR/old-suffixes-are-really-forbidden.rs:3:13
|
LL | let b = 2_us; //~ ERROR invalid suffix
- | ^^^^
+ | ^^^^ invalid suffix `us`
|
= help: the suffix must be one of the integral types (`u32`, `isize`, etc)
diff --git a/src/test/ui/on-unimplemented/bad-annotation.rs b/src/test/ui/on-unimplemented/bad-annotation.rs
index e5e921c..6843c4b 100644
--- a/src/test/ui/on-unimplemented/bad-annotation.rs
+++ b/src/test/ui/on-unimplemented/bad-annotation.rs
@@ -14,7 +14,8 @@
fn my_from_iter<T: Iterator<Item=A>>(iterator: T) -> Self;
}
-#[rustc_on_unimplemented] //~ ERROR `#[rustc_on_unimplemented]` requires a value
+#[rustc_on_unimplemented]
+//~^ ERROR attribute must be of the form
trait BadAnnotation1
{}
diff --git a/src/test/ui/on-unimplemented/bad-annotation.stderr b/src/test/ui/on-unimplemented/bad-annotation.stderr
index 70f6932..31b626e 100644
--- a/src/test/ui/on-unimplemented/bad-annotation.stderr
+++ b/src/test/ui/on-unimplemented/bad-annotation.stderr
@@ -1,25 +1,23 @@
-error[E0232]: `#[rustc_on_unimplemented]` requires a value
+error: attribute must be of the form `#[rustc_on_unimplemented(/*opt*/ message = "...", /*opt*/ label = "...", /*opt*/ note = "...")]` or `#[rustc_on_unimplemented = "message"]`
--> $DIR/bad-annotation.rs:17:1
|
-LL | #[rustc_on_unimplemented] //~ ERROR `#[rustc_on_unimplemented]` requires a value
- | ^^^^^^^^^^^^^^^^^^^^^^^^^ value required here
- |
- = note: eg `#[rustc_on_unimplemented(message="foo")]`
+LL | #[rustc_on_unimplemented]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0230]: there is no parameter `C` on trait `BadAnnotation2`
- --> $DIR/bad-annotation.rs:21:1
+ --> $DIR/bad-annotation.rs:22:1
|
LL | #[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{C}>`"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0231]: only named substitution parameters are allowed
- --> $DIR/bad-annotation.rs:26:1
+ --> $DIR/bad-annotation.rs:27:1
|
LL | #[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{}>`"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:31:26
+ --> $DIR/bad-annotation.rs:32:26
|
LL | #[rustc_on_unimplemented(lorem="")]
| ^^^^^^^^ expected value here
@@ -27,7 +25,7 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:35:26
+ --> $DIR/bad-annotation.rs:36:26
|
LL | #[rustc_on_unimplemented(lorem(ipsum(dolor)))]
| ^^^^^^^^^^^^^^^^^^^ expected value here
@@ -35,7 +33,7 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:39:39
+ --> $DIR/bad-annotation.rs:40:39
|
LL | #[rustc_on_unimplemented(message="x", message="y")]
| ^^^^^^^^^^^ expected value here
@@ -43,7 +41,7 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:43:39
+ --> $DIR/bad-annotation.rs:44:39
|
LL | #[rustc_on_unimplemented(message="x", on(desugared, message="y"))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
@@ -51,13 +49,13 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: empty `on`-clause in `#[rustc_on_unimplemented]`
- --> $DIR/bad-annotation.rs:47:26
+ --> $DIR/bad-annotation.rs:48:26
|
LL | #[rustc_on_unimplemented(on(), message="y")]
| ^^^^ empty on-clause here
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:51:26
+ --> $DIR/bad-annotation.rs:52:26
|
LL | #[rustc_on_unimplemented(on="x", message="y")]
| ^^^^^^ expected value here
@@ -65,7 +63,7 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:58:40
+ --> $DIR/bad-annotation.rs:59:40
|
LL | #[rustc_on_unimplemented(on(desugared, on(desugared, message="x")), message="y")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
diff --git a/src/test/ui/on-unimplemented/expected-comma-found-token.rs b/src/test/ui/on-unimplemented/expected-comma-found-token.rs
index a4e2a17..d8717f3 100644
--- a/src/test/ui/on-unimplemented/expected-comma-found-token.rs
+++ b/src/test/ui/on-unimplemented/expected-comma-found-token.rs
@@ -4,7 +4,7 @@
#![feature(on_unimplemented)]
-#[rustc_on_unimplemented( //~ ERROR `#[rustc_on_unimplemented]` requires a value
+#[rustc_on_unimplemented(
message="the message"
label="the label" //~ ERROR expected one of `)` or `,`, found `label`
)]
diff --git a/src/test/ui/on-unimplemented/expected-comma-found-token.stderr b/src/test/ui/on-unimplemented/expected-comma-found-token.stderr
index aa1b520..1e0808e 100644
--- a/src/test/ui/on-unimplemented/expected-comma-found-token.stderr
+++ b/src/test/ui/on-unimplemented/expected-comma-found-token.stderr
@@ -6,17 +6,5 @@
LL | label="the label" //~ ERROR expected one of `)` or `,`, found `label`
| ^^^^^ unexpected token
-error[E0232]: `#[rustc_on_unimplemented]` requires a value
- --> $DIR/expected-comma-found-token.rs:7:1
- |
-LL | / #[rustc_on_unimplemented( //~ ERROR `#[rustc_on_unimplemented]` requires a value
-LL | | message="the message"
-LL | | label="the label" //~ ERROR expected one of `)` or `,`, found `label`
-LL | | )]
- | |__^ value required here
- |
- = note: eg `#[rustc_on_unimplemented(message="foo")]`
+error: aborting due to previous error
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0232`.
diff --git a/src/test/ui/parser/attr.rs b/src/test/ui/parser/attr.rs
index 041f30c..91a4abb 100644
--- a/src/test/ui/parser/attr.rs
+++ b/src/test/ui/parser/attr.rs
@@ -2,5 +2,6 @@
fn main() {}
-#![lang(foo)] //~ ERROR an inner attribute is not permitted in this context
+#![lang = "foo"] //~ ERROR an inner attribute is not permitted in this context
+ //~| ERROR definition of an unknown language item: `foo`
fn foo() {}
diff --git a/src/test/ui/parser/attr.stderr b/src/test/ui/parser/attr.stderr
index 44714dc..8151bd7 100644
--- a/src/test/ui/parser/attr.stderr
+++ b/src/test/ui/parser/attr.stderr
@@ -1,10 +1,17 @@
error: an inner attribute is not permitted in this context
--> $DIR/attr.rs:5:3
|
-LL | #![lang(foo)] //~ ERROR an inner attribute is not permitted in this context
+LL | #![lang = "foo"] //~ ERROR an inner attribute is not permitted in this context
| ^
|
= note: inner attributes, like `#![no_std]`, annotate the item enclosing them, and are usually found at the beginning of source files. Outer attributes, like `#[test]`, annotate the item following them.
-error: aborting due to previous error
+error[E0522]: definition of an unknown language item: `foo`
+ --> $DIR/attr.rs:5:1
+ |
+LL | #![lang = "foo"] //~ ERROR an inner attribute is not permitted in this context
+ | ^^^^^^^^^^^^^^^^ definition of unknown language item `foo`
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0522`.
diff --git a/src/test/ui/parser/bad-lit-suffixes.stderr b/src/test/ui/parser/bad-lit-suffixes.stderr
index 4fd2ab8..608c5fd 100644
--- a/src/test/ui/parser/bad-lit-suffixes.stderr
+++ b/src/test/ui/parser/bad-lit-suffixes.stderr
@@ -2,49 +2,49 @@
--> $DIR/bad-lit-suffixes.rs:5:5
|
LL | "C"suffix //~ ERROR ABI spec with a suffix is invalid
- | ^^^^^^^^^
+ | ^^^^^^^^^ ABI spec with a suffix is invalid
error: ABI spec with a suffix is invalid
--> $DIR/bad-lit-suffixes.rs:9:5
|
LL | "C"suffix //~ ERROR ABI spec with a suffix is invalid
- | ^^^^^^^^^
+ | ^^^^^^^^^ ABI spec with a suffix is invalid
error: string literal with a suffix is invalid
--> $DIR/bad-lit-suffixes.rs:13:5
|
LL | ""suffix; //~ ERROR string literal with a suffix is invalid
- | ^^^^^^^^
+ | ^^^^^^^^ string literal with a suffix is invalid
error: byte string literal with a suffix is invalid
--> $DIR/bad-lit-suffixes.rs:14:5
|
LL | b""suffix; //~ ERROR byte string literal with a suffix is invalid
- | ^^^^^^^^^
+ | ^^^^^^^^^ byte string literal with a suffix is invalid
error: string literal with a suffix is invalid
--> $DIR/bad-lit-suffixes.rs:15:5
|
LL | r#""#suffix; //~ ERROR string literal with a suffix is invalid
- | ^^^^^^^^^^^
+ | ^^^^^^^^^^^ string literal with a suffix is invalid
error: byte string literal with a suffix is invalid
--> $DIR/bad-lit-suffixes.rs:16:5
|
LL | br#""#suffix; //~ ERROR byte string literal with a suffix is invalid
- | ^^^^^^^^^^^^
+ | ^^^^^^^^^^^^ byte string literal with a suffix is invalid
error: char literal with a suffix is invalid
--> $DIR/bad-lit-suffixes.rs:17:5
|
LL | 'a'suffix; //~ ERROR char literal with a suffix is invalid
- | ^^^^^^^^^
+ | ^^^^^^^^^ char literal with a suffix is invalid
error: byte literal with a suffix is invalid
--> $DIR/bad-lit-suffixes.rs:18:5
|
LL | b'a'suffix; //~ ERROR byte literal with a suffix is invalid
- | ^^^^^^^^^^
+ | ^^^^^^^^^^ byte literal with a suffix is invalid
error: invalid width `1024` for integer literal
--> $DIR/bad-lit-suffixes.rs:20:5
@@ -82,7 +82,7 @@
--> $DIR/bad-lit-suffixes.rs:25:5
|
LL | 1234suffix; //~ ERROR invalid suffix `suffix` for numeric literal
- | ^^^^^^^^^^
+ | ^^^^^^^^^^ invalid suffix `suffix`
|
= help: the suffix must be one of the integral types (`u32`, `isize`, etc)
@@ -90,7 +90,7 @@
--> $DIR/bad-lit-suffixes.rs:26:5
|
LL | 0b101suffix; //~ ERROR invalid suffix `suffix` for numeric literal
- | ^^^^^^^^^^^
+ | ^^^^^^^^^^^ invalid suffix `suffix`
|
= help: the suffix must be one of the integral types (`u32`, `isize`, etc)
@@ -98,7 +98,7 @@
--> $DIR/bad-lit-suffixes.rs:27:5
|
LL | 1.0suffix; //~ ERROR invalid suffix `suffix` for float literal
- | ^^^^^^^^^
+ | ^^^^^^^^^ invalid suffix `suffix`
|
= help: valid suffixes are `f32` and `f64`
@@ -106,7 +106,7 @@
--> $DIR/bad-lit-suffixes.rs:28:5
|
LL | 1.0e10suffix; //~ ERROR invalid suffix `suffix` for float literal
- | ^^^^^^^^^^^^
+ | ^^^^^^^^^^^^ invalid suffix `suffix`
|
= help: valid suffixes are `f32` and `f64`
diff --git a/src/test/ui/parser/bad-pointer-type.rs b/src/test/ui/parser/bad-pointer-type.rs
index 0e5a011..59e5e0c 100644
--- a/src/test/ui/parser/bad-pointer-type.rs
+++ b/src/test/ui/parser/bad-pointer-type.rs
@@ -1,5 +1,5 @@
fn foo(_: *()) {
- //~^ expected mut or const in raw pointer type (use `*mut T` or `*const T` as appropriate)
+ //~^ ERROR expected mut or const in raw pointer type
}
fn main() {}
diff --git a/src/test/ui/parser/bad-pointer-type.stderr b/src/test/ui/parser/bad-pointer-type.stderr
index 860f9f9..e18c220 100644
--- a/src/test/ui/parser/bad-pointer-type.stderr
+++ b/src/test/ui/parser/bad-pointer-type.stderr
@@ -1,8 +1,10 @@
-error: expected mut or const in raw pointer type (use `*mut T` or `*const T` as appropriate)
+error: expected mut or const in raw pointer type
--> $DIR/bad-pointer-type.rs:1:11
|
LL | fn foo(_: *()) {
- | ^
+ | ^ expected mut or const in raw pointer type
+ |
+ = help: use `*mut T` or `*const T` as appropriate
error: aborting due to previous error
diff --git a/src/test/ui/parser/impl-parsing.stderr b/src/test/ui/parser/impl-parsing.stderr
index 308f14c..353f5e2 100644
--- a/src/test/ui/parser/impl-parsing.stderr
+++ b/src/test/ui/parser/impl-parsing.stderr
@@ -2,13 +2,13 @@
--> $DIR/impl-parsing.rs:6:11
|
LL | impl Trait Type {} //~ ERROR missing `for` in a trait impl
- | ^
+ | ^ help: add `for` here
error: missing `for` in a trait impl
--> $DIR/impl-parsing.rs:7:11
|
LL | impl Trait .. {} //~ ERROR missing `for` in a trait impl
- | ^
+ | ^ help: add `for` here
error: expected a trait, found type
--> $DIR/impl-parsing.rs:8:6
diff --git a/src/test/ui/parser/issue-14303-fncall.rs b/src/test/ui/parser/issue-14303-fncall.rs
index f589434..17b9b76 100644
--- a/src/test/ui/parser/issue-14303-fncall.rs
+++ b/src/test/ui/parser/issue-14303-fncall.rs
@@ -1,6 +1,17 @@
-fn main() {
- (0..4)
- .map(|x| x * 2)
- .collect::<Vec<'a, usize, 'b>>()
- //~^ ERROR lifetime parameters must be declared prior to type parameters
+// can't run rustfix because it doesn't handle multipart suggestions correctly
+// compile-flags: -Zborrowck=mir
+// we need the above to avoid ast borrowck failure in recovered code
+
+struct S<'a, T> {
+ a: &'a T,
+ b: &'a T,
}
+
+fn foo<'a, 'b>(start: &'a usize, end: &'a usize) {
+ let _x = (*start..*end)
+ .map(|x| S { a: start, b: end })
+ .collect::<Vec<S<_, 'a>>>();
+ //~^ ERROR lifetime parameters must be declared prior to type parameters
+}
+
+fn main() {}
diff --git a/src/test/ui/parser/issue-14303-fncall.stderr b/src/test/ui/parser/issue-14303-fncall.stderr
index 1cc82f5..2a73649 100644
--- a/src/test/ui/parser/issue-14303-fncall.stderr
+++ b/src/test/ui/parser/issue-14303-fncall.stderr
@@ -1,8 +1,12 @@
error: lifetime parameters must be declared prior to type parameters
- --> $DIR/issue-14303-fncall.rs:4:31
+ --> $DIR/issue-14303-fncall.rs:13:29
|
-LL | .collect::<Vec<'a, usize, 'b>>()
- | ^^
+LL | .collect::<Vec<S<_, 'a>>>();
+ | ^^ must be declared prior to type parameters
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | .collect::<Vec<S<'a, _>>>();
+ | ^^^ --
error: aborting due to previous error
diff --git a/src/test/ui/parser/issue-14303-path.rs b/src/test/ui/parser/issue-14303-path.rs
index f61cb6b..a08c89f 100644
--- a/src/test/ui/parser/issue-14303-path.rs
+++ b/src/test/ui/parser/issue-14303-path.rs
@@ -1,4 +1,13 @@
-fn bar<'a, T>(x: mymodule::X<'a, T, 'b, 'c>) {}
+mod foo {
+ pub struct X<'a, 'b, 'c, T> {
+ a: &'a str,
+ b: &'b str,
+ c: &'c str,
+ t: T,
+ }
+}
+
+fn bar<'a, 'b, 'c, T>(x: foo::X<'a, T, 'b, 'c>) {}
//~^ ERROR lifetime parameters must be declared prior to type parameters
fn main() {}
diff --git a/src/test/ui/parser/issue-14303-path.stderr b/src/test/ui/parser/issue-14303-path.stderr
index 3de8a16..fb4fb32 100644
--- a/src/test/ui/parser/issue-14303-path.stderr
+++ b/src/test/ui/parser/issue-14303-path.stderr
@@ -1,8 +1,14 @@
error: lifetime parameters must be declared prior to type parameters
- --> $DIR/issue-14303-path.rs:1:37
+ --> $DIR/issue-14303-path.rs:10:40
|
-LL | fn bar<'a, T>(x: mymodule::X<'a, T, 'b, 'c>) {}
- | ^^
+LL | fn bar<'a, 'b, 'c, T>(x: foo::X<'a, T, 'b, 'c>) {}
+ | ^^ ^^ must be declared prior to type parameters
+ | |
+ | must be declared prior to type parameters
+help: move the lifetime parameters prior to the first type parameter
+ |
+LL | fn bar<'a, 'b, 'c, T>(x: foo::X<'a, 'b, 'c, T>) {}
+ | ^^^ ^^^ --
error: aborting due to previous error
diff --git a/src/test/ui/parser/issue-17383.rs b/src/test/ui/parser/issue-17383.rs
index 9c00289..04cd43d 100644
--- a/src/test/ui/parser/issue-17383.rs
+++ b/src/test/ui/parser/issue-17383.rs
@@ -1,8 +1,7 @@
enum X {
- A =
- b'a' //~ ERROR discriminator values can only be used with a field-less enum
- ,
- B(isize)
+ A = 3,
+ //~^ ERROR discriminator values can only be used with a field-less enum
+ B(usize)
}
fn main() {}
diff --git a/src/test/ui/parser/issue-17383.stderr b/src/test/ui/parser/issue-17383.stderr
index b225e11..57caa33 100644
--- a/src/test/ui/parser/issue-17383.stderr
+++ b/src/test/ui/parser/issue-17383.stderr
@@ -1,8 +1,8 @@
error: discriminator values can only be used with a field-less enum
- --> $DIR/issue-17383.rs:3:9
+ --> $DIR/issue-17383.rs:2:9
|
-LL | b'a' //~ ERROR discriminator values can only be used with a field-less enum
- | ^^^^
+LL | A = 3,
+ | ^ only valid in field-less enums
error: aborting due to previous error
diff --git a/src/test/ui/parser/issue-1802-1.rs b/src/test/ui/parser/issue-1802-1.rs
index 050e9a2..3c34b0d 100644
--- a/src/test/ui/parser/issue-1802-1.rs
+++ b/src/test/ui/parser/issue-1802-1.rs
@@ -1,4 +1,7 @@
-// error-pattern:no valid digits found for number
+fn log(a: i32, b: i32) {}
+
fn main() {
+ let error = 42;
log(error, 0b);
+ //~^ ERROR no valid digits found for number
}
diff --git a/src/test/ui/parser/issue-1802-1.stderr b/src/test/ui/parser/issue-1802-1.stderr
index 5cd6a4f..b7d003d 100644
--- a/src/test/ui/parser/issue-1802-1.stderr
+++ b/src/test/ui/parser/issue-1802-1.stderr
@@ -1,5 +1,5 @@
error: no valid digits found for number
- --> $DIR/issue-1802-1.rs:3:16
+ --> $DIR/issue-1802-1.rs:5:16
|
LL | log(error, 0b);
| ^^
diff --git a/src/test/ui/parser/issue-1802-2.rs b/src/test/ui/parser/issue-1802-2.rs
index 796db66..3c34b0d 100644
--- a/src/test/ui/parser/issue-1802-2.rs
+++ b/src/test/ui/parser/issue-1802-2.rs
@@ -1,4 +1,7 @@
-// error-pattern:no valid digits found for number
+fn log(a: i32, b: i32) {}
+
fn main() {
- log(error, 0b_usize);
+ let error = 42;
+ log(error, 0b);
+ //~^ ERROR no valid digits found for number
}
diff --git a/src/test/ui/parser/issue-1802-2.stderr b/src/test/ui/parser/issue-1802-2.stderr
index c6c0427..8491dd0 100644
--- a/src/test/ui/parser/issue-1802-2.stderr
+++ b/src/test/ui/parser/issue-1802-2.stderr
@@ -1,8 +1,8 @@
error: no valid digits found for number
- --> $DIR/issue-1802-2.rs:3:16
+ --> $DIR/issue-1802-2.rs:5:16
|
-LL | log(error, 0b_usize);
- | ^^^
+LL | log(error, 0b);
+ | ^^
error: aborting due to previous error
diff --git a/src/test/ui/parser/issue-27255.rs b/src/test/ui/parser/issue-27255.rs
index c0ff331..d619688 100644
--- a/src/test/ui/parser/issue-27255.rs
+++ b/src/test/ui/parser/issue-27255.rs
@@ -1,3 +1,10 @@
-impl A .. {} //~ ERROR
+trait A {}
+
+impl A .. {}
+//~^ ERROR missing `for` in a trait impl
+//~| ERROR `impl Trait for .. {}` is an obsolete syntax
+
+impl A usize {}
+//~^ ERROR missing `for` in a trait impl
fn main() {}
diff --git a/src/test/ui/parser/issue-27255.stderr b/src/test/ui/parser/issue-27255.stderr
index 6d09d82..391a235 100644
--- a/src/test/ui/parser/issue-27255.stderr
+++ b/src/test/ui/parser/issue-27255.stderr
@@ -1,8 +1,22 @@
error: missing `for` in a trait impl
- --> $DIR/issue-27255.rs:1:7
+ --> $DIR/issue-27255.rs:3:7
|
-LL | impl A .. {} //~ ERROR
- | ^
+LL | impl A .. {}
+ | ^ help: add `for` here
-error: aborting due to previous error
+error: missing `for` in a trait impl
+ --> $DIR/issue-27255.rs:7:7
+ |
+LL | impl A usize {}
+ | ^^^^^^ help: add `for` here
+
+error: `impl Trait for .. {}` is an obsolete syntax
+ --> $DIR/issue-27255.rs:3:1
+ |
+LL | impl A .. {}
+ | ^^^^^^^^^^^^
+ |
+ = help: use `auto trait Trait {}` instead
+
+error: aborting due to 3 previous errors
diff --git a/src/test/ui/parser/issue-32214.stderr b/src/test/ui/parser/issue-32214.stderr
index a01517d..a889513 100644
--- a/src/test/ui/parser/issue-32214.stderr
+++ b/src/test/ui/parser/issue-32214.stderr
@@ -2,7 +2,7 @@
--> $DIR/issue-32214.rs:5:34
|
LL | pub fn test<W, I: Trait<Item=(), W> >() {}
- | ^
+ | ^ must be declared prior to associated type bindings
error: aborting due to previous error
diff --git a/src/test/ui/parser/lex-bad-numeric-literals.stderr b/src/test/ui/parser/lex-bad-numeric-literals.stderr
index b1a9170..1fa23b8 100644
--- a/src/test/ui/parser/lex-bad-numeric-literals.stderr
+++ b/src/test/ui/parser/lex-bad-numeric-literals.stderr
@@ -110,7 +110,7 @@
--> $DIR/lex-bad-numeric-literals.rs:5:5
|
LL | 0o2f32; //~ ERROR: octal float literal is not supported
- | ^^^^^^
+ | ^^^^^^ not supported
error: int literal is too large
--> $DIR/lex-bad-numeric-literals.rs:16:5
@@ -128,13 +128,13 @@
--> $DIR/lex-bad-numeric-literals.rs:23:5
|
LL | 0o123f64; //~ ERROR: octal float literal is not supported
- | ^^^^^^^^
+ | ^^^^^^^^ not supported
error: binary float literal is not supported
--> $DIR/lex-bad-numeric-literals.rs:25:5
|
LL | 0b101f64; //~ ERROR: binary float literal is not supported
- | ^^^^^^^^
+ | ^^^^^^^^ not supported
error: aborting due to 23 previous errors
diff --git a/src/test/ui/parser/no-binary-float-literal.rs b/src/test/ui/parser/no-binary-float-literal.rs
index c078bf5..a42d2cb 100644
--- a/src/test/ui/parser/no-binary-float-literal.rs
+++ b/src/test/ui/parser/no-binary-float-literal.rs
@@ -1,7 +1,8 @@
-// error-pattern:binary float literal is not supported
-
fn main() {
0b101010f64;
+ //~^ ERROR binary float literal is not supported
0b101.010;
+ //~^ ERROR binary float literal is not supported
0b101p4f64;
+ //~^ ERROR invalid suffix `p4f64` for numeric literal
}
diff --git a/src/test/ui/parser/no-binary-float-literal.stderr b/src/test/ui/parser/no-binary-float-literal.stderr
index 7ff3e28..21f415b 100644
--- a/src/test/ui/parser/no-binary-float-literal.stderr
+++ b/src/test/ui/parser/no-binary-float-literal.stderr
@@ -1,8 +1,22 @@
error: binary float literal is not supported
- --> $DIR/no-binary-float-literal.rs:5:5
+ --> $DIR/no-binary-float-literal.rs:4:5
|
LL | 0b101.010;
| ^^^^^^^^^
-error: aborting due to previous error
+error: binary float literal is not supported
+ --> $DIR/no-binary-float-literal.rs:2:5
+ |
+LL | 0b101010f64;
+ | ^^^^^^^^^^^ not supported
+
+error: invalid suffix `p4f64` for numeric literal
+ --> $DIR/no-binary-float-literal.rs:6:5
+ |
+LL | 0b101p4f64;
+ | ^^^^^^^^^^ invalid suffix `p4f64`
+ |
+ = help: the suffix must be one of the integral types (`u32`, `isize`, etc)
+
+error: aborting due to 3 previous errors
diff --git a/src/test/ui/parser/no-hex-float-literal.rs b/src/test/ui/parser/no-hex-float-literal.rs
index d830c96..bf11dee 100644
--- a/src/test/ui/parser/no-hex-float-literal.rs
+++ b/src/test/ui/parser/no-hex-float-literal.rs
@@ -1,7 +1,9 @@
-// error-pattern:hexadecimal float literal is not supported
-
fn main() {
0xABC.Df;
+ //~^ ERROR `{integer}` is a primitive type and therefore doesn't have fields
0x567.89;
+ //~^ ERROR hexadecimal float literal is not supported
0xDEAD.BEEFp-2f;
+ //~^ ERROR invalid suffix `f` for float literal
+ //~| ERROR `{integer}` is a primitive type and therefore doesn't have fields
}
diff --git a/src/test/ui/parser/no-hex-float-literal.stderr b/src/test/ui/parser/no-hex-float-literal.stderr
index 1668cfe..258ab06 100644
--- a/src/test/ui/parser/no-hex-float-literal.stderr
+++ b/src/test/ui/parser/no-hex-float-literal.stderr
@@ -1,8 +1,29 @@
error: hexadecimal float literal is not supported
- --> $DIR/no-hex-float-literal.rs:5:5
+ --> $DIR/no-hex-float-literal.rs:4:5
|
LL | 0x567.89;
| ^^^^^^^^
-error: aborting due to previous error
+error: invalid suffix `f` for float literal
+ --> $DIR/no-hex-float-literal.rs:6:18
+ |
+LL | 0xDEAD.BEEFp-2f;
+ | ^^ invalid suffix `f`
+ |
+ = help: valid suffixes are `f32` and `f64`
+error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
+ --> $DIR/no-hex-float-literal.rs:2:11
+ |
+LL | 0xABC.Df;
+ | ^^
+
+error[E0610]: `{integer}` is a primitive type and therefore doesn't have fields
+ --> $DIR/no-hex-float-literal.rs:6:12
+ |
+LL | 0xDEAD.BEEFp-2f;
+ | ^^^^^
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0610`.
diff --git a/src/test/ui/parser/no-unsafe-self.stderr b/src/test/ui/parser/no-unsafe-self.stderr
index 364c22a..84779b0 100644
--- a/src/test/ui/parser/no-unsafe-self.stderr
+++ b/src/test/ui/parser/no-unsafe-self.stderr
@@ -2,37 +2,37 @@
--> $DIR/no-unsafe-self.rs:4:17
|
LL | fn foo(*mut self); //~ ERROR cannot pass `self` by raw pointer
- | ^^^^
+ | ^^^^ cannot pass `self` by raw pointer
error: cannot pass `self` by raw pointer
--> $DIR/no-unsafe-self.rs:5:19
|
LL | fn baz(*const self); //~ ERROR cannot pass `self` by raw pointer
- | ^^^^
+ | ^^^^ cannot pass `self` by raw pointer
error: cannot pass `self` by raw pointer
--> $DIR/no-unsafe-self.rs:6:13
|
LL | fn bar(*self); //~ ERROR cannot pass `self` by raw pointer
- | ^^^^
+ | ^^^^ cannot pass `self` by raw pointer
error: cannot pass `self` by raw pointer
--> $DIR/no-unsafe-self.rs:11:17
|
LL | fn foo(*mut self) { } //~ ERROR cannot pass `self` by raw pointer
- | ^^^^
+ | ^^^^ cannot pass `self` by raw pointer
error: cannot pass `self` by raw pointer
--> $DIR/no-unsafe-self.rs:12:19
|
LL | fn baz(*const self) { } //~ ERROR cannot pass `self` by raw pointer
- | ^^^^
+ | ^^^^ cannot pass `self` by raw pointer
error: cannot pass `self` by raw pointer
--> $DIR/no-unsafe-self.rs:13:13
|
LL | fn bar(*self) { } //~ ERROR cannot pass `self` by raw pointer
- | ^^^^
+ | ^^^^ cannot pass `self` by raw pointer
error: aborting due to 6 previous errors
diff --git a/src/test/ui/parser/pat-tuple-2.rs b/src/test/ui/parser/pat-tuple-2.rs
index 108278f..fd25499 100644
--- a/src/test/ui/parser/pat-tuple-2.rs
+++ b/src/test/ui/parser/pat-tuple-2.rs
@@ -1,5 +1,6 @@
fn main() {
- match 0 {
- (pat, ..,) => {} //~ ERROR trailing comma is not permitted after `..`
+ match (0, 1, 2) {
+ (pat, ..,) => {}
+ //~^ ERROR trailing comma is not permitted after `..`
}
}
diff --git a/src/test/ui/parser/pat-tuple-2.stderr b/src/test/ui/parser/pat-tuple-2.stderr
index ec12336..c3a5c39 100644
--- a/src/test/ui/parser/pat-tuple-2.stderr
+++ b/src/test/ui/parser/pat-tuple-2.stderr
@@ -1,8 +1,8 @@
error: trailing comma is not permitted after `..`
--> $DIR/pat-tuple-2.rs:3:17
|
-LL | (pat, ..,) => {} //~ ERROR trailing comma is not permitted after `..`
- | ^
+LL | (pat, ..,) => {}
+ | ^ trailing comma is not permitted after `..`
error: aborting due to previous error
diff --git a/src/test/ui/parser/pat-tuple-3.rs b/src/test/ui/parser/pat-tuple-3.rs
index 63dcde4..e1e975d 100644
--- a/src/test/ui/parser/pat-tuple-3.rs
+++ b/src/test/ui/parser/pat-tuple-3.rs
@@ -1,5 +1,6 @@
fn main() {
- match 0 {
- (.., pat, ..) => {} //~ ERROR `..` can only be used once per tuple or tuple struct pattern
+ match (0, 1, 2) {
+ (.., pat, ..) => {}
+ //~^ ERROR `..` can only be used once per tuple or tuple struct pattern
}
}
diff --git a/src/test/ui/parser/pat-tuple-3.stderr b/src/test/ui/parser/pat-tuple-3.stderr
index 90940eb..0ad7d27 100644
--- a/src/test/ui/parser/pat-tuple-3.stderr
+++ b/src/test/ui/parser/pat-tuple-3.stderr
@@ -1,8 +1,8 @@
error: `..` can only be used once per tuple or tuple struct pattern
--> $DIR/pat-tuple-3.rs:3:19
|
-LL | (.., pat, ..) => {} //~ ERROR `..` can only be used once per tuple or tuple struct pattern
- | ^^
+LL | (.., pat, ..) => {}
+ | ^^ can only be used once per pattern
error: aborting due to previous error
diff --git a/src/test/ui/parser/tag-variant-disr-non-nullary.rs b/src/test/ui/parser/tag-variant-disr-non-nullary.rs
index 35a36cb..83a3b72 100644
--- a/src/test/ui/parser/tag-variant-disr-non-nullary.rs
+++ b/src/test/ui/parser/tag-variant-disr-non-nullary.rs
@@ -1,12 +1,11 @@
-//error-pattern: discriminator values can only be used with a field-less enum
-
-enum color {
- red = 0xff0000,
- green = 0x00ff00,
- blue = 0x0000ff,
- black = 0x000000,
- white = 0xffffff,
- other (str),
+enum Color {
+ Red = 0xff0000,
+ //~^ ERROR discriminator values can only be used with a field-less enum
+ Green = 0x00ff00,
+ Blue = 0x0000ff,
+ Black = 0x000000,
+ White = 0xffffff,
+ Other(usize),
}
fn main() {}
diff --git a/src/test/ui/parser/tag-variant-disr-non-nullary.stderr b/src/test/ui/parser/tag-variant-disr-non-nullary.stderr
index aa45ea4..cc6312b 100644
--- a/src/test/ui/parser/tag-variant-disr-non-nullary.stderr
+++ b/src/test/ui/parser/tag-variant-disr-non-nullary.stderr
@@ -1,8 +1,17 @@
error: discriminator values can only be used with a field-less enum
- --> $DIR/tag-variant-disr-non-nullary.rs:8:13
+ --> $DIR/tag-variant-disr-non-nullary.rs:2:11
|
-LL | white = 0xffffff,
- | ^^^^^^^^
+LL | Red = 0xff0000,
+ | ^^^^^^^^ only valid in field-less enums
+LL | //~^ ERROR discriminator values can only be used with a field-less enum
+LL | Green = 0x00ff00,
+ | ^^^^^^^^ only valid in field-less enums
+LL | Blue = 0x0000ff,
+ | ^^^^^^^^ only valid in field-less enums
+LL | Black = 0x000000,
+ | ^^^^^^^^ only valid in field-less enums
+LL | White = 0xffffff,
+ | ^^^^^^^^ only valid in field-less enums
error: aborting due to previous error
diff --git a/src/test/ui/parser/where_with_bound.rs b/src/test/ui/parser/where_with_bound.rs
index 3a1edb9..3ca45f1 100644
--- a/src/test/ui/parser/where_with_bound.rs
+++ b/src/test/ui/parser/where_with_bound.rs
@@ -1,4 +1,5 @@
fn foo<T>() where <T>::Item: ToString, T: Iterator { }
//~^ ERROR generic parameters on `where` clauses are reserved for future use
+//~| ERROR cannot find type `Item` in the crate root
fn main() {}
diff --git a/src/test/ui/parser/where_with_bound.stderr b/src/test/ui/parser/where_with_bound.stderr
index e68f744..ff98b3f 100644
--- a/src/test/ui/parser/where_with_bound.stderr
+++ b/src/test/ui/parser/where_with_bound.stderr
@@ -2,7 +2,14 @@
--> $DIR/where_with_bound.rs:1:19
|
LL | fn foo<T>() where <T>::Item: ToString, T: Iterator { }
- | ^^^
+ | ^^^ currently unsupported
-error: aborting due to previous error
+error[E0412]: cannot find type `Item` in the crate root
+ --> $DIR/where_with_bound.rs:1:24
+ |
+LL | fn foo<T>() where <T>::Item: ToString, T: Iterator { }
+ | ^^^^ not found in the crate root
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/src/test/ui/pattern/const-pat-ice.rs b/src/test/ui/pattern/const-pat-ice.rs
index 6496a2a..865c54b 100644
--- a/src/test/ui/pattern/const-pat-ice.rs
+++ b/src/test/ui/pattern/const-pat-ice.rs
@@ -1,4 +1,5 @@
// failure-status: 101
+// rustc-env:RUST_BACKTRACE=0
// This is a repro test for an ICE in our pattern handling of constants.
diff --git a/src/test/ui/pattern/pattern-error-continue.stderr b/src/test/ui/pattern/pattern-error-continue.stderr
index c17d4b7..654814a 100644
--- a/src/test/ui/pattern/pattern-error-continue.stderr
+++ b/src/test/ui/pattern/pattern-error-continue.stderr
@@ -10,7 +10,7 @@
LL | A::D(_) => (), //~ ERROR expected tuple struct/variant, found unit variant `A::D`
| ^^^-
| |
- | did you mean `B`?
+ | help: a tuple variant with a similar name exists: `B`
error[E0023]: this pattern has 3 fields, but the corresponding tuple variant has 2 fields
--> $DIR/pattern-error-continue.rs:17:9
@@ -21,6 +21,8 @@
error[E0308]: mismatched types
--> $DIR/pattern-error-continue.rs:22:9
|
+LL | match 'c' {
+ | --- this match expression has type `char`
LL | S { .. } => (),
| ^^^^^^^^ expected char, found struct `S`
|
diff --git a/src/test/ui/pattern/pattern-tyvar.stderr b/src/test/ui/pattern/pattern-tyvar.stderr
index dae17fa..69cd552 100644
--- a/src/test/ui/pattern/pattern-tyvar.stderr
+++ b/src/test/ui/pattern/pattern-tyvar.stderr
@@ -1,6 +1,8 @@
error[E0308]: mismatched types
--> $DIR/pattern-tyvar.rs:5:18
|
+LL | match t {
+ | - this match expression has type `std::option::Option<std::vec::Vec<isize>>`
LL | Bar::T1(_, Some::<isize>(x)) => { //~ ERROR mismatched types
| ^^^^^^^^^^^^^^^^ expected struct `std::vec::Vec`, found isize
|
diff --git a/src/test/ui/platform-intrinsic-params.rs b/src/test/ui/platform-intrinsic-params.rs
deleted file mode 100644
index 5759a10e..0000000
--- a/src/test/ui/platform-intrinsic-params.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-#![feature(platform_intrinsics)]
-extern "platform-intrinsic" {
- fn x86_mm_movemask_ps() -> i32; //~ERROR found 0, expected 1
-}
-
-fn main() { }
diff --git a/src/test/ui/platform-intrinsic-params.stderr b/src/test/ui/platform-intrinsic-params.stderr
deleted file mode 100644
index 17671ce..0000000
--- a/src/test/ui/platform-intrinsic-params.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0444]: platform-specific intrinsic has invalid number of arguments: found 0, expected 1
- --> $DIR/platform-intrinsic-params.rs:3:5
- |
-LL | fn x86_mm_movemask_ps() -> i32; //~ERROR found 0, expected 1
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0444`.
diff --git a/src/test/ui/privacy/privacy-ns1.stderr b/src/test/ui/privacy/privacy-ns1.stderr
index e778b6e..6ba2dbe 100644
--- a/src/test/ui/privacy/privacy-ns1.stderr
+++ b/src/test/ui/privacy/privacy-ns1.stderr
@@ -2,7 +2,11 @@
--> $DIR/privacy-ns1.rs:20:5
|
LL | Bar(); //~ ERROR expected function, found trait `Bar`
- | ^^^ did you mean `Baz`?
+ | ^^^
+help: a unit struct with a similar name exists
+ |
+LL | Baz(); //~ ERROR expected function, found trait `Bar`
+ | ^^^
help: possible better candidates are found in other modules, you can import them into scope
|
LL | use foo1::Bar;
@@ -16,7 +20,11 @@
--> $DIR/privacy-ns1.rs:35:17
|
LL | let _x: Box<Bar>; //~ ERROR expected type, found function `Bar`
- | ^^^ did you mean `Baz`?
+ | ^^^
+help: a struct with a similar name exists
+ |
+LL | let _x: Box<Baz>; //~ ERROR expected type, found function `Bar`
+ | ^^^
help: possible better candidates are found in other modules, you can import them into scope
|
LL | use foo1::Bar;
@@ -30,7 +38,11 @@
--> $DIR/privacy-ns1.rs:50:5
|
LL | Bar(); //~ ERROR cannot find function `Bar` in this scope
- | ^^^ did you mean `Baz`?
+ | ^^^
+help: a unit struct with a similar name exists
+ |
+LL | Baz(); //~ ERROR cannot find function `Bar` in this scope
+ | ^^^
help: possible candidates are found in other modules, you can import them into scope
|
LL | use foo1::Bar;
@@ -44,7 +56,11 @@
--> $DIR/privacy-ns1.rs:51:17
|
LL | let _x: Box<Bar>; //~ ERROR cannot find type `Bar` in this scope
- | ^^^ did you mean `Baz`?
+ | ^^^
+help: a struct with a similar name exists
+ |
+LL | let _x: Box<Baz>; //~ ERROR cannot find type `Bar` in this scope
+ | ^^^
help: possible candidates are found in other modules, you can import them into scope
|
LL | use foo1::Bar;
diff --git a/src/test/ui/privacy/privacy-ns2.stderr b/src/test/ui/privacy/privacy-ns2.stderr
index 74f8667..0012072 100644
--- a/src/test/ui/privacy/privacy-ns2.stderr
+++ b/src/test/ui/privacy/privacy-ns2.stderr
@@ -16,7 +16,11 @@
--> $DIR/privacy-ns2.rs:26:5
|
LL | Bar(); //~ ERROR expected function, found trait `Bar`
- | ^^^ did you mean `Baz`?
+ | ^^^
+help: a unit struct with a similar name exists
+ |
+LL | Baz(); //~ ERROR expected function, found trait `Bar`
+ | ^^^
help: possible better candidates are found in other modules, you can import them into scope
|
LL | use foo1::Bar;
@@ -44,7 +48,11 @@
--> $DIR/privacy-ns2.rs:47:17
|
LL | let _x: Box<Bar>; //~ ERROR expected type, found function `Bar`
- | ^^^ did you mean `Baz`?
+ | ^^^
+help: a struct with a similar name exists
+ |
+LL | let _x: Box<Baz>; //~ ERROR expected type, found function `Bar`
+ | ^^^
help: possible better candidates are found in other modules, you can import them into scope
|
LL | use foo1::Bar;
diff --git a/src/test/ui/privacy/private-in-public-existential.rs b/src/test/ui/privacy/private-in-public-existential.rs
new file mode 100644
index 0000000..95658f4
--- /dev/null
+++ b/src/test/ui/privacy/private-in-public-existential.rs
@@ -0,0 +1,15 @@
+// compile-pass
+
+#![feature(existential_type)]
+#![deny(private_in_public)]
+
+pub existential type Pub: Default;
+
+#[derive(Default)]
+struct Priv;
+
+fn check() -> Pub {
+ Priv
+}
+
+fn main() {}
diff --git a/src/test/ui/proc-macro/attribute.rs b/src/test/ui/proc-macro/attribute.rs
index 736030f..a0b982d 100644
--- a/src/test/ui/proc-macro/attribute.rs
+++ b/src/test/ui/proc-macro/attribute.rs
@@ -6,13 +6,13 @@
extern crate proc_macro;
#[proc_macro_derive]
-//~^ ERROR: attribute must be of form: #[proc_macro_derive(TraitName)]
+//~^ ERROR: attribute must be of the form
pub fn foo1(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
input
}
#[proc_macro_derive = "foo"]
-//~^ ERROR: attribute must be of form: #[proc_macro_derive(TraitName)]
+//~^ ERROR: attribute must be of the form
pub fn foo2(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
input
}
diff --git a/src/test/ui/proc-macro/attribute.stderr b/src/test/ui/proc-macro/attribute.stderr
index a8fecd2..231eb1f 100644
--- a/src/test/ui/proc-macro/attribute.stderr
+++ b/src/test/ui/proc-macro/attribute.stderr
@@ -1,15 +1,3 @@
-error: attribute must be of form: #[proc_macro_derive(TraitName)]
- --> $DIR/attribute.rs:8:1
- |
-LL | #[proc_macro_derive]
- | ^^^^^^^^^^^^^^^^^^^^
-
-error: attribute must be of form: #[proc_macro_derive(TraitName)]
- --> $DIR/attribute.rs:14:1
- |
-LL | #[proc_macro_derive = "foo"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
error: must only be one word
--> $DIR/attribute.rs:21:5
|
@@ -46,5 +34,17 @@
LL | #[proc_macro_derive(l, attributes(m), n)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+error: attribute must be of the form `#[proc_macro_derive(TraitName, /*opt*/ attributes(name1, name2, ...))]`
+ --> $DIR/attribute.rs:8:1
+ |
+LL | #[proc_macro_derive]
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: attribute must be of the form `#[proc_macro_derive(TraitName, /*opt*/ attributes(name1, name2, ...))]`
+ --> $DIR/attribute.rs:14:1
+ |
+LL | #[proc_macro_derive = "foo"]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
error: aborting due to 8 previous errors
diff --git a/src/test/ui/proc-macro/invalid-attributes.rs b/src/test/ui/proc-macro/invalid-attributes.rs
index 22ebc77..c5ec492 100644
--- a/src/test/ui/proc-macro/invalid-attributes.rs
+++ b/src/test/ui/proc-macro/invalid-attributes.rs
@@ -7,20 +7,20 @@
use proc_macro::TokenStream;
-#[proc_macro = "test"] //~ ERROR: does not take any arguments
+#[proc_macro = "test"] //~ ERROR attribute must be of the form
pub fn a(a: TokenStream) -> TokenStream { a }
-#[proc_macro()] //~ ERROR: does not take any arguments
+#[proc_macro()] //~ ERROR attribute must be of the form
pub fn c(a: TokenStream) -> TokenStream { a }
-#[proc_macro(x)] //~ ERROR: does not take any arguments
+#[proc_macro(x)] //~ ERROR attribute must be of the form
pub fn d(a: TokenStream) -> TokenStream { a }
-#[proc_macro_attribute = "test"] //~ ERROR: does not take any arguments
+#[proc_macro_attribute = "test"] //~ ERROR attribute must be of the form
pub fn e(_: TokenStream, a: TokenStream) -> TokenStream { a }
-#[proc_macro_attribute()] //~ ERROR: does not take any arguments
+#[proc_macro_attribute()] //~ ERROR attribute must be of the form
pub fn g(_: TokenStream, a: TokenStream) -> TokenStream { a }
-#[proc_macro_attribute(x)] //~ ERROR: does not take any arguments
+#[proc_macro_attribute(x)] //~ ERROR attribute must be of the form
pub fn h(_: TokenStream, a: TokenStream) -> TokenStream { a }
diff --git a/src/test/ui/proc-macro/invalid-attributes.stderr b/src/test/ui/proc-macro/invalid-attributes.stderr
index 31c42bc..06a7ef2 100644
--- a/src/test/ui/proc-macro/invalid-attributes.stderr
+++ b/src/test/ui/proc-macro/invalid-attributes.stderr
@@ -1,37 +1,37 @@
-error: `#[proc_macro]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro]`
--> $DIR/invalid-attributes.rs:10:1
|
-LL | #[proc_macro = "test"] //~ ERROR: does not take any arguments
+LL | #[proc_macro = "test"] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^^^^
-error: `#[proc_macro]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro]`
--> $DIR/invalid-attributes.rs:13:1
|
-LL | #[proc_macro()] //~ ERROR: does not take any arguments
+LL | #[proc_macro()] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^
-error: `#[proc_macro]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro]`
--> $DIR/invalid-attributes.rs:16:1
|
-LL | #[proc_macro(x)] //~ ERROR: does not take any arguments
+LL | #[proc_macro(x)] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^
-error: `#[proc_macro_attribute]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro_attribute]`
--> $DIR/invalid-attributes.rs:19:1
|
-LL | #[proc_macro_attribute = "test"] //~ ERROR: does not take any arguments
+LL | #[proc_macro_attribute = "test"] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-error: `#[proc_macro_attribute]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro_attribute]`
--> $DIR/invalid-attributes.rs:22:1
|
-LL | #[proc_macro_attribute()] //~ ERROR: does not take any arguments
+LL | #[proc_macro_attribute()] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^^^^^^^
-error: `#[proc_macro_attribute]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro_attribute]`
--> $DIR/invalid-attributes.rs:25:1
|
-LL | #[proc_macro_attribute(x)] //~ ERROR: does not take any arguments
+LL | #[proc_macro_attribute(x)] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 6 previous errors
diff --git a/src/test/ui/proc-macro/lints_in_proc_macros.rs b/src/test/ui/proc-macro/lints_in_proc_macros.rs
index 8f76cc4..8d2957e 100644
--- a/src/test/ui/proc-macro/lints_in_proc_macros.rs
+++ b/src/test/ui/proc-macro/lints_in_proc_macros.rs
@@ -11,6 +11,7 @@
let foobar = 42;
bang_proc_macro2!();
//~^ ERROR cannot find value `foobar2` in this scope
- //~^^ did you mean `foobar`?
+ //~| HELP a local variable with a similar name exists
+ //~| SUGGESTION foobar
println!("{}", x);
}
diff --git a/src/test/ui/proc-macro/lints_in_proc_macros.stderr b/src/test/ui/proc-macro/lints_in_proc_macros.stderr
index c10a8a0..2d97cd7 100644
--- a/src/test/ui/proc-macro/lints_in_proc_macros.stderr
+++ b/src/test/ui/proc-macro/lints_in_proc_macros.stderr
@@ -2,7 +2,7 @@
--> $DIR/lints_in_proc_macros.rs:12:5
|
LL | bang_proc_macro2!();
- | ^^^^^^^^^^^^^^^^^^^^ did you mean `foobar`?
+ | ^^^^^^^^^^^^^^^^^^^^ help: a local variable with a similar name exists: `foobar`
error: aborting due to previous error
diff --git a/src/test/ui/proc-macro/parent-source-spans.stderr b/src/test/ui/proc-macro/parent-source-spans.stderr
index a8ee325..4231225 100644
--- a/src/test/ui/proc-macro/parent-source-spans.stderr
+++ b/src/test/ui/proc-macro/parent-source-spans.stderr
@@ -128,7 +128,7 @@
--> $DIR/parent-source-spans.rs:30:5
|
LL | parent_source_spans!($($tokens)*);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ did you mean `Ok`?
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: a tuple variant with a similar name exists: `Ok`
...
LL | one!("hello", "world");
| ----------------------- in this macro invocation
@@ -137,7 +137,7 @@
--> $DIR/parent-source-spans.rs:30:5
|
LL | parent_source_spans!($($tokens)*);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ did you mean `Ok`?
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: a tuple variant with a similar name exists: `Ok`
...
LL | two!("yay", "rust");
| -------------------- in this macro invocation
@@ -146,7 +146,7 @@
--> $DIR/parent-source-spans.rs:30:5
|
LL | parent_source_spans!($($tokens)*);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ did you mean `Ok`?
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: a tuple variant with a similar name exists: `Ok`
...
LL | three!("hip", "hop");
| --------------------- in this macro invocation
diff --git a/src/test/ui/regions/region-invariant-static-error-reporting.stderr b/src/test/ui/regions/region-invariant-static-error-reporting.stderr
index 40a3e7e..60e70dd 100644
--- a/src/test/ui/regions/region-invariant-static-error-reporting.stderr
+++ b/src/test/ui/regions/region-invariant-static-error-reporting.stderr
@@ -1,13 +1,15 @@
error[E0308]: if and else have incompatible types
- --> $DIR/region-invariant-static-error-reporting.rs:14:15
+ --> $DIR/region-invariant-static-error-reporting.rs:17:9
|
LL | let bad = if x.is_some() {
- | _______________^
+ | _______________-
LL | | x.unwrap()
+ | | ---------- expected because of this
LL | | } else {
LL | | mk_static()
+ | | ^^^^^^^^^^^ lifetime mismatch
LL | | };
- | |_____^ lifetime mismatch
+ | |_____- if and else have incompatible types
|
= note: expected type `Invariant<'a>`
found type `Invariant<'static>`
diff --git a/src/test/ui/regions/regions-fn-subtyping-return-static.rs b/src/test/ui/regions/regions-fn-subtyping-return-static.rs
index 4d6d342..9010770 100644
--- a/src/test/ui/regions/regions-fn-subtyping-return-static.rs
+++ b/src/test/ui/regions/regions-fn-subtyping-return-static.rs
@@ -10,6 +10,7 @@
#![allow(dead_code)]
#![allow(unused_variables)]
+#![allow(non_snake_case)]
struct S;
diff --git a/src/test/ui/regions/regions-fn-subtyping-return-static.stderr b/src/test/ui/regions/regions-fn-subtyping-return-static.stderr
deleted file mode 100644
index 61eaf9f..0000000
--- a/src/test/ui/regions/regions-fn-subtyping-return-static.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-warning: function `want_F` should have a snake case name such as `want_f`
- --> $DIR/regions-fn-subtyping-return-static.rs:18:1
- |
-LL | fn want_F(f: F) { }
- | ^^^^^^^^^^^^^^^^^^^
- |
- = note: #[warn(non_snake_case)] on by default
-
-warning: function `want_G` should have a snake case name such as `want_g`
- --> $DIR/regions-fn-subtyping-return-static.rs:22:1
- |
-LL | fn want_G(f: G) { }
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: function `supply_F` should have a snake case name such as `supply_f`
- --> $DIR/regions-fn-subtyping-return-static.rs:39:1
- |
-LL | / fn supply_F() {
-LL | | want_F(foo);
-LL | |
-LL | | want_F(bar);
-LL | |
-LL | | want_F(baz);
-LL | | }
- | |_^
-
diff --git a/src/test/ui/regions/regions-static-bound.nll.stderr b/src/test/ui/regions/regions-static-bound.nll.stderr
index f667afd..d6cec03 100644
--- a/src/test/ui/regions/regions-static-bound.nll.stderr
+++ b/src/test/ui/regions/regions-static-bound.nll.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/regions-static-bound.rs:9:5
|
LL | fn static_id_wrong_way<'a>(t: &'a ()) -> &'static () where 'static: 'a {
diff --git a/src/test/ui/regions/regions-static-bound.rs b/src/test/ui/regions/regions-static-bound.rs
index 3ee5187..c1a15e5 100644
--- a/src/test/ui/regions/regions-static-bound.rs
+++ b/src/test/ui/regions/regions-static-bound.rs
@@ -7,7 +7,7 @@
where 'a: 'b, 'b: 'static { t }
fn static_id_wrong_way<'a>(t: &'a ()) -> &'static () where 'static: 'a {
t //[ll]~ ERROR E0312
- //[nll]~^ ERROR unsatisfied lifetime constraints
+ //[nll]~^ ERROR lifetime may not live long enough
}
fn error(u: &(), v: &()) {
diff --git a/src/test/ui/repr.rs b/src/test/ui/repr.rs
index a35252c41..9d84474 100644
--- a/src/test/ui/repr.rs
+++ b/src/test/ui/repr.rs
@@ -1,15 +1,13 @@
-// compile-pass
-
#[repr]
-//^ WARN `repr` attribute must have a hint
+//~^ ERROR attribute must be of the form
struct _A {}
#[repr = "B"]
-//^ WARN `repr` attribute isn't configurable with a literal
+//~^ ERROR attribute must be of the form
struct _B {}
#[repr = "C"]
-//^ WARN `repr` attribute isn't configurable with a literal
+//~^ ERROR attribute must be of the form
struct _C {}
#[repr(C)]
diff --git a/src/test/ui/repr.stderr b/src/test/ui/repr.stderr
index 503d47c..7ebfe08 100644
--- a/src/test/ui/repr.stderr
+++ b/src/test/ui/repr.stderr
@@ -1,25 +1,20 @@
-warning: `repr` attribute must have a hint
- --> $DIR/repr.rs:3:1
+error: attribute must be of the form `#[repr(C, packed, ...)]`
+ --> $DIR/repr.rs:1:1
|
LL | #[repr]
- | ^^^^^^^ needs a hint
- |
- = note: #[warn(bad_repr)] on by default
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
+ | ^^^^^^^
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/repr.rs:7:1
+error: attribute must be of the form `#[repr(C, packed, ...)]`
+ --> $DIR/repr.rs:5:1
|
LL | #[repr = "B"]
- | ^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
+ | ^^^^^^^^^^^^^
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/repr.rs:11:1
+error: attribute must be of the form `#[repr(C, packed, ...)]`
+ --> $DIR/repr.rs:9:1
|
LL | #[repr = "C"]
- | ^^^^^^^^^^^^^ help: give `repr` a hint: `#[repr(C)]`
+ | ^^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
diff --git a/src/test/ui/resolve/issue-23305.stderr b/src/test/ui/resolve/issue-23305.stderr
index 17b2f9f..1da56ad 100644
--- a/src/test/ui/resolve/issue-23305.stderr
+++ b/src/test/ui/resolve/issue-23305.stderr
@@ -5,6 +5,11 @@
| ^^^^
|
= note: ...which again requires processing `<impl at $DIR/issue-23305.rs:5:1: 5:20>`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/issue-23305.rs:1:1
+ |
+LL | pub trait ToNbt<T> {
+ | ^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/src/test/ui/resolve/issue-39226.stderr b/src/test/ui/resolve/issue-39226.stderr
index 3a93928..c97fb4d 100644
--- a/src/test/ui/resolve/issue-39226.stderr
+++ b/src/test/ui/resolve/issue-39226.stderr
@@ -4,8 +4,8 @@
LL | handle: Handle
| ^^^^^^
| |
- | did you mean `handle`?
| did you mean `Handle { /* fields */ }`?
+ | help: a local variable with a similar name exists: `handle`
error: aborting due to previous error
diff --git a/src/test/ui/resolve/issue-5035.stderr b/src/test/ui/resolve/issue-5035.stderr
index 39216c6..57ad5f2 100644
--- a/src/test/ui/resolve/issue-5035.stderr
+++ b/src/test/ui/resolve/issue-5035.stderr
@@ -10,8 +10,8 @@
LL | impl K for isize {} //~ ERROR expected trait, found type alias `K`
| ^
| |
- | did you mean `I`?
| type aliases cannot be used as traits
+ | help: a trait with a similar name exists: `I`
|
= note: did you mean to use a trait alias?
diff --git a/src/test/ui/resolve/levenshtein.stderr b/src/test/ui/resolve/levenshtein.stderr
index df075d1..cddfe4e 100644
--- a/src/test/ui/resolve/levenshtein.stderr
+++ b/src/test/ui/resolve/levenshtein.stderr
@@ -2,19 +2,19 @@
--> $DIR/levenshtein.rs:5:11
|
LL | fn foo(c: esize) {} // Misspelled primitive type name.
- | ^^^^^ did you mean `isize`?
+ | ^^^^^ help: a primitive type with a similar name exists: `isize`
error[E0412]: cannot find type `Baz` in this scope
--> $DIR/levenshtein.rs:10:10
|
LL | type A = Baz; // Misspelled type name.
- | ^^^ did you mean `Bar`?
+ | ^^^ help: an enum with a similar name exists: `Bar`
error[E0412]: cannot find type `Opiton` in this scope
--> $DIR/levenshtein.rs:12:10
|
LL | type B = Opiton<u8>; // Misspelled type name from the prelude.
- | ^^^^^^ did you mean `Option`?
+ | ^^^^^^ help: an enum with a similar name exists: `Option`
error[E0412]: cannot find type `Baz` in this scope
--> $DIR/levenshtein.rs:16:14
@@ -26,25 +26,25 @@
--> $DIR/levenshtein.rs:24:20
|
LL | let v = [0u32; MAXITEM]; // Misspelled constant name.
- | ^^^^^^^ did you mean `MAX_ITEM`?
+ | ^^^^^^^ help: a constant with a similar name exists: `MAX_ITEM`
error[E0425]: cannot find function `foobar` in this scope
--> $DIR/levenshtein.rs:26:5
|
LL | foobar(); // Misspelled function name.
- | ^^^^^^ did you mean `foo_bar`?
+ | ^^^^^^ help: a function with a similar name exists: `foo_bar`
error[E0412]: cannot find type `first` in module `m`
--> $DIR/levenshtein.rs:28:15
|
LL | let b: m::first = m::second; // Misspelled item in module.
- | ^^^^^ did you mean `First`?
+ | ^^^^^ help: a struct with a similar name exists: `First`
error[E0425]: cannot find value `second` in module `m`
--> $DIR/levenshtein.rs:28:26
|
LL | let b: m::first = m::second; // Misspelled item in module.
- | ^^^^^^ did you mean `Second`?
+ | ^^^^^^ help: a unit struct with a similar name exists: `Second`
error: aborting due to 8 previous errors
diff --git a/src/test/ui/resolve/privacy-enum-ctor.stderr b/src/test/ui/resolve/privacy-enum-ctor.stderr
index 71b1ec4..01f0941 100644
--- a/src/test/ui/resolve/privacy-enum-ctor.stderr
+++ b/src/test/ui/resolve/privacy-enum-ctor.stderr
@@ -13,7 +13,7 @@
--> $DIR/privacy-enum-ctor.rs:25:9
|
LL | Z;
- | ^ did you mean `f`?
+ | ^ help: a function with a similar name exists: `f`
|
= note: did you mean to use one of the following variants?
- `m::Z::Fn`
@@ -30,14 +30,16 @@
--> $DIR/privacy-enum-ctor.rs:41:16
|
LL | let _: E = m::E;
- | ^^^-
- | |
- | did you mean `f`?
+ | ^^^^
|
= note: did you mean to use one of the following variants?
- `E::Fn`
- `E::Struct`
- `E::Unit`
+help: a function with a similar name exists
+ |
+LL | let _: E = m::f;
+ | ^
help: possible better candidates are found in other modules, you can import them into scope
|
LL | use std::f32::consts::E;
@@ -78,7 +80,11 @@
--> $DIR/privacy-enum-ctor.rs:57:12
|
LL | let _: Z = m::n::Z;
- | ^ did you mean `E`?
+ | ^
+help: an enum with a similar name exists
+ |
+LL | let _: E = m::n::Z;
+ | ^
help: possible candidate is found in another module, you can import it into scope
|
LL | use m::n::Z;
@@ -99,7 +105,11 @@
--> $DIR/privacy-enum-ctor.rs:61:12
|
LL | let _: Z = m::n::Z::Fn;
- | ^ did you mean `E`?
+ | ^
+help: an enum with a similar name exists
+ |
+LL | let _: E = m::n::Z::Fn;
+ | ^
help: possible candidate is found in another module, you can import it into scope
|
LL | use m::n::Z;
@@ -109,7 +119,11 @@
--> $DIR/privacy-enum-ctor.rs:64:12
|
LL | let _: Z = m::n::Z::Struct;
- | ^ did you mean `E`?
+ | ^
+help: an enum with a similar name exists
+ |
+LL | let _: E = m::n::Z::Struct;
+ | ^
help: possible candidate is found in another module, you can import it into scope
|
LL | use m::n::Z;
@@ -125,7 +139,11 @@
--> $DIR/privacy-enum-ctor.rs:68:12
|
LL | let _: Z = m::n::Z::Unit {};
- | ^ did you mean `E`?
+ | ^
+help: an enum with a similar name exists
+ |
+LL | let _: E = m::n::Z::Unit {};
+ | ^
help: possible candidate is found in another module, you can import it into scope
|
LL | use m::n::Z;
diff --git a/src/test/ui/resolve/privacy-struct-ctor.stderr b/src/test/ui/resolve/privacy-struct-ctor.stderr
index edb7a67..44ecf6b 100644
--- a/src/test/ui/resolve/privacy-struct-ctor.stderr
+++ b/src/test/ui/resolve/privacy-struct-ctor.stderr
@@ -2,10 +2,11 @@
--> $DIR/privacy-struct-ctor.rs:20:9
|
LL | Z;
+ | ^ constructor is not visible here due to private fields
+help: a tuple struct with a similar name exists
+ |
+LL | S;
| ^
- | |
- | did you mean `S`?
- | constructor is not visible here due to private fields
help: possible better candidate is found in another module, you can import it into scope
|
LL | use m::n::Z;
diff --git a/src/test/ui/resolve/resolve-hint-macro.stderr b/src/test/ui/resolve/resolve-hint-macro.stderr
index 4f6d0f6..ebe3c36 100644
--- a/src/test/ui/resolve/resolve-hint-macro.stderr
+++ b/src/test/ui/resolve/resolve-hint-macro.stderr
@@ -2,7 +2,7 @@
--> $DIR/resolve-hint-macro.rs:2:5
|
LL | assert(true);
- | ^^^^^^ did you mean `assert!(...)`?
+ | ^^^^^^ help: use `!` to invoke the macro: `assert!`
error: aborting due to previous error
diff --git a/src/test/ui/resolve/resolve-self-in-impl.stderr b/src/test/ui/resolve/resolve-self-in-impl.stderr
index 47704f1..1940c0c 100644
--- a/src/test/ui/resolve/resolve-self-in-impl.stderr
+++ b/src/test/ui/resolve/resolve-self-in-impl.stderr
@@ -5,6 +5,17 @@
| ^^^^
|
= note: ...which again requires processing `<impl at $DIR/resolve-self-in-impl.rs:14:1: 14:20>`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/resolve-self-in-impl.rs:1:1
+ |
+LL | / #![feature(associated_type_defaults)]
+LL | |
+LL | | struct S<T = u8>(T);
+LL | | trait Tr<T = u8> {
+... |
+LL | |
+LL | | fn main() {}
+ | |____________^
error[E0391]: cycle detected when processing `<impl at $DIR/resolve-self-in-impl.rs:15:1: 15:23>`
--> $DIR/resolve-self-in-impl.rs:15:15
@@ -13,6 +24,17 @@
| ^^^^
|
= note: ...which again requires processing `<impl at $DIR/resolve-self-in-impl.rs:15:1: 15:23>`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/resolve-self-in-impl.rs:1:1
+ |
+LL | / #![feature(associated_type_defaults)]
+LL | |
+LL | | struct S<T = u8>(T);
+LL | | trait Tr<T = u8> {
+... |
+LL | |
+LL | | fn main() {}
+ | |____________^
error[E0391]: cycle detected when processing `<impl at $DIR/resolve-self-in-impl.rs:16:1: 16:13>`
--> $DIR/resolve-self-in-impl.rs:16:6
@@ -21,6 +43,17 @@
| ^^^^
|
= note: ...which again requires processing `<impl at $DIR/resolve-self-in-impl.rs:16:1: 16:13>`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/resolve-self-in-impl.rs:1:1
+ |
+LL | / #![feature(associated_type_defaults)]
+LL | |
+LL | | struct S<T = u8>(T);
+LL | | trait Tr<T = u8> {
+... |
+LL | |
+LL | | fn main() {}
+ | |____________^
error[E0391]: cycle detected when processing `<impl at $DIR/resolve-self-in-impl.rs:17:1: 17:16>`
--> $DIR/resolve-self-in-impl.rs:17:8
@@ -29,6 +62,17 @@
| ^^^^
|
= note: ...which again requires processing `<impl at $DIR/resolve-self-in-impl.rs:17:1: 17:16>`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/resolve-self-in-impl.rs:1:1
+ |
+LL | / #![feature(associated_type_defaults)]
+LL | |
+LL | | struct S<T = u8>(T);
+LL | | trait Tr<T = u8> {
+... |
+LL | |
+LL | | fn main() {}
+ | |____________^
error[E0391]: cycle detected when processing `<impl at $DIR/resolve-self-in-impl.rs:18:1: 18:26>`
--> $DIR/resolve-self-in-impl.rs:18:1
@@ -37,6 +81,17 @@
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: ...which again requires processing `<impl at $DIR/resolve-self-in-impl.rs:18:1: 18:26>`, completing the cycle
+note: cycle used when collecting item types in top-level module
+ --> $DIR/resolve-self-in-impl.rs:1:1
+ |
+LL | / #![feature(associated_type_defaults)]
+LL | |
+LL | | struct S<T = u8>(T);
+LL | | trait Tr<T = u8> {
+... |
+LL | |
+LL | | fn main() {}
+ | |____________^
error: aborting due to 5 previous errors
diff --git a/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr b/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr
index 157b4cc..b7b158c 100644
--- a/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr
+++ b/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr
@@ -4,15 +4,15 @@
LL | a.I
| ^--
| |
- | did you mean `a::I`?
+ | help: use the path separator to refer to an item: `a::I`
error[E0423]: expected value, found module `a`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:22:5
|
LL | a.g()
- | ^----
+ | ^--
| |
- | did you mean `a::g(...)`?
+ | help: use the path separator to refer to an item: `a::g`
error[E0423]: expected value, found module `a`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:27:5
@@ -20,16 +20,21 @@
LL | a.b.J
| ^--
| |
- | did you mean `a::b`?
+ | help: use the path separator to refer to an item: `a::b`
error[E0423]: expected value, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:32:5
|
LL | a::b.J
- | ^^^---
- | | |
- | | did you mean `I`?
- | did you mean `a::b::J`?
+ | ^^^^
+help: a constant with a similar name exists
+ |
+LL | a::I.J
+ | ^
+help: use the path separator to refer to an item
+ |
+LL | a::b::J
+ |
error[E0423]: expected value, found module `a`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:37:5
@@ -37,7 +42,7 @@
LL | a.b.f();
| ^--
| |
- | did you mean `a::b`?
+ | help: use the path separator to refer to an item: `a::b`
error[E0423]: expected value, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:40:12
@@ -45,16 +50,21 @@
LL | v.push(a::b);
| ^^^-
| |
- | did you mean `I`?
+ | help: a constant with a similar name exists: `I`
error[E0423]: expected value, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:45:5
|
LL | a::b.f()
- | ^^^-----
- | | |
- | | did you mean `I`?
- | did you mean `a::b::f(...)`?
+ | ^^^^
+help: a constant with a similar name exists
+ |
+LL | a::I.f()
+ | ^
+help: use the path separator to refer to an item
+ |
+LL | a::b::f()
+ | ^^^^^^^
error[E0423]: expected value, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:50:5
@@ -62,7 +72,7 @@
LL | a::b
| ^^^-
| |
- | did you mean `I`?
+ | help: a constant with a similar name exists: `I`
error[E0423]: expected function, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:55:5
@@ -70,7 +80,7 @@
LL | a::b()
| ^^^-
| |
- | did you mean `I`?
+ | help: a constant with a similar name exists: `I`
error: aborting due to 9 previous errors
diff --git a/src/test/ui/resolve/tuple-struct-alias.stderr b/src/test/ui/resolve/tuple-struct-alias.stderr
index 6338c34..f299aa4 100644
--- a/src/test/ui/resolve/tuple-struct-alias.stderr
+++ b/src/test/ui/resolve/tuple-struct-alias.stderr
@@ -2,7 +2,7 @@
--> $DIR/tuple-struct-alias.rs:5:13
|
LL | let s = A(0, 1); //~ ERROR expected function
- | ^ did you mean `S`?
+ | ^ help: a tuple struct with a similar name exists: `S`
|
= note: can't use a type alias as a constructor
@@ -10,7 +10,7 @@
--> $DIR/tuple-struct-alias.rs:7:9
|
LL | A(..) => {} //~ ERROR expected tuple struct/variant
- | ^ did you mean `S`?
+ | ^ help: a tuple struct with a similar name exists: `S`
|
= note: can't use a type alias as a constructor
diff --git a/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.rs b/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.rs
index 27db489..3375210 100644
--- a/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.rs
+++ b/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.rs
@@ -1,7 +1,7 @@
#![feature(non_exhaustive)]
#[non_exhaustive(anything)]
-//~^ ERROR attribute should be empty [E0702]
+//~^ ERROR attribute must be of the form
struct Foo;
#[non_exhaustive]
diff --git a/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr b/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr
index c069999..1d055fe 100644
--- a/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr
+++ b/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr
@@ -1,11 +1,8 @@
-error[E0702]: attribute should be empty
+error: attribute must be of the form `#[non_exhaustive]`
--> $DIR/invalid-attribute.rs:3:1
|
LL | #[non_exhaustive(anything)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
-LL | //~^ ERROR attribute should be empty [E0702]
-LL | struct Foo;
- | ----------- not empty
error[E0701]: attribute can only be applied to a struct or enum
--> $DIR/invalid-attribute.rs:7:1
@@ -30,5 +27,4 @@
error: aborting due to 3 previous errors
-Some errors occurred: E0701, E0702.
-For more information about an error, try `rustc --explain E0701`.
+For more information about this error, try `rustc --explain E0701`.
diff --git a/src/test/ui/rfc-2126-extern-in-paths/auxiliary/xcrate.rs b/src/test/ui/rfc-2126-extern-in-paths/auxiliary/xcrate.rs
deleted file mode 100644
index c4d4447..0000000
--- a/src/test/ui/rfc-2126-extern-in-paths/auxiliary/xcrate.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-#[derive(Debug)]
-pub struct S;
-
-#[derive(Debug)]
-pub struct Z;
diff --git a/src/test/ui/rfc-2126-extern-in-paths/non-existent-1.rs b/src/test/ui/rfc-2126-extern-in-paths/non-existent-1.rs
deleted file mode 100644
index 5e5e6c6..0000000
--- a/src/test/ui/rfc-2126-extern-in-paths/non-existent-1.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-#![feature(extern_in_paths)]
-
-use extern::xcrate::S; //~ ERROR unresolved import `extern::xcrate`
-
-fn main() {}
diff --git a/src/test/ui/rfc-2126-extern-in-paths/non-existent-1.stderr b/src/test/ui/rfc-2126-extern-in-paths/non-existent-1.stderr
deleted file mode 100644
index 5b7528c..0000000
--- a/src/test/ui/rfc-2126-extern-in-paths/non-existent-1.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0432]: unresolved import `extern::xcrate`
- --> $DIR/non-existent-1.rs:3:13
- |
-LL | use extern::xcrate::S; //~ ERROR unresolved import `extern::xcrate`
- | ^^^^^^ could not find `xcrate` in `extern`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0432`.
diff --git a/src/test/ui/rfc-2126-extern-in-paths/non-existent-2.rs b/src/test/ui/rfc-2126-extern-in-paths/non-existent-2.rs
deleted file mode 100644
index 0f26eef..0000000
--- a/src/test/ui/rfc-2126-extern-in-paths/non-existent-2.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-#![feature(extern_in_paths)]
-
-fn main() {
- let s = extern::xcrate::S;
- //~^ ERROR failed to resolve: could not find `xcrate` in `extern`
-}
diff --git a/src/test/ui/rfc-2126-extern-in-paths/non-existent-2.stderr b/src/test/ui/rfc-2126-extern-in-paths/non-existent-2.stderr
deleted file mode 100644
index 21c2a0c..0000000
--- a/src/test/ui/rfc-2126-extern-in-paths/non-existent-2.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0433]: failed to resolve: could not find `xcrate` in `extern`
- --> $DIR/non-existent-2.rs:4:21
- |
-LL | let s = extern::xcrate::S;
- | ^^^^^^ could not find `xcrate` in `extern`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0433`.
diff --git a/src/test/ui/rfc-2126-extern-in-paths/non-existent-3.rs b/src/test/ui/rfc-2126-extern-in-paths/non-existent-3.rs
deleted file mode 100644
index 1875fb9..0000000
--- a/src/test/ui/rfc-2126-extern-in-paths/non-existent-3.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-#![feature(extern_in_paths)]
-
-use extern::ycrate; //~ ERROR unresolved import `extern::ycrate`
-
-fn main() {}
diff --git a/src/test/ui/rfc-2126-extern-in-paths/non-existent-3.stderr b/src/test/ui/rfc-2126-extern-in-paths/non-existent-3.stderr
deleted file mode 100644
index e2e7df6..0000000
--- a/src/test/ui/rfc-2126-extern-in-paths/non-existent-3.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0432]: unresolved import `extern::ycrate`
- --> $DIR/non-existent-3.rs:3:5
- |
-LL | use extern::ycrate; //~ ERROR unresolved import `extern::ycrate`
- | ^^^^^^^^^^^^^^ no `ycrate` external crate
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0432`.
diff --git a/src/test/ui/rfc-2126-extern-in-paths/single-segment.rs b/src/test/ui/rfc-2126-extern-in-paths/single-segment.rs
deleted file mode 100644
index 1d5af1e..0000000
--- a/src/test/ui/rfc-2126-extern-in-paths/single-segment.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// aux-build:xcrate.rs
-// compile-flags:--extern xcrate
-
-#![feature(extern_in_paths)]
-
-use extern; //~ ERROR unresolved import `extern`
- //~^ NOTE no `extern` in the root
-use extern::*; //~ ERROR cannot glob-import all possible crates
-
-fn main() {
- let s = extern::xcrate; //~ ERROR expected value, found module `extern::xcrate`
- //~^ NOTE not a value
-}
diff --git a/src/test/ui/rfc-2126-extern-in-paths/single-segment.stderr b/src/test/ui/rfc-2126-extern-in-paths/single-segment.stderr
deleted file mode 100644
index 2d8ecd4..0000000
--- a/src/test/ui/rfc-2126-extern-in-paths/single-segment.stderr
+++ /dev/null
@@ -1,22 +0,0 @@
-error: cannot glob-import all possible crates
- --> $DIR/single-segment.rs:8:5
- |
-LL | use extern::*; //~ ERROR cannot glob-import all possible crates
- | ^^^^^^^^^
-
-error[E0432]: unresolved import `extern`
- --> $DIR/single-segment.rs:6:5
- |
-LL | use extern; //~ ERROR unresolved import `extern`
- | ^^^^^^ no `extern` in the root
-
-error[E0423]: expected value, found module `extern::xcrate`
- --> $DIR/single-segment.rs:11:13
- |
-LL | let s = extern::xcrate; //~ ERROR expected value, found module `extern::xcrate`
- | ^^^^^^^^^^^^^^ not a value
-
-error: aborting due to 3 previous errors
-
-Some errors occurred: E0423, E0432.
-For more information about an error, try `rustc --explain E0423`.
diff --git a/src/test/ui/rfc-2306/convert-id-const-with-gate.rs b/src/test/ui/rfc-2306/convert-id-const-with-gate.rs
index 0128fc2..a82feb9 100644
--- a/src/test/ui/rfc-2306/convert-id-const-with-gate.rs
+++ b/src/test/ui/rfc-2306/convert-id-const-with-gate.rs
@@ -2,8 +2,6 @@
// compile-pass
-#![feature(convert_id)]
-
fn main() {
const _FOO: u8 = ::std::convert::identity(42u8);
}
diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs b/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs
deleted file mode 100644
index 7405678..0000000
--- a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs
+++ /dev/null
@@ -1,59 +0,0 @@
-#![feature(repr_simd, platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-#[repr(simd)]
-struct u16x8(u16, u16, u16, u16, u16, u16, u16, u16);
-
-#[repr(simd)]
-struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8,
- i8, i8, i8, i8, i8, i8, i8, i8);
-#[repr(simd)]
-struct i32x4(i32, i32, i32, i32);
-#[repr(simd)]
-struct f32x4(f32, f32, f32, f32);
-#[repr(simd)]
-struct i64x2(i64, i64);
-
-// correct signatures work well
-mod right {
- use {i16x8, u16x8};
- extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8;
- fn x86_mm_adds_epu16(x: u16x8, y: u16x8) -> u16x8;
- }
-}
-// but incorrect ones don't.
-
-mod signedness {
- use {i16x8, u16x8};
- // signedness matters
- extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8;
- //~^ ERROR intrinsic argument 1 has wrong type
- //~^^ ERROR intrinsic argument 2 has wrong type
- //~^^^ ERROR intrinsic return value has wrong type
- fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8;
- //~^ ERROR intrinsic argument 1 has wrong type
- //~^^ ERROR intrinsic argument 2 has wrong type
- //~^^^ ERROR intrinsic return value has wrong type
- }
-}
-// as do lengths
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- //~^ ERROR intrinsic argument 1 has wrong type
- //~^^ ERROR intrinsic argument 2 has wrong type
- //~^^^ ERROR intrinsic return value has wrong type
-}
-// and so does int vs. float:
-extern "platform-intrinsic" {
- fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4;
- //~^ ERROR intrinsic argument 1 has wrong type
- //~^^ ERROR intrinsic argument 2 has wrong type
- //~^^^ ERROR intrinsic return value has wrong type
-}
-
-
-fn main() {}
diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr b/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr
deleted file mode 100644
index 4c1985b..0000000
--- a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr
+++ /dev/null
@@ -1,75 +0,0 @@
-error[E0442]: intrinsic argument 1 has wrong type: found `u16`, expected `i16`
- --> $DIR/simd-intrinsic-declaration-type.rs:33:9
- |
-LL | fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found `u16`, expected `i16`
- --> $DIR/simd-intrinsic-declaration-type.rs:33:9
- |
-LL | fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found `u16`, expected `i16`
- --> $DIR/simd-intrinsic-declaration-type.rs:33:9
- |
-LL | fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 1 has wrong type: found `i16`, expected `u16`
- --> $DIR/simd-intrinsic-declaration-type.rs:37:9
- |
-LL | fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found `i16`, expected `u16`
- --> $DIR/simd-intrinsic-declaration-type.rs:37:9
- |
-LL | fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found `i16`, expected `u16`
- --> $DIR/simd-intrinsic-declaration-type.rs:37:9
- |
-LL | fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 1 has wrong type: found vector with length 16, expected length 8
- --> $DIR/simd-intrinsic-declaration-type.rs:45:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found vector with length 4, expected length 8
- --> $DIR/simd-intrinsic-declaration-type.rs:45:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found vector with length 2, expected length 8
- --> $DIR/simd-intrinsic-declaration-type.rs:45:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 1 has wrong type: found `i32`, expected `f32`
- --> $DIR/simd-intrinsic-declaration-type.rs:52:5
- |
-LL | fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found `i32`, expected `f32`
- --> $DIR/simd-intrinsic-declaration-type.rs:52:5
- |
-LL | fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found `i32`, expected `f32`
- --> $DIR/simd-intrinsic-declaration-type.rs:52:5
- |
-LL | fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 12 previous errors
-
-For more information about this error, try `rustc --explain E0442`.
diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.rs b/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.rs
deleted file mode 100644
index f38ef2e..0000000
--- a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-#![feature(repr_simd, platform_intrinsics)]
-
-#[repr(simd)]
-struct A(i16, i16, i16, i16, i16, i16, i16, i16);
-#[repr(simd)]
-struct B(i16, i16, i16, i16, i16, i16, i16, i16);
-
-// each intrinsic definition has to use the same nominal type for any
-// vector structure throughout that declaration (i.e., every instance
-// of i16x8 in each `fn ...;` needs to be either A or B)
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: A, y: A) -> B;
- //~^ ERROR intrinsic return value has wrong type: found `B`, expected `A`
- fn x86_mm_subs_epi16(x: A, y: B) -> A;
- //~^ ERROR intrinsic argument 2 has wrong type: found `B`, expected `A`
-
- // ok:
- fn x86_mm_max_epi16(x: B, y: B) -> B;
- fn x86_mm_min_epi16(x: A, y: A) -> A;
-}
-
-fn main() {}
diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.stderr b/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.stderr
deleted file mode 100644
index 2754dd1..0000000
--- a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0443]: intrinsic return value has wrong type: found `B`, expected `A` which was used for this vector type previously in this signature
- --> $DIR/simd-intrinsic-single-nominal-type.rs:13:5
- |
-LL | fn x86_mm_adds_epi16(x: A, y: A) -> B;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0443]: intrinsic argument 2 has wrong type: found `B`, expected `A` which was used for this vector type previously in this signature
- --> $DIR/simd-intrinsic-single-nominal-type.rs:15:5
- |
-LL | fn x86_mm_subs_epi16(x: A, y: B) -> A;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0443`.
diff --git a/src/test/ui/span/issue-24690.stderr b/src/test/ui/span/issue-24690.stderr
index 42b9333..f052f86 100644
--- a/src/test/ui/span/issue-24690.stderr
+++ b/src/test/ui/span/issue-24690.stderr
@@ -11,17 +11,17 @@
| ^^^^^^
= note: #[warn(unused_variables)] implied by #[warn(unused)]
-warning: variable `theTwo` should have a snake case name such as `the_two`
+warning: variable `theTwo` should have a snake case name
--> $DIR/issue-24690.rs:12:9
|
LL | let theTwo = 2; //~ WARN should have a snake case name
- | ^^^^^^
+ | ^^^^^^ help: convert the identifier to snake case: `the_two`
|
= note: #[warn(non_snake_case)] on by default
-warning: variable `theOtherTwo` should have a snake case name such as `the_other_two`
+warning: variable `theOtherTwo` should have a snake case name
--> $DIR/issue-24690.rs:13:9
|
LL | let theOtherTwo = 2; //~ WARN should have a snake case name
- | ^^^^^^^^^^^
+ | ^^^^^^^^^^^ help: convert the identifier to snake case: `the_other_two`
diff --git a/src/test/ui/span/typo-suggestion.stderr b/src/test/ui/span/typo-suggestion.stderr
index 5c564f7..7b12c44 100644
--- a/src/test/ui/span/typo-suggestion.stderr
+++ b/src/test/ui/span/typo-suggestion.stderr
@@ -8,7 +8,7 @@
--> $DIR/typo-suggestion.rs:8:26
|
LL | println!("Hello {}", fob); //~ ERROR cannot find value
- | ^^^ did you mean `foo`?
+ | ^^^ help: a local variable with a similar name exists: `foo`
error: aborting due to 2 previous errors
diff --git a/src/test/ui/span/visibility-ty-params.stderr b/src/test/ui/span/visibility-ty-params.stderr
index 1fb54df1..d791452 100644
--- a/src/test/ui/span/visibility-ty-params.stderr
+++ b/src/test/ui/span/visibility-ty-params.stderr
@@ -16,7 +16,7 @@
LL | m!{ S<u8> } //~ ERROR unexpected generic arguments in path
| -^^^^
| |
- | did you mean `m`?
+ | help: a module with a similar name exists: `m`
error: aborting due to 3 previous errors
diff --git a/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.rs b/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.rs
index 3c4d629..1f0a7a8 100644
--- a/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.rs
+++ b/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.rs
@@ -1,6 +1,6 @@
// compile-flags:-Zforce-unstable-if-unmarked
-#[unstable] //~ ERROR: stability attributes may not be used
-#[stable] //~ ERROR: stability attributes may not be used
-#[rustc_deprecated] //~ ERROR: stability attributes may not be used
+#[unstable()] //~ ERROR: stability attributes may not be used
+#[stable()] //~ ERROR: stability attributes may not be used
+#[rustc_deprecated()] //~ ERROR: stability attributes may not be used
fn main() { }
diff --git a/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.stderr b/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.stderr
index 2b8fb86..cd8ea92 100644
--- a/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.stderr
+++ b/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.stderr
@@ -1,20 +1,20 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged-force-unstable.rs:3:1
|
-LL | #[unstable] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^^^
+LL | #[unstable()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged-force-unstable.rs:4:1
|
-LL | #[stable] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^
+LL | #[stable()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged-force-unstable.rs:5:1
|
-LL | #[rustc_deprecated] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 3 previous errors
diff --git a/src/test/ui/stability-attribute/stability-attribute-non-staged.rs b/src/test/ui/stability-attribute/stability-attribute-non-staged.rs
index 3b22385..fc2c2b5 100644
--- a/src/test/ui/stability-attribute/stability-attribute-non-staged.rs
+++ b/src/test/ui/stability-attribute/stability-attribute-non-staged.rs
@@ -1,4 +1,4 @@
-#[unstable] //~ ERROR: stability attributes may not be used
-#[stable] //~ ERROR: stability attributes may not be used
-#[rustc_deprecated] //~ ERROR: stability attributes may not be used
+#[unstable()] //~ ERROR: stability attributes may not be used
+#[stable()] //~ ERROR: stability attributes may not be used
+#[rustc_deprecated()] //~ ERROR: stability attributes may not be used
fn main() { }
diff --git a/src/test/ui/stability-attribute/stability-attribute-non-staged.stderr b/src/test/ui/stability-attribute/stability-attribute-non-staged.stderr
index ad437dd..67f6ef8 100644
--- a/src/test/ui/stability-attribute/stability-attribute-non-staged.stderr
+++ b/src/test/ui/stability-attribute/stability-attribute-non-staged.stderr
@@ -1,20 +1,20 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged.rs:1:1
|
-LL | #[unstable] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^^^
+LL | #[unstable()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged.rs:2:1
|
-LL | #[stable] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^
+LL | #[stable()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged.rs:3:1
|
-LL | #[rustc_deprecated] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 3 previous errors
diff --git a/src/test/ui/stability-attribute/stability-attribute-sanity-4.rs b/src/test/ui/stability-attribute/stability-attribute-sanity-4.rs
new file mode 100644
index 0000000..3fd54bc
--- /dev/null
+++ b/src/test/ui/stability-attribute/stability-attribute-sanity-4.rs
@@ -0,0 +1,29 @@
+// Various checks that stability attributes are used correctly, per RFC 507
+
+#![feature(staged_api)]
+
+#![stable(feature = "rust1", since = "1.0.0")]
+
+mod bogus_attribute_types_2 {
+ #[unstable] //~ ERROR attribute must be of the form
+ fn f1() { }
+
+ #[unstable = "b"] //~ ERROR attribute must be of the form
+ fn f2() { }
+
+ #[stable] //~ ERROR attribute must be of the form
+ fn f3() { }
+
+ #[stable = "a"] //~ ERROR attribute must be of the form
+ fn f4() { }
+
+ #[stable(feature = "a", since = "b")]
+ #[rustc_deprecated] //~ ERROR attribute must be of the form
+ fn f5() { }
+
+ #[stable(feature = "a", since = "b")]
+ #[rustc_deprecated = "a"] //~ ERROR attribute must be of the form
+ fn f6() { }
+}
+
+fn main() { }
diff --git a/src/test/ui/stability-attribute/stability-attribute-sanity-4.stderr b/src/test/ui/stability-attribute/stability-attribute-sanity-4.stderr
new file mode 100644
index 0000000..4b4efe9
--- /dev/null
+++ b/src/test/ui/stability-attribute/stability-attribute-sanity-4.stderr
@@ -0,0 +1,38 @@
+error: attribute must be of the form `#[unstable(feature = "name", reason = "...", issue = "N")]`
+ --> $DIR/stability-attribute-sanity-4.rs:8:5
+ |
+LL | #[unstable] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^
+
+error: attribute must be of the form `#[unstable(feature = "name", reason = "...", issue = "N")]`
+ --> $DIR/stability-attribute-sanity-4.rs:11:5
+ |
+LL | #[unstable = "b"] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^^^
+
+error: attribute must be of the form `#[stable(feature = "name", since = "version")]`
+ --> $DIR/stability-attribute-sanity-4.rs:14:5
+ |
+LL | #[stable] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^
+
+error: attribute must be of the form `#[stable(feature = "name", since = "version")]`
+ --> $DIR/stability-attribute-sanity-4.rs:17:5
+ |
+LL | #[stable = "a"] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^
+
+error: attribute must be of the form `#[rustc_deprecated(since = "version", reason = "...")]`
+ --> $DIR/stability-attribute-sanity-4.rs:21:5
+ |
+LL | #[rustc_deprecated] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: attribute must be of the form `#[rustc_deprecated(since = "version", reason = "...")]`
+ --> $DIR/stability-attribute-sanity-4.rs:25:5
+ |
+LL | #[rustc_deprecated = "a"] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 6 previous errors
+
diff --git a/src/test/ui/stability-attribute/stability-attribute-sanity.rs b/src/test/ui/stability-attribute/stability-attribute-sanity.rs
index cb10df9..aebdb3b 100644
--- a/src/test/ui/stability-attribute/stability-attribute-sanity.rs
+++ b/src/test/ui/stability-attribute/stability-attribute-sanity.rs
@@ -21,28 +21,6 @@
fn f6() { }
}
-mod bogus_attribute_types_2 {
- #[unstable] //~ ERROR incorrect stability attribute type [E0548]
- fn f1() { }
-
- #[unstable = "b"] //~ ERROR incorrect stability attribute type [E0548]
- fn f2() { }
-
- #[stable] //~ ERROR incorrect stability attribute type [E0548]
- fn f3() { }
-
- #[stable = "a"] //~ ERROR incorrect stability attribute type [E0548]
- fn f4() { }
-
- #[stable(feature = "a", since = "b")]
- #[rustc_deprecated] //~ ERROR incorrect stability attribute type [E0548]
- fn f5() { }
-
- #[stable(feature = "a", since = "b")]
- #[rustc_deprecated = "a"] //~ ERROR incorrect stability attribute type [E0548]
- fn f6() { }
-}
-
mod missing_feature_names {
#[unstable(issue = "0")] //~ ERROR missing 'feature' [E0546]
fn f1() { }
diff --git a/src/test/ui/stability-attribute/stability-attribute-sanity.stderr b/src/test/ui/stability-attribute/stability-attribute-sanity.stderr
index 14c0728..74c1bbf 100644
--- a/src/test/ui/stability-attribute/stability-attribute-sanity.stderr
+++ b/src/test/ui/stability-attribute/stability-attribute-sanity.stderr
@@ -28,115 +28,79 @@
LL | #[stable(feature(b), since = "a")] //~ ERROR incorrect meta item [E0539]
| ^^^^^^^^^^
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:25:5
- |
-LL | #[unstable] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:28:5
- |
-LL | #[unstable = "b"] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:31:5
- |
-LL | #[stable] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:34:5
- |
-LL | #[stable = "a"] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:38:5
- |
-LL | #[rustc_deprecated] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:42:5
- |
-LL | #[rustc_deprecated = "a"] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-
error[E0546]: missing 'feature'
- --> $DIR/stability-attribute-sanity.rs:47:5
+ --> $DIR/stability-attribute-sanity.rs:25:5
|
LL | #[unstable(issue = "0")] //~ ERROR missing 'feature' [E0546]
| ^^^^^^^^^^^^^^^^^^^^^^^^
error[E0547]: missing 'issue'
- --> $DIR/stability-attribute-sanity.rs:50:5
+ --> $DIR/stability-attribute-sanity.rs:28:5
|
LL | #[unstable(feature = "b")] //~ ERROR missing 'issue' [E0547]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0546]: missing 'feature'
- --> $DIR/stability-attribute-sanity.rs:53:5
+ --> $DIR/stability-attribute-sanity.rs:31:5
|
LL | #[stable(since = "a")] //~ ERROR missing 'feature' [E0546]
| ^^^^^^^^^^^^^^^^^^^^^^
error[E0542]: missing 'since'
- --> $DIR/stability-attribute-sanity.rs:58:5
+ --> $DIR/stability-attribute-sanity.rs:36:5
|
LL | #[stable(feature = "a")] //~ ERROR missing 'since' [E0542]
| ^^^^^^^^^^^^^^^^^^^^^^^^
error[E0542]: missing 'since'
- --> $DIR/stability-attribute-sanity.rs:62:5
+ --> $DIR/stability-attribute-sanity.rs:40:5
|
LL | #[rustc_deprecated(reason = "a")] //~ ERROR missing 'since' [E0542]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0544]: multiple stability levels
- --> $DIR/stability-attribute-sanity.rs:67:1
+ --> $DIR/stability-attribute-sanity.rs:45:1
|
LL | #[stable(feature = "a", since = "b")] //~ ERROR multiple stability levels [E0544]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0544]: multiple stability levels
- --> $DIR/stability-attribute-sanity.rs:71:1
+ --> $DIR/stability-attribute-sanity.rs:49:1
|
LL | #[unstable(feature = "b", issue = "0")] //~ ERROR multiple stability levels [E0544]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0544]: multiple stability levels
- --> $DIR/stability-attribute-sanity.rs:75:1
+ --> $DIR/stability-attribute-sanity.rs:53:1
|
LL | #[stable(feature = "a", since = "b")] //~ ERROR multiple stability levels [E0544]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0540]: multiple rustc_deprecated attributes
- --> $DIR/stability-attribute-sanity.rs:83:1
+ --> $DIR/stability-attribute-sanity.rs:61:1
|
LL | pub const fn multiple4() { } //~ ERROR multiple rustc_deprecated attributes [E0540]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0553]: multiple rustc_const_unstable attributes
- --> $DIR/stability-attribute-sanity.rs:83:1
+ --> $DIR/stability-attribute-sanity.rs:61:1
|
LL | pub const fn multiple4() { } //~ ERROR multiple rustc_deprecated attributes [E0540]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: Invalid stability or deprecation version found
- --> $DIR/stability-attribute-sanity.rs:83:1
+ --> $DIR/stability-attribute-sanity.rs:61:1
|
LL | pub const fn multiple4() { } //~ ERROR multiple rustc_deprecated attributes [E0540]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0549]: rustc_deprecated attribute must be paired with either stable or unstable attribute
- --> $DIR/stability-attribute-sanity.rs:88:1
+ --> $DIR/stability-attribute-sanity.rs:66:1
|
LL | fn deprecated_without_unstable_or_stable() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-error: aborting due to 23 previous errors
+error: aborting due to 17 previous errors
-Some errors occurred: E0539, E0540, E0541, E0542, E0544, E0546, E0547, E0548, E0549...
+Some errors occurred: E0539, E0540, E0541, E0542, E0544, E0546, E0547, E0549, E0553.
For more information about an error, try `rustc --explain E0539`.
diff --git a/src/test/ui/str/str-array-assignment.stderr b/src/test/ui/str/str-array-assignment.stderr
index 24d8db4..87809d2 100644
--- a/src/test/ui/str/str-array-assignment.stderr
+++ b/src/test/ui/str/str-array-assignment.stderr
@@ -1,8 +1,10 @@
error[E0308]: if and else have incompatible types
- --> $DIR/str-array-assignment.rs:3:11
+ --> $DIR/str-array-assignment.rs:3:37
|
LL | let t = if true { s[..2] } else { s };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected str, found &str
+ | ------ ^ expected str, found &str
+ | |
+ | expected because of this
|
= note: expected type `str`
found type `&str`
diff --git a/src/test/ui/str/str-idx.stderr b/src/test/ui/str/str-idx.stderr
index 108096d..71b1747 100644
--- a/src/test/ui/str/str-idx.stderr
+++ b/src/test/ui/str/str-idx.stderr
@@ -5,6 +5,8 @@
| ^^^^ `str` cannot be indexed by `{integer}`
|
= help: the trait `std::ops::Index<{integer}>` is not implemented for `str`
+ = note: you can use `.chars().nth()` or `.bytes().nth()`
+ see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>
error: aborting due to previous error
diff --git a/src/test/ui/str/str-mut-idx.stderr b/src/test/ui/str/str-mut-idx.stderr
index a0c7c2c..a1212c5 100644
--- a/src/test/ui/str/str-mut-idx.stderr
+++ b/src/test/ui/str/str-mut-idx.stderr
@@ -29,6 +29,8 @@
| ^^^^^^^^^ `str` cannot be mutably indexed by `usize`
|
= help: the trait `std::ops::IndexMut<usize>` is not implemented for `str`
+ = note: you can use `.chars().nth()` or `.bytes().nth()`
+ see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>
error: aborting due to 3 previous errors
diff --git a/src/test/ui/structs/struct-fields-shorthand-unresolved.stderr b/src/test/ui/structs/struct-fields-shorthand-unresolved.stderr
index 0fcaac5..37ec6c0 100644
--- a/src/test/ui/structs/struct-fields-shorthand-unresolved.stderr
+++ b/src/test/ui/structs/struct-fields-shorthand-unresolved.stderr
@@ -2,7 +2,7 @@
--> $DIR/struct-fields-shorthand-unresolved.rs:10:9
|
LL | y //~ ERROR cannot find value `y` in this scope
- | ^ did you mean `x`?
+ | ^ help: a local variable with a similar name exists: `x`
error: aborting due to previous error
diff --git a/src/test/ui/structs/structure-constructor-type-mismatch.stderr b/src/test/ui/structs/structure-constructor-type-mismatch.stderr
index 3c1ed8e..cc62316 100644
--- a/src/test/ui/structs/structure-constructor-type-mismatch.stderr
+++ b/src/test/ui/structs/structure-constructor-type-mismatch.stderr
@@ -109,6 +109,8 @@
error[E0308]: mismatched types
--> $DIR/structure-constructor-type-mismatch.rs:54:9
|
+LL | match (Point { x: 1, y: 2 }) {
+ | ---------------------- this match expression has type `Point<{integer}>`
LL | PointF::<u32> { .. } => {} //~ ERROR wrong number of type arguments
| ^^^^^^^^^^^^^^^^^^^^ expected integer, found f32
|
@@ -118,6 +120,8 @@
error[E0308]: mismatched types
--> $DIR/structure-constructor-type-mismatch.rs:59:9
|
+LL | match (Point { x: 1, y: 2 }) {
+ | ---------------------- this match expression has type `Point<{integer}>`
LL | PointF { .. } => {} //~ ERROR mismatched types
| ^^^^^^^^^^^^^ expected integer, found f32
|
@@ -127,6 +131,8 @@
error[E0308]: mismatched types
--> $DIR/structure-constructor-type-mismatch.rs:67:9
|
+LL | match (Pair { x: 1, y: 2 }) {
+ | --------------------- this match expression has type `Pair<{integer}, {integer}>`
LL | PairF::<u32> { .. } => {} //~ ERROR mismatched types
| ^^^^^^^^^^^^^^^^^^^ expected integer, found f32
|
diff --git a/src/test/ui/suffixed-literal-meta.rs b/src/test/ui/suffixed-literal-meta.rs
index a311b65..bd2d662 100644
--- a/src/test/ui/suffixed-literal-meta.rs
+++ b/src/test/ui/suffixed-literal-meta.rs
@@ -1,13 +1,15 @@
-#[path = 1usize] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1u8] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1u16] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1u32] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1u64] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1isize] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1i8] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1i16] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1i32] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1i64] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1.0f32] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1.0f64] //~ ERROR: suffixed literals are not allowed in attributes
+#![feature(custom_attribute)]
+
+#[my_attr = 1usize] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1u8] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1u16] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1u32] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1u64] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1isize] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1i8] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1i16] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1i32] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1i64] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1.0f32] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1.0f64] //~ ERROR: suffixed literals are not allowed in attributes
fn main() { }
diff --git a/src/test/ui/suffixed-literal-meta.stderr b/src/test/ui/suffixed-literal-meta.stderr
index 2f3ad8a..265aa78 100644
--- a/src/test/ui/suffixed-literal-meta.stderr
+++ b/src/test/ui/suffixed-literal-meta.stderr
@@ -1,96 +1,96 @@
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:1:10
+ --> $DIR/suffixed-literal-meta.rs:3:13
|
-LL | #[path = 1usize] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^^^
+LL | #[my_attr = 1usize] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:2:10
+ --> $DIR/suffixed-literal-meta.rs:4:13
|
-LL | #[path = 1u8] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^
+LL | #[my_attr = 1u8] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:3:10
+ --> $DIR/suffixed-literal-meta.rs:5:13
|
-LL | #[path = 1u16] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1u16] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:4:10
+ --> $DIR/suffixed-literal-meta.rs:6:13
|
-LL | #[path = 1u32] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1u32] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:5:10
+ --> $DIR/suffixed-literal-meta.rs:7:13
|
-LL | #[path = 1u64] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1u64] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:6:10
+ --> $DIR/suffixed-literal-meta.rs:8:13
|
-LL | #[path = 1isize] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^^^
+LL | #[my_attr = 1isize] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:7:10
+ --> $DIR/suffixed-literal-meta.rs:9:13
|
-LL | #[path = 1i8] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^
+LL | #[my_attr = 1i8] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:8:10
+ --> $DIR/suffixed-literal-meta.rs:10:13
|
-LL | #[path = 1i16] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1i16] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:9:10
+ --> $DIR/suffixed-literal-meta.rs:11:13
|
-LL | #[path = 1i32] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1i32] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:10:10
+ --> $DIR/suffixed-literal-meta.rs:12:13
|
-LL | #[path = 1i64] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1i64] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:11:10
+ --> $DIR/suffixed-literal-meta.rs:13:13
|
-LL | #[path = 1.0f32] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^^^
+LL | #[my_attr = 1.0f32] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:12:10
+ --> $DIR/suffixed-literal-meta.rs:14:13
|
-LL | #[path = 1.0f64] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^^^
+LL | #[my_attr = 1.0f64] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
diff --git a/src/test/ui/suggestions/recover-from-semicolon-trailing-item.rs b/src/test/ui/suggestions/recover-from-semicolon-trailing-item.rs
new file mode 100644
index 0000000..82935af
--- /dev/null
+++ b/src/test/ui/suggestions/recover-from-semicolon-trailing-item.rs
@@ -0,0 +1,16 @@
+// verify that after encountering a semicolon after an item the parser recovers
+mod M {};
+//~^ ERROR expected item, found `;`
+struct S {};
+//~^ ERROR expected item, found `;`
+fn foo(a: usize) {};
+//~^ ERROR expected item, found `;`
+fn main() {
+ struct X {}; // ok
+ let _: usize = S {};
+ //~^ ERROR mismatched types
+ let _: usize = X {};
+ //~^ ERROR mismatched types
+ foo("");
+ //~^ ERROR mismatched types
+}
diff --git a/src/test/ui/suggestions/recover-from-semicolon-trailing-item.stderr b/src/test/ui/suggestions/recover-from-semicolon-trailing-item.stderr
new file mode 100644
index 0000000..9a47a1e
--- /dev/null
+++ b/src/test/ui/suggestions/recover-from-semicolon-trailing-item.stderr
@@ -0,0 +1,50 @@
+error: expected item, found `;`
+ --> $DIR/recover-from-semicolon-trailing-item.rs:2:9
+ |
+LL | mod M {};
+ | ^ help: remove this semicolon
+
+error: expected item, found `;`
+ --> $DIR/recover-from-semicolon-trailing-item.rs:4:12
+ |
+LL | struct S {};
+ | ^ help: remove this semicolon
+ |
+ = help: braced struct declarations are not followed by a semicolon
+
+error: expected item, found `;`
+ --> $DIR/recover-from-semicolon-trailing-item.rs:6:20
+ |
+LL | fn foo(a: usize) {};
+ | ^ help: remove this semicolon
+
+error[E0308]: mismatched types
+ --> $DIR/recover-from-semicolon-trailing-item.rs:10:20
+ |
+LL | let _: usize = S {};
+ | ^^^^ expected usize, found struct `S`
+ |
+ = note: expected type `usize`
+ found type `S`
+
+error[E0308]: mismatched types
+ --> $DIR/recover-from-semicolon-trailing-item.rs:12:20
+ |
+LL | let _: usize = X {};
+ | ^^^^ expected usize, found struct `main::X`
+ |
+ = note: expected type `usize`
+ found type `main::X`
+
+error[E0308]: mismatched types
+ --> $DIR/recover-from-semicolon-trailing-item.rs:14:9
+ |
+LL | foo("");
+ | ^^ expected usize, found reference
+ |
+ = note: expected type `usize`
+ found type `&'static str`
+
+error: aborting due to 6 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/suggestions/suggest-move-lifetimes.stderr b/src/test/ui/suggestions/suggest-move-lifetimes.stderr
index 72a2cbe..b36e927 100644
--- a/src/test/ui/suggestions/suggest-move-lifetimes.stderr
+++ b/src/test/ui/suggestions/suggest-move-lifetimes.stderr
@@ -16,7 +16,7 @@
help: move the lifetime parameter prior to the first type parameter
|
LL | struct B<'a, T, U> { //~ ERROR lifetime parameters must be declared
- | ^^^ --
+ | ^^^ --
error: lifetime parameters must be declared prior to type parameters
--> $DIR/suggest-move-lifetimes.rs:10:16
@@ -36,7 +36,7 @@
help: move the lifetime parameter prior to the first type parameter
|
LL | struct D<'a, 'b, 'c, T, U, V> { //~ ERROR lifetime parameters must be declared
- | ^^^ ^^^ ^^^ ---
+ | ^^^ ^^^ ^^^ -- --
error: aborting due to 4 previous errors
diff --git a/src/test/ui/target-feature-wrong.stderr b/src/test/ui/target-feature-wrong.stderr
index 2eeaa10..236f5c4 100644
--- a/src/test/ui/target-feature-wrong.stderr
+++ b/src/test/ui/target-feature-wrong.stderr
@@ -1,4 +1,4 @@
-error: #[target_feature] attribute must be of the form #[target_feature(..)]
+error: attribute must be of the form `#[target_feature(enable = "name")]`
--> $DIR/target-feature-wrong.rs:16:1
|
LL | #[target_feature = "+sse2"]
diff --git a/src/test/ui/test-should-panic-attr.rs b/src/test/ui/test-should-panic-attr.rs
index 1b5afda..f936dd5 100644
--- a/src/test/ui/test-should-panic-attr.rs
+++ b/src/test/ui/test-should-panic-attr.rs
@@ -1,9 +1,8 @@
-// run-pass
+// compile-pass
// compile-flags: --test
#[test]
#[should_panic = "foo"]
-//~^ WARN: attribute must be of the form:
fn test1() {
panic!();
}
diff --git a/src/test/ui/test-should-panic-attr.stderr b/src/test/ui/test-should-panic-attr.stderr
index 0f25477..4b032eb 100644
--- a/src/test/ui/test-should-panic-attr.stderr
+++ b/src/test/ui/test-should-panic-attr.stderr
@@ -1,13 +1,5 @@
-warning: attribute must be of the form: `#[should_panic]` or `#[should_panic(expected = "error message")]`
- --> $DIR/test-should-panic-attr.rs:5:1
- |
-LL | #[should_panic = "foo"]
- | ^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: Errors in this attribute were erroneously allowed and will become a hard error in a future release.
-
warning: argument must be of the form: `expected = "error message"`
- --> $DIR/test-should-panic-attr.rs:12:1
+ --> $DIR/test-should-panic-attr.rs:11:1
|
LL | #[should_panic(expected)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -15,7 +7,7 @@
= note: Errors in this attribute were erroneously allowed and will become a hard error in a future release.
warning: argument must be of the form: `expected = "error message"`
- --> $DIR/test-should-panic-attr.rs:19:1
+ --> $DIR/test-should-panic-attr.rs:18:1
|
LL | #[should_panic(expect)]
| ^^^^^^^^^^^^^^^^^^^^^^^
@@ -23,7 +15,7 @@
= note: Errors in this attribute were erroneously allowed and will become a hard error in a future release.
warning: argument must be of the form: `expected = "error message"`
- --> $DIR/test-should-panic-attr.rs:26:1
+ --> $DIR/test-should-panic-attr.rs:25:1
|
LL | #[should_panic(expected(foo, bar))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -31,7 +23,7 @@
= note: Errors in this attribute were erroneously allowed and will become a hard error in a future release.
warning: argument must be of the form: `expected = "error message"`
- --> $DIR/test-should-panic-attr.rs:33:1
+ --> $DIR/test-should-panic-attr.rs:32:1
|
LL | #[should_panic(expected = "foo", bar)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/thread-local-mutation.nll.stderr b/src/test/ui/thread-local-mutation.nll.stderr
new file mode 100644
index 0000000..0a3664b
--- /dev/null
+++ b/src/test/ui/thread-local-mutation.nll.stderr
@@ -0,0 +1,9 @@
+error[E0594]: cannot assign to immutable static item `S`
+ --> $DIR/thread-local-mutation.rs:11:5
+ |
+LL | S = "after"; //~ ERROR cannot assign to immutable
+ | ^^^^^^^^^^^ cannot assign
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0594`.
diff --git a/src/test/ui/thread-local-mutation.rs b/src/test/ui/thread-local-mutation.rs
new file mode 100644
index 0000000..e738225
--- /dev/null
+++ b/src/test/ui/thread-local-mutation.rs
@@ -0,0 +1,18 @@
+// Regression test for #54901: immutable thread locals could be mutated. See:
+// https://github.com/rust-lang/rust/issues/29594#issuecomment-328177697
+// https://github.com/rust-lang/rust/issues/54901
+
+#![feature(thread_local)]
+
+#[thread_local]
+static S: &str = "before";
+
+fn set_s() {
+ S = "after"; //~ ERROR cannot assign to immutable
+}
+
+fn main() {
+ println!("{}", S);
+ set_s();
+ println!("{}", S);
+}
diff --git a/src/test/ui/thread-local-mutation.stderr b/src/test/ui/thread-local-mutation.stderr
new file mode 100644
index 0000000..bf29852
--- /dev/null
+++ b/src/test/ui/thread-local-mutation.stderr
@@ -0,0 +1,9 @@
+error[E0594]: cannot assign to immutable thread-local static item
+ --> $DIR/thread-local-mutation.rs:11:5
+ |
+LL | S = "after"; //~ ERROR cannot assign to immutable
+ | ^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0594`.
diff --git a/src/test/ui/traits/trait-impl-for-module.stderr b/src/test/ui/traits/trait-impl-for-module.stderr
index 3f9407e..99da4b7 100644
--- a/src/test/ui/traits/trait-impl-for-module.stderr
+++ b/src/test/ui/traits/trait-impl-for-module.stderr
@@ -2,7 +2,7 @@
--> $DIR/trait-impl-for-module.rs:7:12
|
LL | impl A for a { //~ ERROR expected type, found module
- | ^ did you mean `A`?
+ | ^ help: a trait with a similar name exists: `A`
error: aborting due to previous error
diff --git a/src/test/ui/traits/trait-object-vs-lifetime.rs b/src/test/ui/traits/trait-object-vs-lifetime.rs
index 57d9b2d..a12429c 100644
--- a/src/test/ui/traits/trait-object-vs-lifetime.rs
+++ b/src/test/ui/traits/trait-object-vs-lifetime.rs
@@ -1,8 +1,6 @@
// A few contrived examples where lifetime should (or should not) be parsed as an object type.
// Lifetimes parsed as types are still rejected later by semantic checks.
-// compile-flags: -Z continue-parse-after-error
-
struct S<'a, T>(&'a u8, T);
fn main() {
diff --git a/src/test/ui/traits/trait-object-vs-lifetime.stderr b/src/test/ui/traits/trait-object-vs-lifetime.stderr
index 20218c1..4cc96ba 100644
--- a/src/test/ui/traits/trait-object-vs-lifetime.stderr
+++ b/src/test/ui/traits/trait-object-vs-lifetime.stderr
@@ -1,29 +1,33 @@
error: lifetime parameters must be declared prior to type parameters
- --> $DIR/trait-object-vs-lifetime.rs:16:25
+ --> $DIR/trait-object-vs-lifetime.rs:14:25
|
LL | let _: S<'static +, 'static>;
- | ^^^^^^^
+ | ^^^^^^^ must be declared prior to type parameters
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | let _: S<'static, 'static +>;
+ | ^^^^^^^^ --
error[E0224]: at least one non-builtin trait is required for an object type
- --> $DIR/trait-object-vs-lifetime.rs:11:23
+ --> $DIR/trait-object-vs-lifetime.rs:9:23
|
LL | let _: S<'static, 'static +>;
| ^^^^^^^^^
error[E0107]: wrong number of lifetime arguments: expected 1, found 2
- --> $DIR/trait-object-vs-lifetime.rs:13:23
+ --> $DIR/trait-object-vs-lifetime.rs:11:23
|
LL | let _: S<'static, 'static>;
| ^^^^^^^ unexpected lifetime argument
error[E0107]: wrong number of type arguments: expected 1, found 0
- --> $DIR/trait-object-vs-lifetime.rs:13:12
+ --> $DIR/trait-object-vs-lifetime.rs:11:12
|
LL | let _: S<'static, 'static>;
| ^^^^^^^^^^^^^^^^^^^ expected 1 type argument
error[E0224]: at least one non-builtin trait is required for an object type
- --> $DIR/trait-object-vs-lifetime.rs:16:14
+ --> $DIR/trait-object-vs-lifetime.rs:14:14
|
LL | let _: S<'static +, 'static>;
| ^^^^^^^^^
diff --git a/src/test/ui/try-block/try-block-in-edition2015.stderr b/src/test/ui/try-block/try-block-in-edition2015.stderr
index 6365008..a7b8106 100644
--- a/src/test/ui/try-block/try-block-in-edition2015.stderr
+++ b/src/test/ui/try-block/try-block-in-edition2015.stderr
@@ -15,7 +15,7 @@
--> $DIR/try-block-in-edition2015.rs:4:33
|
LL | let try_result: Option<_> = try {
- | ^^^ did you mean `try!(...)`?
+ | ^^^ help: use `!` to invoke the macro: `try!`
error: aborting due to 2 previous errors
diff --git a/src/test/ui/type-alias-enum-variants-priority-2.rs b/src/test/ui/type-alias-enum-variants-priority-2.rs
new file mode 100644
index 0000000..295f8ac
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority-2.rs
@@ -0,0 +1,13 @@
+#![feature(type_alias_enum_variants)]
+
+enum E {
+ V(u8)
+}
+
+impl E {
+ fn V() {}
+}
+
+fn main() {
+ <E>::V(); //~ ERROR this function takes 1 parameter but 0 parameters were supplied
+}
diff --git a/src/test/ui/type-alias-enum-variants-priority-2.stderr b/src/test/ui/type-alias-enum-variants-priority-2.stderr
new file mode 100644
index 0000000..c6ec96e
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority-2.stderr
@@ -0,0 +1,12 @@
+error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+ --> $DIR/type-alias-enum-variants-priority-2.rs:12:5
+ |
+LL | V(u8)
+ | ----- defined here
+...
+LL | <E>::V(); //~ ERROR this function takes 1 parameter but 0 parameters were supplied
+ | ^^^^^^^^ expected 1 parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0061`.
diff --git a/src/test/ui/type-alias-enum-variants-priority-3.rs b/src/test/ui/type-alias-enum-variants-priority-3.rs
new file mode 100644
index 0000000..33f9655
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority-3.rs
@@ -0,0 +1,10 @@
+#![feature(type_alias_enum_variants)]
+
+enum E {
+ V
+}
+
+fn check() -> <E>::V {}
+//~^ ERROR expected type, found variant `V`
+
+fn main() {}
diff --git a/src/test/ui/type-alias-enum-variants-priority-3.stderr b/src/test/ui/type-alias-enum-variants-priority-3.stderr
new file mode 100644
index 0000000..b345154
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority-3.stderr
@@ -0,0 +1,8 @@
+error: expected type, found variant `V`
+ --> $DIR/type-alias-enum-variants-priority-3.rs:7:15
+ |
+LL | fn check() -> <E>::V {}
+ | ^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/type-alias-enum-variants-priority.rs b/src/test/ui/type-alias-enum-variants-priority.rs
new file mode 100644
index 0000000..db1da2b
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority.rs
@@ -0,0 +1,20 @@
+#![feature(type_alias_enum_variants)]
+#![deny(ambiguous_associated_items)]
+
+enum E {
+ V
+}
+
+trait Tr {
+ type V;
+ fn f() -> Self::V;
+}
+
+impl Tr for E {
+ type V = u8;
+ fn f() -> Self::V { 0 }
+ //~^ ERROR ambiguous associated item
+ //~| WARN this was previously accepted
+}
+
+fn main() {}
diff --git a/src/test/ui/type-alias-enum-variants-priority.stderr b/src/test/ui/type-alias-enum-variants-priority.stderr
new file mode 100644
index 0000000..dcf7dc7
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority.stderr
@@ -0,0 +1,26 @@
+error: ambiguous associated item
+ --> $DIR/type-alias-enum-variants-priority.rs:15:15
+ |
+LL | fn f() -> Self::V { 0 }
+ | ^^^^^^^ help: use fully-qualified syntax: `<E as Trait>::V`
+ |
+note: lint level defined here
+ --> $DIR/type-alias-enum-variants-priority.rs:2:9
+ |
+LL | #![deny(ambiguous_associated_items)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57644 <https://github.com/rust-lang/rust/issues/57644>
+note: `V` could refer to variant defined here
+ --> $DIR/type-alias-enum-variants-priority.rs:5:5
+ |
+LL | V
+ | ^
+note: `V` could also refer to associated type defined here
+ --> $DIR/type-alias-enum-variants-priority.rs:9:5
+ |
+LL | type V;
+ | ^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/ufcs/ufcs-partially-resolved.stderr b/src/test/ui/ufcs/ufcs-partially-resolved.stderr
index a576fdd..3cd1cac 100644
--- a/src/test/ui/ufcs/ufcs-partially-resolved.stderr
+++ b/src/test/ui/ufcs/ufcs-partially-resolved.stderr
@@ -14,7 +14,7 @@
--> $DIR/ufcs-partially-resolved.rs:19:24
|
LL | let _: <u8 as Tr>::N; //~ ERROR cannot find associated type `N` in trait `Tr`
- | ^ did you mean `Y`?
+ | ^ help: an associated type with a similar name exists: `Y`
error[E0576]: cannot find associated type `N` in enum `E`
--> $DIR/ufcs-partially-resolved.rs:20:23
@@ -32,7 +32,7 @@
--> $DIR/ufcs-partially-resolved.rs:22:17
|
LL | <u8 as Tr>::N; //~ ERROR cannot find method or associated constant `N` in trait `Tr`
- | ^ did you mean `Y`?
+ | ^ help: a method with a similar name exists: `Y`
error[E0576]: cannot find method or associated constant `N` in enum `E`
--> $DIR/ufcs-partially-resolved.rs:23:16
@@ -62,7 +62,7 @@
--> $DIR/ufcs-partially-resolved.rs:30:24
|
LL | let _: <u8 as Tr>::N::NN; //~ ERROR cannot find associated type `N` in trait `Tr`
- | ^ did you mean `Y`?
+ | ^ help: an associated type with a similar name exists: `Y`
error[E0576]: cannot find associated type `N` in enum `E`
--> $DIR/ufcs-partially-resolved.rs:31:23
@@ -80,7 +80,7 @@
--> $DIR/ufcs-partially-resolved.rs:33:17
|
LL | <u8 as Tr>::N::NN; //~ ERROR cannot find associated type `N` in trait `Tr`
- | ^ did you mean `Y`?
+ | ^ help: an associated type with a similar name exists: `Y`
error[E0576]: cannot find associated type `N` in enum `E`
--> $DIR/ufcs-partially-resolved.rs:34:16
@@ -160,7 +160,7 @@
LL | let _: <u8 as Dr>::Z; //~ ERROR expected associated type, found method `Dr::Z`
| ^^^^^^^^^^^^-
| |
- | did you mean `X`?
+ | help: an associated type with a similar name exists: `X`
error[E0575]: expected method or associated constant, found associated type `Dr::X`
--> $DIR/ufcs-partially-resolved.rs:53:5
@@ -168,7 +168,7 @@
LL | <u8 as Dr>::X; //~ ERROR expected method or associated constant, found associated type `Dr::X`
| ^^^^^^^^^^^^-
| |
- | did you mean `Z`?
+ | help: a method with a similar name exists: `Z`
|
= note: can't use a type alias as a constructor
@@ -178,7 +178,7 @@
LL | let _: <u8 as Dr>::Z::N; //~ ERROR expected associated type, found method `Dr::Z`
| ^^^^^^^^^^^^-^^^
| |
- | did you mean `X`?
+ | help: an associated type with a similar name exists: `X`
error[E0223]: ambiguous associated type
--> $DIR/ufcs-partially-resolved.rs:36:12
diff --git a/src/test/ui/ui-testing-optout.stderr b/src/test/ui/ui-testing-optout.stderr
index 3233715..5a662e0 100644
--- a/src/test/ui/ui-testing-optout.stderr
+++ b/src/test/ui/ui-testing-optout.stderr
@@ -2,19 +2,19 @@
--> $DIR/ui-testing-optout.rs:4:10
|
4 | type A = B; //~ ERROR
- | ^ did you mean `A`?
+ | ^ help: a type alias with a similar name exists: `A`
error[E0412]: cannot find type `D` in this scope
--> $DIR/ui-testing-optout.rs:10:10
|
10 | type C = D; //~ ERROR
- | ^ did you mean `A`?
+ | ^ help: a type alias with a similar name exists: `A`
error[E0412]: cannot find type `F` in this scope
--> $DIR/ui-testing-optout.rs:95:10
|
95 | type E = F; //~ ERROR
- | ^ did you mean `A`?
+ | ^ help: a type alias with a similar name exists: `A`
error: aborting due to 3 previous errors
diff --git a/src/test/ui/utf8_idents.rs b/src/test/ui/utf8_idents.rs
index bed0d9b..e601c6e 100644
--- a/src/test/ui/utf8_idents.rs
+++ b/src/test/ui/utf8_idents.rs
@@ -3,7 +3,7 @@
fn foo<
'β, //~ ERROR non-ascii idents are not fully supported
γ //~ ERROR non-ascii idents are not fully supported
- //~^ WARN type parameter `γ` should have a camel case name such as `Γ`
+ //~^ WARN type parameter `γ` should have a camel case name
>() {}
struct X {
diff --git a/src/test/ui/utf8_idents.stderr b/src/test/ui/utf8_idents.stderr
index 1ccf767..268dd99 100644
--- a/src/test/ui/utf8_idents.stderr
+++ b/src/test/ui/utf8_idents.stderr
@@ -30,11 +30,11 @@
|
= help: add #![feature(non_ascii_idents)] to the crate attributes to enable
-warning: type parameter `γ` should have a camel case name such as `Γ`
+warning: type parameter `γ` should have a camel case name
--> $DIR/utf8_idents.rs:5:5
|
LL | γ //~ ERROR non-ascii idents are not fully supported
- | ^
+ | ^ help: convert the identifier to camel case: `Γ`
|
= note: #[warn(non_camel_case_types)] on by default
diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs
index b00daa7..8c1baa5 100644
--- a/src/tools/build-manifest/src/main.rs
+++ b/src/tools/build-manifest/src/main.rs
@@ -90,6 +90,7 @@
"thumbv7em-none-eabi",
"thumbv7em-none-eabihf",
"thumbv7m-none-eabi",
+ "thumbv8m.main-none-eabi",
"wasm32-unknown-emscripten",
"wasm32-unknown-unknown",
"x86_64-apple-darwin",
diff --git a/src/tools/cargo b/src/tools/cargo
index 34320d2..2b4a5f1 160000
--- a/src/tools/cargo
+++ b/src/tools/cargo
@@ -1 +1 @@
-Subproject commit 34320d212dca8cd27d06ce93c16c6151f46fcf2e
+Subproject commit 2b4a5f1f0bb6e13759e88ea9512527b0beba154f
diff --git a/src/tools/clippy b/src/tools/clippy
index c63b634..1b89724 160000
--- a/src/tools/clippy
+++ b/src/tools/clippy
@@ -1 +1 @@
-Subproject commit c63b6349b44019146cc2edcef8141692891b9401
+Subproject commit 1b89724b4889aef631b40d52c0943bdc28e04d1d
diff --git a/src/tools/rls b/src/tools/rls
index 1a6361b..ae0d89a 160000
--- a/src/tools/rls
+++ b/src/tools/rls
@@ -1 +1 @@
-Subproject commit 1a6361bd399a9466deba9b42ff2ff2ae365c5d0e
+Subproject commit ae0d89a08d091ba1563b571739768a09d4cd3d69
diff --git a/src/tools/tidy/src/bins.rs b/src/tools/tidy/src/bins.rs
index 7a5495b..610d1d8 100644
--- a/src/tools/tidy/src/bins.rs
+++ b/src/tools/tidy/src/bins.rs
@@ -2,12 +2,12 @@
//! by accident.
//!
//! In the past we've accidentally checked in test binaries and such which add a
-//! huge amount of bloat to the git history, so it's good to just ensure we
-//! don't do that again :)
+//! huge amount of bloat to the Git history, so it's good to just ensure we
+//! don't do that again.
use std::path::Path;
-// All files are executable on Windows, so just check on Unix
+// All files are executable on Windows, so just check on Unix.
#[cfg(windows)]
pub fn check(_path: &Path, _bad: &mut bool) {}
diff --git a/src/tools/tidy/src/cargo.rs b/src/tools/tidy/src/cargo.rs
index 3369d82..26ced7f 100644
--- a/src/tools/tidy/src/cargo.rs
+++ b/src/tools/tidy/src/cargo.rs
@@ -13,7 +13,7 @@
return
}
for entry in t!(path.read_dir(), path).map(|e| t!(e)) {
- // Look for `Cargo.toml` with a sibling `src/lib.rs` or `lib.rs`
+ // Look for `Cargo.toml` with a sibling `src/lib.rs` or `lib.rs`.
if entry.file_name().to_str() == Some("Cargo.toml") {
if path.join("src/lib.rs").is_file() {
verify(&entry.path(), &path.join("src/lib.rs"), bad)
@@ -27,8 +27,8 @@
}
}
-// Verify that the dependencies in Cargo.toml at `tomlfile` are sync'd with the
-// `extern crate` annotations in the lib.rs at `libfile`.
+/// Verifies that the dependencies in Cargo.toml at `tomlfile` are synced with
+/// the `extern crate` annotations in the lib.rs at `libfile`.
fn verify(tomlfile: &Path, libfile: &Path, bad: &mut bool) {
let toml = t!(fs::read_to_string(&tomlfile));
let librs = t!(fs::read_to_string(&libfile));
@@ -37,14 +37,16 @@
return
}
- // "Poor man's TOML parser", just assume we use one syntax for now
+ // "Poor man's TOML parser" -- just assume we use one syntax for now.
//
// We just look for:
//
- // [dependencies]
- // name = ...
- // name2 = ...
- // name3 = ...
+ // ````
+ // [dependencies]
+ // name = ...
+ // name2 = ...
+ // name3 = ...
+ // ```
//
// If we encounter a line starting with `[` then we assume it's the end of
// the dependency section and bail out.
@@ -63,14 +65,14 @@
continue
}
- // Don't worry about depending on core/std but not saying `extern crate
- // core/std`, that's intentional.
+ // Don't worry about depending on core/std while not writing `extern crate
+ // core/std` -- that's intentional.
if krate == "core" || krate == "std" {
continue
}
- // This is intentional, this dependency just makes the crate available
- // for others later on. Cover cases
+ // This is intentional -- this dependency just makes the crate available
+ // for others later on.
let whitelisted = krate.starts_with("panic");
if toml.contains("name = \"std\"") && whitelisted {
continue
diff --git a/src/tools/tidy/src/deps.rs b/src/tools/tidy/src/deps.rs
index 7f0f0c6..f1bfb6e 100644
--- a/src/tools/tidy/src/deps.rs
+++ b/src/tools/tidy/src/deps.rs
@@ -1,4 +1,4 @@
-//! Check license of third-party deps by inspecting vendor
+//! Checks the licenses of third-party dependencies by inspecting vendors.
use std::collections::{BTreeSet, HashSet, HashMap};
use std::fs;
@@ -21,7 +21,7 @@
/// These are exceptions to Rust's permissive licensing policy, and
/// should be considered bugs. Exceptions are only allowed in Rust
/// tooling. It is _crucial_ that no exception crates be dependencies
-/// of the Rust runtime (std / test).
+/// of the Rust runtime (std/test).
const EXCEPTIONS: &[&str] = &[
"mdbook", // MPL2, mdbook
"openssl", // BSD+advertising clause, cargo, mdbook
@@ -39,11 +39,11 @@
"colored", // MPL-2.0, rustfmt
"ordslice", // Apache-2.0, rls
"cloudabi", // BSD-2-Clause, (rls -> crossbeam-channel 0.2 -> rand 0.5)
- "ryu", // Apache-2.0, rls/cargo/... (b/c of serde)
+ "ryu", // Apache-2.0, rls/cargo/... (because of serde)
"bytesize", // Apache-2.0, cargo
"im-rc", // MPL-2.0+, cargo
"adler32", // BSD-3-Clause AND Zlib, cargo dep that isn't used
- "fortanix-sgx-abi", // MPL-2.0+, libstd but only for sgx target
+ "fortanix-sgx-abi", // MPL-2.0+, libstd but only for `sgx` target
];
/// Which crates to check against the whitelist?
@@ -156,7 +156,7 @@
Crate("wincolor"),
];
-// Some types for Serde to deserialize the output of `cargo metadata` to...
+// Some types for Serde to deserialize the output of `cargo metadata` to.
#[derive(Deserialize)]
struct Output {
@@ -174,9 +174,9 @@
dependencies: Vec<String>,
}
-/// A unique identifier for a crate
+/// A unique identifier for a crate.
#[derive(Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Debug, Hash)]
-struct Crate<'a>(&'a str); // (name,)
+struct Crate<'a>(&'a str); // (name)
#[derive(Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Debug, Hash)]
struct CrateVersion<'a>(&'a str, &'a str); // (name, version)
@@ -188,7 +188,7 @@
}
impl<'a> CrateVersion<'a> {
- /// Returns the struct and whether or not the dep is in-tree
+ /// Returns the struct and whether or not the dependency is in-tree.
pub fn from_str(s: &'a str) -> (Self, bool) {
let mut parts = s.split(' ');
let name = parts.next().unwrap();
@@ -215,7 +215,7 @@
///
/// Specifically, this checks that the license is correct.
pub fn check(path: &Path, bad: &mut bool) {
- // Check licences
+ // Check licences.
let path = path.join("../vendor");
assert!(path.exists(), "vendor directory missing");
let mut saw_dir = false;
@@ -223,7 +223,7 @@
saw_dir = true;
let dir = t!(dir);
- // skip our exceptions
+ // Skip our exceptions.
let is_exception = EXCEPTIONS.iter().any(|exception| {
dir.path()
.to_str()
@@ -240,18 +240,18 @@
assert!(saw_dir, "no vendored source");
}
-/// Checks the dependency of WHITELIST_CRATES at the given path. Changes `bad` to `true` if a check
-/// failed.
+/// Checks the dependency of `WHITELIST_CRATES` at the given path. Changes `bad` to `true` if a
+/// check failed.
///
-/// Specifically, this checks that the dependencies are on the WHITELIST.
+/// Specifically, this checks that the dependencies are on the `WHITELIST`.
pub fn check_whitelist(path: &Path, cargo: &Path, bad: &mut bool) {
- // Get dependencies from cargo metadata
+ // Get dependencies from Cargo metadata.
let resolve = get_deps(path, cargo);
- // Get the whitelist into a convenient form
+ // Get the whitelist in a convenient form.
let whitelist: HashSet<_> = WHITELIST.iter().cloned().collect();
- // Check dependencies
+ // Check dependencies.
let mut visited = BTreeSet::new();
let mut unapproved = BTreeSet::new();
for &krate in WHITELIST_CRATES.iter() {
@@ -308,9 +308,9 @@
}
}
-/// Get the dependencies of the crate at the given path using `cargo metadata`.
+/// Gets the dependencies of the crate at the given path using `cargo metadata`.
fn get_deps(path: &Path, cargo: &Path) -> Resolve {
- // Run `cargo metadata` to get the set of dependencies
+ // Run `cargo metadata` to get the set of dependencies.
let output = Command::new(cargo)
.arg("metadata")
.arg("--format-version")
@@ -335,25 +335,25 @@
krate: CrateVersion<'a>,
must_be_on_whitelist: bool,
) -> BTreeSet<Crate<'a>> {
- // Will contain bad deps
+ // This will contain bad deps.
let mut unapproved = BTreeSet::new();
- // Check if we have already visited this crate
+ // Check if we have already visited this crate.
if visited.contains(&krate) {
return unapproved;
}
visited.insert(krate);
- // If this path is in-tree, we don't require it to be on the whitelist
+ // If this path is in-tree, we don't require it to be on the whitelist.
if must_be_on_whitelist {
- // If this dependency is not on the WHITELIST, add to bad set
+ // If this dependency is not on `WHITELIST`, add to bad set.
if !whitelist.contains(&krate.into()) {
unapproved.insert(krate.into());
}
}
- // Do a DFS in the crate graph (it's a DAG, so we know we have no cycles!)
+ // Do a DFS in the crate graph (it's a DAG, so we know we have no cycles!).
let to_check = resolve
.nodes
.iter()
@@ -372,9 +372,10 @@
fn check_crate_duplicate(resolve: &Resolve, bad: &mut bool) {
const FORBIDDEN_TO_HAVE_DUPLICATES: &[&str] = &[
- // These two crates take quite a long time to build, let's not let two
- // versions of them accidentally sneak into our dependency graph to
- // ensure we keep our CI times under control
+ // These two crates take quite a long time to build, so don't allow two versions of them
+ // to accidentally sneak into our dependency graph, in order to ensure we keep our CI times
+ // under control.
+
// "cargo", // FIXME(#53005)
"rustc-ap-syntax",
];
diff --git a/src/tools/tidy/src/errors.rs b/src/tools/tidy/src/errors.rs
index 212b1a4..76ebc9b 100644
--- a/src/tools/tidy/src/errors.rs
+++ b/src/tools/tidy/src/errors.rs
@@ -22,11 +22,13 @@
contents.truncate(0);
t!(t!(File::open(file)).read_to_string(&mut contents));
- // In the register_long_diagnostics! macro, entries look like this:
+ // In the `register_long_diagnostics!` macro, entries look like this:
//
+ // ```
// EXXXX: r##"
// <Long diagnostic message>
// "##,
+ // ```
//
// and these long messages often have error codes themselves inside
// them, but we don't want to report duplicates in these cases. This
diff --git a/src/tools/tidy/src/extdeps.rs b/src/tools/tidy/src/extdeps.rs
index 8b5021e..52e263d 100644
--- a/src/tools/tidy/src/extdeps.rs
+++ b/src/tools/tidy/src/extdeps.rs
@@ -1,33 +1,32 @@
-// ! Check for external package sources. Allow only vendorable packages.
+//! Check for external package sources. Allow only vendorable packages.
use std::fs;
use std::path::Path;
-/// List of whitelisted sources for packages
+/// List of whitelisted sources for packages.
const WHITELISTED_SOURCES: &[&str] = &[
"\"registry+https://github.com/rust-lang/crates.io-index\"",
];
-/// check for external package sources
+/// Checks for external package sources.
pub fn check(path: &Path, bad: &mut bool) {
- // Cargo.lock of rust (tidy runs inside src/)
+ // `Cargo.lock` of rust (tidy runs inside `src/`).
let path = path.join("../Cargo.lock");
- // open and read the whole file
+ // Open and read the whole file.
let cargo_lock = t!(fs::read_to_string(&path));
- // process each line
+ // Process each line.
for line in cargo_lock.lines() {
-
- // consider only source entries
+ // Consider only source entries.
if ! line.starts_with("source = ") {
continue;
}
- // extract source value
+ // Extract source value.
let source = line.splitn(2, '=').nth(1).unwrap().trim();
- // ensure source is whitelisted
+ // Ensure source is whitelisted.
if !WHITELISTED_SOURCES.contains(&&*source) {
println!("invalid source: {}", source);
*bad = true;
diff --git a/src/tools/tidy/src/features.rs b/src/tools/tidy/src/features.rs
index 2435a0cf..16f2e3b 100644
--- a/src/tools/tidy/src/features.rs
+++ b/src/tools/tidy/src/features.rs
@@ -1,12 +1,12 @@
-//! Tidy check to ensure that unstable features are all in order
+//! Tidy check to ensure that unstable features are all in order.
//!
//! This check will ensure properties like:
//!
-//! * All stability attributes look reasonably well formed
-//! * The set of library features is disjoint from the set of language features
-//! * Library features have at most one stability level
-//! * Library features have at most one `since` value
-//! * All unstable lang features have tests to ensure they are actually unstable
+//! * All stability attributes look reasonably well formed.
+//! * The set of library features is disjoint from the set of language features.
+//! * Library features have at most one stability level.
+//! * Library features have at most one `since` value.
+//! * All unstable lang features have tests to ensure they are actually unstable.
use std::collections::HashMap;
use std::fmt;
@@ -172,8 +172,8 @@
pub fn collect_lang_features(base_src_path: &Path, bad: &mut bool) -> Features {
let contents = t!(fs::read_to_string(base_src_path.join("libsyntax/feature_gate.rs")));
- // we allow rustc-internal features to omit a tracking issue.
- // these features must be marked with `// rustc internal` in its own group.
+ // We allow rustc-internal features to omit a tracking issue.
+ // These features must be marked with a `// rustc internal` in its own group.
let mut next_feature_is_rustc_internal = false;
contents.lines().zip(1..)
@@ -327,7 +327,7 @@
}
becoming_feature = None;
if line.contains("rustc_const_unstable(") {
- // const fn features are handled specially
+ // `const fn` features are handled specially.
let feature_name = match find_attr_val(line, "feature") {
Some(name) => name,
None => err!("malformed stability attribute"),
@@ -337,9 +337,8 @@
since: "None".to_owned(),
has_gate_test: false,
// FIXME(#57563): #57563 is now used as a common tracking issue,
- // although we would like to have specific tracking
- // issues for each `rustc_const_unstable` in the
- // future.
+ // although we would like to have specific tracking issues for each
+ // `rustc_const_unstable` in the future.
tracking_issue: Some(57563),
};
mf(Ok((feature_name, feature)), file, i + 1);
diff --git a/src/tools/tidy/src/lib.rs b/src/tools/tidy/src/lib.rs
index 58220c4..a103325 100644
--- a/src/tools/tidy/src/lib.rs
+++ b/src/tools/tidy/src/lib.rs
@@ -1,4 +1,4 @@
-//! Library used by tidy and other tools
+//! Library used by tidy and other tools.
//!
//! This library contains the tidy lints and exposes it
//! to be used by tools.
diff --git a/src/tools/tidy/src/main.rs b/src/tools/tidy/src/main.rs
index e705e2d..81b7b2a 100644
--- a/src/tools/tidy/src/main.rs
+++ b/src/tools/tidy/src/main.rs
@@ -1,4 +1,4 @@
-//! Tidy checks source code in this repository
+//! Tidy checks source code in this repository.
//!
//! This program runs all of the various tidy checks for style, cleanliness,
//! etc. This is run by default on `make check` and as part of the auto
diff --git a/src/tools/tidy/src/pal.rs b/src/tools/tidy/src/pal.rs
index a34712d..ce5e15a 100644
--- a/src/tools/tidy/src/pal.rs
+++ b/src/tools/tidy/src/pal.rs
@@ -1,4 +1,4 @@
-//! Tidy check to enforce rules about platform-specific code in std
+//! Tidy check to enforce rules about platform-specific code in std.
//!
//! This is intended to maintain existing standards of code
//! organization in hopes that the standard library will continue to
@@ -15,15 +15,15 @@
//! Following are the basic rules, though there are currently
//! exceptions:
//!
-//! - core may not have platform-specific code
-//! - libpanic_abort may have platform-specific code
-//! - libpanic_unwind may have platform-specific code
-//! - libunwind may have platform-specific code
-//! - other crates in the std facade may not
-//! - std may have platform-specific code in the following places
-//! - sys/unix/
-//! - sys/windows/
-//! - os/
+//! - core may not have platform-specific code.
+//! - libpanic_abort may have platform-specific code.
+//! - libpanic_unwind may have platform-specific code.
+//! - libunwind may have platform-specific code.
+//! - other crates in the std facade may not.
+//! - std may have platform-specific code in the following places:
+//! - `sys/unix/`
+//! - `sys/windows/`
+//! - `os/`
//!
//! `std/sys_common` should _not_ contain platform-specific code.
//! Finally, because std contains tests with platform-specific
@@ -36,7 +36,7 @@
use std::path::Path;
use std::iter::Iterator;
-// Paths that may contain platform-specific code
+// Paths that may contain platform-specific code.
const EXCEPTION_PATHS: &[&str] = &[
// std crates
"src/libpanic_abort",
@@ -54,10 +54,10 @@
"src/libstd/f64.rs",
"src/libstd/sys_common/mod.rs",
"src/libstd/sys_common/net.rs",
- "src/libterm", // Not sure how to make this crate portable, but test needs it
- "src/libtest", // Probably should defer to unstable std::sys APIs
+ "src/libterm", // Not sure how to make this crate portable, but test crate needs it.
+ "src/libtest", // Probably should defer to unstable `std::sys` APIs.
- // std testing crates, ok for now at least
+ // std testing crates, okay for now at least
"src/libcore/tests",
"src/liballoc/tests/lib.rs",
@@ -79,7 +79,7 @@
pub fn check(path: &Path, bad: &mut bool) {
let mut contents = String::new();
- // Sanity check that the complex parsing here works
+ // Sanity check that the complex parsing here works.
let mut saw_target_arch = false;
let mut saw_cfg_bang = false;
super::walk(path, &mut super::filter_dirs, &mut |file| {
@@ -104,7 +104,7 @@
// For now it's ok to have platform-specific code after 'mod tests'.
let mod_tests_idx = find_test_mod(contents);
let contents = &contents[..mod_tests_idx];
- // Pull out all "cfg(...)" and "cfg!(...)" strings
+ // Pull out all `cfg(...)` and `cfg!(...)` strings.
let cfgs = parse_cfgs(contents);
let mut line_numbers: Option<Vec<usize>> = None;
@@ -121,7 +121,7 @@
};
for (idx, cfg) in cfgs {
- // Sanity check that the parsing here works
+ // Sanity check that the parsing here works.
if !*saw_target_arch && cfg.contains("target_arch") { *saw_target_arch = true }
if !*saw_cfg_bang && cfg.contains("cfg!") { *saw_cfg_bang = true }
@@ -153,7 +153,7 @@
fn find_test_mod(contents: &str) -> usize {
if let Some(mod_tests_idx) = contents.find("mod tests") {
- // Also capture a previous line indicating "mod tests" in cfg-ed out
+ // Also capture a previous line indicating that "mod tests" is cfg'd out.
let prev_newline_idx = contents[..mod_tests_idx].rfind('\n').unwrap_or(mod_tests_idx);
let prev_newline_idx = contents[..prev_newline_idx].rfind('\n');
if let Some(nl) = prev_newline_idx {
@@ -176,7 +176,7 @@
let candidate_cfgs = contents.match_indices("cfg");
let candidate_cfg_idxs = candidate_cfgs.map(|(i, _)| i);
// This is puling out the indexes of all "cfg" strings
- // that appear to be tokens succeeded by a paren.
+ // that appear to be tokens followed by a parenthesis.
let cfgs = candidate_cfg_idxs.filter(|i| {
let pre_idx = i.saturating_sub(*i);
let succeeds_non_ident = !contents.as_bytes().get(pre_idx)
diff --git a/src/tools/tidy/src/style.rs b/src/tools/tidy/src/style.rs
index 42e803b..df54afe 100644
--- a/src/tools/tidy/src/style.rs
+++ b/src/tools/tidy/src/style.rs
@@ -2,12 +2,12 @@
//!
//! Example checks are:
//!
-//! * No lines over 100 characters
-//! * No tabs
-//! * No trailing whitespace
-//! * No CR characters
-//! * No `TODO` or `XXX` directives
-//! * No unexplained ` ```ignore ` or ` ```rust,ignore ` doc tests
+//! * No lines over 100 characters.
+//! * No tabs.
+//! * No trailing whitespace.
+//! * No CR characters.
+//! * No `TODO` or `XXX` directives.
+//! * No unexplained ` ```ignore ` or ` ```rust,ignore ` doc tests.
//!
//! A number of these checks can be opted-out of with various directives like
//! `// ignore-tidy-linelength`.
@@ -34,15 +34,17 @@
when executed when assertions are disabled.
Use llvm::report_fatal_error for increased robustness.";
-/// Parser states for line_is_url.
+/// Parser states for `line_is_url`.
#[derive(PartialEq)]
#[allow(non_camel_case_types)]
-enum LIUState { EXP_COMMENT_START,
- EXP_LINK_LABEL_OR_URL,
- EXP_URL,
- EXP_END }
+enum LIUState {
+ EXP_COMMENT_START,
+ EXP_LINK_LABEL_OR_URL,
+ EXP_URL,
+ EXP_END,
+}
-/// True if LINE appears to be a line comment containing an URL,
+/// Returns whether `line` appears to be a line comment containing an URL,
/// possibly with a Markdown link label in front, and nothing else.
/// The Markdown link label, if present, may not contain whitespace.
/// Lines of this form are allowed to be overlength, because Markdown
@@ -77,7 +79,7 @@
state == EXP_END
}
-/// True if LINE is allowed to be longer than the normal limit.
+/// Returns whether `line` is allowed to be longer than the normal limit.
/// Currently there is only one exception, for long URLs, but more
/// may be added in the future.
fn long_line_is_ok(line: &str) -> bool {
@@ -109,6 +111,7 @@
let skip_tab = contents.contains("ignore-tidy-tab");
let skip_length = contents.contains("ignore-tidy-linelength");
let skip_end_whitespace = contents.contains("ignore-tidy-end-whitespace");
+ let skip_copyright = contents.contains("ignore-tidy-copyright");
let mut trailing_new_lines = 0;
for (i, line) in contents.split('\n').enumerate() {
let mut err = |msg: &str| {
@@ -118,13 +121,13 @@
&& !long_line_is_ok(line) {
err(&format!("line longer than {} chars", COLS));
}
- if line.contains('\t') && !skip_tab {
+ if !skip_tab && line.contains('\t') {
err("tab character");
}
if !skip_end_whitespace && (line.ends_with(' ') || line.ends_with('\t')) {
err("trailing whitespace");
}
- if line.contains('\r') && !skip_cr {
+ if !skip_cr && line.contains('\r') {
err("CR character");
}
if filename != "style.rs" {
@@ -135,6 +138,13 @@
err("XXX is deprecated; use FIXME")
}
}
+ if !skip_copyright && (line.starts_with("// Copyright") ||
+ line.starts_with("# Copyright") ||
+ line.starts_with("Copyright"))
+ && (line.contains("Rust Developers") ||
+ line.contains("Rust Project Developers")) {
+ err("copyright notices attributed to the Rust Project Developers are deprecated");
+ }
if line.ends_with("```ignore") || line.ends_with("```rust,ignore") {
err(UNEXPLAINED_IGNORE_DOCTEST_INFO);
}
diff --git a/src/tools/tidy/src/ui_tests.rs b/src/tools/tidy/src/ui_tests.rs
index fa71980..b572b52 100644
--- a/src/tools/tidy/src/ui_tests.rs
+++ b/src/tools/tidy/src/ui_tests.rs
@@ -10,14 +10,16 @@
&mut |file_path| {
if let Some(ext) = file_path.extension() {
if ext == "stderr" || ext == "stdout" {
- // Test output filenames have the format:
+ // Test output filenames have one of the formats:
+ // ```
// $testname.stderr
// $testname.$mode.stderr
// $testname.$revision.stderr
// $testname.$revision.$mode.stderr
+ // ```
//
// For now, just make sure that there is a corresponding
- // $testname.rs file.
+ // `$testname.rs` file.
let testname = file_path
.file_name()
.unwrap()
diff --git a/src/tools/tidy/src/unstable_book.rs b/src/tools/tidy/src/unstable_book.rs
index c09a049..bd3b1f0 100644
--- a/src/tools/tidy/src/unstable_book.rs
+++ b/src/tools/tidy/src/unstable_book.rs
@@ -11,22 +11,24 @@
pub const LIB_FEATURES_DIR: &str = "library-features";
-/// Build the path to the Unstable Book source directory from the Rust 'src' directory
+/// Builds the path to the Unstable Book source directory from the Rust 'src' directory.
pub fn unstable_book_path(base_src_path: &path::Path) -> path::PathBuf {
base_src_path.join(PATH_STR)
}
-/// Directory where the features are documented within the Unstable Book source directory
+/// Builds the path to the directory where the features are documented within the Unstable Book
+/// source directory.
pub fn unstable_book_lang_features_path(base_src_path: &path::Path) -> path::PathBuf {
unstable_book_path(base_src_path).join(LANG_FEATURES_DIR)
}
-/// Directory where the features are documented within the Unstable Book source directory
+/// Builds the path to the directory where the features are documented within the Unstable Book
+/// source directory.
pub fn unstable_book_lib_features_path(base_src_path: &path::Path) -> path::PathBuf {
unstable_book_path(base_src_path).join(LIB_FEATURES_DIR)
}
-/// Test to determine if DirEntry is a file
+/// Tests whether `DirEntry` is a file.
fn dir_entry_is_file(dir_entry: &fs::DirEntry) -> bool {
dir_entry
.file_type()
@@ -34,7 +36,7 @@
.is_file()
}
-/// Retrieve names of all unstable features
+/// Retrieves names of all unstable features.
pub fn collect_unstable_feature_names(features: &Features) -> BTreeSet<String> {
features
.iter()
@@ -56,24 +58,23 @@
/// Retrieve file names of all library feature sections in the Unstable Book with:
///
-/// * hyphens replaced by underscores
-/// * the markdown suffix ('.md') removed
+/// * hyphens replaced by underscores,
+/// * the markdown suffix ('.md') removed.
fn collect_unstable_book_lang_features_section_file_names(base_src_path: &path::Path)
-> BTreeSet<String> {
collect_unstable_book_section_file_names(&unstable_book_lang_features_path(base_src_path))
}
-/// Retrieve file names of all language feature sections in the Unstable Book with:
+/// Retrieves file names of all language feature sections in the Unstable Book with:
///
-/// * hyphens replaced by underscores
-/// * the markdown suffix ('.md') removed
+/// * hyphens replaced by underscores,
+/// * the markdown suffix ('.md') removed.
fn collect_unstable_book_lib_features_section_file_names(base_src_path: &path::Path)
-> BTreeSet<String> {
collect_unstable_book_section_file_names(&unstable_book_lib_features_path(base_src_path))
}
pub fn check(path: &path::Path, bad: &mut bool) {
-
// Library features
let lang_features = collect_lang_features(path, bad);
@@ -100,7 +101,7 @@
let unstable_book_lang_features_section_file_names =
collect_unstable_book_lang_features_section_file_names(path);
- // Check for Unstable Book sections that don't have a corresponding unstable feature
+ // Check for Unstable Book sections that don't have a corresponding unstable feature.
for feature_name in &unstable_book_lang_features_section_file_names -
&unstable_lang_feature_names {
tidy_error!(bad,
@@ -109,8 +110,8 @@
feature_name)
}
- // List unstable features that don't have Unstable Book sections
- // Remove the comment marker if you want the list printed
+ // List unstable features that don't have Unstable Book sections.
+ // Remove the comment marker if you want the list printed.
/*
println!("Lib features without unstable book sections:");
for feature_name in &unstable_lang_feature_names -