rust/compiler
bors b09dad3edd Auto merge of #86231 - nagisa:nagisa/abi-allowlist, r=petrochenkov
Replace per-target ABI denylist with an allowlist

It makes very little sense to maintain denylists of ABIs when, as far as
non-generic ABIs are concerned, targets usually only support a small
subset of the available ABIs.

This has historically been a cause of bugs such as us allowing use of
the platform-specific ABIs on x86 targets – these in turn would cause
LLVM errors or assertions to fire.

In this PR we got rid of the per-target ABI denylists, and instead compute
which ABIs are supported with a simple match based on, mostly, the
`Target::arch` field. Among other things, this makes it impossible to
forget to consider this problem (in either direction) and forces one to
consider what the ABI support looks like when adding an ABI (rarely)
rather than target (often), which should hopefully also reduce the
cognitive load on both contributors as well as reviewers.

Fixes #57182

Sponsored by: standard.ai

---

## Summary for teams

One significant user-facing change after this PR is that there's now a future compat warning when building…

* `stdcall`, `fastcall`, `thiscall` using code with targets other than 32-bit x86 (i386...i686) or *-windows-*;
* `vectorcall` using code when building for targets other than x86 (either 32 or 64 bit) or *-windows-*.

Previously these ABIs have been accepted much more broadly, even for architectures and targets where this made no sense (e.g. on wasm32) and would fall back to the C ABI. In practice this doesn't seem to be used too widely and the [breakages in crater](https://github.com/rust-lang/rust/pull/86231#issuecomment-866300943) that we see are mostly about Windows-specific code that was missing relevant `cfg`s and just happened to successfully `check` on Linux for one reason or another.

