rust/tests/ui
Matthias Krüger e903b29dc3
Rollup merge of #129021 - compiler-errors:ptr-cast-outlives, r=lcnr
Check WF of source type's signature on fn pointer cast

This PR patches the implied bounds holes slightly for #129005, #25860.

Like most implied bounds related unsoundness fixes, this isn't complete w.r.t. higher-ranked function signatures, but I believe it implements a pretty good heuristic for now.

### What does this do?

This PR makes a partial patch for a soundness hole in a `FnDef` -> `FnPtr` "reifying" pointer cast where we were never checking that the signature we are casting *from* is actually well-formed. Because of this, and because `FnDef` doesn't require its signature to be well-formed (just its predicates must hold), we are essentially allowed to "cast away" implied bounds that are assumed within the body of the `FnDef`:

```
fn foo<'a, 'b, T>(_: &'a &'b (), v: &'b T) -> &'a T { v }

fn bad<'short, T>(x: &'short T) -> &'static T {
    let f: fn(_, &'short T) -> &'static T = foo;
    f(&&(), x)
}
```

In this example, subtyping ends up casting the `_` type (which should be `&'static &'short ()`) to some other type that no longer serves as a "witness" to the lifetime relationship `'short: 'static` which would otherwise be required for this call to be WF. This happens regardless of if `foo`'s lifetimes are early- or late-bound.

This PR implements two checks:
1. We check that the signature of the `FnDef` is well-formed *before* casting it. This ensures that there is at least one point in the MIR where we ensure that the `FnDef`'s implied bounds are actually satisfied by the caller.
2. Implements a special case where if we're casting from a higher-ranked `FnDef` to a non-higher-ranked, we instantiate the binder of the `FnDef` with *infer vars* and ensure that it is a supertype of the target of the cast.

