rust/tests/ui/check-cfg
León Orell Valerian Liehr d81701b610
Rollup merge of #128045 - pnkfelix:rustc-contracts, r=oli-obk
#[contracts::requires(...)]  + #[contracts::ensures(...)]

cc https://github.com/rust-lang/rust/issues/128044

Updated contract support: attribute syntax for preconditions and postconditions, implemented via a series of desugarings  that culminates in:
1. a compile-time flag (`-Z contract-checks`) that, similar to `-Z ub-checks`, attempts to ensure that the decision of enabling/disabling contract checks is delayed until the end user program is compiled,
2. invocations of lang-items that handle invoking the precondition,  building a checker for the post-condition, and invoking that post-condition checker at the return sites for the function, and
3. intrinsics for the actual evaluation of pre- and post-condition predicates that third-party verification tools can intercept and reinterpret for their own purposes (e.g. creating shims of behavior that abstract away the function body and replace it solely with the pre- and post-conditions).

Known issues:

 * My original intent, as described in the MCP (https://github.com/rust-lang/compiler-team/issues/759) was   to have a rustc-prefixed attribute namespace (like   rustc_contracts::requires). But I could not get things working when I tried   to do rewriting via a rustc-prefixed builtin attribute-macro. So for now it  is called `contracts::requires`.

 * Our attribute macro machinery does not provide direct support for attribute arguments that are parsed like rust expressions. I spent some time trying to add that (e.g. something that would parse the attribute arguments as an AST while treating the remainder of the items as a token-tree), but its too big a lift for me to undertake. So instead I hacked in something approximating that goal, by semi-trivially desugaring the token-tree attribute contents into internal AST constucts. This may be too fragile for the long-term.
   * (In particular, it *definitely* breaks when you try to add a contract to a function like this: `fn foo1(x: i32) -> S<{ 23 }> { ... }`, because its token-tree based search for where to inject the internal AST constructs cannot immediately see that the `{ 23 }` is within a generics list. I think we can live for this for the short-term, i.e. land the work, and continue working on it while in parallel adding a new attribute variant that takes a token-tree attribute alongside an AST annotation, which would completely resolve the issue here.)

* the *intent* of `-Z contract-checks` is that it behaves like `-Z ub-checks`, in that we do not prematurely commit to including or excluding the contract evaluation in upstream crates (most notably, `core` and `std`). But the current test suite does not actually *check* that this is the case. Ideally the test suite would be extended with a multi-crate test that explores the matrix of enabling/disabling contracts on both the upstream lib and final ("leaf") bin crates.
2025-02-05 05:03:01 +01:00
..
auxiliary Add Cargo revision and values to the check-cfg macro test 2024-11-19 22:48:36 +01:00
allow-at-crate-level.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
allow-macro-cfg.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
allow-same-level.rs Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
allow-same-level.stderr Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
allow-top-level.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
allow-upper-level.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
and-more-diagnostic.rs Remove the -test suffix from normalize directives 2024-12-27 19:58:16 +11:00
and-more-diagnostic.stderr Add specific test for check-cfg "and X more" diagnostic 2024-12-01 20:51:52 +01:00
cargo-build-script.rs Don't suggest adding the unexpected cfgs the build-script it-self 2024-05-22 20:58:57 +02:00
cargo-build-script.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
cargo-feature.none.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
cargo-feature.rs Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
cargo-feature.some.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
cfg-value-for-cfg-name-duplicate.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
cfg-value-for-cfg-name-duplicate.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
cfg-value-for-cfg-name-multiple.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
cfg-value-for-cfg-name-multiple.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
cfg-value-for-cfg-name.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
cfg-value-for-cfg-name.stderr Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
compact-names.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
compact-names.stderr Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
compact-values.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
compact-values.stderr Convert unexpected_cfg_{name,value} to struct diagnostics 2024-05-21 20:16:39 +00:00
concat-values.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
concat-values.stderr Convert unexpected_cfg_{name,value} to struct diagnostics 2024-05-21 20:16:39 +00:00
diagnotics.cargo.stderr Fix quote escaping inside check-cfg value 2024-05-20 11:44:09 +02:00
diagnotics.rs Fix quote escaping inside check-cfg value 2024-05-20 11:44:09 +02:00
diagnotics.rustc.stderr Fix quote escaping inside check-cfg value 2024-05-20 11:44:09 +02:00
empty-values.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
empty-values.stderr compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
exhaustive-names-values.empty_cfg.stderr Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
exhaustive-names-values.feature.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
exhaustive-names-values.full.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
exhaustive-names-values.rs Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
exhaustive-names.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
exhaustive-names.stderr Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
exhaustive-values.empty_cfg.stderr Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
exhaustive-values.rs Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
exhaustive-values.without_names.stderr Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
invalid-arguments.any_values.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.anything_else.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.boolean.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.cfg_none.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.giberich.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.ident_in_values_1.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.ident_in_values_2.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.mixed_any.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.mixed_values_any.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.multiple_any.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.multiple_values.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.multiple_values_any.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.none_not_empty.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.not_empty_any.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.not_empty_values_any.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.rs Reject leading unsafe in cfg!(...) and --check-cfg. 2024-09-30 12:15:08 +02:00
invalid-arguments.string_for_name_1.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.string_for_name_2.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.unknown_meta_item_1.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.unknown_meta_item_2.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.unknown_meta_item_3.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.unsafe_attr.stderr Reject leading unsafe in cfg!(...) and --check-cfg. 2024-09-30 12:15:08 +02:00
invalid-arguments.unterminated.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.values_any_before_ident.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
invalid-arguments.values_any_missing_values.stderr Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
mix.rs Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
mix.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
my-awesome-platform.json Honor current target when checking conditional compilation values 2023-03-09 21:55:00 +01:00
no-expected-values.empty.stderr Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
no-expected-values.mixed.stderr Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
no-expected-values.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
no-expected-values.simple.stderr Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
order-independant.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
order-independant.values_after.stderr compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
order-independant.values_before.stderr compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
raw-keywords.edition2015.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
raw-keywords.edition2021.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
raw-keywords.rs Improve handling of raw-idents in check-cfg 2024-09-18 11:07:32 +02:00
report-in-external-macros.cargo.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
report-in-external-macros.rs Add Cargo revision and values to the check-cfg macro test 2024-11-19 22:48:36 +01:00
report-in-external-macros.rustc.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
stmt-no-ice.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
stmt-no-ice.stderr Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
target_feature.rs Remove the -test suffix from normalize directives 2024-12-27 19:58:16 +11:00
target_feature.stderr Rollup merge of #134814 - sayantn:keylocker, r=oli-obk 2025-02-04 06:13:58 +01:00
unexpected-cfg-name.rs Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
unexpected-cfg-name.stderr Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
unexpected-cfg-value.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
unexpected-cfg-value.stderr Convert unexpected_cfg_{name,value} to struct diagnostics 2024-05-21 20:16:39 +00:00
unknown-values.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
values-none.concat_1.stderr Fix test problems discovered by the revision check 2024-05-09 14:47:09 +10:00
values-none.concat_2.stderr Fix test problems discovered by the revision check 2024-05-09 14:47:09 +10:00
values-none.explicit.stderr compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
values-none.implicit.stderr compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
values-none.rs Fix test problems discovered by the revision check 2024-05-09 14:47:09 +10:00
values-none.simple.stderr Fix test problems discovered by the revision check 2024-05-09 14:47:09 +10:00
values-target-json.rs compiletest: add no-auto-check-cfg directive 2024-05-04 11:30:38 +02:00
well-known-names.rs Filter well known names from check-cfg diagnostics 2025-01-25 12:27:33 +01:00
well-known-names.stderr Update test output to include check_contracts cfg 2025-02-03 13:55:15 -08:00
well-known-values.rs Make the test cfg a "userspace" check-cfg 2025-01-02 16:49:55 +01:00
well-known-values.stderr Rollup merge of #134358 - workingjubilee:configure-my-riscv-abi, r=fmease 2025-01-26 01:51:15 -05:00