The intention is that this warning becomes a hard error after some time.
2021-07-06 14:02:19 +00:00
..
rustc use jemallocator in rustc/rustdoc 2021-04-04 14:10:26 -07:00
rustc_apfloat Use HTTPS links where possible 2021-06-23 16:26:46 -04:00
rustc_arena Remove (lots of) dead code 2021-03-27 22:16:33 -04:00
rustc_ast Auto merge of #86190 - asquared31415:extern-main-86110-fix, r=varkor 2021-07-01 06:39:37 +00:00
rustc_ast_lowering Arena-allocate Crate during lowering. 2021-06-30 20:31:56 +02:00
rustc_ast_passes Auto merge of #86164 - FabianWolff:issue-86053, r=davidtwco 2021-06-17 06:34:12 +00:00
rustc_ast_pretty rustc_ast_pretty: Don't print space after $ 2021-07-03 16:35:18 -07:00
rustc_attr remove cfg(bootstrap) 2021-05-24 11:07:48 -04:00
rustc_builtin_macros Auto merge of #86599 - Amanieu:asm_raw, r=nagisa 2021-06-25 20:44:28 +00:00
rustc_codegen_cranelift Remove LibSource 2021-07-05 10:49:07 +02:00
rustc_codegen_llvm Auto merge of #85269 - dpaoliello:dpaoliello/DebugSymbols, r=michaelwoerister 2021-07-02 17:19:32 +00:00
rustc_codegen_ssa Deduplicate info.used_crate_source indexing 2021-07-05 17:44:15 +02:00
rustc_data_structures rustc_data_structures: Drop unused dependency on crossbeam-utils 2021-06-25 01:03:16 -07:00
rustc_driver Auto merge of #80182 - in42:stack_trace, r=tmandry 2021-07-02 05:40:51 +00:00
rustc_error_codes Rollup merge of #86477 - tlyu:e0716-clarification, r=JohnTitor 2021-07-05 07:13:22 +09:00
rustc_errors Update to new bootstrap compiler 2021-06-28 11:30:49 -04:00
rustc_expand Store macro parent module in ExpnData. 2021-07-06 08:07:06 +02:00
rustc_feature Panic on trying to find non-feature incompleteness 2021-06-28 18:37:54 -04:00
rustc_fs_util Optimize away a fs::metadata call. 2021-01-06 08:33:15 -08:00
rustc_graphviz Use HTTPS links where possible 2021-06-23 16:26:46 -04:00
rustc_hir Auto merge of #86143 - bjorn3:revert_revert_merge_crate_disambiguator, r=michaelwoerister 2021-07-06 11:31:59 +00:00
rustc_hir_pretty Rollup merge of #86358 - klensy:pp-loop, r=Mark-Simulacrum 2021-06-29 00:26:55 +09:00
rustc_incremental Revert "Revert "Merge CrateDisambiguator into StableCrateId"" 2021-07-06 11:28:04 +02:00
rustc_index Remove unused feature gates 2021-05-31 13:55:43 +02:00
rustc_infer remove unused Option 2021-07-04 11:09:32 -04:00
rustc_interface Revert "Revert "Merge CrateDisambiguator into StableCrateId"" 2021-07-06 11:28:04 +02:00
rustc_lexer Rename 'bad prefix' to 'unknown prefix'. 2021-06-26 23:11:14 +08:00
rustc_lint Auto merge of #82985 - cjgillot:lint, r=jackh726 2021-07-06 00:33:21 +00:00
rustc_lint_defs Replace per-target ABI denylist with an allowlist 2021-07-06 13:12:15 +03:00
rustc_llvm Auto merge of #84171 - ricobbe:raw-dylib-via-llvm, r=petrochenkov 2021-06-06 03:59:17 +00:00
rustc_macros Lint for unused borrows as part of UNUSED_MUST_USE 2021-06-18 15:09:40 +08:00
rustc_metadata Revert "Revert "Merge CrateDisambiguator into StableCrateId"" 2021-07-06 11:28:04 +02:00
rustc_middle Auto merge of #86143 - bjorn3:revert_revert_merge_crate_disambiguator, r=michaelwoerister 2021-07-06 11:31:59 +00:00
rustc_mir Store macro parent module in ExpnData. 2021-07-06 08:07:06 +02:00
rustc_mir_build fixup! Editon 2021 enables precise capture 2021-06-27 21:46:55 -04:00
rustc_parse Auto merge of #86617 - joshtriplett:prune-dependencies, r=Mark-Simulacrum 2021-07-01 03:49:47 +00:00
rustc_parse_format remove cfg(bootstrap) 2021-05-24 11:07:48 -04:00
rustc_passes Auto merge of #86571 - fee1-dead:const-trait-impl-fix, r=jackh726 2021-07-03 07:24:24 +00:00
rustc_plugin_impl Use () for plugin_registrar_fn. 2021-05-12 13:58:43 +02:00
rustc_privacy Add more tests + visit_ty in some places 2021-06-09 19:28:41 +01:00
rustc_query_impl rustc_query_impl: Remove unused dependencies 2021-06-25 01:13:00 -07:00
rustc_query_system Auto merge of #85154 - cjgillot:lessfn, r=bjorn3 2021-06-15 14:52:58 +00:00
rustc_resolve Auto merge of #86143 - bjorn3:revert_revert_merge_crate_disambiguator, r=michaelwoerister 2021-07-06 11:31:59 +00:00
rustc_save_analysis Revert "Revert "Merge CrateDisambiguator into StableCrateId"" 2021-07-06 11:28:04 +02:00
rustc_serialize Emit warnings for unused fields in custom targets. 2021-06-17 21:48:02 +02:00
rustc_session Revert "Revert "Merge CrateDisambiguator into StableCrateId"" 2021-07-06 11:28:04 +02:00
rustc_span Auto merge of #86143 - bjorn3:revert_revert_merge_crate_disambiguator, r=michaelwoerister 2021-07-06 11:31:59 +00:00
rustc_symbol_mangling Revert "Revert "Merge CrateDisambiguator into StableCrateId"" 2021-07-06 11:28:04 +02:00
rustc_target Replace per-target ABI denylist with an allowlist 2021-07-06 13:12:15 +03:00
rustc_trait_selection Auto merge of #86674 - Aaron1011:new-querify-limits, r=michaelwoerister 2021-07-05 16:30:53 +00:00
rustc_traits Combine individual limit queries into single limits query 2021-07-04 13:02:51 -05:00
rustc_ty_utils Revert "Revert "Merge CrateDisambiguator into StableCrateId"" 2021-07-06 11:28:04 +02:00
rustc_type_ir Remove unused feature gates 2021-05-31 13:55:43 +02:00
rustc_typeck Auto merge of #86231 - nagisa:nagisa/abi-allowlist, r=petrochenkov 2021-07-06 14:02:19 +00:00