The (2.) is necessary to validate that these pointer casts are valid for higher-ranked `FnDef`. Otherwise, the example above would still pass even if `help`'s `'a` lifetime were late-bound.

### Further work

The WF checks for function calls are scattered all over the MIR. We check the WF of args in call terminators, we check the WF of `FnDef` when we create a `const` operand referencing it, and we check the WF of the return type in #115538, to name a few.

One way to make this a bit cleaner is to simply extend #115538 to always check that the signature is WF for `FnDef` types. I may do this as a follow-up, but I wanted to keep this simple since this leads to some pretty bad NLL diagnostics regressions, and AFAICT this solution is *complete enough*.

### Crater triage

Done here: https://github.com/rust-lang/rust/pull/129021#issuecomment-2297702647

r? lcnr
2024-09-06 07:33:56 +02:00
..
abi ABI compat check: detect unadjusted ABI mismatches 2024-08-27 09:04:59 +02:00
alloc-error
allocator
annotate-snippet
anon-params More accurate span for anonymous argument suggestion 2024-07-18 00:19:27 +00:00
argfile compiletest: add enable-by-default check-cfg 2024-05-04 11:30:38 +02:00
argument-suggestions Revert suggestion verbosity change 2024-07-22 22:51:53 +00:00
array-slice-vec stabilize is_sorted 2024-07-28 03:11:54 +08:00
asm fix ICE when asm_const and const_refs_to_static are combined 2024-09-04 20:06:38 +02:00
associated-consts avoid creating an Instance only to immediately disassemble it again 2024-07-18 11:58:16 +02:00
associated-inherent-types Get rid of predicates_defined_on 2024-08-24 18:25:41 -04:00
associated-item
associated-type-bounds Add Tests 2024-07-29 21:47:19 -04:00
associated-types Peel off explicit (or implicit) deref before suggesting clone on move error in borrowck 2024-07-26 14:41:56 -04:00
async-await Replace walk with visit so we dont skip outermost expr kind in def collector 2024-09-01 11:16:50 -04:00
attributes New #[rustc_pub_transparent] attribute 2024-08-24 23:05:37 +03:00
auto-traits Don't ICE when auto trait has assoc ty in old solver 2024-07-24 17:19:44 -04:00
autoref-autoderef
auxiliary Move 100 entries from tests/ui into subdirs 2024-05-20 19:55:59 -07:00
backtrace the output in stderr expects panic-unwind 2024-07-30 08:16:47 +02:00
bench
binding Stabilize exclusive_range 2024-05-02 19:42:31 -04:00
binop Peel off explicit (or implicit) deref before suggesting clone on move error in borrowck 2024-07-26 14:41:56 -04:00
blind Accurate use rename suggestion span 2024-07-18 00:00:04 +00:00
block-result
borrowck Do not rely on names to find lifetimes. 2024-08-22 02:20:05 +00:00
box Mention when type parameter could be Clone 2024-04-24 22:21:15 +00:00
btreemap Peel off explicit (or implicit) deref before suggesting clone on move error in borrowck 2024-07-26 14:41:56 -04:00
builtin-superkinds
c-variadic Use ordinal number in argument error 2024-07-14 13:50:09 +09:00
cast Arbitrary self types v2: pointers feature gate. 2024-08-27 17:32:35 +00:00
cfg fmt-debug option 2024-08-28 23:32:40 +01:00
check-cfg Port std library to RTEMS 2024-09-03 09:19:29 +02:00
closure_context
closure-expected-type
closures document & impl the transmutation modeled by BikeshedIntrinsicFrom 2024-08-23 14:37:36 +00:00
cmse-nonsecure improve error reporting 2024-07-18 14:32:10 +02:00
codegen Add a bunch of tests for #107975 2024-07-19 23:27:42 +03:00
codemap_tests Update tests 2024-08-10 12:07:17 +02:00
coercion Inline expected_inputs_for_expected_output into check_argument_types/check_expr_struct_fields 2024-08-31 16:08:29 -04:00
coherence do not attempt to prove unknowable goals 2024-09-03 08:35:23 +02:00
coinduction
command
compare-method show unit output when there is only output diff in diagnostics 2024-07-06 21:00:30 +08:00
compiletest-self-test compiletest: properly handle revisioned run-rustfix tests 2024-04-07 17:06:15 +00:00
conditional-compilation Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
confuse-field-and-method
const_prop Allow type_of to return partially non-error types if the type was already tainted 2024-05-28 11:55:20 +00:00
const-generics elided_named_lifetimes: bless & add tests 2024-08-31 15:35:42 +03:00
const-ptr on a signed deref check, mention the right pointer in the error 2024-08-01 14:25:19 +02:00
consts propagate tainted_by_errors in MirBorrowckCtxt::emit_errors 2024-09-04 20:06:33 +02:00
coroutine Create opaque definitions in resolver. 2024-08-31 20:14:43 +00:00
coverage-attr Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
crate-loading
cross
cross-crate Closures are recursively reachable 2024-06-04 22:50:35 +02:00
custom_test_frameworks
cycle-trait
debuginfo Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
definition-reachable
delegation Rollup merge of #128524 - chenyukang:yukang-fix-127930-invalid-outer-style-sugg, r=cjgillot 2024-08-24 21:03:31 -05:00
dep-graph
deployment-target Avoid a couple of unnecessary EarlyDiagCtxt uses 2024-06-22 17:06:47 +00:00
deprecation Deprecate no-op codegen option -Cinline-threshold=... 2024-06-14 20:25:17 +02:00
deref-patterns Move some tests 2024-04-21 15:43:43 -03:00
derived-errors
derives Rollup merge of #127907 - RalfJung:byte_slice_in_packed_struct_with_derive, r=nnethercote 2024-08-05 05:40:19 +02:00
deriving derive(SmartPointer): assume pointee from the single generic and better error messages 2024-08-29 01:39:52 +08:00
dest-prop
destructuring-assignment
diagnostic_namespace Add test 2024-08-09 22:02:23 -04:00
diagnostic-flags tests: remove few ignore-stage2 2024-04-25 10:48:11 +03:00
diagnostic-width
did_you_mean Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
directory_ownership
disallowed-deconstructing
dollar-crate
drop lint on tail expr drop order change in Edition 2024 2024-08-21 01:05:21 +08:00
drop-bounds
dropck Rollup merge of #128438 - Bryanskiy:empty-array-dropck, r=lcnr 2024-07-31 23:20:12 +02:00
dst Detect * operator on !Sized expression 2024-08-08 17:35:40 +00:00
duplicate Accurate use rename suggestion span 2024-07-18 00:00:04 +00:00
dyn-drop
dyn-keyword Rollup merge of #127692 - veera-sivarajan:bugfix-125139, r=estebank 2024-09-03 19:13:23 +02:00
dyn-star Fix test problems discovered by the revision check 2024-05-09 14:47:09 +10:00
dynamically-sized-types
editions Point out exactly what obligation will fail 2024-06-13 21:47:43 -04:00
empty More accurate suggestions when writing wrong style of enum variant literal 2024-07-18 18:20:35 +00:00
entry-point
enum More accurate suggestions when writing wrong style of enum variant literal 2024-07-18 18:20:35 +00:00
enum-discriminant Update tests 2024-08-10 12:07:17 +02:00
env-macro
error-codes Rewrite lint_expectations in a single pass. 2024-08-31 14:00:54 +00:00
error-emitter tests: remove some trailing ws 2024-04-27 10:54:31 +03:00
errors rewrite and rename issue-107094 to rmake 2024-07-22 10:12:00 -04:00
explicit
explicit-tail-calls doc fixups from review 2024-07-07 18:16:38 +02:00
expr More accurate suggestions when writing wrong style of enum variant literal 2024-07-18 18:20:35 +00:00
extern Rollup merge of #128735 - jieyouxu:pr-120176-revive, r=cjgillot 2024-08-24 21:03:31 -05:00
extern-flag Rollup merge of #125913 - fmease:early-lints-spruce-up-some-diags, r=Nadrieril 2024-06-11 09:14:34 +01:00
feature-gates Rollup merge of #129664 - adetaylor:arbitrary-self-types-pointers-feature-gate, r=wesleywiser 2024-09-05 03:47:42 +02:00
ffi-attrs Move 100 entries from tests/ui into subdirs 2024-05-20 19:55:59 -07:00
fmt fmt-debug option 2024-08-28 23:32:40 +01:00
fn Enforce supertrait outlives obligations hold when confirming impl 2024-08-05 09:55:14 -04:00
fn-main Move 100 entries from tests/ui into subdirs 2024-05-20 19:55:59 -07:00
for Report better WF obligation leaf obligations in new solver 2024-05-16 21:08:42 -04:00
for-loop-while Remove note about iteration count in coerce 2024-04-30 12:46:59 +05:30
foreign Don't ICE on Fn trait error for foreign fn 2024-08-16 14:10:06 -04:00
fuel Move 100 entries from tests/ui into subdirs 2024-05-20 19:55:59 -07:00
fully-qualified-type
function-pointer
functional-struct-update review comments 2024-04-12 20:57:07 +00:00
functions-closures
generic-associated-types Pretty-print own args of existential projections 2024-08-22 06:22:36 +02:00
generic-const-items Split part of adt_const_params into unsized_const_params 2024-07-17 11:01:29 +01:00
generics elided_named_lifetimes: bless & add tests 2024-08-31 15:35:42 +03:00
half-open-range-patterns Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
hashmap
hello_world
higher-ranked Use the right type when coercing fn items to pointers 2024-08-13 16:23:20 -04:00
hygiene Bless tests 2024-08-02 11:34:54 +00:00
illegal-sized-bound
impl-header-lifetime-elision And more general error 2024-05-24 11:20:33 -04:00
impl-trait Don't worry about uncaptured contravariant lifetimes if they outlive a captured lifetime 2024-09-05 06:34:42 -04:00
implied-bounds Adjust tests 2024-09-05 06:37:38 -04:00
imports skip updating when external binding is existed 2024-08-20 20:34:13 +08:00
include-macros
incoherent-inherent-impls Fix remaining cases 2024-06-21 19:00:18 -04:00
indexing check index value <= 0xFFFF_FF00 2024-06-01 09:40:46 +08:00
inference Rollup merge of #129664 - adetaylor:arbitrary-self-types-pointers-feature-gate, r=wesleywiser 2024-09-05 03:47:42 +02:00
infinite Automatically taint InferCtxt when errors are emitted 2024-06-26 16:01:45 +00:00
inherent-impls-overlap-check
inline-const Rollup merge of #128701 - veera-sivarajan:fix-128604, r=estebank 2024-09-03 19:13:23 +02:00
instrument-coverage Fix remaining cases 2024-06-21 19:00:18 -04:00
instrument-xray
interior-mutability
internal stabilize const_fn_floating_point_arithmetic 2024-08-22 08:25:54 +02:00
internal-lints Use the rustc_private libc less in tests 2024-04-15 08:54:11 -04:00
intrinsics interpret: add missing alignment check in raw_eq 2024-08-27 19:29:52 +02:00
invalid
invalid-compile-flags Add --print=check-cfg to get the expected configs 2024-04-25 07:58:31 +02:00
invalid-module-declaration
invalid-self-argument
io-checks Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
issues Rollup merge of #128467 - estebank:unsized-args, r=cjgillot 2024-08-24 21:03:30 -05:00
iterators Gate the type length limit check behind a nightly flag 2024-07-12 21:16:09 -04:00
json On short error format, append primary span label to message 2024-08-06 04:08:10 +00:00
keyword Structured suggestion for extern crate foo when foo isn't resolved in import 2024-07-29 23:49:51 +00:00
kindck Harmonize use of leaf and root obligation in trait error reporting 2024-06-12 20:57:23 -04:00
label Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
lang-items Let InstCombine remove Clone shims inside Clone shims 2024-07-25 15:14:42 -04:00
late-bound-lifetimes Revert suggestion verbosity change 2024-07-22 22:51:53 +00:00
layout Rollup merge of #126152 - RalfJung:size_of_val_raw, r=saethlin 2024-07-24 18:00:35 +02:00
lazy-type-alias LTA: Diag: Detect bivariant ty params that are only used recursively 2024-07-19 18:53:40 +02:00
lazy-type-alias-impl-trait
let-else Make ; suggestions inline 2024-07-12 03:22:32 +00:00
lexer Be more accurate about calculating display_col from a BytePos 2024-07-18 20:08:38 +00:00
lifetimes elided_named_lifetimes: bless & add tests 2024-08-31 15:35:42 +03:00
limits Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
linkage-attr unreferenced-used-static: run test everywhere 2024-06-29 13:02:59 +02:00
lint Auto merge of #127313 - cjgillot:single-expect, r=jieyouxu 2024-09-01 15:50:48 +00:00
liveness Better span for "make binding mutable" suggestion 2024-07-04 02:02:21 +00:00
loops Fix ... in multline code-skips in suggestions 2024-06-20 04:25:17 +00:00
lowering Change wording 2024-04-29 14:53:38 +02:00
lto Don't output test artifacts into working directory 2024-07-21 13:45:55 -04:00
lub-glb
macro_backtrace
macros stabilize raw_ref_op 2024-08-18 19:46:53 +02:00
malformed Be more accurate about calculating display_col from a BytePos 2024-07-18 20:08:38 +00:00
manual Make more of the test suite run on Mac Catalyst 2024-05-28 12:31:33 +02:00
marker_trait_attr
match Match ergonomics 2024: test type inference 2024-07-05 11:17:49 -04:00
meta Handle a few more simple tests 2024-05-20 11:13:10 -04:00
methods Do not ICE on non-ADT rcvr type when looking for crate version collision 2024-08-26 13:02:21 -04:00
mir stabilize raw_ref_op 2024-08-18 19:46:53 +02:00
mir-dataflow
mismatched_types Rollup merge of #125042 - long-long-float:suggest-move-arg-outside, r=fmease 2024-07-17 16:22:26 +02:00
missing
missing_non_modrs_mod
missing-trait-bounds Use fulfillment, not evaluate, during method probe 2024-04-21 20:10:12 -04:00
modules Move tests 2024-04-07 17:38:07 -03:00
modules_and_files_visibility
moves Peel off explicit (or implicit) deref before suggesting clone on move error in borrowck 2024-07-26 14:41:56 -04:00
mut Better span for "make binding mutable" suggestion 2024-07-04 02:02:21 +00:00
namespace Tweak output of import suggestions 2024-06-13 20:22:21 +00:00
native-library-link-flags Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
never_type Update tests 2024-08-10 12:07:17 +02:00
nll Create opaque definitions in resolver. 2024-08-31 20:14:43 +00:00
no_std
non_modrs_mods
non_modrs_mods_and_inline_mods
not-panic
numbers-arithmetic Rollup merge of #126127 - Alexendoo:other-trait-diag, r=pnkfelix 2024-06-16 03:41:57 -04:00
numeric Tweak "field not found" suggestion when giving struct literal for tuple struct type 2024-07-18 18:20:35 +00:00
object-lifetime elided_named_lifetimes: bless & add tests 2024-08-31 15:35:42 +03:00
object-safety Rollup merge of #127692 - veera-sivarajan:bugfix-125139, r=estebank 2024-09-03 19:13:23 +02:00
obsolete-in-place
offset-of Normalize when computing offset_of for slice tail 2024-08-08 11:58:11 -04:00
on-unimplemented Spell out other trait diagnostic 2024-06-12 12:34:47 +00:00
operator-recovery Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
or-patterns Reword the "unreachable pattern" explanations 2024-08-19 21:39:57 +02:00
overloaded
packed stabilize raw_ref_op 2024-08-18 19:46:53 +02:00
panic-handler Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
panic-runtime Enable a few tests on macOS 2024-05-28 12:31:12 +02:00
panics Bless tests 2024-08-02 11:34:54 +00:00
parallel-rustc
parser Rollup merge of #128524 - chenyukang:yukang-fix-127930-invalid-outer-style-sugg, r=cjgillot 2024-08-24 21:03:31 -05:00
patchable-function-entry Updated diagnostic messages 2024-06-27 22:24:36 +02:00
pattern Don't make pattern nonterminals match statement nonterminals 2024-08-26 18:30:15 -04:00
pin-macro
polymorphization Don't inline tainted MIR bodies 2024-08-08 20:53:25 -04:00
precondition-checks Fix revisions syntax 2024-04-11 17:53:27 -04:00
print_type_sizes Error on using yield without also using #[coroutine] on the closure 2024-04-24 08:05:29 +00:00
privacy Use FnSig instead of raw FnDecl for ForeignItemKind::Fn 2024-08-16 14:10:06 -04:00
proc-macro Fix bug in Parser::look_ahead. 2024-08-12 13:00:12 +10:00
process Bless tests 2024-08-02 11:34:54 +00:00
process-termination
ptr_ops
pub Bless test fallout 2024-08-03 07:57:31 -04:00
qualified
query-system
range Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
raw-ref-op stabilize raw_ref_op 2024-08-18 19:46:53 +02:00
reachable Move the "matches no value" note to be a span label 2024-08-20 21:53:47 +02:00
recursion Gate the type length limit check behind a nightly flag 2024-07-12 21:16:09 -04:00
recursion_limit
regions Point at explicit 'static obligations on a trait 2024-08-21 16:40:15 +00:00
repeat-expr Account for let foo = expr; to suggest const foo: Ty = expr; 2024-07-11 20:39:24 +00:00
repr repr_transparent_external_private_fields: treat rustc_pub_transparent types as local 2024-08-24 23:05:54 +03:00
reserved
resolve Don't consider RibKind::Module's bindings when checking generics shadowing 2024-08-19 17:24:27 -04:00
return Fixing span manipulation and indentation of the suggestion introduced by #126187 2024-08-25 20:30:06 +08:00
rfcs Non-exhaustive structs may be empty 2024-09-02 21:16:37 +02:00
rmeta
runtime Disable stack overflow handler tests on iOS-like platforms 2024-05-28 12:31:12 +02:00
rust-2018 diagnostics: do not warn when a lifetime bound infers itself 2024-08-09 16:16:16 -07:00
rust-2021 Detect unused structs which implement private traits 2024-05-23 09:07:59 +08:00
rust-2024 Auto merge of #128771 - carbotaniuman:stabilize_unsafe_attr, r=nnethercote 2024-08-17 22:48:42 +00:00
rustc-env note value of RUST_MIN_STACK and explain unsetting 2024-05-19 20:09:03 -07:00
rustdoc Be more accurate about calculating display_col from a BytePos 2024-07-18 20:08:38 +00:00
sanitizer Rollup merge of #129179 - compiler-errors:cfi-erase-transparent, r=davidtwco 2024-08-21 18:15:02 +02:00
self Rollup merge of #129664 - adetaylor:arbitrary-self-types-pointers-feature-gate, r=wesleywiser 2024-09-05 03:47:42 +02:00
sepcomp
shadowed
shell-argfiles compiletest: add enable-by-default check-cfg 2024-05-04 11:30:38 +02:00
simd simd_shuffle intrinsic: allow argument to be passed as vector (not just as array) 2024-08-13 07:51:17 +02:00
single-use-lifetime
sized Detect * operator on !Sized expression 2024-08-08 17:35:40 +00:00
span Do not underline suggestions for code that is already there 2024-08-01 18:53:42 +00:00
specialization Retroactively feature gate ConstArgKind::Path 2024-08-19 01:14:22 +01:00
stability-attribute Migrate tests to use -Znext-solver 2024-06-30 17:08:45 +00:00
stable-mir-print Set up false edges in lower_match_tree 2024-07-29 09:50:07 +02:00
stack-protector
static propagate tainted_by_errors in MirBorrowckCtxt::emit_errors 2024-09-04 20:06:33 +02:00
statics WF-check struct field types at construction site 2024-08-05 17:37:12 -07:00
stats ignore/fix layout-sensitive tests 2024-08-31 23:56:45 +02:00
std More robust extension checking 2024-09-03 14:36:21 +02:00
stdlib-unit-tests Move various stdlib tests to library/std/tests 2024-04-28 16:10:12 -04:00
str Be more accurate about calculating display_col from a BytePos 2024-07-18 20:08:38 +00:00
structs Test more cases of WF-checking for fields 2024-08-05 17:56:50 -07:00
structs-enums ignore/fix layout-sensitive tests 2024-08-31 23:56:45 +02:00
suggestions elided_named_lifetimes: bless & add tests 2024-08-31 15:35:42 +03:00
svh
symbol-mangling-version
symbol-names Split part of adt_const_params into unsized_const_params 2024-07-17 11:01:29 +01:00
sync Add manual Sync impl for ReentrantLockGuard 2024-05-24 17:44:37 -07:00
target-feature Revert "Auto merge of #127537 - veluca93:struct_tf, r=BoxyUwU" 2024-09-01 16:35:53 +02:00
test-attrs Update name of Windows abort constant to match platform documentation 2024-07-15 22:21:41 +00:00
thir-print report pat no field error no recoverd struct variant 2024-07-11 00:18:47 +08:00
thread-local
threads-sendsync format code in tests/ui/threads-sendsync 2024-08-24 05:32:52 +02:00
tool-attributes Fix diagnostic and add a test for it 2024-07-10 18:56:06 -04:00
track-diagnostics Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
trait-bounds Fix malformed suggestion for repeated maybe unsized bounds 2024-07-14 17:46:25 +05:30
traits Pretty-print own args of existential projections 2024-08-22 06:22:36 +02:00
transmutability safe transmute: Rename BikeshedIntrinsicFrom to TransmuteFrom 2024-08-27 14:05:54 +00:00
transmute Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
treat-err-as-bug Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
trivial-bounds Improve the impl and diag output of lint type_alias_bounds 2024-07-23 01:48:03 +02:00
try-block Peel off explicit (or implicit) deref before suggesting clone on move error in borrowck 2024-07-26 14:41:56 -04:00
try-trait Fixing span manipulation and indentation of the suggestion introduced by #126187 2024-08-25 20:30:06 +08:00
tuple Use ordinal number in argument error 2024-07-14 13:50:09 +09:00
type Add tracking issue to core-pattern-type 2024-08-07 20:43:05 -04:00
type-alias Suggest full trait ref (with placeholders) on unresolved assoc tys 2024-07-23 01:26:25 +02:00
type-alias-enum-variants Revert suggestion verbosity change 2024-07-22 22:51:53 +00:00
type-alias-impl-trait propagate tainted_by_errors in MirBorrowckCtxt::emit_errors 2024-09-04 20:06:33 +02:00
type-inference make invalid_type_param_default lint show up in cargo future-compat reports 2024-07-15 22:05:45 +02:00
typeck Retroactively feature gate ConstArgKind::Path 2024-08-19 01:14:22 +01:00
typeof Account for let foo = expr; to suggest const foo: Ty = expr; 2024-07-11 20:39:24 +00:00
ufcs Revert suggestion verbosity change 2024-07-22 22:51:53 +00:00
unboxed-closures Revert suggestion verbosity change 2024-07-22 22:51:53 +00:00
underscore-imports Structured suggestion for extern crate foo when foo isn't resolved in import 2024-07-29 23:49:51 +00:00
underscore-lifetime
uniform-paths
uninhabited Move the "matches no value" note to be a span label 2024-08-20 21:53:47 +02:00
union Mention when type parameter could be Clone 2024-04-24 22:21:15 +00:00
unknown-unstable-lints
unop Peel off explicit (or implicit) deref before suggesting clone on move error in borrowck 2024-07-26 14:41:56 -04:00
unpretty stabilize raw_ref_op 2024-08-18 19:46:53 +02:00
unresolved Structured suggestion for extern crate foo when foo isn't resolved in import 2024-07-29 23:49:51 +00:00
unsafe Don't Suggest Labeling const and unsafe Blocks 2024-08-06 14:50:09 -04:00
unsized Detect * operator on !Sized expression 2024-08-08 17:35:40 +00:00
unsized-locals
unused-crate-deps Spruce up the diagnostics of some early lints 2024-06-03 07:25:32 +02:00
unwind-abis Remove c_unwind from tests and fix tests 2024-06-19 13:54:55 +01:00
use Make early lints translatable 2024-05-21 20:16:39 +00:00
variance Print the generic parameter along with the variance in dumps. 2024-08-23 23:00:45 +00:00
variants Accurate use rename suggestion span 2024-07-18 00:00:04 +00:00
version Fix test problems discovered by the revision check 2024-05-09 14:47:09 +10:00
warnings
wasm
wf Enforce supertrait outlives obligations hold when confirming impl 2024-08-05 09:55:14 -04:00
where-clauses Taint infcx when reporting errors 2024-06-19 04:41:56 +00:00
while
windows-subsystem rewrite test-harness to rmake 2024-07-02 11:37:59 -04:00
zero-sized
.gitattributes
alias-uninit-value.rs
allow-non-lint-warnings.rs Make run-make/allow-non-lint-warnings-cmdline into a ui test 2024-06-13 12:55:55 +02:00
anonymous-higher-ranked-lifetime.rs
anonymous-higher-ranked-lifetime.stderr
artificial-block.rs
as-precedence.rs
assign-assign.rs
assign-imm-local-twice.rs Better span for "make binding mutable" suggestion 2024-07-04 02:02:21 +00:00
assign-imm-local-twice.stderr Better span for "make binding mutable" suggestion 2024-07-04 02:02:21 +00:00
assoc-lang-items.rs
assoc-lang-items.stderr consistency rename: language item -> lang item 2024-04-17 13:00:43 +02:00
assoc-oddities-3.rs
associated-path-shl.rs
associated-path-shl.stderr
atomic-from-mut-not-available.rs
atomic-from-mut-not-available.stderr
attempted-access-non-fatal.rs
attempted-access-non-fatal.stderr
attr-bad-crate-attr.rs
attr-bad-crate-attr.stderr
attr-shebang.rs
attr-start.rs
attr-usage-inline.rs
attr-usage-inline.stderr
attrs-resolution-errors.rs
attrs-resolution-errors.stderr
attrs-resolution.rs
augmented-assignments-feature-gate-cross.rs
augmented-assignments-rpass.rs
augmented-assignments.rs Peel off explicit (or implicit) deref before suggesting clone on move error in borrowck 2024-07-26 14:41:56 -04:00
augmented-assignments.stderr Peel off explicit (or implicit) deref before suggesting clone on move error in borrowck 2024-07-26 14:41:56 -04:00
auto-instantiate.rs
auto-ref-slice-plus-ref.rs
auto-ref-slice-plus-ref.stderr
autoderef-full-lval.rs
autoderef-full-lval.stderr Change E0369 diagnostic give note information for foreign items. 2024-06-25 10:00:30 +08:00
bare-fn-implements-fn-mut.rs
bare-static-string.rs
big-literals.rs
bind-by-move.rs
bitwise.rs
bogus-tag.rs
bogus-tag.stderr
borrow-by-val-method-receiver.rs
bounds-lifetime.rs
bounds-lifetime.stderr
break-diverging-value.rs
break-diverging-value.stderr
builtin-clone-unwind.rs
can-copy-pod.rs
cancel-clean-via-immediate-rvalue-ref.rs
cannot-mutate-captured-non-mut-var.rs
cannot-mutate-captured-non-mut-var.stderr More accurate mutability suggestion 2024-07-04 05:36:34 +00:00
capture1.rs
capture1.stderr
catch-unwind-bang.rs
cenum_impl_drop_cast.rs
cenum_impl_drop_cast.stderr
cfguard-run.rs
char.rs
class-cast-to-trait.rs
class-cast-to-trait.stderr
class-method-missing.rs
class-method-missing.stderr
cleanup-rvalue-for-scope.rs
cleanup-rvalue-scopes-cf.rs
cleanup-rvalue-scopes-cf.stderr
cleanup-rvalue-scopes.rs
cleanup-rvalue-temp-during-incomplete-alloc.rs
cleanup-shortcircuit.rs
close-over-big-then-small-data.rs
command-line-diagnostics.rs
command-line-diagnostics.stderr Better span for "make binding mutable" suggestion 2024-07-04 02:02:21 +00:00
complex.rs
conservative_impl_trait.rs
conservative_impl_trait.stderr
constructor-lifetime-args.rs
constructor-lifetime-args.stderr Revert suggestion verbosity change 2024-07-22 22:51:53 +00:00
copy-a-resource.rs
copy-a-resource.stderr
crate-leading-sep.rs
crate-method-reexport-grrrrrrr.rs
crate-name-attr-used.rs
crate-name-mismatch.rs
crate-name-mismatch.stderr
custom_attribute.rs
custom_attribute.stderr
custom-attribute-multisegment.rs
custom-attribute-multisegment.stderr
custom-test-frameworks-simple.rs
deduplicate-diagnostics.deduplicate.stderr
deduplicate-diagnostics.duplicate.stderr
deduplicate-diagnostics.rs
deep.rs
default-method-parsing.rs
default-method-simple.rs
defaults-well-formedness.rs
deprecation-in-force-unstable.rs
deref-non-pointer.rs
deref-non-pointer.stderr
deref-rc.rs
deref.rs
derive-uninhabited-enum-38885.rs
derive-uninhabited-enum-38885.stderr
destructure-trait-ref.rs
destructure-trait-ref.stderr
diverging-fallback-method-chain.rs
diverging-fallback-option.rs
diverging-fn-tail-35849.rs
diverging-fn-tail-35849.stderr
double-ref.rs
double-type-import.rs
double-type-import.stderr
dupe-first-attr.rs
duplicate_entry_error.rs Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
duplicate_entry_error.stderr Rename std::panic::PanicInfo to PanicHookInfo. 2024-06-11 15:47:00 +02:00
duplicate-label-E0381-issue-129274.rs Deduplicate Spans in Uninitialized Check 2024-08-22 09:36:14 -07:00
duplicate-label-E0381-issue-129274.stderr Deduplicate Spans in Uninitialized Check 2024-08-22 09:36:14 -07:00
early-ret-binop-add.rs
elide-errors-on-mismatched-tuple.rs
elide-errors-on-mismatched-tuple.stderr
elided-test.rs
elided-test.stderr
else-if.rs
empty-allocation-non-null.rs
empty-allocation-rvalue-non-null.rs
empty-type-parameter-list.rs
empty-type-parameter-list.stderr
error-festival.rs
error-festival.stderr
error-should-say-copy-not-pod.rs
error-should-say-copy-not-pod.stderr
exclusive-drop-and-copy.rs
exclusive-drop-and-copy.stderr
explain.rs
explain.stdout
explicit-i-suffix.rs
explore-issue-38412.rs
explore-issue-38412.stderr
ext-expand-inner-exprs.rs
ext-nonexistent.rs
ext-nonexistent.stderr
fact.rs
fail-simple.rs
fail-simple.stderr
filter-block-view-items.rs Unify all the always-false cfgs under the FALSE cfg 2024-04-07 01:16:45 +02:00
format-no-std.rs
fun-indirect-call.rs
future-incompatible-lint-group.rs
future-incompatible-lint-group.stderr
global-scope.rs
hello.rs
illegal-ufcs-drop.fixed
illegal-ufcs-drop.rs
illegal-ufcs-drop.stderr
impl-inherent-non-conflict.rs
impl-not-adjacent-to-type.rs
impl-privacy-xc-1.rs
impl-unused-rps-in-assoc-type.rs
impl-unused-rps-in-assoc-type.stderr
impl-unused-tps-inherent.rs
impl-unused-tps-inherent.stderr
impl-unused-tps.rs
impl-unused-tps.stderr
implicit-method-bind.rs
implicit-method-bind.stderr
inline-disallow-on-variant.rs
inline-disallow-on-variant.stderr
inlined-main.rs
inner-attrs-on-impl.rs Unify all the always-false cfgs under the FALSE cfg 2024-04-07 01:16:45 +02:00
inner-module.rs
inner-static-type-parameter.rs
inner-static-type-parameter.stderr
inner-static.rs
integral-indexing.rs
integral-indexing.stderr
integral-variable-unification-error.rs
integral-variable-unification-error.stderr
invalid_crate_type_syntax.rs
invalid_crate_type_syntax.stderr
invalid_dispatch_from_dyn_impls.rs
invalid_dispatch_from_dyn_impls.stderr
issue-11881.rs
issue-13560.rs
issue-15924.rs
issue-16822.rs
issue-18502.rs
issue-24106.rs
issue-76387-llvm-miscompile.rs
issues-71798.rs
issues-71798.stderr
item-name-overload.rs
kinds-in-metadata.rs
kinds-of-primitive-impl.rs
kinds-of-primitive-impl.stderr
last-use-in-block.rs
last-use-in-cap-clause.rs
last-use-is-capture.rs
lazy-and-or.rs
lexical-scopes.rs
lexical-scopes.stderr
lexical-scoping.rs
link-section.rs Make more of the test suite run on Mac Catalyst 2024-05-28 12:31:33 +02:00
list.rs
log-err-phi.rs
log-knows-the-names-of-variants.rs
log-poly.rs
logging-only-prints-once.rs
loud_ui.rs
max-min-classes.rs
maximal_mir_to_hir_coverage.rs
maybe-bounds.rs
maybe-bounds.stderr Support ?Trait bounds in supertraits and dyn Trait under a feature gate 2024-07-25 20:53:33 +03:00
method-output-diff-issue-127263.rs show unit output when there is only output diff in diagnostics 2024-07-06 21:00:30 +08:00
method-output-diff-issue-127263.stderr show unit output when there is only output diff in diagnostics 2024-07-06 21:00:30 +08:00
minus-string.rs
minus-string.stderr Change E0369 diagnostic give note information for foreign items. 2024-06-25 10:00:30 +08:00
missing_debug_impls.rs
missing_debug_impls.stderr
mod-subitem-as-enum-variant.rs
mod-subitem-as-enum-variant.stderr
monomorphize-abi-alignment.rs
msvc-data-only.rs
msvc-opt-minsize.rs rewrite test-harness to rmake 2024-07-02 11:37:59 -04:00
multibyte.rs
multiline-comment.rs
mut-function-arguments.rs
mutual-recursion-group.rs
myriad-closures.rs
nested-block-comment.rs
nested-cfg-attrs.rs Unify all the always-false cfgs under the FALSE cfg 2024-04-07 01:16:45 +02:00
nested-cfg-attrs.stderr
nested-class.rs
nested-ty-params.rs
nested-ty-params.stderr
new-impl-syntax.rs
new-import-syntax.rs
new-style-constants.rs
new-unicode-escapes.rs
newlambdas.rs
newtype-polymorphic.rs
newtype.rs
no_crate_type.rs
no_crate_type.stderr
no_send-enum.rs
no_send-enum.stderr
no_send-rc.rs
no_send-rc.stderr
no_share-enum.rs
no_share-enum.stderr
no_share-struct.rs
no_share-struct.stderr
no-capture-arc.rs
no-capture-arc.stderr
no-core-1.rs
no-core-2.rs
no-link-unknown-crate.rs
no-link-unknown-crate.stderr
no-reuse-move-arc.rs
no-reuse-move-arc.stderr
no-send-res-ports.rs
no-send-res-ports.stderr
no-warn-on-field-replace-issue-34101.rs
noexporttypeexe.rs
noexporttypeexe.stderr
non-constant-expr-for-arr-len.rs
non-constant-expr-for-arr-len.stderr
non-copyable-void.rs Use the rustc_private libc less in tests 2024-04-15 08:54:11 -04:00
non-copyable-void.stderr Use the rustc_private libc less in tests 2024-04-15 08:54:11 -04:00
non-fmt-panic.fixed
non-fmt-panic.rs
non-fmt-panic.stderr
noncopyable-class.rs
noncopyable-class.stderr
nonscalar-cast.fixed
nonscalar-cast.rs
nonscalar-cast.stderr
not-clone-closure.rs
not-clone-closure.stderr
not-copy-closure.rs
not-copy-closure.stderr
not-enough-arguments.rs
not-enough-arguments.stderr Use ordinal number in argument error 2024-07-14 13:50:09 +09:00
nul-characters.rs
nullable-pointer-iotareduction.rs
nullable-pointer-size.rs
object-pointer-types.rs
object-pointer-types.stderr
objects-coerce-freeze-borrored.rs
occurs-check-2.rs
occurs-check-2.stderr
occurs-check-3.rs
occurs-check-3.stderr
occurs-check.rs
occurs-check.stderr
once-cant-call-twice-on-heap.rs
once-cant-call-twice-on-heap.stderr Better account for FnOnce in move errors 2024-04-11 16:41:42 +00:00
oom_unwind.rs
op-assign-builtins-by-ref.rs
opeq.rs
opt-in-copy.rs
opt-in-copy.stderr
optimization-remark.rs
out-pointer-aliasing.rs
output-slot-variants.rs
over-constrained-vregs.rs
panic_implementation-closures.rs
panic-while-printing.rs
paren-span.rs
paren-span.stderr
partialeq_help.rs
partialeq_help.stderr
path-lookahead.fixed
path-lookahead.rs
path-lookahead.stderr
path.rs
paths-containing-nul.rs
phantom-auto-trait.rs
phantom-auto-trait.stderr
point-to-type-err-cause-on-impl-trait-return-2.rs
point-to-type-err-cause-on-impl-trait-return-2.stderr
pptypedef.rs
pptypedef.stderr
primitive-binop-lhs-mut.rs
print-calling-conventions.rs Migrate run-make/print-calling-conventions to ui-test 2024-08-03 20:09:42 -04:00
print-calling-conventions.stdout Migrate run-make/print-calling-conventions to ui-test 2024-08-03 20:09:42 -04:00
print-stdout-eprint-stderr.rs
project-cache-issue-31849.rs
ptr-coercion-rpass.rs
ptr-coercion.rs
ptr-coercion.stderr
query-visibility.rs
raw-str.rs
README.md
realloc-16687.rs
reassign-ref-mut.rs
reassign-ref-mut.stderr
reexport-test-harness-main.rs
removing-extern-crate.fixed
removing-extern-crate.rs
removing-extern-crate.stderr
resource-assign-is-not-copy.rs
resource-destruct.rs
rustc-error.rs
rustc-error.stderr
seq-args.rs
seq-args.stderr Revert suggestion verbosity change 2024-07-22 22:51:53 +00:00
shadow-bool.rs
shadowed-use-visibility.rs
short-error-format.rs
short-error-format.stderr On short error format, append primary span label to message 2024-08-06 04:08:10 +00:00
sized-borrowed-pointer.rs
sized-cycle-note.rs
sized-cycle-note.stderr
sized-owned-pointer.rs
sse2.rs sudo CI=green && Review changes <3 2024-06-25 18:06:22 +02:00
stable-addr-of.rs
std-uncopyable-atomics.rs
std-uncopyable-atomics.stderr
stdio-is-blocking.rs
string-box-error.rs
struct-ctor-mangling.rs
super-at-top-level.rs
super-at-top-level.stderr
super.rs
svh-add-nothing.rs
swap-1.rs
swap-overlapping.rs
switched-expectations.rs
switched-expectations.stderr
syntax-extension-minor.rs
tag-type-args.rs
tag-type-args.stderr
tag-variant-cast-non-nullary.fixed
tag-variant-cast-non-nullary.rs
tag-variant-cast-non-nullary.stderr
tail-call-arg-leak.rs
tail-cps.rs
tail-typeck.rs
tail-typeck.stderr
trailing-comma.rs
trait-method-number-parameters.rs
trait-method-number-parameters.stderr
transmute-equal-assoc-types.rs
transmute-non-immediate-to-immediate.rs
trivial_casts-rpass.rs
trivial_casts-rpass.stderr
try-from-int-error-partial-eq.rs
try-operator-hygiene.rs
try-operator.rs
tydesc-name.rs
type_length_limit.polonius.stderr
type_length_limit.rs Gate the type length limit check behind a nightly flag 2024-07-12 21:16:09 -04:00
type_length_limit.stderr Re-implement a type-size based limit 2024-07-02 15:48:48 -04:00
type-id-higher-rank-2.rs
type-namespace.rs
type-param-constraints.rs
type-param.rs
type-ptr.rs
type-use-i1-versus-i8.rs
typeid-intrinsic.rs
typestate-multi-decl.rs
unconstrained-none.rs
unconstrained-none.stderr
unconstrained-ref.rs
unconstrained-ref.stderr
underscore-ident-matcher.rs
underscore-ident-matcher.stderr
underscore-lifetimes.rs
underscore-method-after-integer.rs
unevaluated_fixed_size_array_len.rs
unevaluated_fixed_size_array_len.stderr
uninit-empty-types.rs
unit.rs
unknown-language-item.rs consistency rename: language item -> lang item 2024-04-17 13:00:43 +02:00
unknown-language-item.stderr consistency rename: language item -> lang item 2024-04-17 13:00:43 +02:00
unknown-llvm-arg.rs Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
unknown-llvm-arg.stderr
unnamed_argument_mode.rs
unreachable-code-1.rs
unreachable-code.rs
unsigned-literal-negation.rs
unsigned-literal-negation.stderr Tweak -1 as usize suggestion 2024-07-05 00:52:01 +00:00
unused-move-capture.rs
unused-move.rs
unwind-no-uwtable.rs
use-import-export.rs
use-keyword-2.rs
use-module-level-int-consts.rs
use-nested-groups.rs
used.rs
used.stderr Show used attribute's kind for user when find it isn't applied to a static variable. 2024-06-29 19:39:09 +08:00
using-target-feature-unstable.rs
usize-generic-argument-parent.rs
usize-generic-argument-parent.stderr
utf8_idents.rs
utf8-bom.rs
wait-forked-but-failed-child.rs Handle a few more simple tests 2024-05-20 11:13:10 -04:00
walk-struct-literal-with.rs
walk-struct-literal-with.stderr
weak-new-uninhabited-issue-48493.rs
weird-exit-code.rs
weird-exprs.rs Error on using yield without also using #[coroutine] on the closure 2024-04-24 08:05:29 +00:00
write-fmt-errors.rs io::Write::write_fmt: panic if the formatter fails when the stream does not fail 2024-05-11 15:13:18 +02:00
writing-to-immutable-vec.rs
writing-to-immutable-vec.stderr
wrong-hashset-issue-42918.rs

UI Tests

This folder contains rustc's UI tests.

Test Directives (Headers)

Typically, a UI test will have some test directives / headers which are special comments that tell compiletest how to build and intepret a test.

As part of an on-going effort to rewrite compiletest (see https://github.com/rust-lang/compiler-team/issues/536), a major change proposal to change legacy compiletest-style headers // <directive> to ui_test-style headers //@ <directive> was accepted (see https://github.com/rust-lang/compiler-team/issues/512.

An example directive is ignore-test. In legacy compiletest style, the header would be written as

// ignore-test

but in ui_test style, the header would be written as

//@ ignore-test

compiletest is changed to accept only //@ directives for UI tests (currently), and will reject and report an error if it encounters any comments // <content> that may be parsed as an legacy compiletest-style test header. To fix this, you should migrate to the ui_test-style header //@ <content>.