summaryrefslogtreecommitdiffstats
path: root/tests/ui
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui')
-rw-r--r--tests/ui/abi/foreign/foreign-fn-with-byval.rs2
-rw-r--r--tests/ui/abi/issue-94223.rs8
-rw-r--r--tests/ui/argument-suggestions/issue-112507.rs12
-rw-r--r--tests/ui/argument-suggestions/issue-112507.stderr27
-rw-r--r--tests/ui/asm/aarch64/may_unwind.rs1
-rw-r--r--tests/ui/asm/parse-error.rs (renamed from tests/ui/asm/x86_64/parse-error.rs)34
-rw-r--r--tests/ui/asm/parse-error.stderr (renamed from tests/ui/asm/x86_64/parse-error.stderr)175
-rw-r--r--tests/ui/asm/x86_64/x86_64_parse_error.rs21
-rw-r--r--tests/ui/asm/x86_64/x86_64_parse_error.stderr44
-rw-r--r--tests/ui/assign-assign.rs4
-rw-r--r--tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.rs10
-rw-r--r--tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.stderr9
-rw-r--r--tests/ui/associated-consts/issue-110933.rs20
-rw-r--r--tests/ui/associated-inherent-types/assoc-inherent-unstable.rs3
-rw-r--r--tests/ui/associated-inherent-types/assoc-inherent-unstable.stderr2
-rw-r--r--tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.rs4
-rw-r--r--tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.stderr40
-rw-r--r--tests/ui/associated-inherent-types/dont-select-if-disabled.rs17
-rw-r--r--tests/ui/associated-inherent-types/dont-select-if-disabled.stderr24
-rw-r--r--tests/ui/associated-inherent-types/issue-109071.no_gate.stderr41
-rw-r--r--tests/ui/associated-inherent-types/issue-109071.rs19
-rw-r--r--tests/ui/associated-inherent-types/issue-109071.with_gate.stderr26
-rw-r--r--tests/ui/associated-inherent-types/issue-109789.stderr4
-rw-r--r--tests/ui/associated-inherent-types/issue-111404-0.rs14
-rw-r--r--tests/ui/associated-inherent-types/issue-111404-1.rs13
-rw-r--r--tests/ui/associated-inherent-types/issue-111404-1.stderr8
-rw-r--r--tests/ui/associated-inherent-types/private-in-public.rs10
-rw-r--r--tests/ui/associated-inherent-types/private-in-public.stderr49
-rw-r--r--tests/ui/associated-type-bounds/dyn-impl-trait-type.rs8
-rw-r--r--tests/ui/associated-type-bounds/dyn-rpit-and-let.rs8
-rw-r--r--tests/ui/associated-type-bounds/implied-in-supertrait.rs19
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.current.stderr (renamed from tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.stderr)12
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.next.stderr48
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.rs2
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/basic.current_with.stderr11
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/basic.current_without.stderr29
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/basic.next_with.stderr11
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/basic.next_without.stderr29
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/basic.rs14
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/equality.current.stderr (renamed from tests/ui/associated-type-bounds/return-type-notation/equality.stderr)4
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/equality.next.stderr17
-rw-r--r--tests/ui/associated-type-bounds/return-type-notation/equality.rs2
-rw-r--r--tests/ui/associated-type-bounds/rpit.rs8
-rw-r--r--tests/ui/associated-type-bounds/trait-alias-impl-trait.rs8
-rw-r--r--tests/ui/associated-types/dont-suggest-cyclic-constraint.rs11
-rw-r--r--tests/ui/associated-types/dont-suggest-cyclic-constraint.stderr12
-rw-r--r--tests/ui/associated-types/normalization-debruijn-3.rs4
-rw-r--r--tests/ui/async-await/deep-futures-are-freeze.rs179
-rw-r--r--tests/ui/async-await/drop-track-bad-field-in-fru.stderr2
-rw-r--r--tests/ui/async-await/drop-track-field-assign.rs2
-rw-r--r--tests/ui/async-await/field-assign.rs2
-rw-r--r--tests/ui/async-await/in-trait/async-associated-types2.rs30
-rw-r--r--tests/ui/async-await/in-trait/async-lifetimes-and-bounds.rs2
-rw-r--r--tests/ui/async-await/in-trait/async-lifetimes.rs2
-rw-r--r--tests/ui/async-await/in-trait/missing-feature-flag.current.stderr30
-rw-r--r--tests/ui/async-await/in-trait/missing-feature-flag.next.stderr30
-rw-r--r--tests/ui/async-await/in-trait/missing-feature-flag.rs23
-rw-r--r--tests/ui/async-await/in-trait/normalize-opaque-with-bound-vars.rs64
-rw-r--r--tests/ui/async-await/in-trait/return-not-existing-pair.current.stderr39
-rw-r--r--tests/ui/async-await/in-trait/return-not-existing-pair.next.stderr39
-rw-r--r--tests/ui/async-await/in-trait/return-not-existing-pair.rs19
-rw-r--r--tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.current.stderr9
-rw-r--r--tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.next.stderr9
-rw-r--r--tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.rs20
-rw-r--r--tests/ui/async-await/issue-64130-4-async-move.no_drop_tracking.stderr6
-rw-r--r--tests/ui/async-await/issue-64130-4-async-move.rs2
-rw-r--r--tests/ui/async-await/issue-70935-complex-spans.drop_tracking.stderr31
-rw-r--r--tests/ui/async-await/issue-70935-complex-spans.drop_tracking_mir.stderr31
-rw-r--r--tests/ui/async-await/issue-70935-complex-spans.no_drop_tracking.stderr16
-rw-r--r--tests/ui/async-await/issue-70935-complex-spans.rs17
-rw-r--r--tests/ui/async-await/issue-78115.rs (renamed from tests/ui/issues/issue-78115.rs)0
-rw-r--r--tests/ui/async-await/non-trivial-drop.rs2
-rw-r--r--tests/ui/async-await/return-type-notation/issue-110963-early.current.stderr (renamed from tests/ui/async-await/return-type-notation/issue-110963-early.stderr)10
-rw-r--r--tests/ui/async-await/return-type-notation/issue-110963-early.next.stderr37
-rw-r--r--tests/ui/async-await/return-type-notation/issue-110963-early.rs2
-rw-r--r--tests/ui/async-await/return-type-notation/issue-110963-late.current.stderr (renamed from tests/ui/async-await/return-type-notation/issue-110963-late.stderr)2
-rw-r--r--tests/ui/async-await/return-type-notation/issue-110963-late.next.stderr11
-rw-r--r--tests/ui/async-await/return-type-notation/issue-110963-late.rs2
-rw-r--r--tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.rs28
-rw-r--r--tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.stderr11
-rw-r--r--tests/ui/async-await/return-type-notation/rtn-in-impl-signature.rs13
-rw-r--r--tests/ui/async-await/return-type-notation/rtn-in-impl-signature.stderr18
-rw-r--r--tests/ui/async-await/return-type-notation/super-method-bound.current.stderr (renamed from tests/ui/async-await/return-type-notation/super-method-bound.stderr)2
-rw-r--r--tests/ui/async-await/return-type-notation/super-method-bound.next.stderr11
-rw-r--r--tests/ui/async-await/return-type-notation/super-method-bound.rs2
-rw-r--r--tests/ui/async-await/return-type-notation/supertrait-bound.current.stderr (renamed from tests/ui/async-await/return-type-notation/supertrait-bound.stderr)2
-rw-r--r--tests/ui/async-await/return-type-notation/supertrait-bound.next.stderr11
-rw-r--r--tests/ui/async-await/return-type-notation/supertrait-bound.rs2
-rw-r--r--tests/ui/async-await/return-type-notation/ty-or-ct-params.current.stderr29
-rw-r--r--tests/ui/async-await/return-type-notation/ty-or-ct-params.next.stderr29
-rw-r--r--tests/ui/async-await/return-type-notation/ty-or-ct-params.rs22
-rw-r--r--tests/ui/attributes/doc-test-literal.rs7
-rw-r--r--tests/ui/attributes/doc-test-literal.stderr17
-rw-r--r--tests/ui/auto-traits/issue-23080-2.current.stderr (renamed from tests/ui/auto-traits/issue-23080-2.stderr)2
-rw-r--r--tests/ui/auto-traits/issue-23080-2.next.stderr11
-rw-r--r--tests/ui/auto-traits/issue-23080-2.rs3
-rw-r--r--tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.rs40
-rw-r--r--tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.stderr17
-rw-r--r--tests/ui/binop/binop-mul-i32-f32.stderr4
-rw-r--r--tests/ui/binop/shift-various-bad-types.stderr48
-rw-r--r--tests/ui/borrowck/borrowck-thread-local-static-borrow-outlives-fn.stderr2
-rw-r--r--tests/ui/borrowck/issue-111554.rs28
-rw-r--r--tests/ui/borrowck/issue-111554.stderr29
-rw-r--r--tests/ui/cfg/auxiliary/cfg_false_lib.rs6
-rw-r--r--tests/ui/cfg/auxiliary/cfg_false_lib_no_std_after.rs5
-rw-r--r--tests/ui/cfg/auxiliary/cfg_false_lib_no_std_before.rs8
-rw-r--r--tests/ui/cfg/auxiliary/cfged_out.rs22
-rw-r--r--tests/ui/cfg/cfg-false-feature.rs6
-rw-r--r--tests/ui/cfg/cfg-false-feature.stderr17
-rw-r--r--tests/ui/cfg/cfg_false_no_std-1.rs10
-rw-r--r--tests/ui/cfg/cfg_false_no_std-2.rs11
-rw-r--r--tests/ui/cfg/cfg_false_no_std.rs3
-rw-r--r--tests/ui/cfg/cfg_stmt_expr.rs2
-rw-r--r--tests/ui/cfg/diagnostics-cross-crate.rs31
-rw-r--r--tests/ui/cfg/diagnostics-cross-crate.stderr53
-rw-r--r--tests/ui/cfg/diagnostics-not-a-def.rs12
-rw-r--r--tests/ui/cfg/diagnostics-not-a-def.stderr9
-rw-r--r--tests/ui/cfg/diagnostics-reexport.rs40
-rw-r--r--tests/ui/cfg/diagnostics-reexport.stderr47
-rw-r--r--tests/ui/cfg/diagnostics-same-crate.rs51
-rw-r--r--tests/ui/cfg/diagnostics-same-crate.stderr47
-rw-r--r--tests/ui/chalkify/arithmetic.rs20
-rw-r--r--tests/ui/chalkify/assert.rs6
-rw-r--r--tests/ui/chalkify/basic.rs12
-rw-r--r--tests/ui/chalkify/bugs/async.stderr29
-rw-r--r--tests/ui/chalkify/builtin-copy-clone.rs45
-rw-r--r--tests/ui/chalkify/chalk_initial_program.rs16
-rw-r--r--tests/ui/chalkify/chalk_initial_program.stderr18
-rw-r--r--tests/ui/chalkify/closure.rs38
-rw-r--r--tests/ui/chalkify/closure.stderr22
-rw-r--r--tests/ui/chalkify/generic_impls.rs18
-rw-r--r--tests/ui/chalkify/generic_impls.stderr29
-rw-r--r--tests/ui/chalkify/impl_wf.rs26
-rw-r--r--tests/ui/chalkify/impl_wf.stderr29
-rw-r--r--tests/ui/chalkify/impl_wf_2.rs33
-rw-r--r--tests/ui/chalkify/impl_wf_2.stderr16
-rw-r--r--tests/ui/chalkify/inherent_impl.rs42
-rw-r--r--tests/ui/chalkify/inherent_impl_min.rs27
-rw-r--r--tests/ui/chalkify/lower_env1.rs14
-rw-r--r--tests/ui/chalkify/lower_env2.rs16
-rw-r--r--tests/ui/chalkify/lower_env3.rs16
-rw-r--r--tests/ui/chalkify/lower_impl.rs17
-rw-r--r--tests/ui/chalkify/lower_struct.rs8
-rw-r--r--tests/ui/chalkify/lower_trait.rs11
-rw-r--r--tests/ui/chalkify/lower_trait_higher_rank.rs9
-rw-r--r--tests/ui/chalkify/lower_trait_where_clause.rs16
-rw-r--r--tests/ui/chalkify/println.rs6
-rw-r--r--tests/ui/chalkify/projection.rs25
-rw-r--r--tests/ui/chalkify/recursive_where_clause_on_type.rs30
-rw-r--r--tests/ui/chalkify/recursive_where_clause_on_type.stderr14
-rw-r--r--tests/ui/chalkify/super_trait.rs19
-rw-r--r--tests/ui/chalkify/trait-objects.rs12
-rw-r--r--tests/ui/chalkify/trait_implied_bound.rs18
-rw-r--r--tests/ui/chalkify/type_implied_bound.rs29
-rw-r--r--tests/ui/chalkify/type_inference.rs28
-rw-r--r--tests/ui/chalkify/type_inference.stderr20
-rw-r--r--tests/ui/chalkify/type_wf.rs25
-rw-r--r--tests/ui/chalkify/type_wf.stderr16
-rw-r--r--tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.rs25
-rw-r--r--tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.stderr58
-rw-r--r--tests/ui/closures/2229_closure_analysis/run_pass/disjoint-capture-in-same-closure.rs2
-rw-r--r--tests/ui/closures/2229_closure_analysis/run_pass/lit-pattern-matching-with-methods.rs6
-rw-r--r--tests/ui/closures/cannot-call-unsized-via-ptr-2.rs11
-rw-r--r--tests/ui/closures/cannot-call-unsized-via-ptr-2.stderr21
-rw-r--r--tests/ui/closures/cannot-call-unsized-via-ptr.rs10
-rw-r--r--tests/ui/closures/cannot-call-unsized-via-ptr.stderr12
-rw-r--r--tests/ui/closures/closure-move-sync.rs6
-rw-r--r--tests/ui/closures/closure-move-sync.stderr20
-rw-r--r--tests/ui/closures/issue-111932.rs9
-rw-r--r--tests/ui/closures/issue-111932.stderr26
-rw-r--r--tests/ui/closures/issue-113087.rs11
-rw-r--r--tests/ui/closures/issue-113087.stderr16
-rw-r--r--tests/ui/closures/issue-72408-nested-closures-exponential.rs1
-rw-r--r--tests/ui/codegen/subtyping-enforces-type-equality.rs48
-rw-r--r--tests/ui/codegen/subtyping-enforces-type-equality.stderr1
-rw-r--r--tests/ui/codegen/subtyping-impacts-selection-1.rs44
-rw-r--r--tests/ui/codegen/subtyping-impacts-selection-2.rs12
-rw-r--r--tests/ui/coercion/issue-3794.rs (renamed from tests/ui/issues/issue-3794.rs)0
-rw-r--r--tests/ui/coherence/coherence-inherited-subtyping.re.stderr14
-rw-r--r--tests/ui/coherence/coherence-inherited-subtyping.rs2
-rw-r--r--tests/ui/coherence/coherence-inherited-subtyping.stderr (renamed from tests/ui/coherence/coherence-inherited-subtyping.old.stderr)2
-rw-r--r--tests/ui/coinduction/canonicalization-rerun.rs4
-rw-r--r--tests/ui/const-generics/adt_const_params/const_param_ty_bad.stderr20
-rw-r--r--tests/ui/const-generics/adt_const_params/const_param_ty_good.rs4
-rw-r--r--tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.rs2
-rw-r--r--tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.stderr23
-rw-r--r--tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.rs1
-rw-r--r--tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.stderr14
-rw-r--r--tests/ui/const-generics/const-argument-if-length.full.stderr2
-rw-r--r--tests/ui/const-generics/const-argument-if-length.min.stderr2
-rw-r--r--tests/ui/const-generics/const-param-type-depends-on-type-param.full.stderr14
-rw-r--r--tests/ui/const-generics/const-param-type-depends-on-type-param.min.stderr14
-rw-r--r--tests/ui/const-generics/const-param-type-depends-on-type-param.rs1
-rw-r--r--tests/ui/const-generics/const-param-with-additional-obligations.rs17
-rw-r--r--tests/ui/const-generics/const-param-with-additional-obligations.stderr11
-rw-r--r--tests/ui/const-generics/defaults/default-param-wf-concrete.next.stderr (renamed from tests/ui/const-generics/defaults/default-param-wf-concrete.stderr)2
-rw-r--r--tests/ui/const-generics/defaults/default-param-wf-concrete.old.stderr9
-rw-r--r--tests/ui/const-generics/defaults/default-param-wf-concrete.rs3
-rw-r--r--tests/ui/const-generics/exhaustive-value.stderr14
-rw-r--r--tests/ui/const-generics/float-generic.adt_const_params.stderr2
-rw-r--r--tests/ui/const-generics/forbid-non-structural_match-types.rs6
-rw-r--r--tests/ui/const-generics/forbid-non-structural_match-types.stderr12
-rw-r--r--tests/ui/const-generics/generic_arg_infer/in-signature.rs6
-rw-r--r--tests/ui/const-generics/generic_arg_infer/in-signature.stderr6
-rw-r--r--tests/ui/const-generics/generic_arg_infer/issue-91614.stderr4
-rw-r--r--tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.full.stderr2
-rw-r--r--tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.min.stderr4
-rw-r--r--tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.rs4
-rw-r--r--tests/ui/const-generics/generic_const_exprs/eval-privacy.rs7
-rw-r--r--tests/ui/const-generics/generic_const_exprs/eval-privacy.stderr21
-rw-r--r--tests/ui/const-generics/generic_const_exprs/inline-const-in-const-generic-defaults.rs9
-rw-r--r--tests/ui/const-generics/generic_const_exprs/issue-109141.rs13
-rw-r--r--tests/ui/const-generics/generic_const_exprs/issue-109141.stderr26
-rw-r--r--tests/ui/const-generics/generic_const_exprs/issue-80742.stderr4
-rw-r--r--tests/ui/const-generics/generic_const_exprs/issue-86710.rs2
-rw-r--r--tests/ui/const-generics/generic_const_exprs/issue-96699.rs87
-rw-r--r--tests/ui/const-generics/invalid-enum.rs4
-rw-r--r--tests/ui/const-generics/invalid-enum.stderr14
-rw-r--r--tests/ui/const-generics/issue-112505-overflow.rs7
-rw-r--r--tests/ui/const-generics/issue-112505-overflow.stderr12
-rw-r--r--tests/ui/const-generics/issue-66451.rs6
-rw-r--r--tests/ui/const-generics/issue-66451.stderr2
-rw-r--r--tests/ui/const-generics/issue-80471.rs2
-rw-r--r--tests/ui/const-generics/issue-80471.stderr8
-rw-r--r--tests/ui/const-generics/issues/issue-63322-forbid-dyn.full.stderr4
-rw-r--r--tests/ui/const-generics/issues/issue-63322-forbid-dyn.rs2
-rw-r--r--tests/ui/const-generics/issues/issue-67185-2.stderr12
-rw-r--r--tests/ui/const-generics/issues/issue-70273-assoc-fn.rs2
-rw-r--r--tests/ui/const-generics/issues/issue-71381.full.stderr17
-rw-r--r--tests/ui/const-generics/issues/issue-71381.rs10
-rw-r--r--tests/ui/const-generics/issues/issue-71611.full.stderr11
-rw-r--r--tests/ui/const-generics/issues/issue-71611.rs4
-rw-r--r--tests/ui/const-generics/issues/issue-74255.min.stderr2
-rw-r--r--tests/ui/const-generics/issues/issue-74255.rs4
-rw-r--r--tests/ui/const-generics/issues/issue-74950.min.stderr10
-rw-r--r--tests/ui/const-generics/issues/issue-74950.rs3
-rw-r--r--tests/ui/const-generics/issues/issue-87076.rs4
-rw-r--r--tests/ui/const-generics/issues/issue-97278.rs2
-rw-r--r--tests/ui/const-generics/issues/issue-97278.stderr8
-rw-r--r--tests/ui/const-generics/issues/issue-99641.rs4
-rw-r--r--tests/ui/const-generics/issues/issue-99641.stderr8
-rw-r--r--tests/ui/const-generics/overlapping_impls.rs5
-rw-r--r--tests/ui/const-generics/std/const-generics-range.full.stderr39
-rw-r--r--tests/ui/const-generics/std/const-generics-range.min.stderr12
-rw-r--r--tests/ui/const-generics/std/const-generics-range.rs3
-rw-r--r--tests/ui/const-generics/transmute-fail.stderr4
-rw-r--r--tests/ui/const-ptr/forbidden_slices.stderr10
-rw-r--r--tests/ui/consts/assoc_const_generic_impl.rs2
-rw-r--r--tests/ui/consts/const-eval/const-eval-overflow-3b.stderr4
-rw-r--r--tests/ui/consts/const-eval/const-eval-overflow-4b.stderr4
-rw-r--r--tests/ui/consts/const-eval/erroneous-const.rs2
-rw-r--r--tests/ui/consts/const-eval/erroneous-const.stderr6
-rw-r--r--tests/ui/consts/const-eval/erroneous-const2.rs2
-rw-r--r--tests/ui/consts/const-eval/erroneous-const2.stderr6
-rw-r--r--tests/ui/consts/const-eval/heap/alloc_intrinsic_errors.stderr2
-rw-r--r--tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.rs4
-rw-r--r--tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.stderr4
-rw-r--r--tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.rs4
-rw-r--r--tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.stderr6
-rw-r--r--tests/ui/consts/const-eval/heap/dealloc_intrinsic_incorrect_layout.stderr2
-rw-r--r--tests/ui/consts/const-eval/infinite_loop.rs4
-rw-r--r--tests/ui/consts/const-eval/infinite_loop.stderr23
-rw-r--r--tests/ui/consts/const-eval/issue-52475.rs3
-rw-r--r--tests/ui/consts/const-eval/issue-52475.stderr22
-rw-r--r--tests/ui/consts/const-eval/issue-70723.rs2
-rw-r--r--tests/ui/consts/const-eval/issue-70723.stderr14
-rw-r--r--tests/ui/consts/const-eval/promoted_errors.rs2
-rw-r--r--tests/ui/consts/const-eval/raw-bytes.32bit.stderr14
-rw-r--r--tests/ui/consts/const-eval/raw-bytes.64bit.stderr14
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.rs2
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.stderr19
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.rs5
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.stderr27
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-recursion.rs3
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-recursion.stderr24
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.allow.stderr19
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.rs12
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.stderr24
-rw-r--r--tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.warn.stderr62
-rw-r--r--tests/ui/consts/const-eval/ub-enum.32bit.stderr4
-rw-r--r--tests/ui/consts/const-eval/ub-enum.64bit.stderr4
-rw-r--r--tests/ui/consts/const-eval/ub-uninhabit.stderr4
-rw-r--r--tests/ui/consts/const-eval/unwind-abort.rs2
-rw-r--r--tests/ui/consts/const-eval/validate_uninhabited_zsts.32bit.stderr2
-rw-r--r--tests/ui/consts/const-eval/validate_uninhabited_zsts.64bit.stderr2
-rw-r--r--tests/ui/consts/const-len-underflow-separate-spans.next.stderr (renamed from tests/ui/consts/const-len-underflow-separate-spans.stderr)4
-rw-r--r--tests/ui/consts/const-len-underflow-separate-spans.old.stderr15
-rw-r--r--tests/ui/consts/const-len-underflow-separate-spans.rs3
-rw-r--r--tests/ui/consts/const_in_pattern/issue-73431.rs1
-rw-r--r--tests/ui/consts/const_limit/const_eval_limit_not_reached.rs20
-rw-r--r--tests/ui/consts/const_limit/const_eval_limit_overflow.rs15
-rw-r--r--tests/ui/consts/const_limit/const_eval_limit_overflow.stderr10
-rw-r--r--tests/ui/consts/const_limit/const_eval_limit_reached.rs16
-rw-r--r--tests/ui/consts/const_limit/const_eval_limit_reached.stderr12
-rw-r--r--tests/ui/consts/const_limit/feature-gate-const_eval_limit.rs14
-rw-r--r--tests/ui/consts/const_limit/feature-gate-const_eval_limit.stderr12
-rw-r--r--tests/ui/consts/issue-16538.mir.stderr (renamed from tests/ui/issues/issue-16538.mir.stderr)0
-rw-r--r--tests/ui/consts/issue-16538.rs (renamed from tests/ui/issues/issue-16538.rs)0
-rw-r--r--tests/ui/consts/issue-16538.thir.stderr (renamed from tests/ui/issues/issue-16538.thir.stderr)0
-rw-r--r--tests/ui/consts/issue-28822.rs (renamed from tests/ui/issues/issue-28822.rs)0
-rw-r--r--tests/ui/consts/issue-29798.rs (renamed from tests/ui/issues/issue-29798.rs)0
-rw-r--r--tests/ui/consts/issue-64506.stderr2
-rw-r--r--tests/ui/consts/issue-83182.stderr4
-rw-r--r--tests/ui/consts/issue-miri-1910.stderr4
-rw-r--r--tests/ui/consts/large_const_alloc.rs4
-rw-r--r--tests/ui/consts/miri_unleashed/assoc_const.stderr2
-rw-r--r--tests/ui/consts/miri_unleashed/raw_mutable_const.rs2
-rw-r--r--tests/ui/consts/miri_unleashed/raw_mutable_const.stderr4
-rw-r--r--tests/ui/consts/missing-larger-array-impl.rs9
-rw-r--r--tests/ui/consts/missing-larger-array-impl.stderr20
-rw-r--r--tests/ui/consts/missing_span_in_backtrace.stderr4
-rw-r--r--tests/ui/consts/offset_from_ub.stderr14
-rw-r--r--tests/ui/consts/raw-ptr-const.rs2
-rw-r--r--tests/ui/consts/raw-ptr-const.stderr4
-rw-r--r--tests/ui/consts/refs_check_const_eq-issue-88384.rs4
-rw-r--r--tests/ui/consts/refs_check_const_eq-issue-88384.stderr16
-rw-r--r--tests/ui/consts/timeout.rs25
-rw-r--r--tests/ui/consts/timeout.stderr15
-rw-r--r--tests/ui/consts/too_generic_eval_ice.stderr12
-rw-r--r--tests/ui/deriving/deriving-all-codegen.stdout15
-rw-r--r--tests/ui/deriving/issue-103157.stderr10
-rw-r--r--tests/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.stderr4
-rw-r--r--tests/ui/did_you_mean/issue-39802-show-5-trait-impls.stderr4
-rw-r--r--tests/ui/did_you_mean/issue-42599_available_fields_note.stderr2
-rw-r--r--tests/ui/did_you_mean/issue-49746-unicode-confusable-in-float-literal-expt.stderr16
-rw-r--r--tests/ui/dst/dst-object-from-unsized-type.stderr4
-rw-r--r--tests/ui/duplicate/dupe-symbols-7.rs3
-rw-r--r--tests/ui/duplicate/dupe-symbols-7.stderr2
-rw-r--r--tests/ui/dyn-star/box.rs4
-rw-r--r--tests/ui/dyn-star/param-env-infer.current.stderr18
-rw-r--r--tests/ui/dyn-star/param-env-infer.next.stderr73
-rw-r--r--tests/ui/dyn-star/param-env-infer.rs17
-rw-r--r--tests/ui/dyn-star/param-env-region-infer.current.stderr9
-rw-r--r--tests/ui/dyn-star/param-env-region-infer.next.stderr29
-rw-r--r--tests/ui/dyn-star/param-env-region-infer.rs22
-rw-r--r--tests/ui/empty-allocation-rvalue-non-null.rs2
-rw-r--r--tests/ui/empty/empty-macro-use.stderr6
-rw-r--r--tests/ui/enum-discriminant/discriminant-ill-typed.rs (renamed from tests/ui/discrim/discrim-ill-typed.rs)0
-rw-r--r--tests/ui/enum-discriminant/discriminant-ill-typed.stderr (renamed from tests/ui/discrim/discrim-ill-typed.stderr)16
-rw-r--r--tests/ui/enum-discriminant/discriminant-overflow-2.rs (renamed from tests/ui/discrim/discrim-overflow-2.rs)0
-rw-r--r--tests/ui/enum-discriminant/discriminant-overflow-2.stderr (renamed from tests/ui/discrim/discrim-overflow.stderr)16
-rw-r--r--tests/ui/enum-discriminant/discriminant-overflow.rs (renamed from tests/ui/discrim/discrim-overflow.rs)0
-rw-r--r--tests/ui/enum-discriminant/discriminant-overflow.stderr (renamed from tests/ui/discrim/discrim-overflow-2.stderr)16
-rw-r--r--tests/ui/enum-discriminant/issue-50689.rs (renamed from tests/ui/issues/issue-50689.rs)0
-rw-r--r--tests/ui/enum/suggest-default-attribute.stderr2
-rw-r--r--tests/ui/error-codes/E0283.stderr4
-rw-r--r--tests/ui/error-codes/E0445.rs11
-rw-r--r--tests/ui/error-codes/E0445.stderr49
-rw-r--r--tests/ui/error-codes/E0560.stderr2
-rw-r--r--tests/ui/error-codes/E0637.stderr7
-rw-r--r--tests/ui/error-codes/E0790.stderr4
-rw-r--r--tests/ui/explicit-tail-calls/become-outside.array.stderr9
-rw-r--r--tests/ui/explicit-tail-calls/become-outside.constant.stderr9
-rw-r--r--tests/ui/explicit-tail-calls/become-outside.rs15
-rw-r--r--tests/ui/explicit-tail-calls/return-lifetime-sub.rs13
-rw-r--r--tests/ui/explicit-tail-calls/return-mismatches.rs28
-rw-r--r--tests/ui/explicit-tail-calls/return-mismatches.stderr27
-rw-r--r--tests/ui/extern/extern-crate-visibility.stderr8
-rw-r--r--tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.rs10
-rw-r--r--tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.stderr47
-rw-r--r--tests/ui/extern/issue-1251.rs (renamed from tests/ui/issues/issue-1251.rs)0
-rw-r--r--tests/ui/feature-gates/feature-gate-explicit_tail_calls.rs9
-rw-r--r--tests/ui/feature-gates/feature-gate-explicit_tail_calls.stderr21
-rw-r--r--tests/ui/feature-gates/feature-gate-generic_arg_infer.rs2
-rw-r--r--tests/ui/feature-gates/feature-gate-return_type_notation.cfg_current.stderr27
-rw-r--r--tests/ui/feature-gates/feature-gate-return_type_notation.cfg_next.stderr27
-rw-r--r--tests/ui/feature-gates/feature-gate-return_type_notation.no_current.stderr13
-rw-r--r--tests/ui/feature-gates/feature-gate-return_type_notation.no_next.stderr13
-rw-r--r--tests/ui/feature-gates/feature-gate-return_type_notation.rs24
-rw-r--r--tests/ui/feature-gates/feature-gate-type_alias_impl_trait.rs7
-rw-r--r--tests/ui/feature-gates/feature-gate-type_privacy_lints.rs12
-rw-r--r--tests/ui/feature-gates/feature-gate-type_privacy_lints.stderr93
-rw-r--r--tests/ui/fmt/ifmt-unimpl.stderr16
-rw-r--r--tests/ui/for-loop-while/issue-1257.rs (renamed from tests/ui/issues/issue-1257.rs)0
-rw-r--r--tests/ui/for-loop-while/loop-break-value.rs10
-rw-r--r--tests/ui/for/issue-20605.current.stderr (renamed from tests/ui/issues/issue-20605.stderr)2
-rw-r--r--tests/ui/for/issue-20605.next.stderr72
-rw-r--r--tests/ui/for/issue-20605.rs20
-rw-r--r--tests/ui/generator/layout-error.rs1
-rw-r--r--tests/ui/generator/layout-error.stderr20
-rw-r--r--tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.rs29
-rw-r--r--tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.stderr11
-rw-r--r--tests/ui/generic-associated-types/issue-88287.stderr2
-rw-r--r--tests/ui/generic-associated-types/issue-88595.rs1
-rw-r--r--tests/ui/generic-associated-types/issue-88595.stderr26
-rw-r--r--tests/ui/generic-associated-types/issue-90014-tait.rs23
-rw-r--r--tests/ui/generic-associated-types/issue-90014-tait.stderr22
-rw-r--r--tests/ui/generic-associated-types/issue-90014-tait2.rs (renamed from tests/ui/chalkify/bugs/async.rs)37
-rw-r--r--tests/ui/generic-associated-types/issue-90014-tait2.stderr12
-rw-r--r--tests/ui/generics/issue-65285-incorrect-explicit-lifetime-name-needed.stderr7
-rw-r--r--tests/ui/generics/post_monomorphization_error_backtrace.rs2
-rw-r--r--tests/ui/hashmap/hashmap-memory.rs1
-rw-r--r--tests/ui/higher-rank-trait-bounds/issue-95230.rs11
-rw-r--r--tests/ui/higher-ranked/higher-lifetime-bounds.rs (renamed from tests/ui/higher-lifetime-bounds.rs)0
-rw-r--r--tests/ui/higher-ranked/higher-lifetime-bounds.stderr (renamed from tests/ui/higher-lifetime-bounds.stderr)0
-rw-r--r--tests/ui/higher-ranked/leak-check-in-selection.rs24
-rw-r--r--tests/ui/higher-ranked/subtype/hr-subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr (renamed from tests/ui/hr-subtype/hr-subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr)0
-rw-r--r--tests/ui/higher-ranked/subtype/hr-subtype.bound_a_vs_free_x.stderr (renamed from tests/ui/hr-subtype/hr-subtype.bound_a_vs_free_x.stderr)0
-rw-r--r--tests/ui/higher-ranked/subtype/hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr (renamed from tests/ui/hr-subtype/hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr)0
-rw-r--r--tests/ui/higher-ranked/subtype/hr-subtype.free_inv_x_vs_free_inv_y.stderr (renamed from tests/ui/hr-subtype/hr-subtype.free_inv_x_vs_free_inv_y.stderr)0
-rw-r--r--tests/ui/higher-ranked/subtype/hr-subtype.free_x_vs_free_y.stderr (renamed from tests/ui/hr-subtype/hr-subtype.free_x_vs_free_y.stderr)0
-rw-r--r--tests/ui/higher-ranked/subtype/hr-subtype.rs (renamed from tests/ui/hr-subtype/hr-subtype.rs)0
-rw-r--r--tests/ui/higher-ranked/subtype/placeholder-pattern-fail.rs (renamed from tests/ui/hr-subtype/placeholder-pattern-fail.rs)0
-rw-r--r--tests/ui/higher-ranked/subtype/placeholder-pattern-fail.stderr (renamed from tests/ui/hr-subtype/placeholder-pattern-fail.stderr)0
-rw-r--r--tests/ui/higher-ranked/subtype/placeholder-pattern.rs (renamed from tests/ui/hr-subtype/placeholder-pattern.rs)0
-rw-r--r--tests/ui/higher-ranked/subtype/return-static.rs (renamed from tests/ui/hr-subtype/return-static.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/complex.rs (renamed from tests/ui/higher-rank-trait-bounds/complex.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/due-to-where-clause.rs (renamed from tests/ui/higher-rank-trait-bounds/due-to-where-clause.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/due-to-where-clause.stderr (renamed from tests/ui/higher-rank-trait-bounds/due-to-where-clause.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/fn-ptr.classic.stderr (renamed from tests/ui/higher-rank-trait-bounds/fn-ptr.classic.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/fn-ptr.rs (renamed from tests/ui/higher-rank-trait-bounds/fn-ptr.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/future.classic.stderr6
-rw-r--r--tests/ui/higher-ranked/trait-bounds/future.rs38
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hang-on-deeply-nested-dyn.rs (renamed from tests/ui/higher-rank-trait-bounds/hang-on-deeply-nested-dyn.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hang-on-deeply-nested-dyn.stderr (renamed from tests/ui/higher-rank-trait-bounds/hang-on-deeply-nested-dyn.stderr)2
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-binder-levels-in-object-types.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-binder-levels-in-object-types.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-cache-issue-54302.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-cache-issue-54302.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-cache-issue-54302.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-cache-issue-54302.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-conflate-regions.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-conflate-regions.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-conflate-regions.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-conflate-regions.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-in-receiver.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-debruijn-in-receiver.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-in-receiver.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-debruijn-in-receiver.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-object-types-in-closures.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-debruijn-object-types-in-closures.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-fn.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-fn.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-fn.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-fn.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-contravariant.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-contravariant.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-contravariant.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-contravariant.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-covariant.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-covariant.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-invariant.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-invariant.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-invariant.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-invariant.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-fn-like-trait-object.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-fn-like-trait-object.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-fn-like-trait.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-fn-like-trait.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits-transitive.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits-transitive.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits-transitive.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits-transitive.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-identity-fn-borrows.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-identity-fn-borrows.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-identity-fn-borrows.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-identity-fn-borrows.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-just-for-static.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-just-for-static.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-just-for-static.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-just-for-static.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-malformed-lifetime-generics.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-malformed-lifetime-generics.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-malformed-lifetime-generics.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-malformed-lifetime-generics.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-opt-in-copy.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-opt-in-copy.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-parse.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-parse.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.polonius.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.polonius.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-precedence-of-plus-where-clause.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-precedence-of-plus-where-clause.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-precedence-of-plus.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-precedence-of-plus.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-resolve-lifetime.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-resolve-lifetime.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-trait-object-paren-notation.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-trait-object-paren-notation.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-trait-object-passed-to-closure.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-trait-object-passed-to-closure.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-type-outlives.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-type-outlives.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-unboxed-closure-trait.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-unboxed-closure-trait.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-wrong-kind.rs (renamed from tests/ui/higher-rank-trait-bounds/hrtb-wrong-kind.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/hrtb-wrong-kind.stderr (renamed from tests/ui/higher-rank-trait-bounds/hrtb-wrong-kind.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-100689.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-100689.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-102899.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-102899.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-30786.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-30786.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-30786.stderr (renamed from tests/ui/higher-rank-trait-bounds/issue-30786.stderr)2
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-36139-normalize-closure-sig.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-39292.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-39292.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-42114.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-42114.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-43623.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-43623.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-46989.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-46989.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-46989.stderr (renamed from tests/ui/higher-rank-trait-bounds/issue-46989.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-57639.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-57639.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-58451.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-58451.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-58451.stderr (renamed from tests/ui/higher-rank-trait-bounds/issue-58451.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-59311.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-59311.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-59311.stderr (renamed from tests/ui/higher-rank-trait-bounds/issue-59311.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-60283.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-60283.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-62203-hrtb-ice.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-62203-hrtb-ice.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-62203-hrtb-ice.stderr (renamed from tests/ui/higher-rank-trait-bounds/issue-62203-hrtb-ice.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-88446.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-88446.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-88586-hr-self-outlives-in-trait-def.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-88586-hr-self-outlives-in-trait-def.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-90177.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-90177.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-95034.rs (renamed from tests/ui/higher-rank-trait-bounds/issue-95034.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-95230.next.stderr (renamed from tests/ui/higher-rank-trait-bounds/issue-95230.new.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/issue-95230.rs11
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-44005.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-44005.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-56556.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-56556.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-1.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-1.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-2.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-2.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-3.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-3.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-3.stderr (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-3.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-4.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-4.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-5.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-5.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-6.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-6.rs)2
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-70120.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-70120.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.migrate.stderr (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.migrate.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.stderr (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-74261.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-74261.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-76956.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-76956.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-80706.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-80706.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-80956.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-80956.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-81809.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-81809.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-85455.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-85455.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-85455.stderr (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-85455.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89118.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89118.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89118.stderr (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89118.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89436.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89436.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90612.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90612.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90638.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90638.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90875.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90875.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90950.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90950.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90950.stderr (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90950.stderr)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.rs (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/norm-before-method-resolution.rs)0
-rw-r--r--tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.stderr (renamed from tests/ui/higher-rank-trait-bounds/normalize-under-binder/norm-before-method-resolution.stderr)0
-rw-r--r--tests/ui/hygiene/no_implicit_prelude-2018.stderr6
-rw-r--r--tests/ui/impl-trait/auto-trait-leak.rs6
-rw-r--r--tests/ui/impl-trait/auto-trait-leak.stderr151
-rw-r--r--tests/ui/impl-trait/autoderef.rs2
-rw-r--r--tests/ui/impl-trait/coherence-treats-tait-ambig.current.stderr13
-rw-r--r--tests/ui/impl-trait/coherence-treats-tait-ambig.next.stderr13
-rw-r--r--tests/ui/impl-trait/coherence-treats-tait-ambig.rs19
-rw-r--r--tests/ui/impl-trait/deduce-signature-from-supertrait.rs4
-rw-r--r--tests/ui/impl-trait/defined-by-trait-resolution.rs12
-rw-r--r--tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.rs9
-rw-r--r--tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.stderr16
-rw-r--r--tests/ui/impl-trait/equality.stderr4
-rw-r--r--tests/ui/impl-trait/in-assoc-type-unconstrained.stderr4
-rw-r--r--tests/ui/impl-trait/in-assoc-type.rs3
-rw-r--r--tests/ui/impl-trait/in-assoc-type.stderr6
-rw-r--r--tests/ui/impl-trait/in-trait/foreign.rs4
-rw-r--r--tests/ui/impl-trait/in-trait/issue-102140.next.stderr6
-rw-r--r--tests/ui/impl-trait/in-trait/method-signature-matches.lt.stderr21
-rw-r--r--tests/ui/impl-trait/in-trait/method-signature-matches.mismatch.stderr20
-rw-r--r--tests/ui/impl-trait/in-trait/method-signature-matches.mismatch_async.stderr20
-rw-r--r--tests/ui/impl-trait/in-trait/method-signature-matches.rs21
-rw-r--r--tests/ui/impl-trait/in-trait/method-signature-matches.stderr74
-rw-r--r--tests/ui/impl-trait/in-trait/method-signature-matches.too_few.stderr12
-rw-r--r--tests/ui/impl-trait/in-trait/method-signature-matches.too_many.stderr12
-rw-r--r--tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.current.stderr16
-rw-r--r--tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.next.stderr16
-rw-r--r--tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.rs19
-rw-r--r--tests/ui/impl-trait/in-trait/signature-mismatch.current.stderr65
-rw-r--r--tests/ui/impl-trait/in-trait/signature-mismatch.next.stderr65
-rw-r--r--tests/ui/impl-trait/in-trait/signature-mismatch.rs55
-rw-r--r--tests/ui/impl-trait/in-trait/suggest-missing-item.fixed25
-rw-r--r--tests/ui/impl-trait/in-trait/suggest-missing-item.rs21
-rw-r--r--tests/ui/impl-trait/in-trait/suggest-missing-item.stderr21
-rw-r--r--tests/ui/impl-trait/in-trait/unconstrained-lt.current.stderr9
-rw-r--r--tests/ui/impl-trait/in-trait/unconstrained-lt.next.stderr9
-rw-r--r--tests/ui/impl-trait/in-trait/unconstrained-lt.rs16
-rw-r--r--tests/ui/impl-trait/in-trait/variances-of-gat.rs19
-rw-r--r--tests/ui/impl-trait/in-trait/wf-bounds.current.stderr27
-rw-r--r--tests/ui/impl-trait/in-trait/wf-bounds.next.stderr27
-rw-r--r--tests/ui/impl-trait/in-trait/wf-bounds.rs7
-rw-r--r--tests/ui/impl-trait/issue-103181-2.rs2
-rw-r--r--tests/ui/impl-trait/issue-103181-2.stderr57
-rw-r--r--tests/ui/impl-trait/issue-55872-3.rs1
-rw-r--r--tests/ui/impl-trait/issue-55872-3.stderr6
-rw-r--r--tests/ui/impl-trait/issues/issue-65581.rs1
-rw-r--r--tests/ui/impl-trait/issues/issue-70877.rs4
-rw-r--r--tests/ui/impl-trait/issues/issue-70877.stderr6
-rw-r--r--tests/ui/impl-trait/issues/issue-74282.rs9
-rw-r--r--tests/ui/impl-trait/issues/issue-74282.stderr18
-rw-r--r--tests/ui/impl-trait/issues/issue-78722-2.rs22
-rw-r--r--tests/ui/impl-trait/issues/issue-78722-2.stderr32
-rw-r--r--tests/ui/impl-trait/issues/issue-78722.rs3
-rw-r--r--tests/ui/impl-trait/issues/issue-78722.stderr6
-rw-r--r--tests/ui/impl-trait/multiple-defining-usages-in-body.rs2
-rw-r--r--tests/ui/impl-trait/multiple-defining-usages-in-body.stderr10
-rw-r--r--tests/ui/impl-trait/nested-return-type2-tait.stderr4
-rw-r--r--tests/ui/impl-trait/nested-return-type3-tait.stderr4
-rw-r--r--tests/ui/impl-trait/nested-return-type3-tait2.stderr4
-rw-r--r--tests/ui/impl-trait/normalize-opaque-with-bound-vars.rs27
-rw-r--r--tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.rs3
-rw-r--r--tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.stderr15
-rw-r--r--tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle.stderr4
-rw-r--r--tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.rs3
-rw-r--r--tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.stderr15
-rw-r--r--tests/ui/impl-trait/reveal-during-codegen.rs11
-rw-r--r--tests/ui/impl-trait/static-lifetime-return-position-impl-trait.rs12
-rw-r--r--tests/ui/impl-trait/universal_wrong_hrtb.rs2
-rw-r--r--tests/ui/impl-trait/universal_wrong_hrtb.stderr10
-rw-r--r--tests/ui/implied-bounds/implied-bounds-unconstrained-1.rs28
-rw-r--r--tests/ui/implied-bounds/implied-bounds-unconstrained-2.rs20
-rw-r--r--tests/ui/implied-bounds/references-err.rs22
-rw-r--r--tests/ui/implied-bounds/references-err.stderr9
-rw-r--r--tests/ui/imports/auxiliary/issue-85992-extern-1.rs6
-rw-r--r--tests/ui/imports/auxiliary/issue-85992-extern-2.rs1
-rw-r--r--tests/ui/imports/issue-55884-2.rs1
-rw-r--r--tests/ui/imports/issue-55884-2.stderr6
-rw-r--r--tests/ui/imports/issue-56125.stderr15
-rw-r--r--tests/ui/imports/issue-57539.stderr5
-rw-r--r--tests/ui/imports/issue-85992.rs11
-rw-r--r--tests/ui/imports/issue-85992.stderr9
-rw-r--r--tests/ui/inference/deref-suggestion.stderr13
-rw-r--r--tests/ui/inline-const/elided-lifetime-being-infer-vars.rs11
-rw-r--r--tests/ui/intrinsics/panic-uninitialized-zeroed.rs2
-rw-r--r--tests/ui/issues/issue-100605.stderr15
-rw-r--r--tests/ui/issues/issue-11047.rs4
-rw-r--r--tests/ui/issues/issue-11680.stderr8
-rw-r--r--tests/ui/issues/issue-11709.rs4
-rw-r--r--tests/ui/issues/issue-11740.rs2
-rw-r--r--tests/ui/issues/issue-11771.stderr32
-rw-r--r--tests/ui/issues/issue-12133-3.rs2
-rw-r--r--tests/ui/issues/issue-13167.rs2
-rw-r--r--tests/ui/issues/issue-1460.stderr4
-rw-r--r--tests/ui/issues/issue-15734.rs4
-rw-r--r--tests/ui/issues/issue-17954.stderr2
-rw-r--r--tests/ui/issues/issue-18389.rs8
-rw-r--r--tests/ui/issues/issue-18389.stderr27
-rw-r--r--tests/ui/issues/issue-20605.rs6
-rw-r--r--tests/ui/issues/issue-20644.rs2
-rw-r--r--tests/ui/issues/issue-23808.rs8
-rw-r--r--tests/ui/issues/issue-24352.stderr4
-rw-r--r--tests/ui/issues/issue-32709.stderr2
-rw-r--r--tests/ui/issues/issue-35570.rs1
-rw-r--r--tests/ui/issues/issue-35570.stderr12
-rw-r--r--tests/ui/issues/issue-37311-type-length-limit/issue-37311.rs1
-rw-r--r--tests/ui/issues/issue-37311-type-length-limit/issue-37311.stderr4
-rw-r--r--tests/ui/issues/issue-50582.stderr16
-rw-r--r--tests/ui/issues/issue-50811.rs1
-rw-r--r--tests/ui/issues/issue-51714.rs10
-rw-r--r--tests/ui/issues/issue-51714.stderr6
-rw-r--r--tests/ui/issues/issue-52049.stderr4
-rw-r--r--tests/ui/issues/issue-5439.stderr2
-rw-r--r--tests/ui/issues/issue-5883.rs2
-rw-r--r--tests/ui/issues/issue-5883.stderr18
-rw-r--r--tests/ui/issues/issue-67552.rs1
-rw-r--r--tests/ui/issues/issue-67552.stderr4
-rw-r--r--tests/ui/issues/issue-85461.rs1
-rw-r--r--tests/ui/iterators/invalid-iterator-chain-with-int-infer.stderr2
-rw-r--r--tests/ui/iterators/invalid-iterator-chain.stderr10
-rw-r--r--tests/ui/iterators/issue-58952-filter-type-length.rs2
-rw-r--r--tests/ui/layout/cannot-transmute-unnormalizable-type.rs22
-rw-r--r--tests/ui/layout/cannot-transmute-unnormalizable-type.stderr19
-rw-r--r--tests/ui/let-else/let-else-ref-bindings.stderr18
-rw-r--r--tests/ui/lexer/lex-bad-char-literals-1.stderr4
-rw-r--r--tests/ui/lifetimes/issue-90600-expected-return-static-indirect.stderr2
-rw-r--r--tests/ui/limits/huge-array-simple-32.rs3
-rw-r--r--tests/ui/limits/huge-array-simple-32.stderr2
-rw-r--r--tests/ui/limits/huge-array-simple-64.rs3
-rw-r--r--tests/ui/limits/huge-array-simple-64.stderr2
-rw-r--r--tests/ui/limits/huge-array.rs4
-rw-r--r--tests/ui/limits/huge-array.stderr2
-rw-r--r--tests/ui/limits/huge-enum.rs4
-rw-r--r--tests/ui/limits/huge-enum.stderr2
-rw-r--r--tests/ui/limits/huge-struct.rs4
-rw-r--r--tests/ui/limits/huge-struct.stderr2
-rw-r--r--tests/ui/limits/issue-15919-32.rs4
-rw-r--r--tests/ui/limits/issue-15919-32.stderr2
-rw-r--r--tests/ui/limits/issue-15919-64.rs4
-rw-r--r--tests/ui/limits/issue-15919-64.stderr2
-rw-r--r--tests/ui/limits/issue-17913.rs4
-rw-r--r--tests/ui/limits/issue-56762.rs3
-rw-r--r--tests/ui/limits/issue-56762.stderr4
-rw-r--r--tests/ui/linkage-attr/incompatible-flavor.rs6
-rw-r--r--tests/ui/linkage-attr/incompatible-flavor.stderr6
-rw-r--r--tests/ui/linkage-attr/issue-10755.rs2
-rw-r--r--tests/ui/linkage-attr/linkage3.rs4
-rw-r--r--tests/ui/linkage-attr/linkage3.stderr2
-rw-r--r--tests/ui/linkage-attr/unstable-flavor.bpf.stderr2
-rw-r--r--tests/ui/linkage-attr/unstable-flavor.ptx.stderr2
-rw-r--r--tests/ui/linkage-attr/unstable-flavor.rs14
-rw-r--r--tests/ui/lint/invalid-nan-comparison-suggestion.fixed36
-rw-r--r--tests/ui/lint/invalid-nan-comparison-suggestion.rs39
-rw-r--r--tests/ui/lint/invalid-nan-comparison-suggestion.stderr114
-rw-r--r--tests/ui/lint/invalid-nan-comparison.rs51
-rw-r--r--tests/ui/lint/invalid-nan-comparison.stderr159
-rw-r--r--tests/ui/lint/invalid_from_utf8.rs93
-rw-r--r--tests/ui/lint/invalid_from_utf8.stderr110
-rw-r--r--tests/ui/lint/issue-99387.rs4
-rw-r--r--tests/ui/lint/issue-99387.stderr15
-rw-r--r--tests/ui/lint/lint-attr-everywhere-early.rs2
-rw-r--r--tests/ui/lint/lint-attr-everywhere-late.rs2
-rw-r--r--tests/ui/lint/lint-ctypes-113436-1.rs28
-rw-r--r--tests/ui/lint/lint-ctypes-113436-1.stderr35
-rw-r--r--tests/ui/lint/lint-ctypes-113436.rs34
-rw-r--r--tests/ui/lint/lint-ctypes-113900.rs12
-rw-r--r--tests/ui/lint/lint-ctypes-73249-2.rs8
-rw-r--r--tests/ui/lint/lint-ctypes-73249-2.stderr6
-rw-r--r--tests/ui/lint/lint-ctypes-73251-1.rs6
-rw-r--r--tests/ui/lint/lint-ctypes-73251-1.stderr6
-rw-r--r--tests/ui/lint/lint-ctypes-73251-2.rs2
-rw-r--r--tests/ui/lint/lint-ctypes-73251-2.stderr6
-rw-r--r--tests/ui/lint/lint-ctypes-73251.rs4
-rw-r--r--tests/ui/lint/lint-ctypes-94223.rs42
-rw-r--r--tests/ui/lint/lint-ctypes-94223.stderr126
-rw-r--r--tests/ui/lint/lint-unnecessary-parens.fixed8
-rw-r--r--tests/ui/lint/lint-unnecessary-parens.rs8
-rw-r--r--tests/ui/lint/lint-unnecessary-parens.stderr86
-rw-r--r--tests/ui/lint/opaque-ty-ffi-unsafe.rs4
-rw-r--r--tests/ui/lint/opaque-ty-ffi-unsafe.stderr6
-rw-r--r--tests/ui/lint/reference_casting.rs51
-rw-r--r--tests/ui/lint/reference_casting.stderr68
-rw-r--r--tests/ui/lint/trivial-casts-featuring-type-ascription.stderr4
-rw-r--r--tests/ui/lint/type-overflow.stderr28
-rw-r--r--tests/ui/lint/undropped_manually_drops.rs19
-rw-r--r--tests/ui/lint/undropped_manually_drops.stderr42
-rw-r--r--tests/ui/lint/unused/lint-unused-extern-crate.rs2
-rw-r--r--tests/ui/lint/unused/lint-unused-imports.rs2
-rw-r--r--tests/ui/lint/unused/lint-unused-variables.rs4
-rw-r--r--tests/ui/lint/unused/must-use-block-expr.fixed36
-rw-r--r--tests/ui/lint/unused/must-use-block-expr.rs36
-rw-r--r--tests/ui/lint/unused/must-use-block-expr.stderr51
-rw-r--r--tests/ui/lint/unused_import_warning_issue_45268.rs8
-rw-r--r--tests/ui/loops/dont-suggest-break-thru-item.rs55
-rw-r--r--tests/ui/loops/dont-suggest-break-thru-item.stderr55
-rw-r--r--tests/ui/macros/auxiliary/proc_macro_sequence.rs5
-rw-r--r--tests/ui/macros/builtin-prelude-no-accidents.stderr32
-rw-r--r--tests/ui/macros/builtin-std-paths-fail.stderr3
-rw-r--r--tests/ui/macros/format-args-temporaries.rs10
-rw-r--r--tests/ui/macros/issue-112342-1.rs49
-rw-r--r--tests/ui/macros/issue-112342-1.stderr64
-rw-r--r--tests/ui/macros/issue-112342-2.rs39
-rw-r--r--tests/ui/macros/issue-112342-2.stderr24
-rw-r--r--tests/ui/macros/issue-88228.rs5
-rw-r--r--tests/ui/macros/issue-88228.stderr14
-rw-r--r--tests/ui/macros/macro-comma-support-rpass.rs4
-rw-r--r--tests/ui/macros/macro-outer-attributes.stderr5
-rw-r--r--tests/ui/macros/macro-use-wrong-name.stderr12
-rw-r--r--tests/ui/macros/same-sequence-span.stderr7
-rw-r--r--tests/ui/match/issue-112438.rs11
-rw-r--r--tests/ui/match/issue-113012.rs12
-rw-r--r--tests/ui/match/issue-70972-dyn-trait.rs2
-rw-r--r--tests/ui/match/issue-70972-dyn-trait.stderr2
-rw-r--r--tests/ui/mir/issue-101844.rs2
-rw-r--r--tests/ui/mir/issue-112269.rs9
-rw-r--r--tests/ui/mir/issue-112269.stderr31
-rw-r--r--tests/ui/mir/issue-80949.rs2
-rw-r--r--tests/ui/mir/issue66339.rs2
-rw-r--r--tests/ui/mir/ssa-analysis-regression-50041.rs11
-rw-r--r--tests/ui/mir/thir-constparam-temp.rs4
-rw-r--r--tests/ui/mir/thir-constparam-temp.stderr6
-rw-r--r--tests/ui/mismatched_types/E0053.stderr2
-rw-r--r--tests/ui/mismatched_types/binops.stderr72
-rw-r--r--tests/ui/mismatched_types/issue-112036.rs7
-rw-r--r--tests/ui/mismatched_types/issue-112036.stderr15
-rw-r--r--tests/ui/mismatched_types/suggest-option-asderef-inference-var.rs9
-rw-r--r--tests/ui/mismatched_types/suggest-option-asderef-inference-var.stderr24
-rw-r--r--tests/ui/mismatched_types/suggest-option-asderef-unfixable.rs34
-rw-r--r--tests/ui/mismatched_types/suggest-option-asderef-unfixable.stderr75
-rw-r--r--tests/ui/mismatched_types/suggest-option-asderef.fixed39
-rw-r--r--tests/ui/mismatched_types/suggest-option-asderef.rs39
-rw-r--r--tests/ui/mismatched_types/suggest-option-asderef.stderr88
-rw-r--r--tests/ui/missing/missing-macro-use.stderr6
-rw-r--r--tests/ui/never_type/diverging-fallback-control-flow.rs12
-rw-r--r--tests/ui/never_type/diverging-fallback-no-leak.fallback.stderr2
-rw-r--r--tests/ui/never_type/issue-13352.stderr4
-rw-r--r--tests/ui/nll/assign-while-to-immutable.rs4
-rw-r--r--tests/ui/nll/issue-112604-closure-output-normalize.rs49
-rw-r--r--tests/ui/nll/issue-53119.rs2
-rw-r--r--tests/ui/nll/issue-54943-3.rs2
-rw-r--r--tests/ui/nll/ty-outlives/impl-trait-captures.stderr4
-rw-r--r--tests/ui/nll/user-annotations/normalization-2.stderr2
-rw-r--r--tests/ui/numbers-arithmetic/issue-8460-const.noopt.stderr12
-rw-r--r--tests/ui/numbers-arithmetic/issue-8460-const.opt.stderr12
-rw-r--r--tests/ui/numbers-arithmetic/issue-8460-const.opt_with_overflow_checks.stderr12
-rw-r--r--tests/ui/numbers-arithmetic/not-suggest-float-literal.stderr50
-rw-r--r--tests/ui/numbers-arithmetic/suggest-float-literal.stderr32
-rw-r--r--tests/ui/object-safety/assoc_type_bounds_sized.rs17
-rw-r--r--tests/ui/object-safety/assoc_type_bounds_sized.stderr12
-rw-r--r--tests/ui/object-safety/assoc_type_bounds_sized_others.rs25
-rw-r--r--tests/ui/object-safety/assoc_type_bounds_sized_others.stderr21
-rw-r--r--tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.rs17
-rw-r--r--tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr27
-rw-r--r--tests/ui/object-safety/assoc_type_bounds_sized_used.rs20
-rw-r--r--tests/ui/object-safety/assoc_type_bounds_sized_used.stderr53
-rw-r--r--tests/ui/offset-of/offset-of-dst-field.rs2
-rw-r--r--tests/ui/offset-of/offset-of-dst-field.stderr41
-rw-r--r--tests/ui/offset-of/offset-of-must-use.rs9
-rw-r--r--tests/ui/offset-of/offset-of-must-use.stderr16
-rw-r--r--tests/ui/offset-of/offset-of-output-type.stderr20
-rw-r--r--tests/ui/offset-of/offset-of-tuple-nested.rs32
-rw-r--r--tests/ui/offset-of/offset-of-tuple.rs54
-rw-r--r--tests/ui/offset-of/offset-of-tuple.stderr226
-rw-r--r--tests/ui/offset-of/offset-of-unsized.rs16
-rw-r--r--tests/ui/on-unimplemented/multiple-impls.stderr18
-rw-r--r--tests/ui/on-unimplemented/slice-index.stderr2
-rw-r--r--tests/ui/on-unimplemented/sum.stderr4
-rw-r--r--tests/ui/packed/issue-27060-2.stderr2
-rw-r--r--tests/ui/parser/bad-escape-suggest-raw-string.rs2
-rw-r--r--tests/ui/parser/bad-escape-suggest-raw-string.stderr2
-rw-r--r--tests/ui/parser/bad-interpolated-block.stderr12
-rw-r--r--tests/ui/parser/byte-literals.stderr4
-rw-r--r--tests/ui/parser/byte-string-literals.stderr4
-rw-r--r--tests/ui/parser/foreign-ty-semantic-fail.rs1
-rw-r--r--tests/ui/parser/foreign-ty-semantic-fail.stderr13
-rw-r--r--tests/ui/parser/issue-112188.fixed14
-rw-r--r--tests/ui/parser/issue-112188.rs14
-rw-r--r--tests/ui/parser/issue-112188.stderr37
-rw-r--r--tests/ui/parser/issue-113342.rs9
-rw-r--r--tests/ui/parser/issue-113342.stderr11
-rw-r--r--tests/ui/parser/issue-49257.stderr2
-rw-r--r--tests/ui/parser/issues/issue-111692.rs32
-rw-r--r--tests/ui/parser/issues/issue-111692.stderr46
-rw-r--r--tests/ui/parser/issues/issue-112458.rs4
-rw-r--r--tests/ui/parser/issues/issue-112458.stderr15
-rw-r--r--tests/ui/parser/labeled-no-colon-expr.stderr4
-rw-r--r--tests/ui/parser/lit-err-in-macro.rs10
-rw-r--r--tests/ui/parser/lit-err-in-macro.stderr8
-rw-r--r--tests/ui/parser/method-call-on-struct-literal-in-if-condition.stderr2
-rw-r--r--tests/ui/parser/typod-const-in-const-param-def.rs16
-rw-r--r--tests/ui/parser/typod-const-in-const-param-def.stderr46
-rw-r--r--tests/ui/parser/utf16-be-without-bom.stderrbin3537 -> 3641 bytes
-rw-r--r--tests/ui/parser/utf16-le-without-bom.stderrbin3500 -> 3603 bytes
-rw-r--r--tests/ui/pattern/byte-string-inference.rs15
-rw-r--r--tests/ui/pattern/issue-110508.rs38
-rw-r--r--tests/ui/pattern/issue-72565.rs2
-rw-r--r--tests/ui/pattern/issue-72565.stderr2
-rw-r--r--tests/ui/pattern/issue-94866.rs (renamed from tests/ui/issue-94866.rs)0
-rw-r--r--tests/ui/pattern/issue-94866.stderr (renamed from tests/ui/issue-94866.stderr)0
-rw-r--r--tests/ui/pattern/usefulness/empty-match.exhaustive_patterns.stderr22
-rw-r--r--tests/ui/pattern/usefulness/empty-match.normal.stderr22
-rw-r--r--tests/ui/pattern/usefulness/empty-match.rs8
-rw-r--r--tests/ui/pattern/usefulness/issue-3601.rs17
-rw-r--r--tests/ui/pattern/usefulness/issue-3601.stderr5
-rw-r--r--tests/ui/pattern/usefulness/match-non-exhaustive.rs1
-rw-r--r--tests/ui/pattern/usefulness/match-non-exhaustive.stderr1
-rw-r--r--tests/ui/polymorphization/drop_shims/simple.rs2
-rw-r--r--tests/ui/polymorphization/drop_shims/transitive.rs2
-rw-r--r--tests/ui/privacy/effective_visibilities_full_priv.rs21
-rw-r--r--tests/ui/privacy/effective_visibilities_full_priv.stderr26
-rw-r--r--tests/ui/privacy/export-tag-variant.stderr4
-rw-r--r--tests/ui/privacy/privacy-in-paths.stderr12
-rw-r--r--tests/ui/privacy/privacy-ufcs.stderr4
-rw-r--r--tests/ui/privacy/privacy1.stderr28
-rw-r--r--tests/ui/privacy/private-in-public-non-principal.rs7
-rw-r--r--tests/ui/privacy/private-in-public-non-principal.stderr25
-rw-r--r--tests/ui/privacy/private-inferred-type-1.rs10
-rw-r--r--tests/ui/privacy/private-inferred-type-1.stderr18
-rw-r--r--tests/ui/privacy/sealed-traits/private-trait-non-local.rs4
-rw-r--r--tests/ui/privacy/sealed-traits/private-trait-non-local.stderr12
-rw-r--r--tests/ui/privacy/sealed-traits/private-trait.rs10
-rw-r--r--tests/ui/privacy/sealed-traits/private-trait.stderr17
-rw-r--r--tests/ui/privacy/sealed-traits/re-exported-trait.fixed13
-rw-r--r--tests/ui/privacy/sealed-traits/re-exported-trait.rs13
-rw-r--r--tests/ui/privacy/sealed-traits/re-exported-trait.stderr19
-rw-r--r--tests/ui/privacy/sealed-traits/sealed-trait-local.rs19
-rw-r--r--tests/ui/privacy/sealed-traits/sealed-trait-local.stderr16
-rw-r--r--tests/ui/privacy/unnameable_types.rs30
-rw-r--r--tests/ui/privacy/unnameable_types.stderr38
-rw-r--r--tests/ui/privacy/where-priv-type.rs12
-rw-r--r--tests/ui/privacy/where-priv-type.stderr108
-rw-r--r--tests/ui/privacy/where-pub-type-impls-priv-trait.rs10
-rw-r--r--tests/ui/privacy/where-pub-type-impls-priv-trait.stderr87
-rw-r--r--tests/ui/proc-macro/auxiliary/api/cmp.rs11
-rw-r--r--tests/ui/proc-macro/auxiliary/assert-span-pos.rs5
-rw-r--r--tests/ui/proc-macro/auxiliary/exports_no_mangle.rs11
-rw-r--r--tests/ui/proc-macro/auxiliary/macro-only-syntax.rs2
-rw-r--r--tests/ui/proc-macro/crt-static.rs1
-rw-r--r--tests/ui/proc-macro/derive-helper-shadowing.rs2
-rw-r--r--tests/ui/proc-macro/derive-helper-shadowing.stderr29
-rw-r--r--tests/ui/proc-macro/no-mangle-in-proc-macro-issue-111888.rs22
-rw-r--r--tests/ui/proc-macro/span-preservation.stderr2
-rw-r--r--tests/ui/process/process-panic-after-fork.rs2
-rw-r--r--tests/ui/pub/issue-33174-restricted-type-in-public-interface.rs16
-rw-r--r--tests/ui/pub/issue-33174-restricted-type-in-public-interface.stderr49
-rw-r--r--tests/ui/range/range-1.stderr8
-rw-r--r--tests/ui/reachable/expr_return.rs2
-rw-r--r--tests/ui/reachable/expr_return.stderr12
-rw-r--r--tests/ui/reachable/unreachable-variant.stderr2
-rw-r--r--tests/ui/recursion/issue-83150.rs1
-rw-r--r--tests/ui/recursion/issue-83150.stderr6
-rw-r--r--tests/ui/recursion/issue-95134.rs1
-rw-r--r--tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.rs1
-rw-r--r--tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.stderr17
-rw-r--r--tests/ui/resolve/auxiliary/issue-112831-aux.rs13
-rw-r--r--tests/ui/resolve/export-fully-qualified-2018.rs13
-rw-r--r--tests/ui/resolve/export-fully-qualified-2018.stderr14
-rw-r--r--tests/ui/resolve/export-fully-qualified.rs2
-rw-r--r--tests/ui/resolve/export-fully-qualified.stderr7
-rw-r--r--tests/ui/resolve/extern-prelude.rs2
-rw-r--r--tests/ui/resolve/hidden_glob_reexports.rs52
-rw-r--r--tests/ui/resolve/hidden_glob_reexports.stderr54
-rw-r--r--tests/ui/resolve/issue-105069.stderr4
-rw-r--r--tests/ui/resolve/issue-109153.rs14
-rw-r--r--tests/ui/resolve/issue-109153.stderr23
-rw-r--r--tests/ui/resolve/issue-112472-multi-generics-suggestion.fixed31
-rw-r--r--tests/ui/resolve/issue-112472-multi-generics-suggestion.rs31
-rw-r--r--tests/ui/resolve/issue-112472-multi-generics-suggestion.stderr25
-rw-r--r--tests/ui/resolve/issue-112831.rs20
-rw-r--r--tests/ui/resolve/privacy-enum-ctor.stderr8
-rw-r--r--tests/ui/resolve/resolve-pseudo-shadowing.rs2
-rw-r--r--tests/ui/resolve/resolve-self-in-impl.stderr30
-rw-r--r--tests/ui/return-nil.rs4
-rw-r--r--tests/ui/return/issue-64620.rs2
-rw-r--r--tests/ui/return/issue-64620.stderr2
-rw-r--r--tests/ui/return/issue-86188-return-not-in-fn-body.rs12
-rw-r--r--tests/ui/return/tail-expr-as-potential-return.rs4
-rw-r--r--tests/ui/rfc-2005-default-binding-mode/enum.rs22
-rw-r--r--tests/ui/rfc-2005-default-binding-mode/for.rs9
-rw-r--r--tests/ui/rfc-2005-default-binding-mode/lit.rs24
-rw-r--r--tests/ui/rfc-2005-default-binding-mode/slice.rs7
-rw-r--r--tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/bind-by-move-no-guards.rs (renamed from tests/ui/rfc-0107-bind-by-move-pattern-guards/bind-by-move-no-guards.rs)0
-rw-r--r--tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/former-E0008-now-pass.rs (renamed from tests/ui/rfc-0107-bind-by-move-pattern-guards/former-E0008-now-pass.rs)0
-rw-r--r--tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-basic-examples.rs (renamed from tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-basic-examples.rs)0
-rw-r--r--tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.rs (renamed from tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.rs)0
-rw-r--r--tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.stderr (renamed from tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.rs (renamed from tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.rs)0
-rw-r--r--tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.stderr (renamed from tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1014-stdout-existential-crisis/rfc-1014-2.rs (renamed from tests/ui/rfcs/rfc-1014-2.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1014-stdout-existential-crisis/rfc-1014.rs (renamed from tests/ui/rfcs/rfc-1014.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-embedded.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-embedded.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-param.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-param.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-embedded.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-embedded.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-param.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-param.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-use-behind-cousin-variant.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/allow-use-behind-cousin-variant.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.no_gate.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.no_gate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.with_gate.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.with_gate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/fn-ptr-is-structurally-matchable.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/fn-ptr-is-structurally-matchable.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-6804.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/issue-6804.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-6804.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/issue-6804.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-empty-array-allowed-without-eq-issue-62336.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/match-empty-array-allowed-without-eq-issue-62336.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.stderr (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/phantom-data-is-structurally-matchable.rs (renamed from tests/ui/rfc-1445-restrict-constants-in-patterns/phantom-data-is-structurally-matchable.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/rfc1445/eq-allows-match-on-ty-in-macro.rs (renamed from tests/ui/rfcs/rfc1445/eq-allows-match-on-ty-in-macro.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/rfc1445/eq-allows-match.rs (renamed from tests/ui/rfcs/rfc1445/eq-allows-match.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1623-static/rfc1623-2.rs (renamed from tests/ui/rfcs/rfc1623-2.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1623-static/rfc1623-2.stderr (renamed from tests/ui/rfcs/rfc1623-2.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1623-static/rfc1623-3.rs (renamed from tests/ui/rfcs/rfc1623-3.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1623-static/rfc1623-3.stderr (renamed from tests/ui/rfcs/rfc1623-3.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1623-static/rfc1623.rs (renamed from tests/ui/rfcs/rfc1623.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1717-dllimport/1717-dllimport/library-override.rs (renamed from tests/ui/rfcs/rfc1717/library-override.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1717-dllimport/missing-link-attr.rs (renamed from tests/ui/rfc-1717-dllimport/missing-link-attr.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1717-dllimport/missing-link-attr.stderr (renamed from tests/ui/rfc-1717-dllimport/missing-link-attr.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1717-dllimport/multiple-renames.rs (renamed from tests/ui/rfc-1717-dllimport/multiple-renames.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1717-dllimport/multiple-renames.stderr (renamed from tests/ui/rfc-1717-dllimport/multiple-renames.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1717-dllimport/rename-modifiers.rs (renamed from tests/ui/rfc-1717-dllimport/rename-modifiers.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1717-dllimport/rename-modifiers.stderr (renamed from tests/ui/rfc-1717-dllimport/rename-modifiers.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1717-dllimport/rename-to-empty.rs (renamed from tests/ui/rfc-1717-dllimport/rename-to-empty.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1717-dllimport/rename-to-empty.stderr (renamed from tests/ui/rfc-1717-dllimport/rename-to-empty.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1857-stabilize-drop-order/drop-order.rs (renamed from tests/ui/rfcs/rfc1857-drop-order.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-1.rs (renamed from tests/ui/rfc-1937-termination-trait/issue-103052-1.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-1.stderr (renamed from tests/ui/rfc-1937-termination-trait/issue-103052-1.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.current.stderr (renamed from tests/ui/rfc-1937-termination-trait/issue-103052-2.current.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.next.stderr (renamed from tests/ui/rfc-1937-termination-trait/issue-103052-2.next.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.rs (renamed from tests/ui/rfc-1937-termination-trait/issue-103052-2.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error-err.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error-ok.rs (renamed from tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-never.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-for-never.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str-err.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-for-str.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str-ok.rs (renamed from tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-impl-trait.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-impl-trait.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-impl-trait.stderr (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-impl-trait.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test-should-panic.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-in-test-should-panic.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test-should-panic.stderr (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-in-test-should-panic.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-in-test.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-i32.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-main-i32.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-i32.stderr (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-main-i32.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-wrong-type.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-main-wrong-type.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-wrong-type.stderr (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-main-wrong-type.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-not-satisfied.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-not-satisfied.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-not-satisfied.stderr (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-not-satisfied.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-test-wrong-type.rs (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-test-wrong-type.rs)0
-rw-r--r--tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-test-wrong-type.stderr (renamed from tests/ui/rfc-1937-termination-trait/termination-trait-test-wrong-type.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/borrowck-issue-49631.rs (renamed from tests/ui/rfc-2005-default-binding-mode/borrowck-issue-49631.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/borrowck-issue-49631.stderr (renamed from tests/ui/rfc-2005-default-binding-mode/borrowck-issue-49631.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/const.rs (renamed from tests/ui/rfc-2005-default-binding-mode/const.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/const.stderr (renamed from tests/ui/rfc-2005-default-binding-mode/const.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/enum-ok.rs45
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/enum.rs29
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/enum.stderr (renamed from tests/ui/rfc-2005-default-binding-mode/enum.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/explicit-mut.rs (renamed from tests/ui/rfc-2005-default-binding-mode/explicit-mut.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/explicit-mut.stderr (renamed from tests/ui/rfc-2005-default-binding-mode/explicit-mut.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/for-ok.rs20
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/for.rs23
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/for.stderr (renamed from tests/ui/rfc-2005-default-binding-mode/for.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/issue-44912-or.rs (renamed from tests/ui/rfc-2005-default-binding-mode/issue-44912-or.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/issue-44912-or.stderr (renamed from tests/ui/rfc-2005-default-binding-mode/issue-44912-or.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/lit-ok.rs34
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/lit.rs26
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/lit.stderr (renamed from tests/ui/rfc-2005-default-binding-mode/lit.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/no-double-error.rs (renamed from tests/ui/rfc-2005-default-binding-mode/no-double-error.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/no-double-error.stderr (renamed from tests/ui/rfc-2005-default-binding-mode/no-double-error.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/slice-ok.rs25
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/slice.rs26
-rw-r--r--tests/ui/rfcs/rfc-2005-default-binding-mode/slice.stderr (renamed from tests/ui/rfc-2005-default-binding-mode/slice.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/enums.rs (renamed from tests/ui/rfc-2008-non-exhaustive/auxiliary/enums.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/monovariants.rs (renamed from tests/ui/rfc-2008-non-exhaustive/auxiliary/monovariants.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/structs.rs (renamed from tests/ui/rfc-2008-non-exhaustive/auxiliary/structs.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/unstable.rs (renamed from tests/ui/rfc-2008-non-exhaustive/auxiliary/unstable.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/variants.rs (renamed from tests/ui/rfc-2008-non-exhaustive/auxiliary/variants.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-exhaustive.rs (renamed from tests/ui/rfc-2008-non-exhaustive/borrowck-exhaustive.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-non-exhaustive.rs (renamed from tests/ui/rfc-2008-non-exhaustive/borrowck-non-exhaustive.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-non-exhaustive.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/borrowck-non-exhaustive.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/enum-as-cast.rs (renamed from tests/ui/rfc-2008-non-exhaustive/enum-as-cast.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/enum-as-cast.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/enum-as-cast.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/enum.rs (renamed from tests/ui/rfc-2008-non-exhaustive/enum.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/enum.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/enum.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate.rs (renamed from tests/ui/rfc-2008-non-exhaustive/enum_same_crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate_empty_match.rs (renamed from tests/ui/rfc-2008-non-exhaustive/enum_same_crate_empty_match.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate_empty_match.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/enum_same_crate_empty_match.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/auxiliary/types.rs (renamed from tests/ui/rfc-2008-non-exhaustive/improper_ctypes/auxiliary/types.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.rs (renamed from tests/ui/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/same_crate_proper.rs (renamed from tests/ui/rfc-2008-non-exhaustive/improper_ctypes/same_crate_proper.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/invalid-attribute.rs (renamed from tests/ui/rfc-2008-non-exhaustive/invalid-attribute.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/invalid-attribute.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/omitted-patterns.rs (renamed from tests/ui/rfc-2008-non-exhaustive/omitted-patterns.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/omitted-patterns.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/omitted-patterns.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/stable-omitted-patterns.rs (renamed from tests/ui/rfc-2008-non-exhaustive/stable-omitted-patterns.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/stable-omitted-patterns.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/stable-omitted-patterns.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/struct.rs (renamed from tests/ui/rfc-2008-non-exhaustive/struct.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/struct.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/struct.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/structs_same_crate.rs (renamed from tests/ui/rfc-2008-non-exhaustive/structs_same_crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/auxiliary/uninhabited.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/auxiliary/uninhabited.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns_same_crate.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns_same_crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/match.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/match.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_same_crate.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/match_same_crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_same_crate.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/match_same_crate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns_same_crate.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns_same_crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.rs (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/variant.rs (renamed from tests/ui/rfc-2008-non-exhaustive/variant.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/variant.stderr (renamed from tests/ui/rfc-2008-non-exhaustive/variant.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/variants_fictive_visibility.rs (renamed from tests/ui/rfc-2008-non-exhaustive/variants_fictive_visibility.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2008-non-exhaustive/variants_same_crate.rs (renamed from tests/ui/rfc-2008-non-exhaustive/variants_same_crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs (renamed from tests/ui/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs (renamed from tests/ui/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs (renamed from tests/ui/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/call-chain.rs (renamed from tests/ui/rfc-2091-track-caller/call-chain.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs (renamed from tests/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.stderr (renamed from tests/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/caller-location-intrinsic.rs (renamed from tests/ui/rfc-2091-track-caller/caller-location-intrinsic.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/const-caller-location.rs (renamed from tests/ui/rfc-2091-track-caller/const-caller-location.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/diverging-caller-location.rs (renamed from tests/ui/rfc-2091-track-caller/diverging-caller-location.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-odd-syntax.rs (renamed from tests/ui/rfc-2091-track-caller/error-odd-syntax.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-odd-syntax.stderr (renamed from tests/ui/rfc-2091-track-caller/error-odd-syntax.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-with-invalid-abi.rs (renamed from tests/ui/rfc-2091-track-caller/error-with-invalid-abi.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-with-invalid-abi.stderr (renamed from tests/ui/rfc-2091-track-caller/error-with-invalid-abi.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-with-main.rs (renamed from tests/ui/rfc-2091-track-caller/error-with-main.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-with-main.stderr (renamed from tests/ui/rfc-2091-track-caller/error-with-main.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-with-naked.rs (renamed from tests/ui/rfc-2091-track-caller/error-with-naked.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-with-naked.stderr (renamed from tests/ui/rfc-2091-track-caller/error-with-naked.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-with-start.rs (renamed from tests/ui/rfc-2091-track-caller/error-with-start.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/error-with-start.stderr (renamed from tests/ui/rfc-2091-track-caller/error-with-start.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/intrinsic-wrapper.rs (renamed from tests/ui/rfc-2091-track-caller/intrinsic-wrapper.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/macro-declaration.rs (renamed from tests/ui/rfc-2091-track-caller/macro-declaration.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/mir-inlined-macro.rs (renamed from tests/ui/rfc-2091-track-caller/mir-inlined-macro.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/only-for-fns.rs (renamed from tests/ui/rfc-2091-track-caller/only-for-fns.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/only-for-fns.stderr (renamed from tests/ui/rfc-2091-track-caller/only-for-fns.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/pass.rs (renamed from tests/ui/rfc-2091-track-caller/pass.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/std-panic-locations.rs (renamed from tests/ui/rfc-2091-track-caller/std-panic-locations.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/track-caller-attribute.rs (renamed from tests/ui/rfc-2091-track-caller/track-caller-attribute.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/track-caller-ffi.rs (renamed from tests/ui/rfc-2091-track-caller/track-caller-ffi.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/tracked-closure.rs (renamed from tests/ui/rfc-2091-track-caller/tracked-closure.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs (renamed from tests/ui/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/tracked-fn-ptr.rs (renamed from tests/ui/rfc-2091-track-caller/tracked-fn-ptr.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/tracked-trait-impls.rs (renamed from tests/ui/rfc-2091-track-caller/tracked-trait-impls.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2091-track-caller/tracked-trait-obj.rs (renamed from tests/ui/rfc-2091-track-caller/tracked-trait-obj.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/cross-crate.rs (renamed from tests/ui/rfc-2093-infer-outlives/cross-crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/cross-crate.stderr (renamed from tests/ui/rfc-2093-infer-outlives/cross-crate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/dont-infer-static.rs (renamed from tests/ui/rfc-2093-infer-outlives/dont-infer-static.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/dont-infer-static.stderr (renamed from tests/ui/rfc-2093-infer-outlives/dont-infer-static.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/enum.rs (renamed from tests/ui/rfc-2093-infer-outlives/enum.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/enum.stderr (renamed from tests/ui/rfc-2093-infer-outlives/enum.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-dyn.rs (renamed from tests/ui/rfc-2093-infer-outlives/explicit-dyn.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-dyn.stderr (renamed from tests/ui/rfc-2093-infer-outlives/explicit-dyn.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-enum.rs (renamed from tests/ui/rfc-2093-infer-outlives/explicit-enum.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-enum.stderr (renamed from tests/ui/rfc-2093-infer-outlives/explicit-enum.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-projection.rs (renamed from tests/ui/rfc-2093-infer-outlives/explicit-projection.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-projection.stderr (renamed from tests/ui/rfc-2093-infer-outlives/explicit-projection.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-struct.rs (renamed from tests/ui/rfc-2093-infer-outlives/explicit-struct.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-struct.stderr (renamed from tests/ui/rfc-2093-infer-outlives/explicit-struct.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-union.rs (renamed from tests/ui/rfc-2093-infer-outlives/explicit-union.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/explicit-union.stderr (renamed from tests/ui/rfc-2093-infer-outlives/explicit-union.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/issue-54467.rs (renamed from tests/ui/rfc-2093-infer-outlives/issue-54467.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/nested-enum.rs (renamed from tests/ui/rfc-2093-infer-outlives/nested-enum.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/nested-enum.stderr (renamed from tests/ui/rfc-2093-infer-outlives/nested-enum.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/nested-regions.rs (renamed from tests/ui/rfc-2093-infer-outlives/nested-regions.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/nested-regions.stderr (renamed from tests/ui/rfc-2093-infer-outlives/nested-regions.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/nested-structs.rs (renamed from tests/ui/rfc-2093-infer-outlives/nested-structs.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/nested-structs.stderr (renamed from tests/ui/rfc-2093-infer-outlives/nested-structs.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/nested-union.rs (renamed from tests/ui/rfc-2093-infer-outlives/nested-union.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/nested-union.stderr (renamed from tests/ui/rfc-2093-infer-outlives/nested-union.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/privacy.rs (renamed from tests/ui/rfc-2093-infer-outlives/privacy.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/projection.rs (renamed from tests/ui/rfc-2093-infer-outlives/projection.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/projection.stderr (renamed from tests/ui/rfc-2093-infer-outlives/projection.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/reference.rs (renamed from tests/ui/rfc-2093-infer-outlives/reference.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/reference.stderr (renamed from tests/ui/rfc-2093-infer-outlives/reference.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-enum-not-wf.rs (renamed from tests/ui/rfc-2093-infer-outlives/regions-enum-not-wf.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-enum-not-wf.stderr (renamed from tests/ui/rfc-2093-infer-outlives/regions-enum-not-wf.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.rs (renamed from tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.stderr (renamed from tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.rs (renamed from tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.stderr (renamed from tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.rs (renamed from tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.stderr (renamed from tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.rs (renamed from tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.stderr (renamed from tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-struct-not-wf.rs (renamed from tests/ui/rfc-2093-infer-outlives/regions-struct-not-wf.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/regions-struct-not-wf.stderr (renamed from tests/ui/rfc-2093-infer-outlives/regions-struct-not-wf.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/self-dyn.rs (renamed from tests/ui/rfc-2093-infer-outlives/self-dyn.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/self-dyn.stderr (renamed from tests/ui/rfc-2093-infer-outlives/self-dyn.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/self-structs.rs (renamed from tests/ui/rfc-2093-infer-outlives/self-structs.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2093-infer-outlives/self-structs.stderr (renamed from tests/ui/rfc-2093-infer-outlives/self-structs.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2126-crate-paths/crate-path-non-absolute.rs (renamed from tests/ui/rfc-2126-crate-paths/crate-path-non-absolute.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2126-crate-paths/crate-path-non-absolute.stderr (renamed from tests/ui/rfc-2126-crate-paths/crate-path-non-absolute.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2126-crate-paths/keyword-crate-as-identifier.rs (renamed from tests/ui/rfc-2126-crate-paths/keyword-crate-as-identifier.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2126-crate-paths/keyword-crate-as-identifier.stderr (renamed from tests/ui/rfc-2126-crate-paths/keyword-crate-as-identifier.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs (renamed from tests/ui/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-1.rs (renamed from tests/ui/rfc-2126-extern-absolute-paths/non-existent-1.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-1.stderr (renamed from tests/ui/rfc-2126-extern-absolute-paths/non-existent-1.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-2.rs (renamed from tests/ui/rfc-2126-extern-absolute-paths/non-existent-2.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-2.stderr (renamed from tests/ui/rfc-2126-extern-absolute-paths/non-existent-2.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-3.rs (renamed from tests/ui/rfc-2126-extern-absolute-paths/non-existent-3.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-3.stderr (renamed from tests/ui/rfc-2126-extern-absolute-paths/non-existent-3.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/not-allowed.rs (renamed from tests/ui/rfc-2126-extern-absolute-paths/not-allowed.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/not-allowed.stderr (renamed from tests/ui/rfc-2126-extern-absolute-paths/not-allowed.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/single-segment.rs (renamed from tests/ui/rfc-2126-extern-absolute-paths/single-segment.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2126-extern-absolute-paths/single-segment.stderr (renamed from tests/ui/rfc-2126-extern-absolute-paths/single-segment.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2294-if-let-guard/bindings.rs (renamed from tests/ui/rfc-2294-if-let-guard/bindings.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2294-if-let-guard/bindings.stderr (renamed from tests/ui/rfc-2294-if-let-guard/bindings.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2294-if-let-guard/feature-gate.rs (renamed from tests/ui/rfc-2294-if-let-guard/feature-gate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2294-if-let-guard/feature-gate.stderr (renamed from tests/ui/rfc-2294-if-let-guard/feature-gate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2294-if-let-guard/run-pass.rs (renamed from tests/ui/rfc-2294-if-let-guard/run-pass.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2294-if-let-guard/typeck.rs (renamed from tests/ui/rfc-2294-if-let-guard/typeck.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2294-if-let-guard/typeck.stderr (renamed from tests/ui/rfc-2294-if-let-guard/typeck.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2294-if-let-guard/warns.rs (renamed from tests/ui/rfc-2294-if-let-guard/warns.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2294-if-let-guard/warns.stderr (renamed from tests/ui/rfc-2294-if-let-guard/warns.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2302-self-struct-ctor/rfc-2302-self-struct-ctor.rs (renamed from tests/ui/rfcs/rfc-2302-self-struct-ctor.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2306-convert-id/convert-id-const-with-gate.rs (renamed from tests/ui/rfc-2306/convert-id-const-with-gate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs (renamed from tests/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-expected-behavior.run.stderr (renamed from tests/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.run.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-move-semantics.rs (renamed from tests/ui/rfc-2361-dbg-macro/dbg-macro-move-semantics.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-move-semantics.stderr (renamed from tests/ui/rfc-2361-dbg-macro/dbg-macro-move-semantics.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-requires-debug.rs (renamed from tests/ui/rfc-2361-dbg-macro/dbg-macro-requires-debug.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-requires-debug.stderr (renamed from tests/ui/rfc-2361-dbg-macro/dbg-macro-requires-debug.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.rs (renamed from tests/ui/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.stderr (renamed from tests/ui/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2397-do-not-recommend/incorrect-locations.rs (renamed from tests/ui/rfc-2397-do-not-recommend/incorrect-locations.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2397-do-not-recommend/incorrect-locations.stderr (renamed from tests/ui/rfc-2397-do-not-recommend/incorrect-locations.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2397-do-not-recommend/unstable-feature.rs (renamed from tests/ui/rfc-2397-do-not-recommend/unstable-feature.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2397-do-not-recommend/unstable-feature.stderr (renamed from tests/ui/rfc-2397-do-not-recommend/unstable-feature.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2421-unreserve-pure-offsetof-sizeof-alignof/offsetof-alignof-sizeof-pure-can-be-used-as-idents.rs (renamed from tests/ui/rfcs/rfc-2421-unreserve-pure-offsetof-sizeof-alignof.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/auxiliary/mod_file_nonascii_with_path_allowed-aux.rs (renamed from tests/ui/rfc-2457/auxiliary/mod_file_nonascii_with_path_allowed-aux.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-1.rs (renamed from tests/ui/rfc-2457/crate_name_nonascii_forbidden-1.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-1.stderr (renamed from tests/ui/rfc-2457/crate_name_nonascii_forbidden-1.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-2.rs (renamed from tests/ui/rfc-2457/crate_name_nonascii_forbidden-2.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-2.stderr (renamed from tests/ui/rfc-2457/crate_name_nonascii_forbidden-2.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/extern_block_nonascii_forbidden.rs (renamed from tests/ui/rfc-2457/extern_block_nonascii_forbidden.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/extern_block_nonascii_forbidden.stderr (renamed from tests/ui/rfc-2457/extern_block_nonascii_forbidden.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/idents-normalized.rs (renamed from tests/ui/rfc-2457/idents-normalized.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_forbidden.rs (renamed from tests/ui/rfc-2457/mod_file_nonascii_forbidden.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_forbidden.stderr (renamed from tests/ui/rfc-2457/mod_file_nonascii_forbidden.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_with_path_allowed.rs (renamed from tests/ui/rfc-2457/mod_file_nonascii_with_path_allowed.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_inline_nonascii_allowed.rs (renamed from tests/ui/rfc-2457/mod_inline_nonascii_allowed.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/no_mangle_nonascii_forbidden.rs (renamed from tests/ui/rfc-2457/no_mangle_nonascii_forbidden.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2457-non-ascii-idents/no_mangle_nonascii_forbidden.stderr (renamed from tests/ui/rfc-2457/no_mangle_nonascii_forbidden.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/ast-lowering-does-not-wrap-let-chains.rs (renamed from tests/ui/rfc-2497-if-let-chains/ast-lowering-does-not-wrap-let-chains.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/ast-pretty-check.rs (renamed from tests/ui/rfc-2497-if-let-chains/ast-pretty-check.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/ast-pretty-check.stdout (renamed from tests/ui/rfc-2497-if-let-chains/ast-pretty-check.stdout)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/ast-validate-guards.rs (renamed from tests/ui/rfc-2497-if-let-chains/ast-validate-guards.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/ast-validate-guards.stderr (renamed from tests/ui/rfc-2497-if-let-chains/ast-validate-guards.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/chains-without-let.rs (renamed from tests/ui/rfc-2497-if-let-chains/chains-without-let.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/chains-without-let.stderr (renamed from tests/ui/rfc-2497-if-let-chains/chains-without-let.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/disallowed-positions.rs (renamed from tests/ui/rfc-2497-if-let-chains/disallowed-positions.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/disallowed-positions.stderr (renamed from tests/ui/rfc-2497-if-let-chains/disallowed-positions.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.rs (renamed from tests/ui/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.stderr (renamed from tests/ui/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/feature-gate.rs (renamed from tests/ui/rfc-2497-if-let-chains/feature-gate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/feature-gate.stderr (renamed from tests/ui/rfc-2497-if-let-chains/feature-gate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.rs (renamed from tests/ui/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.stderr (renamed from tests/ui/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/irrefutable-lets.disallowed.stderr (renamed from tests/ui/rfc-2497-if-let-chains/irrefutable-lets.disallowed.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/irrefutable-lets.rs (renamed from tests/ui/rfc-2497-if-let-chains/irrefutable-lets.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/issue-88498.rs (renamed from tests/ui/rfc-2497-if-let-chains/issue-88498.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/issue-90722.rs (renamed from tests/ui/rfc-2497-if-let-chains/issue-90722.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/issue-92145.rs (renamed from tests/ui/rfc-2497-if-let-chains/issue-92145.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/issue-93150.rs (renamed from tests/ui/rfc-2497-if-let-chains/issue-93150.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/issue-93150.stderr (renamed from tests/ui/rfc-2497-if-let-chains/issue-93150.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/issue-99938.rs (renamed from tests/ui/rfc-2497-if-let-chains/issue-99938.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/no-double-assigments.rs (renamed from tests/ui/rfc-2497-if-let-chains/no-double-assigments.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/protect-precedences.rs (renamed from tests/ui/rfc-2497-if-let-chains/protect-precedences.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/protect-precedences.stderr (renamed from tests/ui/rfc-2497-if-let-chains/protect-precedences.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2497-if-let-chains/then-else-blocks.rs (renamed from tests/ui/rfc-2497-if-let-chains/then-else-blocks.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/attr-without-param.rs (renamed from tests/ui/rfc-2565-param-attrs/attr-without-param.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/attr-without-param.stderr (renamed from tests/ui/rfc-2565-param-attrs/attr-without-param.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/auxiliary/ident-mac.rs (renamed from tests/ui/rfc-2565-param-attrs/auxiliary/ident-mac.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/auxiliary/param-attrs.rs (renamed from tests/ui/rfc-2565-param-attrs/auxiliary/param-attrs.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/issue-64682-dropping-first-attrs-in-impl-fns.rs (renamed from tests/ui/rfc-2565-param-attrs/issue-64682-dropping-first-attrs-in-impl-fns.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-2018.rs (renamed from tests/ui/rfc-2565-param-attrs/param-attrs-2018.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-2018.stderr (renamed from tests/ui/rfc-2565-param-attrs/param-attrs-2018.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-allowed.rs (renamed from tests/ui/rfc-2565-param-attrs/param-attrs-allowed.rs)2
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs (renamed from tests/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-builtin-attrs.stderr (renamed from tests/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-cfg.rs (renamed from tests/ui/rfc-2565-param-attrs/param-attrs-cfg.rs)4
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-cfg.stderr (renamed from tests/ui/rfc-2565-param-attrs/param-attrs-cfg.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-pretty.rs (renamed from tests/ui/rfc-2565-param-attrs/param-attrs-pretty.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/proc-macro-cannot-be-used.rs (renamed from tests/ui/rfc-2565-param-attrs/proc-macro-cannot-be-used.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2565-param-attrs/proc-macro-cannot-be-used.stderr (renamed from tests/ui/rfc-2565-param-attrs/proc-macro-cannot-be-used.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/dlltool-failed.rs (renamed from tests/ui/rfc-2627-raw-dylib/dlltool-failed.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/dlltool-failed.stderr (renamed from tests/ui/rfc-2627-raw-dylib/dlltool-failed.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-invalid-format.rs (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-invalid-format.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-invalid-format.stderr (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-invalid-format.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-multiple.rs (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-multiple.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-multiple.stderr (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-multiple.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unknown-value.rs (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-unknown-value.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unknown-value.stderr (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-unknown-value.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.rs (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.stderr (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-x86-only.rs (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-x86-only.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-x86-only.stderr (renamed from tests/ui/rfc-2627-raw-dylib/import-name-type-x86-only.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/invalid-dlltool.rs (renamed from tests/ui/rfc-2627-raw-dylib/invalid-dlltool.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/invalid-dlltool.stderr (renamed from tests/ui/rfc-2627-raw-dylib/invalid-dlltool.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-and-name.rs (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-and-name.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-and-name.stderr (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-and-name.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-invalid-format.rs (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-invalid-format.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-invalid-format.stderr (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-invalid-format.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-missing-argument.rs (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-missing-argument.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-missing-argument.stderr (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-missing-argument.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-multiple.rs (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-multiple.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-multiple.stderr (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-multiple.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.rs (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.stderr (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-large.rs (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-too-large.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-large.stderr (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-too-large.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.rs (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.stderr (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.rs (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.stderr (renamed from tests/ui/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/multiple-declarations.rs (renamed from tests/ui/rfc-2627-raw-dylib/multiple-declarations.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/multiple-declarations.stderr (renamed from tests/ui/rfc-2627-raw-dylib/multiple-declarations.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/raw-dylib-windows-only.rs (renamed from tests/ui/rfc-2627-raw-dylib/raw-dylib-windows-only.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/raw-dylib-windows-only.stderr (renamed from tests/ui/rfc-2627-raw-dylib/raw-dylib-windows-only.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/unsupported-abi.rs (renamed from tests/ui/rfc-2627-raw-dylib/unsupported-abi.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2627-raw-dylib/unsupported-abi.stderr (renamed from tests/ui/rfc-2627-raw-dylib/unsupported-abi.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage.rs (renamed from tests/ui/rfc-2632-const-trait-impl/assoc-type-const-bound-usage.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.rs (renamed from tests/ui/rfc-2632-const-trait-impl/assoc-type.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/assoc-type.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/attr-misuse.rs (renamed from tests/ui/rfc-2632-const-trait-impl/attr-misuse.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/attr-misuse.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/attr-misuse.stderr)4
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs (renamed from tests/ui/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/staged-api.rs (renamed from tests/ui/rfc-2632-const-trait-impl/auxiliary/staged-api.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-pass.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-pass.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-pass.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-pass.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-in-impl.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-in-impl.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-chain.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-chain.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-fail.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-fail.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst-bound.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst-bound.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-pass.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/call-generic-method-pass.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/call.rs (renamed from tests/ui/rfc-2632-const-trait-impl/call.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-and-non-const-impl.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-parse-not-item.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-closure-parse-not-item.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method-fail.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-closures.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-closures.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-default-method-bodies.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-default-method-bodies.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-bound.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-drop-bound.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-drop-fail.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-drop.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-norecover.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-impl-norecover.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-norecover.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-impl-norecover.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-recovery.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-impl-recovery.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-recovery.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-impl-recovery.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-impl-requires-const-trait.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const-impl-trait.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const-impl-trait.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-gate.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-gate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-gate.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-gate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-use.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs (renamed from tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs (renamed from tests/ui/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.rs (renamed from tests/ui/rfc-2632-const-trait-impl/cross-crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stock.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/cross-crate.stock.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.rs (renamed from tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs (renamed from tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-with-staged-api.rs (renamed from tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-with-staged-api.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.rs (renamed from tests/ui/rfc-2632-const-trait-impl/do-not-const-check-override.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check.rs (renamed from tests/ui/rfc-2632-const-trait-impl/do-not-const-check.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs29
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.gated.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/feature-gate.gated.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.rs (renamed from tests/ui/rfc-2632-const-trait-impl/feature-gate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.stock.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/feature-gate.stock.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs (renamed from tests/ui/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/gate.rs (renamed from tests/ui/rfc-2632-const-trait-impl/gate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/gate.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/gate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/generic-bound.rs (renamed from tests/ui/rfc-2632-const-trait-impl/generic-bound.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/generic-bound.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/generic-bound.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.rs (renamed from tests/ui/rfc-2632-const-trait-impl/hir-const-check.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/hir-const-check.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/impl-tilde-const-trait.rs (renamed from tests/ui/rfc-2632-const-trait-impl/impl-tilde-const-trait.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/impl-tilde-const-trait.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/impl-tilde-const-trait.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-fail.rs (renamed from tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-fail.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-fail.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-fail.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-pass.rs (renamed from tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-pass.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl-const-bounds.rs (renamed from tests/ui/rfc-2632-const-trait-impl/inherent-impl-const-bounds.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl.rs (renamed from tests/ui/rfc-2632-const-trait-impl/inherent-impl.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/inherent-impl.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-100222.rs (renamed from tests/ui/rfc-2632-const-trait-impl/issue-100222.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102156.rs (renamed from tests/ui/rfc-2632-const-trait-impl/issue-102156.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102156.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/issue-102156.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102985.rs (renamed from tests/ui/rfc-2632-const-trait-impl/issue-102985.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102985.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/issue-102985.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-103677.rs (renamed from tests/ui/rfc-2632-const-trait-impl/issue-103677.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.rs (renamed from tests/ui/rfc-2632-const-trait-impl/issue-79450.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/issue-79450.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-88155.rs (renamed from tests/ui/rfc-2632-const-trait-impl/issue-88155.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-88155.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/issue-88155.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-90052.rs (renamed from tests/ui/rfc-2632-const-trait-impl/issue-90052.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-90052.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/issue-90052.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92111.rs (renamed from tests/ui/rfc-2632-const-trait-impl/issue-92111.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92230-wf-super-trait-env.rs (renamed from tests/ui/rfc-2632-const-trait-impl/issue-92230-wf-super-trait-env.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.gated.stderr26
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.rs12
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.stock.stderr13
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/nested-closure.rs (renamed from tests/ui/rfc-2632-const-trait-impl/nested-closure.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.rs (renamed from tests/ui/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.rs (renamed from tests/ui/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs (renamed from tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs (renamed from tests/ui/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs (renamed from tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/default-keyword.rs (renamed from tests/ui/rfc-2632-const-trait-impl/specialization/default-keyword.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs (renamed from tests/ui/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs (renamed from tests/ui/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs (renamed from tests/ui/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.rs (renamed from tests/ui/rfc-2632-const-trait-impl/specializing-constness-2.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/specializing-constness-2.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.rs (renamed from tests/ui/rfc-2632-const-trait-impl/specializing-constness.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/specializing-constness.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api-user-crate.rs (renamed from tests/ui/rfc-2632-const-trait-impl/staged-api-user-crate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api-user-crate.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/staged-api-user-crate.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.rs (renamed from tests/ui/rfc-2632-const-trait-impl/staged-api.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.stable.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/staged-api.stable.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.unstable.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/staged-api.unstable.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/static-const-trait-bound.rs (renamed from tests/ui/rfc-2632-const-trait-impl/static-const-trait-bound.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.gated.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/std-impl-gate.gated.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.rs (renamed from tests/ui/rfc-2632-const-trait-impl/std-impl-gate.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.stock.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/std-impl-gate.stock.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.rs (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.rs (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail.rs (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits-fail.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.rs (renamed from tests/ui/rfc-2632-const-trait-impl/super-traits.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/syntax.rs (renamed from tests/ui/rfc-2632-const-trait-impl/syntax.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-and-const-params.rs (renamed from tests/ui/rfc-2632-const-trait-impl/tilde-const-and-const-params.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-and-const-params.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/tilde-const-and-const-params.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-invalid-places.rs (renamed from tests/ui/rfc-2632-const-trait-impl/tilde-const-invalid-places.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-invalid-places.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/tilde-const-invalid-places.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-syntax.rs (renamed from tests/ui/rfc-2632-const-trait-impl/tilde-const-syntax.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-twice.rs (renamed from tests/ui/rfc-2632-const-trait-impl/tilde-twice.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-twice.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/tilde-twice.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/tilde_const_on_impl_bound.rs (renamed from tests/ui/rfc-2632-const-trait-impl/tilde_const_on_impl_bound.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.rs (renamed from tests/ui/rfc-2632-const-trait-impl/trait-default-body-stability.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/trait-default-body-stability.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-method-ptr-in-consts-ice.rs (renamed from tests/ui/rfc-2632-const-trait-impl/trait-method-ptr-in-consts-ice.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.rs (renamed from tests/ui/rfc-2632-const-trait-impl/trait-where-clause-const.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/trait-where-clause-const.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.rs (renamed from tests/ui/rfc-2632-const-trait-impl/trait-where-clause-run.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs (renamed from tests/ui/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause.rs (renamed from tests/ui/rfc-2632-const-trait-impl/trait-where-clause.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/trait-where-clause.stderr)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/without-tilde.rs (renamed from tests/ui/rfc-2632-const-trait-impl/without-tilde.rs)0
-rw-r--r--tests/ui/rfcs/rfc-2632-const-trait-impl/without-tilde.stderr (renamed from tests/ui/rfc-2632-const-trait-impl/without-tilde.stderr)0
-rw-r--r--tests/ui/rust-2018/edition-lint-infer-outlives.fixed6
-rw-r--r--tests/ui/rust-2018/edition-lint-infer-outlives.rs8
-rw-r--r--tests/ui/rust-2018/edition-lint-infer-outlives.stderr11
-rw-r--r--tests/ui/rust-2018/uniform-paths/ambiguity-macros-nested.stderr2
-rw-r--r--tests/ui/rust-2018/uniform-paths/ambiguity-macros.stderr2
-rw-r--r--tests/ui/rust-2018/uniform-paths/ambiguity-nested.rs4
-rw-r--r--tests/ui/rust-2018/uniform-paths/ambiguity-nested.stderr21
-rw-r--r--tests/ui/rust-2018/uniform-paths/ambiguity.rs4
-rw-r--r--tests/ui/rust-2018/uniform-paths/ambiguity.stderr21
-rw-r--r--tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.rs3
-rw-r--r--tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.stderr24
-rw-r--r--tests/ui/rust-2018/uniform-paths/block-scoped-shadow.rs8
-rw-r--r--tests/ui/rust-2018/uniform-paths/block-scoped-shadow.stderr60
-rw-r--r--tests/ui/rust-2018/uniform-paths/issue-56596.stderr5
-rw-r--r--tests/ui/rust-2018/uniform-paths/macro-rules.rs3
-rw-r--r--tests/ui/rust-2018/uniform-paths/macro-rules.stderr24
-rw-r--r--tests/ui/sanitize/issue-111184-generator-witness.rs17
-rw-r--r--tests/ui/simd/shuffle.rs24
-rw-r--r--tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs4
-rw-r--r--tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.stderr27
-rw-r--r--tests/ui/span/multiline-span-simple.stderr4
-rw-r--r--tests/ui/specialization/specialization-default-items-drop-coherence.coherence.stderr12
-rw-r--r--tests/ui/specialization/specialization-default-items-drop-coherence.next.stderr12
-rw-r--r--tests/ui/specialization/specialization-default-items-drop-coherence.rs9
-rw-r--r--tests/ui/stability-attribute/auxiliary/default_body.rs4
-rw-r--r--tests/ui/stability-attribute/default-body-stability-err.rs1
-rw-r--r--tests/ui/stability-attribute/default-body-stability-err.stderr14
-rw-r--r--tests/ui/stability-attribute/default-body-stability-ok-impls.rs2
-rw-r--r--tests/ui/stability-attribute/stability-in-private-module.stderr4
-rw-r--r--tests/ui/statics/uninhabited-static.stderr4
-rw-r--r--tests/ui/std/slice-from-array-issue-113238.rs9
-rw-r--r--tests/ui/stdlib-unit-tests/not-sync.rs2
-rw-r--r--tests/ui/stdlib-unit-tests/not-sync.stderr15
-rw-r--r--tests/ui/structs-enums/issue-3008-1.rs (renamed from tests/ui/issues/issue-3008-1.rs)0
-rw-r--r--tests/ui/structs-enums/issue-3008-1.stderr (renamed from tests/ui/issues/issue-3008-1.stderr)0
-rw-r--r--tests/ui/structs-enums/issue-3008-2.rs (renamed from tests/ui/issues/issue-3008-2.rs)0
-rw-r--r--tests/ui/structs-enums/issue-3008-2.stderr (renamed from tests/ui/issues/issue-3008-2.stderr)0
-rw-r--r--tests/ui/structs-enums/issue-3008-3.rs (renamed from tests/ui/issues/issue-3008-3.rs)0
-rw-r--r--tests/ui/structs-enums/issue-3008-3.stderr (renamed from tests/ui/issues/issue-3008-3.stderr)0
-rw-r--r--tests/ui/structs/struct-field-cfg.stderr2
-rw-r--r--tests/ui/structs/struct-fields-shorthand.stderr2
-rw-r--r--tests/ui/structs/struct-fields-too-many.stderr2
-rw-r--r--tests/ui/structs/struct-variant-privacy-xc.stderr4
-rw-r--r--tests/ui/structs/struct-variant-privacy.stderr4
-rw-r--r--tests/ui/suggestions/adt-param-with-implicit-sized-bound.stderr2
-rw-r--r--tests/ui/suggestions/as-ref.rs2
-rw-r--r--tests/ui/suggestions/as-ref.stderr32
-rw-r--r--tests/ui/suggestions/crate-or-module-typo.stderr5
-rw-r--r--tests/ui/suggestions/dont-suggest-try_into-in-macros.stderr12
-rw-r--r--tests/ui/suggestions/impl-trait-return-trailing-semicolon.stderr2
-rw-r--r--tests/ui/suggestions/into-str.stderr8
-rw-r--r--tests/ui/suggestions/issue-102972.rs16
-rw-r--r--tests/ui/suggestions/issue-102972.stderr33
-rw-r--r--tests/ui/suggestions/issue-103646.rs11
-rw-r--r--tests/ui/suggestions/issue-103646.stderr21
-rw-r--r--tests/ui/suggestions/issue-109991.rs27
-rw-r--r--tests/ui/suggestions/issue-109991.stderr72
-rw-r--r--tests/ui/suggestions/issue-112590-suggest-import.rs10
-rw-r--r--tests/ui/suggestions/issue-112590-suggest-import.stderr36
-rw-r--r--tests/ui/suggestions/issue-71394-no-from-impl.stderr6
-rw-r--r--tests/ui/suggestions/issue-88696.rs14
-rw-r--r--tests/ui/suggestions/issue-88696.stderr11
-rw-r--r--tests/ui/suggestions/issue-89640.rs3
-rw-r--r--tests/ui/suggestions/issue-89640.stderr13
-rw-r--r--tests/ui/suggestions/removal-of-multiline-trait-bound-in-where-clause.stderr6
-rw-r--r--tests/ui/suggestions/suggest-split-at-mut.stderr1
-rw-r--r--tests/ui/suggestions/while-let-typo.rs2
-rw-r--r--tests/ui/suggestions/while-let-typo.stderr13
-rw-r--r--tests/ui/switched-expectations.stderr4
-rw-r--r--tests/ui/symbol-names/const-generics-structural-demangling.rs25
-rw-r--r--tests/ui/symbol-names/const-generics-structural-demangling.stderr62
-rw-r--r--tests/ui/test-attrs/test-fn-signature-verification-for-explicit-return-type.rs2
-rw-r--r--tests/ui/test-attrs/test-function-signature.rs31
-rw-r--r--tests/ui/test-attrs/test-function-signature.stderr39
-rw-r--r--tests/ui/test-attrs/test-panic-abort-disabled.rs1
-rw-r--r--tests/ui/test-attrs/test-panic-abort.rs9
-rw-r--r--tests/ui/test-attrs/test-panic-abort.run.stdout7
-rw-r--r--tests/ui/test-attrs/test-type.rs3
-rw-r--r--tests/ui/thir-print/thir-flat-const-variant.rs18
-rw-r--r--tests/ui/thir-print/thir-flat-const-variant.stdout399
-rw-r--r--tests/ui/thir-print/thir-flat.stdout2
-rw-r--r--tests/ui/track-diagnostics/track6.stderr2
-rw-r--r--tests/ui/trait-bounds/apit-unsized.rs4
-rw-r--r--tests/ui/trait-bounds/apit-unsized.stderr41
-rw-r--r--tests/ui/trait-bounds/unsized-bound.stderr30
-rw-r--r--tests/ui/traits/auxiliary/trivial3.rs1
-rw-r--r--tests/ui/traits/auxiliary/trivial4.rs3
-rw-r--r--tests/ui/traits/bound/assoc-fn-bound-root-obligation.stderr6
-rw-r--r--tests/ui/traits/bound/generic_trait.rs2
-rw-r--r--tests/ui/traits/cache-reached-depth-ice.rs2
-rw-r--r--tests/ui/traits/cache-reached-depth-ice.stderr2
-rw-r--r--tests/ui/traits/deny-builtin-object-impl.current.stderr15
-rw-r--r--tests/ui/traits/deny-builtin-object-impl.next.stderr15
-rw-r--r--tests/ui/traits/deny-builtin-object-impl.rs20
-rw-r--r--tests/ui/traits/ice-with-dyn-pointee-errors.rs15
-rw-r--r--tests/ui/traits/ice-with-dyn-pointee-errors.stderr19
-rw-r--r--tests/ui/traits/ice-with-dyn-pointee.rs11
-rw-r--r--tests/ui/traits/issue-105231.rs9
-rw-r--r--tests/ui/traits/issue-105231.stderr29
-rw-r--r--tests/ui/traits/issue-83538-tainted-cache-after-cycle.rs8
-rw-r--r--tests/ui/traits/issue-83538-tainted-cache-after-cycle.stderr8
-rw-r--r--tests/ui/traits/issue-85360-eval-obligation-ice.rs8
-rw-r--r--tests/ui/traits/issue-85360-eval-obligation-ice.stderr8
-rw-r--r--tests/ui/traits/issue-91949-hangs-on-recursion.rs1
-rw-r--r--tests/ui/traits/issue-91949-hangs-on-recursion.stderr4
-rw-r--r--tests/ui/traits/new-solver/alias-bound-unsound.rs2
-rw-r--r--tests/ui/traits/new-solver/alias-bound-unsound.stderr16
-rw-r--r--tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.rs19
-rw-r--r--tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.stderr11
-rw-r--r--tests/ui/traits/new-solver/array-default.rs8
-rw-r--r--tests/ui/traits/new-solver/async.fail.stderr4
-rw-r--r--tests/ui/traits/new-solver/async.rs2
-rw-r--r--tests/ui/traits/new-solver/closure-substs-ambiguity.rs7
-rw-r--r--tests/ui/traits/new-solver/dedup-regions.rs31
-rw-r--r--tests/ui/traits/new-solver/dont-remap-tait-substs.rs19
-rw-r--r--tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.not_send.stderr16
-rw-r--r--tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.rs24
-rw-r--r--tests/ui/traits/new-solver/dyn-any-dont-prefer-impl.rs13
-rw-r--r--tests/ui/traits/new-solver/equating-projection-cyclically.rs12
-rw-r--r--tests/ui/traits/new-solver/equating-projection-cyclically.stderr9
-rw-r--r--tests/ui/traits/new-solver/lazy-nested-obligations-2.rs3
-rw-r--r--tests/ui/traits/new-solver/lazy-nested-obligations-2.stderr39
-rw-r--r--tests/ui/traits/new-solver/leak-check-coinductive-cycle.rs33
-rw-r--r--tests/ui/traits/new-solver/member-constraints-in-root-universe.rs17
-rw-r--r--tests/ui/traits/new-solver/normalized-const-built-in-op.rs11
-rw-r--r--tests/ui/traits/new-solver/object-unsafety.rs10
-rw-r--r--tests/ui/traits/new-solver/object-unsafety.stderr63
-rw-r--r--tests/ui/traits/new-solver/opportunistic-region-resolve.rs19
-rw-r--r--tests/ui/traits/new-solver/recursive-self-normalization-2.rs1
-rw-r--r--tests/ui/traits/new-solver/recursive-self-normalization-2.stderr10
-rw-r--r--tests/ui/traits/new-solver/recursive-self-normalization.rs1
-rw-r--r--tests/ui/traits/new-solver/recursive-self-normalization.stderr10
-rw-r--r--tests/ui/traits/new-solver/slice-match-byte-lit.rs11
-rw-r--r--tests/ui/traits/new-solver/specialization-transmute.rs12
-rw-r--r--tests/ui/traits/new-solver/specialization-transmute.stderr22
-rw-r--r--tests/ui/traits/new-solver/specialization-unconstrained.rs2
-rw-r--r--tests/ui/traits/new-solver/specialization-unconstrained.stderr11
-rw-r--r--tests/ui/traits/new-solver/tait-eq-proj-2.rs23
-rw-r--r--tests/ui/traits/new-solver/tait-eq-proj.rs35
-rw-r--r--tests/ui/traits/new-solver/tait-eq-tait.rs18
-rw-r--r--tests/ui/traits/new-solver/two-projection-param-candidates-are-ambiguous.stderr1
-rw-r--r--tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.fails.stderr18
-rw-r--r--tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.rs22
-rw-r--r--tests/ui/traits/new-solver/winnow-specializing-impls.rs22
-rw-r--r--tests/ui/traits/non_lifetime_binders/foreach-partial-eq.rs12
-rw-r--r--tests/ui/traits/non_lifetime_binders/foreach-partial-eq.stderr28
-rw-r--r--tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.rs11
-rw-r--r--tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.stderr17
-rw-r--r--tests/ui/traits/object/print_vtable_sizes.rs61
-rw-r--r--tests/ui/traits/object/print_vtable_sizes.stdout11
-rw-r--r--tests/ui/traits/project-modulo-regions.rs4
-rw-r--r--tests/ui/traits/project-modulo-regions.with_clause.stderr2
-rw-r--r--tests/ui/traits/project-modulo-regions.without_clause.stderr2
-rw-r--r--tests/ui/traits/suggest-where-clause.stderr4
-rw-r--r--tests/ui/traits/trivial_impl.rs18
-rw-r--r--tests/ui/traits/trivial_impl.stderr14
-rw-r--r--tests/ui/traits/trivial_impl2.rs13
-rw-r--r--tests/ui/traits/trivial_impl2.stderr14
-rw-r--r--tests/ui/traits/trivial_impl3.rs19
-rw-r--r--tests/ui/traits/trivial_impl3.stderr14
-rw-r--r--tests/ui/traits/trivial_impl4.rs21
-rw-r--r--tests/ui/traits/trivial_impl4.stderr14
-rw-r--r--tests/ui/traits/trivial_impl_sized.rs26
-rw-r--r--tests/ui/traits/trivial_impl_sized.stderr25
-rw-r--r--tests/ui/transmutability/alignment/align-fail.rs23
-rw-r--r--tests/ui/transmutability/alignment/align-fail.stderr30
-rw-r--r--tests/ui/transmutability/alignment/align-pass.rs23
-rw-r--r--tests/ui/transmutability/enums/repr/primitive_reprs_should_have_correct_length.stderr16
-rw-r--r--tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.rs2
-rw-r--r--tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.stderr20
-rw-r--r--tests/ui/transmutability/primitives/bool-mut.rs17
-rw-r--r--tests/ui/transmutability/primitives/bool-mut.stderr18
-rw-r--r--tests/ui/transmutability/primitives/bool.current.stderr4
-rw-r--r--tests/ui/transmutability/primitives/bool.next.stderr4
-rw-r--r--tests/ui/transmutability/primitives/bool.rs5
-rw-r--r--tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.rs25
-rw-r--r--tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.stderr25
-rw-r--r--tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.rs26
-rw-r--r--tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.stderr25
-rw-r--r--tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.rs25
-rw-r--r--tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.stderr25
-rw-r--r--tests/ui/transmutability/references/recursive-wrapper-types.rs27
-rw-r--r--tests/ui/transmutability/references/recursive-wrapper-types.stderr (renamed from tests/ui/transmutability/references.next.stderr)14
-rw-r--r--tests/ui/transmutability/references/u8-to-unit.rs24
-rw-r--r--tests/ui/transmutability/references/unit-to-itself.rs (renamed from tests/ui/transmutability/references.rs)16
-rw-r--r--tests/ui/transmutability/references/unit-to-u8.rs24
-rw-r--r--tests/ui/transmutability/references/unit-to-u8.stderr (renamed from tests/ui/transmutability/references.current.stderr)10
-rw-r--r--tests/ui/transmutability/region-infer.stderr2
-rw-r--r--tests/ui/treat-err-as-bug/panic-causes-oom-112708.rs10
-rw-r--r--tests/ui/treat-err-as-bug/panic-causes-oom-112708.stderr32
-rw-r--r--tests/ui/try-block/issue-45124.rs2
-rw-r--r--tests/ui/try-trait/bad-interconversion.stderr6
-rw-r--r--tests/ui/try-trait/option-to-result.stderr2
-rw-r--r--tests/ui/try-trait/try-on-option.stderr2
-rw-r--r--tests/ui/tuple/index-float.rs6
-rw-r--r--tests/ui/type-alias-impl-trait/auto-trait-leakage.rs4
-rw-r--r--tests/ui/type-alias-impl-trait/auto-trait-leakage3.rs4
-rw-r--r--tests/ui/type-alias-impl-trait/auto-trait-leakage3.stderr52
-rw-r--r--tests/ui/type-alias-impl-trait/bound_reduction2.rs1
-rw-r--r--tests/ui/type-alias-impl-trait/bound_reduction2.stderr16
-rw-r--r--tests/ui/type-alias-impl-trait/bounds-are-checked3.rs16
-rw-r--r--tests/ui/type-alias-impl-trait/bounds-are-checked3.stderr20
-rw-r--r--tests/ui/type-alias-impl-trait/bounds.rs16
-rw-r--r--tests/ui/type-alias-impl-trait/closure_args.rs11
-rw-r--r--tests/ui/type-alias-impl-trait/closure_args2.rs23
-rw-r--r--tests/ui/type-alias-impl-trait/coherence.stderr2
-rw-r--r--tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs25
-rw-r--r--tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr12
-rw-r--r--tests/ui/type-alias-impl-trait/coherence_generalization.rs2
-rw-r--r--tests/ui/type-alias-impl-trait/cross_inference.rs6
-rw-r--r--tests/ui/type-alias-impl-trait/debug-ty-with-weak.rs12
-rw-r--r--tests/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.stderr5
-rw-r--r--tests/ui/type-alias-impl-trait/defined-by-user-annotation.rs19
-rw-r--r--tests/ui/type-alias-impl-trait/defining-use-submodule.rs6
-rw-r--r--tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.rs3
-rw-r--r--tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.stderr6
-rw-r--r--tests/ui/type-alias-impl-trait/different_defining_uses_never_type-3.rs3
-rw-r--r--tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs1
-rw-r--r--tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.stderr16
-rw-r--r--tests/ui/type-alias-impl-trait/generic_duplicate_param_use.rs12
-rw-r--r--tests/ui/type-alias-impl-trait/generic_duplicate_param_use.stderr50
-rw-r--r--tests/ui/type-alias-impl-trait/generic_nondefining_use.rs9
-rw-r--r--tests/ui/type-alias-impl-trait/generic_nondefining_use.stderr44
-rw-r--r--tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs12
-rw-r--r--tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr20
-rw-r--r--tests/ui/type-alias-impl-trait/generic_underconstrained.stderr4
-rw-r--r--tests/ui/type-alias-impl-trait/generic_underconstrained2.stderr8
-rw-r--r--tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.rs28
-rw-r--r--tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.stderr20
-rw-r--r--tests/ui/type-alias-impl-trait/hidden_behind_struct_field.rs30
-rw-r--r--tests/ui/type-alias-impl-trait/hidden_behind_struct_field2.rs26
-rw-r--r--tests/ui/type-alias-impl-trait/higher_kinded_params.rs28
-rw-r--r--tests/ui/type-alias-impl-trait/higher_kinded_params2.rs35
-rw-r--r--tests/ui/type-alias-impl-trait/higher_kinded_params2.stderr15
-rw-r--r--tests/ui/type-alias-impl-trait/higher_kinded_params3.rs36
-rw-r--r--tests/ui/type-alias-impl-trait/higher_kinded_params3.stderr28
-rw-r--r--tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.rs28
-rw-r--r--tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.stderr20
-rw-r--r--tests/ui/type-alias-impl-trait/impl_for_weak_alias.rs14
-rw-r--r--tests/ui/type-alias-impl-trait/impl_for_weak_alias.stderr11
-rw-r--r--tests/ui/type-alias-impl-trait/inference-cycle.rs8
-rw-r--r--tests/ui/type-alias-impl-trait/inference-cycle.stderr52
-rw-r--r--tests/ui/type-alias-impl-trait/invalid_impl_trait_in_assoc_ty.stderr4
-rw-r--r--tests/ui/type-alias-impl-trait/issue-109054.rs22
-rw-r--r--tests/ui/type-alias-impl-trait/issue-109054.stderr12
-rw-r--r--tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs3
-rw-r--r--tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr12
-rw-r--r--tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs21
-rw-r--r--tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.stderr8
-rw-r--r--tests/ui/type-alias-impl-trait/issue-57961.rs4
-rw-r--r--tests/ui/type-alias-impl-trait/issue-60564.rs1
-rw-r--r--tests/ui/type-alias-impl-trait/issue-60564.stderr16
-rw-r--r--tests/ui/type-alias-impl-trait/issue-63263-closure-return.rs5
-rw-r--r--tests/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs4
-rw-r--r--tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.rs3
-rw-r--r--tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.stderr14
-rw-r--r--tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs1
-rw-r--r--tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.stderr14
-rw-r--r--tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs7
-rw-r--r--tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.stderr16
-rw-r--r--tests/ui/type-alias-impl-trait/issue-70121.rs3
-rw-r--r--tests/ui/type-alias-impl-trait/issue-70121.stderr15
-rw-r--r--tests/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs2
-rw-r--r--tests/ui/type-alias-impl-trait/issue-77179.rs2
-rw-r--r--tests/ui/type-alias-impl-trait/multi-error.rs23
-rw-r--r--tests/ui/type-alias-impl-trait/multi-error.stderr15
-rw-r--r--tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs1
-rw-r--r--tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr11
-rw-r--r--tests/ui/type-alias-impl-trait/nested-tait-inference2.stderr2
-rw-r--r--tests/ui/type-alias-impl-trait/nested_in_closure.rs17
-rw-r--r--tests/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs4
-rw-r--r--tests/ui/type-alias-impl-trait/no_revealing_outside_defining_module.stderr10
-rw-r--r--tests/ui/type-alias-impl-trait/non-defining-method.rs21
-rw-r--r--tests/ui/type-alias-impl-trait/non-defining-method.stderr15
-rw-r--r--tests/ui/type-alias-impl-trait/normalize-hidden-types.current.stderr55
-rw-r--r--tests/ui/type-alias-impl-trait/normalize-hidden-types.rs60
-rw-r--r--tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.rs33
-rw-r--r--tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.stderr22
-rw-r--r--tests/ui/type-alias-impl-trait/obligation_ice.rs17
-rw-r--r--tests/ui/type-alias-impl-trait/privacy.rs8
-rw-r--r--tests/ui/type-alias-impl-trait/privacy.stderr11
-rw-r--r--tests/ui/type-alias-impl-trait/reveal_local.rs10
-rw-r--r--tests/ui/type-alias-impl-trait/reveal_local.stderr96
-rw-r--r--tests/ui/type-alias-impl-trait/self-referential-3.rs2
-rw-r--r--tests/ui/type-alias-impl-trait/self-referential-3.stderr15
-rw-r--r--tests/ui/type-alias-impl-trait/self-referential.rs2
-rw-r--r--tests/ui/type-alias-impl-trait/self-referential.stderr6
-rw-r--r--tests/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs8
-rw-r--r--tests/ui/type-alias-impl-trait/type_of_a_let.rs8
-rw-r--r--tests/ui/type-alias-impl-trait/type_of_a_let.stderr6
-rw-r--r--tests/ui/type-inference/issue-113283-alllocator-trait-eq.rs18
-rw-r--r--tests/ui/type/type-check-defaults.stderr4
-rw-r--r--tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.rs29
-rw-r--r--tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.stderr17
-rw-r--r--tests/ui/typeck/issue-106929.rs13
-rw-r--r--tests/ui/typeck/issue-106929.stderr15
-rw-r--r--tests/ui/typeck/issue-112252-ptr-arithmetics-help.fixed10
-rw-r--r--tests/ui/typeck/issue-112252-ptr-arithmetics-help.rs10
-rw-r--r--tests/ui/typeck/issue-112252-ptr-arithmetics-help.stderr54
-rw-r--r--tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.rs9
-rw-r--r--tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.stderr14
-rw-r--r--tests/ui/typeck/issue-1871.rs (renamed from tests/ui/issues/issue-1871.rs)0
-rw-r--r--tests/ui/typeck/issue-1871.stderr (renamed from tests/ui/issues/issue-1871.stderr)0
-rw-r--r--tests/ui/typeck/issue-2063-resource.rs (renamed from tests/ui/issues/issue-2063-resource.rs)0
-rw-r--r--tests/ui/typeck/issue-2063.rs (renamed from tests/ui/issues/issue-2063.rs)0
-rw-r--r--tests/ui/typeck/issue-81293.stderr4
-rw-r--r--tests/ui/typeck/issue-86721-return-expr-ice.rs2
-rw-r--r--tests/ui/typeck/issue-89856.stderr2
-rw-r--r--tests/ui/typeck/issue-90101.stderr2
-rw-r--r--tests/ui/typeck/ptr-null-mutability-suggestions.fixed11
-rw-r--r--tests/ui/typeck/ptr-null-mutability-suggestions.rs11
-rw-r--r--tests/ui/typeck/ptr-null-mutability-suggestions.stderr21
-rw-r--r--tests/ui/typeck/return-dyn-type-mismatch-2.rs11
-rw-r--r--tests/ui/typeck/return-dyn-type-mismatch-2.stderr15
-rw-r--r--tests/ui/typeck/return-dyn-type-mismatch.rs21
-rw-r--r--tests/ui/typeck/return-dyn-type-mismatch.stderr15
-rw-r--r--tests/ui/typeck/type-placeholder-fn-in-const.rs3
-rw-r--r--tests/ui/typeck/type-placeholder-fn-in-const.stderr10
-rw-r--r--tests/ui/typeck/typeck_type_placeholder_item.rs8
-rw-r--r--tests/ui/typeck/typeck_type_placeholder_item.stderr8
-rw-r--r--tests/ui/typeck/typeck_type_placeholder_item_help.rs4
-rw-r--r--tests/ui/typeck/typeck_type_placeholder_item_help.stderr4
-rw-r--r--tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr8
-rw-r--r--tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.fixed17
-rw-r--r--tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.rs17
-rw-r--r--tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.stderr (renamed from tests/ui/underscore-lifetime/where-clause-trait-impl-region.rust2018.stderr)9
-rw-r--r--tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.fixed18
-rw-r--r--tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.rs18
-rw-r--r--tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.stderr (renamed from tests/ui/underscore-lifetime/where-clause-trait-impl-region.rust2015.stderr)9
-rw-r--r--tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rs18
-rw-r--r--tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.fixed14
-rw-r--r--tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.rs14
-rw-r--r--tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.stderr (renamed from tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rust2018.stderr)9
-rw-r--r--tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.fixed15
-rw-r--r--tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.rs15
-rw-r--r--tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.stderr (renamed from tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rust2015.stderr)9
-rw-r--r--tests/ui/underscore-lifetime/where-clause-trait-impl-region.rs15
-rw-r--r--tests/ui/uninhabited/projection.rs32
-rw-r--r--tests/ui/union/union-fields-2.mirunsafeck.stderr2
-rw-r--r--tests/ui/union/union-fields-2.thirunsafeck.stderr2
-rw-r--r--tests/ui/union/union-sized-field.stderr6
-rw-r--r--tests/ui/unsafe/auxiliary/external_unsafe_macro.rs4
-rw-r--r--tests/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.mir.stderr10
-rw-r--r--tests/ui/unsafe/wrapping-unsafe-block-sugg.fixed66
-rw-r--r--tests/ui/unsafe/wrapping-unsafe-block-sugg.rs66
-rw-r--r--tests/ui/unsafe/wrapping-unsafe-block-sugg.stderr99
-rw-r--r--tests/ui/unsized-locals/issue-67981.stderr5
-rw-r--r--tests/ui/unsized-locals/rust-call.rs12
-rw-r--r--tests/ui/unsized-locals/rust-call.stderr13
-rw-r--r--tests/ui/unsized/issue-71659.current.stderr (renamed from tests/ui/unsized/issue-71659.stderr)4
-rw-r--r--tests/ui/unsized/issue-71659.next.stderr18
-rw-r--r--tests/ui/unsized/issue-71659.rs3
-rw-r--r--tests/ui/unsized/unsized-bare-typaram.stderr2
-rw-r--r--tests/ui/unsized/unsized-enum.stderr2
-rw-r--r--tests/ui/unsized/unsized-enum2.stderr8
-rw-r--r--tests/ui/unsized/unsized-fn-arg.stderr2
-rw-r--r--tests/ui/unsized/unsized-inherent-impl-self-type.stderr2
-rw-r--r--tests/ui/unsized/unsized-struct.stderr4
-rw-r--r--tests/ui/unsized/unsized-trait-impl-self-type.stderr2
-rw-r--r--tests/ui/unsized/unsized-trait-impl-trait-arg.stderr2
-rw-r--r--tests/ui/unsized/unsized3.stderr12
-rw-r--r--tests/ui/unsized/unsized5.stderr8
-rw-r--r--tests/ui/unsized/unsized6.stderr26
-rw-r--r--tests/ui/unsized/unsized7.stderr2
-rw-r--r--tests/ui/use/use-keyword.rs2
-rw-r--r--tests/ui/weird-exprs.rs16
-rw-r--r--tests/ui/where-clauses/issue-50825-1.rs (renamed from tests/ui/issues/issue-50825-1.rs)0
-rw-r--r--tests/ui/where-clauses/issue-50825.rs (renamed from tests/ui/issues/issue-50825.rs)0
-rw-r--r--tests/ui/xcrate/xcrate-private-by-default.stderr20
1801 files changed, 14610 insertions, 3604 deletions
diff --git a/tests/ui/abi/foreign/foreign-fn-with-byval.rs b/tests/ui/abi/foreign/foreign-fn-with-byval.rs
index f366b6ee1..e20ee0da4 100644
--- a/tests/ui/abi/foreign/foreign-fn-with-byval.rs
+++ b/tests/ui/abi/foreign/foreign-fn-with-byval.rs
@@ -1,5 +1,5 @@
// run-pass
-#![allow(improper_ctypes)]
+#![allow(improper_ctypes, improper_ctypes_definitions)]
// ignore-wasm32-bare no libc to test ffi with
diff --git a/tests/ui/abi/issue-94223.rs b/tests/ui/abi/issue-94223.rs
new file mode 100644
index 000000000..79d6b9403
--- /dev/null
+++ b/tests/ui/abi/issue-94223.rs
@@ -0,0 +1,8 @@
+// check-pass
+#![allow(improper_ctypes_definitions)]
+#![crate_type = "lib"]
+
+// Check that computing the fn abi for `bad`, with a external ABI fn ptr that is not FFI-safe, does
+// not ICE.
+
+pub fn bad(f: extern "C" fn([u8])) {}
diff --git a/tests/ui/argument-suggestions/issue-112507.rs b/tests/ui/argument-suggestions/issue-112507.rs
new file mode 100644
index 000000000..61743c59a
--- /dev/null
+++ b/tests/ui/argument-suggestions/issue-112507.rs
@@ -0,0 +1,12 @@
+pub enum Value {
+ Float(Option<f64>),
+}
+
+fn main() {
+ let _a = Value::Float( //~ ERROR this enum variant takes 1 argument but 4 arguments were supplied
+ 0,
+ None,
+ None,
+ 0,
+ );
+}
diff --git a/tests/ui/argument-suggestions/issue-112507.stderr b/tests/ui/argument-suggestions/issue-112507.stderr
new file mode 100644
index 000000000..dfb47e010
--- /dev/null
+++ b/tests/ui/argument-suggestions/issue-112507.stderr
@@ -0,0 +1,27 @@
+error[E0061]: this enum variant takes 1 argument but 4 arguments were supplied
+ --> $DIR/issue-112507.rs:6:14
+ |
+LL | let _a = Value::Float(
+ | ^^^^^^^^^^^^
+LL | 0,
+ | - unexpected argument of type `{integer}`
+LL | None,
+LL | None,
+ | ---- unexpected argument of type `Option<_>`
+LL | 0,
+ | - unexpected argument of type `{integer}`
+ |
+note: tuple variant defined here
+ --> $DIR/issue-112507.rs:2:5
+ |
+LL | Float(Option<f64>),
+ | ^^^^^
+help: remove the extra arguments
+ |
+LL ~ ,
+LL ~ None);
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0061`.
diff --git a/tests/ui/asm/aarch64/may_unwind.rs b/tests/ui/asm/aarch64/may_unwind.rs
index 6af8728bb..cfb750782 100644
--- a/tests/ui/asm/aarch64/may_unwind.rs
+++ b/tests/ui/asm/aarch64/may_unwind.rs
@@ -1,6 +1,7 @@
// only-aarch64
// run-pass
// needs-asm-support
+// needs-unwind
#![feature(asm_unwind)]
diff --git a/tests/ui/asm/x86_64/parse-error.rs b/tests/ui/asm/parse-error.rs
index 2e714d464..9e002b155 100644
--- a/tests/ui/asm/x86_64/parse-error.rs
+++ b/tests/ui/asm/parse-error.rs
@@ -1,4 +1,4 @@
-// only-x86_64
+// needs-asm-support
#![feature(asm_const)]
@@ -38,6 +38,9 @@ fn main() {
//~^ ERROR expected one of
asm!("{}", options(), const foo);
//~^ ERROR attempt to use a non-constant value in a constant
+
+ // test that asm!'s clobber_abi doesn't accept non-string literals
+ // see also https://github.com/rust-lang/rust/issues/112635
asm!("", clobber_abi());
//~^ ERROR at least one abi must be provided
asm!("", clobber_abi(foo));
@@ -46,6 +49,25 @@ fn main() {
//~^ ERROR expected one of `)` or `,`, found `foo`
asm!("", clobber_abi("C", foo));
//~^ ERROR expected string literal
+ asm!("", clobber_abi(1));
+ //~^ ERROR expected string literal
+ asm!("", clobber_abi(()));
+ //~^ ERROR expected string literal
+ asm!("", clobber_abi(uwu));
+ //~^ ERROR expected string literal
+ asm!("", clobber_abi({}));
+ //~^ ERROR expected string literal
+ asm!("", clobber_abi(loop {}));
+ //~^ ERROR expected string literal
+ asm!("", clobber_abi(if));
+ //~^ ERROR expected string literal
+ asm!("", clobber_abi(do));
+ //~^ ERROR expected string literal
+ asm!("", clobber_abi(<));
+ //~^ ERROR expected string literal
+ asm!("", clobber_abi(.));
+ //~^ ERROR expected string literal
+
asm!("{}", clobber_abi("C"), const foo);
//~^ ERROR attempt to use a non-constant value in a constant
asm!("", options(), clobber_abi("C"));
@@ -56,15 +78,7 @@ fn main() {
//~^^ ERROR argument never used
//~^^^ ERROR attempt to use a non-constant value in a constant
//~^^^^ ERROR attempt to use a non-constant value in a constant
- asm!("", a = in("eax") foo);
- //~^ ERROR explicit register arguments cannot have names
- asm!("{a}", in("eax") foo, a = const bar);
- //~^ ERROR attempt to use a non-constant value in a constant
- asm!("{a}", in("eax") foo, a = const bar);
- //~^ ERROR attempt to use a non-constant value in a constant
- asm!("{1}", in("eax") foo, const bar);
- //~^ ERROR positional arguments cannot follow named arguments or explicit register arguments
- //~^^ ERROR attempt to use a non-constant value in a constant
+
asm!("", options(), "");
//~^ ERROR expected one of
asm!("{}", in(reg) foo, "{}", out(reg) foo);
diff --git a/tests/ui/asm/x86_64/parse-error.stderr b/tests/ui/asm/parse-error.stderr
index 0c9d6f715..075d28e17 100644
--- a/tests/ui/asm/x86_64/parse-error.stderr
+++ b/tests/ui/asm/parse-error.stderr
@@ -83,31 +83,85 @@ LL | asm!("", options(nomem, foo));
| ^^^ expected one of 10 possible tokens
error: at least one abi must be provided as an argument to `clobber_abi`
- --> $DIR/parse-error.rs:41:30
+ --> $DIR/parse-error.rs:44:30
|
LL | asm!("", clobber_abi());
| ^
error: expected string literal
- --> $DIR/parse-error.rs:43:30
+ --> $DIR/parse-error.rs:46:30
|
LL | asm!("", clobber_abi(foo));
| ^^^ not a string literal
error: expected one of `)` or `,`, found `foo`
- --> $DIR/parse-error.rs:45:34
+ --> $DIR/parse-error.rs:48:34
|
LL | asm!("", clobber_abi("C" foo));
| ^^^ expected one of `)` or `,`
error: expected string literal
- --> $DIR/parse-error.rs:47:35
+ --> $DIR/parse-error.rs:50:35
|
LL | asm!("", clobber_abi("C", foo));
| ^^^ not a string literal
+error: expected string literal
+ --> $DIR/parse-error.rs:52:30
+ |
+LL | asm!("", clobber_abi(1));
+ | ^ not a string literal
+
+error: expected string literal
+ --> $DIR/parse-error.rs:54:30
+ |
+LL | asm!("", clobber_abi(()));
+ | ^ not a string literal
+
+error: expected string literal
+ --> $DIR/parse-error.rs:56:30
+ |
+LL | asm!("", clobber_abi(uwu));
+ | ^^^ not a string literal
+
+error: expected string literal
+ --> $DIR/parse-error.rs:58:30
+ |
+LL | asm!("", clobber_abi({}));
+ | ^ not a string literal
+
+error: expected string literal
+ --> $DIR/parse-error.rs:60:30
+ |
+LL | asm!("", clobber_abi(loop {}));
+ | ^^^^ not a string literal
+
+error: expected string literal
+ --> $DIR/parse-error.rs:62:30
+ |
+LL | asm!("", clobber_abi(if));
+ | ^^ not a string literal
+
+error: expected string literal
+ --> $DIR/parse-error.rs:64:30
+ |
+LL | asm!("", clobber_abi(do));
+ | ^^ not a string literal
+
+error: expected string literal
+ --> $DIR/parse-error.rs:66:30
+ |
+LL | asm!("", clobber_abi(<));
+ | ^ not a string literal
+
+error: expected string literal
+ --> $DIR/parse-error.rs:68:30
+ |
+LL | asm!("", clobber_abi(.));
+ | ^ not a string literal
+
error: duplicate argument named `a`
- --> $DIR/parse-error.rs:54:36
+ --> $DIR/parse-error.rs:76:36
|
LL | asm!("{a}", a = const foo, a = const bar);
| ------------- ^^^^^^^^^^^^^ duplicate argument
@@ -115,41 +169,27 @@ LL | asm!("{a}", a = const foo, a = const bar);
| previously here
error: argument never used
- --> $DIR/parse-error.rs:54:36
+ --> $DIR/parse-error.rs:76:36
|
LL | asm!("{a}", a = const foo, a = const bar);
| ^^^^^^^^^^^^^ argument never used
|
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {1} */"`
-error: explicit register arguments cannot have names
- --> $DIR/parse-error.rs:59:18
- |
-LL | asm!("", a = in("eax") foo);
- | ^^^^^^^^^^^^^^^^^
-
-error: positional arguments cannot follow named arguments or explicit register arguments
- --> $DIR/parse-error.rs:65:36
- |
-LL | asm!("{1}", in("eax") foo, const bar);
- | ------------- ^^^^^^^^^ positional argument
- | |
- | explicit register argument
-
error: expected one of `clobber_abi`, `const`, `in`, `inlateout`, `inout`, `lateout`, `options`, `out`, or `sym`, found `""`
- --> $DIR/parse-error.rs:68:29
+ --> $DIR/parse-error.rs:82:29
|
LL | asm!("", options(), "");
| ^^ expected one of 9 possible tokens
error: expected one of `clobber_abi`, `const`, `in`, `inlateout`, `inout`, `lateout`, `options`, `out`, or `sym`, found `"{}"`
- --> $DIR/parse-error.rs:70:33
+ --> $DIR/parse-error.rs:84:33
|
LL | asm!("{}", in(reg) foo, "{}", out(reg) foo);
| ^^^^ expected one of 9 possible tokens
error: asm template must be a string literal
- --> $DIR/parse-error.rs:72:14
+ --> $DIR/parse-error.rs:86:14
|
LL | asm!(format!("{{{}}}", 0), in(reg) foo);
| ^^^^^^^^^^^^^^^^^^^^
@@ -157,7 +197,7 @@ LL | asm!(format!("{{{}}}", 0), in(reg) foo);
= note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
error: asm template must be a string literal
- --> $DIR/parse-error.rs:74:21
+ --> $DIR/parse-error.rs:88:21
|
LL | asm!("{1}", format!("{{{}}}", 0), in(reg) foo, out(reg) bar);
| ^^^^^^^^^^^^^^^^^^^^
@@ -165,121 +205,121 @@ LL | asm!("{1}", format!("{{{}}}", 0), in(reg) foo, out(reg) bar);
= note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
error: _ cannot be used for input operands
- --> $DIR/parse-error.rs:76:28
+ --> $DIR/parse-error.rs:90:28
|
LL | asm!("{}", in(reg) _);
| ^
error: _ cannot be used for input operands
- --> $DIR/parse-error.rs:78:31
+ --> $DIR/parse-error.rs:92:31
|
LL | asm!("{}", inout(reg) _);
| ^
error: _ cannot be used for input operands
- --> $DIR/parse-error.rs:80:35
+ --> $DIR/parse-error.rs:94:35
|
LL | asm!("{}", inlateout(reg) _);
| ^
error: requires at least a template string argument
- --> $DIR/parse-error.rs:87:1
+ --> $DIR/parse-error.rs:101:1
|
LL | global_asm!();
| ^^^^^^^^^^^^^
error: asm template must be a string literal
- --> $DIR/parse-error.rs:89:13
+ --> $DIR/parse-error.rs:103:13
|
LL | global_asm!(FOO);
| ^^^
error: expected token: `,`
- --> $DIR/parse-error.rs:91:18
+ --> $DIR/parse-error.rs:105:18
|
LL | global_asm!("{}" FOO);
| ^^^ expected `,`
error: expected operand, options, or additional template string
- --> $DIR/parse-error.rs:93:19
+ --> $DIR/parse-error.rs:107:19
|
LL | global_asm!("{}", FOO);
| ^^^ expected operand, options, or additional template string
error: expected expression, found end of macro arguments
- --> $DIR/parse-error.rs:95:24
+ --> $DIR/parse-error.rs:109:24
|
LL | global_asm!("{}", const);
| ^ expected expression
error: expected one of `,`, `.`, `?`, or an operator, found `FOO`
- --> $DIR/parse-error.rs:97:30
+ --> $DIR/parse-error.rs:111:30
|
LL | global_asm!("{}", const(reg) FOO);
| ^^^ expected one of `,`, `.`, `?`, or an operator
error: expected one of `)`, `att_syntax`, or `raw`, found `FOO`
- --> $DIR/parse-error.rs:99:25
+ --> $DIR/parse-error.rs:113:25
|
LL | global_asm!("", options(FOO));
| ^^^ expected one of `)`, `att_syntax`, or `raw`
error: expected one of `)`, `att_syntax`, or `raw`, found `nomem`
- --> $DIR/parse-error.rs:101:25
+ --> $DIR/parse-error.rs:115:25
|
LL | global_asm!("", options(nomem FOO));
| ^^^^^ expected one of `)`, `att_syntax`, or `raw`
error: expected one of `)`, `att_syntax`, or `raw`, found `nomem`
- --> $DIR/parse-error.rs:103:25
+ --> $DIR/parse-error.rs:117:25
|
LL | global_asm!("", options(nomem, FOO));
| ^^^^^ expected one of `)`, `att_syntax`, or `raw`
error: expected string literal
- --> $DIR/parse-error.rs:106:29
+ --> $DIR/parse-error.rs:120:29
|
LL | global_asm!("", clobber_abi(FOO));
| ^^^ not a string literal
error: expected one of `)` or `,`, found `FOO`
- --> $DIR/parse-error.rs:108:33
+ --> $DIR/parse-error.rs:122:33
|
LL | global_asm!("", clobber_abi("C" FOO));
| ^^^ expected one of `)` or `,`
error: expected string literal
- --> $DIR/parse-error.rs:110:34
+ --> $DIR/parse-error.rs:124:34
|
LL | global_asm!("", clobber_abi("C", FOO));
| ^^^ not a string literal
error: `clobber_abi` cannot be used with `global_asm!`
- --> $DIR/parse-error.rs:112:19
+ --> $DIR/parse-error.rs:126:19
|
LL | global_asm!("{}", clobber_abi("C"), const FOO);
| ^^^^^^^^^^^^^^^^
error: `clobber_abi` cannot be used with `global_asm!`
- --> $DIR/parse-error.rs:114:28
+ --> $DIR/parse-error.rs:128:28
|
LL | global_asm!("", options(), clobber_abi("C"));
| ^^^^^^^^^^^^^^^^
error: `clobber_abi` cannot be used with `global_asm!`
- --> $DIR/parse-error.rs:116:30
+ --> $DIR/parse-error.rs:130:30
|
LL | global_asm!("{}", options(), clobber_abi("C"), const FOO);
| ^^^^^^^^^^^^^^^^
error: `clobber_abi` cannot be used with `global_asm!`
- --> $DIR/parse-error.rs:118:17
+ --> $DIR/parse-error.rs:132:17
|
LL | global_asm!("", clobber_abi("C"), clobber_abi("C"));
| ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
error: duplicate argument named `a`
- --> $DIR/parse-error.rs:120:35
+ --> $DIR/parse-error.rs:134:35
|
LL | global_asm!("{a}", a = const FOO, a = const BAR);
| ------------- ^^^^^^^^^^^^^ duplicate argument
@@ -287,7 +327,7 @@ LL | global_asm!("{a}", a = const FOO, a = const BAR);
| previously here
error: argument never used
- --> $DIR/parse-error.rs:120:35
+ --> $DIR/parse-error.rs:134:35
|
LL | global_asm!("{a}", a = const FOO, a = const BAR);
| ^^^^^^^^^^^^^ argument never used
@@ -295,19 +335,19 @@ LL | global_asm!("{a}", a = const FOO, a = const BAR);
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {1} */"`
error: expected one of `clobber_abi`, `const`, `options`, or `sym`, found `""`
- --> $DIR/parse-error.rs:123:28
+ --> $DIR/parse-error.rs:137:28
|
LL | global_asm!("", options(), "");
| ^^ expected one of `clobber_abi`, `const`, `options`, or `sym`
error: expected one of `clobber_abi`, `const`, `options`, or `sym`, found `"{}"`
- --> $DIR/parse-error.rs:125:30
+ --> $DIR/parse-error.rs:139:30
|
LL | global_asm!("{}", const FOO, "{}", const FOO);
| ^^^^ expected one of `clobber_abi`, `const`, `options`, or `sym`
error: asm template must be a string literal
- --> $DIR/parse-error.rs:127:13
+ --> $DIR/parse-error.rs:141:13
|
LL | global_asm!(format!("{{{}}}", 0), const FOO);
| ^^^^^^^^^^^^^^^^^^^^
@@ -315,7 +355,7 @@ LL | global_asm!(format!("{{{}}}", 0), const FOO);
= note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
error: asm template must be a string literal
- --> $DIR/parse-error.rs:129:20
+ --> $DIR/parse-error.rs:143:20
|
LL | global_asm!("{1}", format!("{{{}}}", 0), const FOO, const BAR);
| ^^^^^^^^^^^^^^^^^^^^
@@ -332,7 +372,7 @@ LL | asm!("{}", options(), const foo);
| ^^^ non-constant value
error[E0435]: attempt to use a non-constant value in a constant
- --> $DIR/parse-error.rs:49:44
+ --> $DIR/parse-error.rs:71:44
|
LL | let mut foo = 0;
| ----------- help: consider using `const` instead of `let`: `const foo`
@@ -341,7 +381,7 @@ LL | asm!("{}", clobber_abi("C"), const foo);
| ^^^ non-constant value
error[E0435]: attempt to use a non-constant value in a constant
- --> $DIR/parse-error.rs:52:55
+ --> $DIR/parse-error.rs:74:55
|
LL | let mut foo = 0;
| ----------- help: consider using `const` instead of `let`: `const foo`
@@ -350,7 +390,7 @@ LL | asm!("{}", options(), clobber_abi("C"), const foo);
| ^^^ non-constant value
error[E0435]: attempt to use a non-constant value in a constant
- --> $DIR/parse-error.rs:54:31
+ --> $DIR/parse-error.rs:76:31
|
LL | let mut foo = 0;
| ----------- help: consider using `const` instead of `let`: `const foo`
@@ -359,7 +399,7 @@ LL | asm!("{a}", a = const foo, a = const bar);
| ^^^ non-constant value
error[E0435]: attempt to use a non-constant value in a constant
- --> $DIR/parse-error.rs:54:46
+ --> $DIR/parse-error.rs:76:46
|
LL | let mut bar = 0;
| ----------- help: consider using `const` instead of `let`: `const bar`
@@ -367,33 +407,6 @@ LL | let mut bar = 0;
LL | asm!("{a}", a = const foo, a = const bar);
| ^^^ non-constant value
-error[E0435]: attempt to use a non-constant value in a constant
- --> $DIR/parse-error.rs:61:46
- |
-LL | let mut bar = 0;
- | ----------- help: consider using `const` instead of `let`: `const bar`
-...
-LL | asm!("{a}", in("eax") foo, a = const bar);
- | ^^^ non-constant value
-
-error[E0435]: attempt to use a non-constant value in a constant
- --> $DIR/parse-error.rs:63:46
- |
-LL | let mut bar = 0;
- | ----------- help: consider using `const` instead of `let`: `const bar`
-...
-LL | asm!("{a}", in("eax") foo, a = const bar);
- | ^^^ non-constant value
-
-error[E0435]: attempt to use a non-constant value in a constant
- --> $DIR/parse-error.rs:65:42
- |
-LL | let mut bar = 0;
- | ----------- help: consider using `const` instead of `let`: `const bar`
-...
-LL | asm!("{1}", in("eax") foo, const bar);
- | ^^^ non-constant value
-
-error: aborting due to 59 previous errors
+error: aborting due to 63 previous errors
For more information about this error, try `rustc --explain E0435`.
diff --git a/tests/ui/asm/x86_64/x86_64_parse_error.rs b/tests/ui/asm/x86_64/x86_64_parse_error.rs
new file mode 100644
index 000000000..715a67687
--- /dev/null
+++ b/tests/ui/asm/x86_64/x86_64_parse_error.rs
@@ -0,0 +1,21 @@
+// only-x86_64
+
+#![feature(asm_const)]
+
+use std::arch::asm;
+
+fn main() {
+ let mut foo = 0;
+ let mut bar = 0;
+ unsafe {
+ asm!("", a = in("eax") foo);
+ //~^ ERROR explicit register arguments cannot have names
+ asm!("{a}", in("eax") foo, a = const bar);
+ //~^ ERROR attempt to use a non-constant value in a constant
+ asm!("{a}", in("eax") foo, a = const bar);
+ //~^ ERROR attempt to use a non-constant value in a constant
+ asm!("{1}", in("eax") foo, const bar);
+ //~^ ERROR positional arguments cannot follow named arguments or explicit register arguments
+ //~^^ ERROR attempt to use a non-constant value in a constant
+ }
+}
diff --git a/tests/ui/asm/x86_64/x86_64_parse_error.stderr b/tests/ui/asm/x86_64/x86_64_parse_error.stderr
new file mode 100644
index 000000000..f2854ae51
--- /dev/null
+++ b/tests/ui/asm/x86_64/x86_64_parse_error.stderr
@@ -0,0 +1,44 @@
+error: explicit register arguments cannot have names
+ --> $DIR/x86_64_parse_error.rs:11:18
+ |
+LL | asm!("", a = in("eax") foo);
+ | ^^^^^^^^^^^^^^^^^
+
+error: positional arguments cannot follow named arguments or explicit register arguments
+ --> $DIR/x86_64_parse_error.rs:17:36
+ |
+LL | asm!("{1}", in("eax") foo, const bar);
+ | ------------- ^^^^^^^^^ positional argument
+ | |
+ | explicit register argument
+
+error[E0435]: attempt to use a non-constant value in a constant
+ --> $DIR/x86_64_parse_error.rs:13:46
+ |
+LL | let mut bar = 0;
+ | ----------- help: consider using `const` instead of `let`: `const bar`
+...
+LL | asm!("{a}", in("eax") foo, a = const bar);
+ | ^^^ non-constant value
+
+error[E0435]: attempt to use a non-constant value in a constant
+ --> $DIR/x86_64_parse_error.rs:15:46
+ |
+LL | let mut bar = 0;
+ | ----------- help: consider using `const` instead of `let`: `const bar`
+...
+LL | asm!("{a}", in("eax") foo, a = const bar);
+ | ^^^ non-constant value
+
+error[E0435]: attempt to use a non-constant value in a constant
+ --> $DIR/x86_64_parse_error.rs:17:42
+ |
+LL | let mut bar = 0;
+ | ----------- help: consider using `const` instead of `let`: `const bar`
+...
+LL | asm!("{1}", in("eax") foo, const bar);
+ | ^^^ non-constant value
+
+error: aborting due to 5 previous errors
+
+For more information about this error, try `rustc --explain E0435`.
diff --git a/tests/ui/assign-assign.rs b/tests/ui/assign-assign.rs
index bcf506b39..9db8fb008 100644
--- a/tests/ui/assign-assign.rs
+++ b/tests/ui/assign-assign.rs
@@ -6,7 +6,7 @@ fn test_assign() {
let y: () = x = 10;
assert_eq!(x, 10);
assert_eq!(y, ());
- let mut z = x = 11;
+ let mut z: () = x = 11;
assert_eq!(x, 11);
assert_eq!(z, ());
z = x = 12;
@@ -19,7 +19,7 @@ fn test_assign_op() {
let y: () = x += 10;
assert_eq!(x, 10);
assert_eq!(y, ());
- let mut z = x += 11;
+ let mut z: () = x += 11;
assert_eq!(x, 21);
assert_eq!(z, ());
z = x += 12;
diff --git a/tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.rs b/tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.rs
new file mode 100644
index 000000000..40896c32e
--- /dev/null
+++ b/tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.rs
@@ -0,0 +1,10 @@
+trait Trait {
+ const ASSOC: i32;
+}
+
+impl Trait for () {
+ const ASSOC: &dyn Fn(_) = 1i32;
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
+}
+
+fn main() {}
diff --git a/tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.stderr b/tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.stderr
new file mode 100644
index 000000000..993a08fab
--- /dev/null
+++ b/tests/ui/associated-consts/infer-placeholder-in-non-suggestable-pos.stderr
@@ -0,0 +1,9 @@
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
+ --> $DIR/infer-placeholder-in-non-suggestable-pos.rs:6:26
+ |
+LL | const ASSOC: &dyn Fn(_) = 1i32;
+ | ^ not allowed in type signatures
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0121`.
diff --git a/tests/ui/associated-consts/issue-110933.rs b/tests/ui/associated-consts/issue-110933.rs
new file mode 100644
index 000000000..aa4882ae5
--- /dev/null
+++ b/tests/ui/associated-consts/issue-110933.rs
@@ -0,0 +1,20 @@
+// check-pass
+
+#![feature(associated_const_equality)]
+
+pub trait Trait {
+ const ASSOC: usize;
+}
+
+pub fn foo<
+ T: Trait<
+ ASSOC = {
+ let a = 10_usize;
+ let b: &'_ usize = &a;
+ *b
+ },
+ >,
+>() {
+}
+
+fn main() {}
diff --git a/tests/ui/associated-inherent-types/assoc-inherent-unstable.rs b/tests/ui/associated-inherent-types/assoc-inherent-unstable.rs
index 34b4e47bf..152bb7a60 100644
--- a/tests/ui/associated-inherent-types/assoc-inherent-unstable.rs
+++ b/tests/ui/associated-inherent-types/assoc-inherent-unstable.rs
@@ -1,6 +1,9 @@
// aux-crate:aux=assoc-inherent-unstable.rs
// edition: 2021
+#![feature(inherent_associated_types)]
+#![allow(incomplete_features)]
+
type Data = aux::Owner::Data; //~ ERROR use of unstable library feature 'data'
fn main() {}
diff --git a/tests/ui/associated-inherent-types/assoc-inherent-unstable.stderr b/tests/ui/associated-inherent-types/assoc-inherent-unstable.stderr
index c0be8bfd7..415ee0193 100644
--- a/tests/ui/associated-inherent-types/assoc-inherent-unstable.stderr
+++ b/tests/ui/associated-inherent-types/assoc-inherent-unstable.stderr
@@ -1,5 +1,5 @@
error[E0658]: use of unstable library feature 'data'
- --> $DIR/assoc-inherent-unstable.rs:4:13
+ --> $DIR/assoc-inherent-unstable.rs:7:13
|
LL | type Data = aux::Owner::Data;
| ^^^^^^^^^^^^^^^^
diff --git a/tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.rs b/tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.rs
index f41574403..33c73c3db 100644
--- a/tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.rs
+++ b/tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.rs
@@ -1,5 +1,7 @@
// known-bug: #108491
+#![feature(inherent_associated_types)]
+#![allow(incomplete_features)]
// FIXME(inherent_associated_types): This should pass.
struct Foo {
@@ -8,3 +10,5 @@ struct Foo {
impl Foo {
pub type Bar = usize;
}
+
+fn main() {}
diff --git a/tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.stderr b/tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.stderr
index f313c4946..23269e1af 100644
--- a/tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.stderr
+++ b/tests/ui/associated-inherent-types/bugs/cycle-iat-inside-of-adt.stderr
@@ -1,49 +1,43 @@
-error[E0601]: `main` function not found in crate `cycle_iat_inside_of_adt`
- --> $DIR/cycle-iat-inside-of-adt.rs:10:2
- |
-LL | }
- | ^ consider adding a `main` function to `$DIR/cycle-iat-inside-of-adt.rs`
-
error[E0391]: cycle detected when computing predicates of `Foo`
- --> $DIR/cycle-iat-inside-of-adt.rs:5:1
+ --> $DIR/cycle-iat-inside-of-adt.rs:7:1
|
LL | struct Foo {
| ^^^^^^^^^^
|
note: ...which requires computing predicates of `Foo`...
- --> $DIR/cycle-iat-inside-of-adt.rs:5:1
+ --> $DIR/cycle-iat-inside-of-adt.rs:7:1
|
LL | struct Foo {
| ^^^^^^^^^^
note: ...which requires computing inferred outlives predicates of `Foo`...
- --> $DIR/cycle-iat-inside-of-adt.rs:5:1
+ --> $DIR/cycle-iat-inside-of-adt.rs:7:1
|
LL | struct Foo {
| ^^^^^^^^^^
= note: ...which requires computing the inferred outlives predicates for items in this crate...
note: ...which requires computing type of `Foo::bar`...
- --> $DIR/cycle-iat-inside-of-adt.rs:6:5
+ --> $DIR/cycle-iat-inside-of-adt.rs:8:5
|
LL | bar: Self::Bar,
| ^^^^^^^^^^^^^^
note: ...which requires computing normalized predicates of `Foo`...
- --> $DIR/cycle-iat-inside-of-adt.rs:5:1
+ --> $DIR/cycle-iat-inside-of-adt.rs:7:1
|
LL | struct Foo {
| ^^^^^^^^^^
= note: ...which again requires computing predicates of `Foo`, completing the cycle
note: cycle used when collecting item types in top-level module
- --> $DIR/cycle-iat-inside-of-adt.rs:5:1
- |
-LL | / struct Foo {
-LL | | bar: Self::Bar,
-LL | | }
-LL | | impl Foo {
-LL | | pub type Bar = usize;
-LL | | }
- | |_^
+ --> $DIR/cycle-iat-inside-of-adt.rs:3:1
+ |
+LL | / #![feature(inherent_associated_types)]
+LL | | #![allow(incomplete_features)]
+LL | | // FIXME(inherent_associated_types): This should pass.
+LL | |
+... |
+LL | |
+LL | | fn main() {}
+ | |____________^
-error: aborting due to 2 previous errors
+error: aborting due to previous error
-Some errors have detailed explanations: E0391, E0601.
-For more information about an error, try `rustc --explain E0391`.
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/associated-inherent-types/dont-select-if-disabled.rs b/tests/ui/associated-inherent-types/dont-select-if-disabled.rs
new file mode 100644
index 000000000..472be4fbf
--- /dev/null
+++ b/tests/ui/associated-inherent-types/dont-select-if-disabled.rs
@@ -0,0 +1,17 @@
+// Regression test for #113265.
+
+// Don't perform selection if the feature is not enabled to prevent cycle errors
+// that exist due to current limitations of the implementation from masking the
+// feature-gate error. See the aforementioned issue.
+// This does lead to rustc not mentioning inherent associated types at usage-sites of
+// IATs that were defined in an external crate but that's acceptable for now.
+
+// FIXME(inherent_associated_types): Revisit this decision once the implementation is smarter.
+
+// The following program would currently lead to a cycle if IATs were enabled.
+
+struct S(S::P); //~ ERROR ambiguous associated type
+
+impl S { type P = (); } //~ ERROR inherent associated types are unstable
+
+fn main() {}
diff --git a/tests/ui/associated-inherent-types/dont-select-if-disabled.stderr b/tests/ui/associated-inherent-types/dont-select-if-disabled.stderr
new file mode 100644
index 000000000..87a3f35c9
--- /dev/null
+++ b/tests/ui/associated-inherent-types/dont-select-if-disabled.stderr
@@ -0,0 +1,24 @@
+error[E0223]: ambiguous associated type
+ --> $DIR/dont-select-if-disabled.rs:13:10
+ |
+LL | struct S(S::P);
+ | ^^^^
+ |
+help: if there were a trait named `Example` with associated type `P` implemented for `S`, you could use the fully-qualified path
+ |
+LL | struct S(<S as Example>::P);
+ | ~~~~~~~~~~~~~~~~~
+
+error[E0658]: inherent associated types are unstable
+ --> $DIR/dont-select-if-disabled.rs:15:10
+ |
+LL | impl S { type P = (); }
+ | ^^^^^^^^^^^^
+ |
+ = note: see issue #8995 <https://github.com/rust-lang/rust/issues/8995> for more information
+ = help: add `#![feature(inherent_associated_types)]` to the crate attributes to enable
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0223, E0658.
+For more information about an error, try `rustc --explain E0223`.
diff --git a/tests/ui/associated-inherent-types/issue-109071.no_gate.stderr b/tests/ui/associated-inherent-types/issue-109071.no_gate.stderr
new file mode 100644
index 000000000..6f206f2b8
--- /dev/null
+++ b/tests/ui/associated-inherent-types/issue-109071.no_gate.stderr
@@ -0,0 +1,41 @@
+error[E0637]: `&` without an explicit lifetime name cannot be used here
+ --> $DIR/issue-109071.rs:8:17
+ |
+LL | type Item = &[T];
+ | ^ explicit lifetime name needed here
+
+error[E0107]: missing generics for struct `Windows`
+ --> $DIR/issue-109071.rs:7:9
+ |
+LL | impl<T> Windows {
+ | ^^^^^^^ expected 1 generic argument
+ |
+note: struct defined here, with 1 generic parameter: `T`
+ --> $DIR/issue-109071.rs:5:8
+ |
+LL | struct Windows<T> {}
+ | ^^^^^^^ -
+help: add missing generic argument
+ |
+LL | impl<T> Windows<T> {
+ | +++
+
+error[E0658]: inherent associated types are unstable
+ --> $DIR/issue-109071.rs:8:5
+ |
+LL | type Item = &[T];
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #8995 <https://github.com/rust-lang/rust/issues/8995> for more information
+ = help: add `#![feature(inherent_associated_types)]` to the crate attributes to enable
+
+error[E0223]: ambiguous associated type
+ --> $DIR/issue-109071.rs:15:22
+ |
+LL | fn T() -> Option<Self::Item> {}
+ | ^^^^^^^^^^ help: use the fully-qualified path: `<Windows<T> as IntoIterator>::Item`
+
+error: aborting due to 4 previous errors
+
+Some errors have detailed explanations: E0107, E0223, E0637, E0658.
+For more information about an error, try `rustc --explain E0107`.
diff --git a/tests/ui/associated-inherent-types/issue-109071.rs b/tests/ui/associated-inherent-types/issue-109071.rs
new file mode 100644
index 000000000..951c708e3
--- /dev/null
+++ b/tests/ui/associated-inherent-types/issue-109071.rs
@@ -0,0 +1,19 @@
+// revisions: with_gate no_gate
+#![cfg_attr(with_gate, feature(inherent_associated_types))]
+#![cfg_attr(with_gate, allow(incomplete_features))]
+
+struct Windows<T> {}
+
+impl<T> Windows { //~ ERROR: missing generics for struct `Windows`
+ type Item = &[T]; //~ ERROR: `&` without an explicit lifetime name cannot be used here
+ //[no_gate]~^ ERROR: inherent associated types are unstable
+
+ fn next() -> Option<Self::Item> {}
+}
+
+impl<T> Windows<T> {
+ fn T() -> Option<Self::Item> {}
+ //[no_gate]~^ ERROR: ambiguous associated type
+}
+
+fn main() {}
diff --git a/tests/ui/associated-inherent-types/issue-109071.with_gate.stderr b/tests/ui/associated-inherent-types/issue-109071.with_gate.stderr
new file mode 100644
index 000000000..a91bb7a51
--- /dev/null
+++ b/tests/ui/associated-inherent-types/issue-109071.with_gate.stderr
@@ -0,0 +1,26 @@
+error[E0637]: `&` without an explicit lifetime name cannot be used here
+ --> $DIR/issue-109071.rs:8:17
+ |
+LL | type Item = &[T];
+ | ^ explicit lifetime name needed here
+
+error[E0107]: missing generics for struct `Windows`
+ --> $DIR/issue-109071.rs:7:9
+ |
+LL | impl<T> Windows {
+ | ^^^^^^^ expected 1 generic argument
+ |
+note: struct defined here, with 1 generic parameter: `T`
+ --> $DIR/issue-109071.rs:5:8
+ |
+LL | struct Windows<T> {}
+ | ^^^^^^^ -
+help: add missing generic argument
+ |
+LL | impl<T> Windows<T> {
+ | +++
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0107, E0637.
+For more information about an error, try `rustc --explain E0107`.
diff --git a/tests/ui/associated-inherent-types/issue-109789.stderr b/tests/ui/associated-inherent-types/issue-109789.stderr
index 7af338274..84fc85cd0 100644
--- a/tests/ui/associated-inherent-types/issue-109789.stderr
+++ b/tests/ui/associated-inherent-types/issue-109789.stderr
@@ -1,8 +1,8 @@
error[E0308]: mismatched types
- --> $DIR/issue-109789.rs:18:1
+ --> $DIR/issue-109789.rs:18:11
|
LL | fn bar(_: Foo<for<'a> fn(&'a ())>::Assoc) {}
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ one type is more general than the other
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ one type is more general than the other
|
= note: expected struct `Foo<fn(&'static ())>`
found struct `Foo<for<'a> fn(&'a ())>`
diff --git a/tests/ui/associated-inherent-types/issue-111404-0.rs b/tests/ui/associated-inherent-types/issue-111404-0.rs
new file mode 100644
index 000000000..1180577bd
--- /dev/null
+++ b/tests/ui/associated-inherent-types/issue-111404-0.rs
@@ -0,0 +1,14 @@
+// check-pass
+
+#![feature(inherent_associated_types)]
+#![allow(incomplete_features)]
+
+struct Foo<T>(T);
+
+impl<'a> Foo<fn(&'a ())> {
+ type Assoc = &'a ();
+}
+
+fn bar(_: for<'a> fn(Foo<fn(Foo<fn(&'a ())>::Assoc)>::Assoc)) {}
+
+fn main() {}
diff --git a/tests/ui/associated-inherent-types/issue-111404-1.rs b/tests/ui/associated-inherent-types/issue-111404-1.rs
new file mode 100644
index 000000000..f4ad5d7ff
--- /dev/null
+++ b/tests/ui/associated-inherent-types/issue-111404-1.rs
@@ -0,0 +1,13 @@
+#![feature(inherent_associated_types)]
+#![allow(incomplete_features)]
+
+struct Foo<T>(T);
+
+impl<'a> Foo<fn(&'a ())> {
+ type Assoc = &'a ();
+}
+
+fn bar(_: fn(Foo<for<'b> fn(Foo<fn(&'b ())>::Assoc)>::Assoc)) {}
+//~^ ERROR higher-ranked subtype error
+
+fn main() {}
diff --git a/tests/ui/associated-inherent-types/issue-111404-1.stderr b/tests/ui/associated-inherent-types/issue-111404-1.stderr
new file mode 100644
index 000000000..c55f14323
--- /dev/null
+++ b/tests/ui/associated-inherent-types/issue-111404-1.stderr
@@ -0,0 +1,8 @@
+error: higher-ranked subtype error
+ --> $DIR/issue-111404-1.rs:10:1
+ |
+LL | fn bar(_: fn(Foo<for<'b> fn(Foo<fn(&'b ())>::Assoc)>::Assoc)) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/associated-inherent-types/private-in-public.rs b/tests/ui/associated-inherent-types/private-in-public.rs
index a4b372537..e9e189f95 100644
--- a/tests/ui/associated-inherent-types/private-in-public.rs
+++ b/tests/ui/associated-inherent-types/private-in-public.rs
@@ -1,18 +1,26 @@
#![feature(inherent_associated_types)]
+#![feature(type_privacy_lints)]
#![allow(incomplete_features)]
#![crate_type = "lib"]
-
#![deny(private_in_public)]
+#![warn(private_interfaces)]
+
+// In this test both old and new private-in-public diagnostic were emitted.
+// Old diagnostic will be deleted soon.
+// See https://rust-lang.github.io/rfcs/2145-type-privacy.html.
pub type PubAlias0 = PubTy::PrivAssocTy;
//~^ ERROR private associated type `PubTy::PrivAssocTy` in public interface (error E0446)
//~| WARNING this was previously accepted
+//~| WARNING associated type `PubTy::PrivAssocTy` is more private than the item `PubAlias0`
pub type PubAlias1 = PrivTy::PubAssocTy;
//~^ ERROR private type `PrivTy` in public interface (error E0446)
//~| WARNING this was previously accepted
+//~| WARNING type `PrivTy` is more private than the item `PubAlias1`
pub type PubAlias2 = PubTy::PubAssocTy<PrivTy>;
//~^ ERROR private type `PrivTy` in public interface (error E0446)
//~| WARNING this was previously accepted
+//~| WARNING type `PrivTy` is more private than the item `PubAlias2`
pub struct PubTy;
impl PubTy {
diff --git a/tests/ui/associated-inherent-types/private-in-public.stderr b/tests/ui/associated-inherent-types/private-in-public.stderr
index f0a64e961..65d187c1b 100644
--- a/tests/ui/associated-inherent-types/private-in-public.stderr
+++ b/tests/ui/associated-inherent-types/private-in-public.stderr
@@ -1,5 +1,5 @@
error: private associated type `PubTy::PrivAssocTy` in public interface (error E0446)
- --> $DIR/private-in-public.rs:7:1
+ --> $DIR/private-in-public.rs:12:1
|
LL | pub type PubAlias0 = PubTy::PrivAssocTy;
| ^^^^^^^^^^^^^^^^^^
@@ -12,8 +12,25 @@ note: the lint level is defined here
LL | #![deny(private_in_public)]
| ^^^^^^^^^^^^^^^^^
+warning: associated type `PubTy::PrivAssocTy` is more private than the item `PubAlias0`
+ --> $DIR/private-in-public.rs:12:1
+ |
+LL | pub type PubAlias0 = PubTy::PrivAssocTy;
+ | ^^^^^^^^^^^^^^^^^^ type alias `PubAlias0` is reachable at visibility `pub`
+ |
+note: but associated type `PubTy::PrivAssocTy` is only usable at visibility `pub(crate)`
+ --> $DIR/private-in-public.rs:27:5
+ |
+LL | type PrivAssocTy = ();
+ | ^^^^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/private-in-public.rs:6:9
+ |
+LL | #![warn(private_interfaces)]
+ | ^^^^^^^^^^^^^^^^^^
+
error: private type `PrivTy` in public interface (error E0446)
- --> $DIR/private-in-public.rs:10:1
+ --> $DIR/private-in-public.rs:16:1
|
LL | pub type PubAlias1 = PrivTy::PubAssocTy;
| ^^^^^^^^^^^^^^^^^^
@@ -21,8 +38,20 @@ LL | pub type PubAlias1 = PrivTy::PubAssocTy;
= 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 #34537 <https://github.com/rust-lang/rust/issues/34537>
+warning: type `PrivTy` is more private than the item `PubAlias1`
+ --> $DIR/private-in-public.rs:16:1
+ |
+LL | pub type PubAlias1 = PrivTy::PubAssocTy;
+ | ^^^^^^^^^^^^^^^^^^ type alias `PubAlias1` is reachable at visibility `pub`
+ |
+note: but type `PrivTy` is only usable at visibility `pub(crate)`
+ --> $DIR/private-in-public.rs:31:1
+ |
+LL | struct PrivTy;
+ | ^^^^^^^^^^^^^
+
error: private type `PrivTy` in public interface (error E0446)
- --> $DIR/private-in-public.rs:13:1
+ --> $DIR/private-in-public.rs:20:1
|
LL | pub type PubAlias2 = PubTy::PubAssocTy<PrivTy>;
| ^^^^^^^^^^^^^^^^^^
@@ -30,5 +59,17 @@ LL | pub type PubAlias2 = PubTy::PubAssocTy<PrivTy>;
= 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 #34537 <https://github.com/rust-lang/rust/issues/34537>
-error: aborting due to 3 previous errors
+warning: type `PrivTy` is more private than the item `PubAlias2`
+ --> $DIR/private-in-public.rs:20:1
+ |
+LL | pub type PubAlias2 = PubTy::PubAssocTy<PrivTy>;
+ | ^^^^^^^^^^^^^^^^^^ type alias `PubAlias2` is reachable at visibility `pub`
+ |
+note: but type `PrivTy` is only usable at visibility `pub(crate)`
+ --> $DIR/private-in-public.rs:31:1
+ |
+LL | struct PrivTy;
+ | ^^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors; 3 warnings emitted
diff --git a/tests/ui/associated-type-bounds/dyn-impl-trait-type.rs b/tests/ui/associated-type-bounds/dyn-impl-trait-type.rs
index a8d00803a..a3f471779 100644
--- a/tests/ui/associated-type-bounds/dyn-impl-trait-type.rs
+++ b/tests/ui/associated-type-bounds/dyn-impl-trait-type.rs
@@ -59,8 +59,8 @@ fn def_et4() -> Et4 {
pub fn use_et4() { assert_forall_tr2(def_et4().mk()); }
fn main() {
- let _ = use_et1();
- let _ = use_et2();
- let _ = use_et3();
- let _ = use_et4();
+ use_et1();
+ use_et2();
+ use_et3();
+ use_et4();
}
diff --git a/tests/ui/associated-type-bounds/dyn-rpit-and-let.rs b/tests/ui/associated-type-bounds/dyn-rpit-and-let.rs
index 08f965452..52199124e 100644
--- a/tests/ui/associated-type-bounds/dyn-rpit-and-let.rs
+++ b/tests/ui/associated-type-bounds/dyn-rpit-and-let.rs
@@ -66,8 +66,8 @@ fn def_et4() -> Box<dyn Tr1<As1: for<'a> Tr2<'a>>> {
pub fn use_et4() { assert_forall_tr2(def_et4().mk()); }
fn main() {
- let _ = use_et1();
- let _ = use_et2();
- let _ = use_et3();
- let _ = use_et4();
+ use_et1();
+ use_et2();
+ use_et3();
+ use_et4();
}
diff --git a/tests/ui/associated-type-bounds/implied-in-supertrait.rs b/tests/ui/associated-type-bounds/implied-in-supertrait.rs
new file mode 100644
index 000000000..ea7e7c984
--- /dev/null
+++ b/tests/ui/associated-type-bounds/implied-in-supertrait.rs
@@ -0,0 +1,19 @@
+// check-pass
+
+#![feature(associated_type_bounds)]
+
+trait Trait: Super<Assoc: Bound> {}
+
+trait Super {
+ type Assoc;
+}
+
+trait Bound {}
+
+fn foo<T>(x: T)
+where
+ T: Trait,
+{
+}
+
+fn main() {}
diff --git a/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.stderr b/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.current.stderr
index 95ef7d82f..b8be132e6 100644
--- a/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.stderr
+++ b/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.current.stderr
@@ -1,11 +1,11 @@
error: return type notation uses `()` instead of `(..)` for elided arguments
- --> $DIR/bad-inputs-and-output.rs:18:24
+ --> $DIR/bad-inputs-and-output.rs:20:24
|
LL | fn baz<T: Trait<method(..): Send>>() {}
| ^^ help: remove the `..`
error[E0658]: associated type bounds are unstable
- --> $DIR/bad-inputs-and-output.rs:10:17
+ --> $DIR/bad-inputs-and-output.rs:12:17
|
LL | fn foo<T: Trait<method(i32): Send>>() {}
| ^^^^^^^^^^^^^^^^^
@@ -14,7 +14,7 @@ LL | fn foo<T: Trait<method(i32): Send>>() {}
= help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable
error[E0658]: associated type bounds are unstable
- --> $DIR/bad-inputs-and-output.rs:14:17
+ --> $DIR/bad-inputs-and-output.rs:16:17
|
LL | fn bar<T: Trait<method() -> (): Send>>() {}
| ^^^^^^^^^^^^^^^^^^^^
@@ -23,7 +23,7 @@ LL | fn bar<T: Trait<method() -> (): Send>>() {}
= help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable
warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
- --> $DIR/bad-inputs-and-output.rs:3:12
+ --> $DIR/bad-inputs-and-output.rs:5:12
|
LL | #![feature(return_type_notation, async_fn_in_trait)]
| ^^^^^^^^^^^^^^^^^^^^
@@ -32,13 +32,13 @@ LL | #![feature(return_type_notation, async_fn_in_trait)]
= note: `#[warn(incomplete_features)]` on by default
error: argument types not allowed with return type notation
- --> $DIR/bad-inputs-and-output.rs:10:23
+ --> $DIR/bad-inputs-and-output.rs:12:23
|
LL | fn foo<T: Trait<method(i32): Send>>() {}
| ^^^^^ help: remove the input types: `()`
error: return type not allowed with return type notation
- --> $DIR/bad-inputs-and-output.rs:14:25
+ --> $DIR/bad-inputs-and-output.rs:16:25
|
LL | fn bar<T: Trait<method() -> (): Send>>() {}
| ^^^^^^ help: remove the return type
diff --git a/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.next.stderr b/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.next.stderr
new file mode 100644
index 000000000..b8be132e6
--- /dev/null
+++ b/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.next.stderr
@@ -0,0 +1,48 @@
+error: return type notation uses `()` instead of `(..)` for elided arguments
+ --> $DIR/bad-inputs-and-output.rs:20:24
+ |
+LL | fn baz<T: Trait<method(..): Send>>() {}
+ | ^^ help: remove the `..`
+
+error[E0658]: associated type bounds are unstable
+ --> $DIR/bad-inputs-and-output.rs:12:17
+ |
+LL | fn foo<T: Trait<method(i32): Send>>() {}
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #52662 <https://github.com/rust-lang/rust/issues/52662> for more information
+ = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable
+
+error[E0658]: associated type bounds are unstable
+ --> $DIR/bad-inputs-and-output.rs:16:17
+ |
+LL | fn bar<T: Trait<method() -> (): Send>>() {}
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #52662 <https://github.com/rust-lang/rust/issues/52662> for more information
+ = help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable
+
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/bad-inputs-and-output.rs:5:12
+ |
+LL | #![feature(return_type_notation, async_fn_in_trait)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error: argument types not allowed with return type notation
+ --> $DIR/bad-inputs-and-output.rs:12:23
+ |
+LL | fn foo<T: Trait<method(i32): Send>>() {}
+ | ^^^^^ help: remove the input types: `()`
+
+error: return type not allowed with return type notation
+ --> $DIR/bad-inputs-and-output.rs:16:25
+ |
+LL | fn bar<T: Trait<method() -> (): Send>>() {}
+ | ^^^^^^ help: remove the return type
+
+error: aborting due to 5 previous errors; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.rs b/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.rs
index 58ce41d1a..771acb6c4 100644
--- a/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.rs
+++ b/tests/ui/associated-type-bounds/return-type-notation/bad-inputs-and-output.rs
@@ -1,4 +1,6 @@
// edition: 2021
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
#![feature(return_type_notation, async_fn_in_trait)]
//~^ WARN the feature `return_type_notation` is incomplete
diff --git a/tests/ui/associated-type-bounds/return-type-notation/basic.current_with.stderr b/tests/ui/associated-type-bounds/return-type-notation/basic.current_with.stderr
new file mode 100644
index 000000000..98c1a2827
--- /dev/null
+++ b/tests/ui/associated-type-bounds/return-type-notation/basic.current_with.stderr
@@ -0,0 +1,11 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/basic.rs:8:12
+ |
+LL | #![feature(return_type_notation, async_fn_in_trait)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/associated-type-bounds/return-type-notation/basic.current_without.stderr b/tests/ui/associated-type-bounds/return-type-notation/basic.current_without.stderr
new file mode 100644
index 000000000..1066c420c
--- /dev/null
+++ b/tests/ui/associated-type-bounds/return-type-notation/basic.current_without.stderr
@@ -0,0 +1,29 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/basic.rs:8:12
+ |
+LL | #![feature(return_type_notation, async_fn_in_trait)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error: future cannot be sent between threads safely
+ --> $DIR/basic.rs:26:13
+ |
+LL | is_send(foo::<T>());
+ | ^^^^^^^^^^ future returned by `foo` is not `Send`
+ |
+ = help: within `impl Future<Output = Result<(), ()>>`, the trait `Send` is not implemented for `impl Future<Output = Result<(), ()>>`
+note: future is not `Send` as it awaits another future which is not `Send`
+ --> $DIR/basic.rs:16:5
+ |
+LL | T::method().await?;
+ | ^^^^^^^^^^^ await occurs here on type `impl Future<Output = Result<(), ()>>`, which is not `Send`
+note: required by a bound in `is_send`
+ --> $DIR/basic.rs:20:20
+ |
+LL | fn is_send(_: impl Send) {}
+ | ^^^^ required by this bound in `is_send`
+
+error: aborting due to previous error; 1 warning emitted
+
diff --git a/tests/ui/associated-type-bounds/return-type-notation/basic.next_with.stderr b/tests/ui/associated-type-bounds/return-type-notation/basic.next_with.stderr
new file mode 100644
index 000000000..98c1a2827
--- /dev/null
+++ b/tests/ui/associated-type-bounds/return-type-notation/basic.next_with.stderr
@@ -0,0 +1,11 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/basic.rs:8:12
+ |
+LL | #![feature(return_type_notation, async_fn_in_trait)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/associated-type-bounds/return-type-notation/basic.next_without.stderr b/tests/ui/associated-type-bounds/return-type-notation/basic.next_without.stderr
new file mode 100644
index 000000000..1066c420c
--- /dev/null
+++ b/tests/ui/associated-type-bounds/return-type-notation/basic.next_without.stderr
@@ -0,0 +1,29 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/basic.rs:8:12
+ |
+LL | #![feature(return_type_notation, async_fn_in_trait)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error: future cannot be sent between threads safely
+ --> $DIR/basic.rs:26:13
+ |
+LL | is_send(foo::<T>());
+ | ^^^^^^^^^^ future returned by `foo` is not `Send`
+ |
+ = help: within `impl Future<Output = Result<(), ()>>`, the trait `Send` is not implemented for `impl Future<Output = Result<(), ()>>`
+note: future is not `Send` as it awaits another future which is not `Send`
+ --> $DIR/basic.rs:16:5
+ |
+LL | T::method().await?;
+ | ^^^^^^^^^^^ await occurs here on type `impl Future<Output = Result<(), ()>>`, which is not `Send`
+note: required by a bound in `is_send`
+ --> $DIR/basic.rs:20:20
+ |
+LL | fn is_send(_: impl Send) {}
+ | ^^^^ required by this bound in `is_send`
+
+error: aborting due to previous error; 1 warning emitted
+
diff --git a/tests/ui/associated-type-bounds/return-type-notation/basic.rs b/tests/ui/associated-type-bounds/return-type-notation/basic.rs
index edc6a8e4c..d443c9dc1 100644
--- a/tests/ui/associated-type-bounds/return-type-notation/basic.rs
+++ b/tests/ui/associated-type-bounds/return-type-notation/basic.rs
@@ -1,6 +1,9 @@
-// revisions: with without
+// revisions: current_with current_without next_with next_without
+// [next_with] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// [next_without] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
// edition: 2021
-//[with] check-pass
+// [current_with] check-pass
+// [next_with] check-pass
#![feature(return_type_notation, async_fn_in_trait)]
//~^ WARN the feature `return_type_notation` is incomplete
@@ -17,11 +20,12 @@ async fn foo<T: Foo>() -> Result<(), ()> {
fn is_send(_: impl Send) {}
fn test<
- #[cfg(with)] T: Foo<method(): Send>,
- #[cfg(without)] T: Foo,
+ #[cfg(any(current_with, next_with))] T: Foo<method(): Send>,
+ #[cfg(any(current_without, next_without))] T: Foo,
>() {
is_send(foo::<T>());
- //[without]~^ ERROR future cannot be sent between threads safely
+ //[current_without]~^ ERROR future cannot be sent between threads safely
+ //[next_without]~^^ ERROR future cannot be sent between threads safely
}
fn main() {}
diff --git a/tests/ui/associated-type-bounds/return-type-notation/equality.stderr b/tests/ui/associated-type-bounds/return-type-notation/equality.current.stderr
index 490bfdc4c..b631dd0eb 100644
--- a/tests/ui/associated-type-bounds/return-type-notation/equality.stderr
+++ b/tests/ui/associated-type-bounds/return-type-notation/equality.current.stderr
@@ -1,5 +1,5 @@
warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
- --> $DIR/equality.rs:3:12
+ --> $DIR/equality.rs:5:12
|
LL | #![feature(return_type_notation, async_fn_in_trait)]
| ^^^^^^^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | #![feature(return_type_notation, async_fn_in_trait)]
= note: `#[warn(incomplete_features)]` on by default
error: return type notation is not allowed to use type equality
- --> $DIR/equality.rs:12:18
+ --> $DIR/equality.rs:14:18
|
LL | fn test<T: Trait<method() = Box<dyn Future<Output = ()>>>>() {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/associated-type-bounds/return-type-notation/equality.next.stderr b/tests/ui/associated-type-bounds/return-type-notation/equality.next.stderr
new file mode 100644
index 000000000..b631dd0eb
--- /dev/null
+++ b/tests/ui/associated-type-bounds/return-type-notation/equality.next.stderr
@@ -0,0 +1,17 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/equality.rs:5:12
+ |
+LL | #![feature(return_type_notation, async_fn_in_trait)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error: return type notation is not allowed to use type equality
+ --> $DIR/equality.rs:14:18
+ |
+LL | fn test<T: Trait<method() = Box<dyn Future<Output = ()>>>>() {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error; 1 warning emitted
+
diff --git a/tests/ui/associated-type-bounds/return-type-notation/equality.rs b/tests/ui/associated-type-bounds/return-type-notation/equality.rs
index 6884305d7..0d6545cc2 100644
--- a/tests/ui/associated-type-bounds/return-type-notation/equality.rs
+++ b/tests/ui/associated-type-bounds/return-type-notation/equality.rs
@@ -1,4 +1,6 @@
// edition: 2021
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
#![feature(return_type_notation, async_fn_in_trait)]
//~^ WARN the feature `return_type_notation` is incomplete
diff --git a/tests/ui/associated-type-bounds/rpit.rs b/tests/ui/associated-type-bounds/rpit.rs
index 47cadf331..59c7733fb 100644
--- a/tests/ui/associated-type-bounds/rpit.rs
+++ b/tests/ui/associated-type-bounds/rpit.rs
@@ -57,8 +57,8 @@ fn def_et4() -> impl Tr1<As1: for<'a> Tr2<'a>> {
pub fn use_et4() { assert_forall_tr2(def_et4().mk()); }
fn main() {
- let _ = use_et1();
- let _ = use_et2();
- let _ = use_et3();
- let _ = use_et4();
+ use_et1();
+ use_et2();
+ use_et3();
+ use_et4();
}
diff --git a/tests/ui/associated-type-bounds/trait-alias-impl-trait.rs b/tests/ui/associated-type-bounds/trait-alias-impl-trait.rs
index e223a8957..93a44c01c 100644
--- a/tests/ui/associated-type-bounds/trait-alias-impl-trait.rs
+++ b/tests/ui/associated-type-bounds/trait-alias-impl-trait.rs
@@ -89,8 +89,8 @@ pub fn use_et4() {
}
fn main() {
- let _ = use_et1();
- let _ = use_et2();
- let _ = use_et3();
- let _ = use_et4();
+ use_et1();
+ use_et2();
+ use_et3();
+ use_et4();
}
diff --git a/tests/ui/associated-types/dont-suggest-cyclic-constraint.rs b/tests/ui/associated-types/dont-suggest-cyclic-constraint.rs
new file mode 100644
index 000000000..6894f6b6c
--- /dev/null
+++ b/tests/ui/associated-types/dont-suggest-cyclic-constraint.rs
@@ -0,0 +1,11 @@
+use std::fmt::Debug;
+
+fn foo<I: Iterator>(mut iter: I, value: &I::Item)
+where
+ I::Item: Eq + Debug,
+{
+ debug_assert_eq!(iter.next(), Some(value));
+ //~^ ERROR mismatched types
+}
+
+fn main() {}
diff --git a/tests/ui/associated-types/dont-suggest-cyclic-constraint.stderr b/tests/ui/associated-types/dont-suggest-cyclic-constraint.stderr
new file mode 100644
index 000000000..3ecac9c83
--- /dev/null
+++ b/tests/ui/associated-types/dont-suggest-cyclic-constraint.stderr
@@ -0,0 +1,12 @@
+error[E0308]: mismatched types
+ --> $DIR/dont-suggest-cyclic-constraint.rs:7:35
+ |
+LL | debug_assert_eq!(iter.next(), Some(value));
+ | ^^^^^^^^^^^ expected `Option<<I as Iterator>::Item>`, found `Option<&<I as Iterator>::Item>`
+ |
+ = note: expected enum `Option<<I as Iterator>::Item>`
+ found enum `Option<&<I as Iterator>::Item>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/associated-types/normalization-debruijn-3.rs b/tests/ui/associated-types/normalization-debruijn-3.rs
index 2bea78cf7..bd9a8fcf4 100644
--- a/tests/ui/associated-types/normalization-debruijn-3.rs
+++ b/tests/ui/associated-types/normalization-debruijn-3.rs
@@ -6,10 +6,10 @@
use std::future::{Future, Ready};
async fn read() {
- let _ = connect(&()).await;
+ connect(&()).await;
}
async fn connect<A: ToSocketAddr>(addr: A) {
- let _ = addr.to_socket_addr().await;
+ addr.to_socket_addr().await;
}
pub trait ToSocketAddr {
type Future: Future<Output = ()>;
diff --git a/tests/ui/async-await/deep-futures-are-freeze.rs b/tests/ui/async-await/deep-futures-are-freeze.rs
new file mode 100644
index 000000000..dd676d5e1
--- /dev/null
+++ b/tests/ui/async-await/deep-futures-are-freeze.rs
@@ -0,0 +1,179 @@
+// build-pass
+// compile-flags: -Copt-level=s -Clto=fat
+// no-prefer-dynamic
+// edition: 2021
+
+#![recursion_limit = "256"]
+
+fn main() {
+ spawn(move || main0())
+}
+
+fn spawn<F>(future: impl FnOnce() -> F) {
+ future();
+}
+
+async fn main0() {
+ main1().await;
+ main2().await;
+}
+async fn main1() {
+ main2().await;
+ main3().await;
+}
+async fn main2() {
+ main3().await;
+ main4().await;
+}
+async fn main3() {
+ main4().await;
+ main5().await;
+}
+async fn main4() {
+ main5().await;
+ main6().await;
+}
+async fn main5() {
+ main6().await;
+ main7().await;
+}
+async fn main6() {
+ main7().await;
+ main8().await;
+}
+async fn main7() {
+ main8().await;
+ main9().await;
+}
+async fn main8() {
+ main9().await;
+ main10().await;
+}
+async fn main9() {
+ main10().await;
+ main11().await;
+}
+async fn main10() {
+ main11().await;
+ main12().await;
+}
+async fn main11() {
+ main12().await;
+ main13().await;
+}
+async fn main12() {
+ main13().await;
+ main14().await;
+}
+async fn main13() {
+ main14().await;
+ main15().await;
+}
+async fn main14() {
+ main15().await;
+ main16().await;
+}
+async fn main15() {
+ main16().await;
+ main17().await;
+}
+async fn main16() {
+ main17().await;
+ main18().await;
+}
+async fn main17() {
+ main18().await;
+ main19().await;
+}
+async fn main18() {
+ main19().await;
+ main20().await;
+}
+async fn main19() {
+ main20().await;
+ main21().await;
+}
+async fn main20() {
+ main21().await;
+ main22().await;
+}
+async fn main21() {
+ main22().await;
+ main23().await;
+}
+async fn main22() {
+ main23().await;
+ main24().await;
+}
+async fn main23() {
+ main24().await;
+ main25().await;
+}
+async fn main24() {
+ main25().await;
+ main26().await;
+}
+async fn main25() {
+ main26().await;
+ main27().await;
+}
+async fn main26() {
+ main27().await;
+ main28().await;
+}
+async fn main27() {
+ main28().await;
+ main29().await;
+}
+async fn main28() {
+ main29().await;
+ main30().await;
+}
+async fn main29() {
+ main30().await;
+ main31().await;
+}
+async fn main30() {
+ main31().await;
+ main32().await;
+}
+async fn main31() {
+ main32().await;
+ main33().await;
+}
+async fn main32() {
+ main33().await;
+ main34().await;
+}
+async fn main33() {
+ main34().await;
+ main35().await;
+}
+async fn main34() {
+ main35().await;
+ main36().await;
+}
+async fn main35() {
+ main36().await;
+ main37().await;
+}
+async fn main36() {
+ main37().await;
+ main38().await;
+}
+async fn main37() {
+ main38().await;
+ main39().await;
+}
+async fn main38() {
+ main39().await;
+ main40().await;
+}
+async fn main39() {
+ main40().await;
+}
+async fn main40() {
+ boom(&mut ()).await;
+}
+
+async fn boom(f: &mut ()) {}
diff --git a/tests/ui/async-await/drop-track-bad-field-in-fru.stderr b/tests/ui/async-await/drop-track-bad-field-in-fru.stderr
index 07ab8b3c9..b49b15db6 100644
--- a/tests/ui/async-await/drop-track-bad-field-in-fru.stderr
+++ b/tests/ui/async-await/drop-track-bad-field-in-fru.stderr
@@ -3,6 +3,8 @@ error[E0559]: variant `Option<_>::None` has no field named `value`
|
LL | None { value: (), ..Default::default() }.await;
| ^^^^^ `Option<_>::None` does not have this field
+ |
+ = note: all struct fields are already assigned
error[E0277]: `Option<_>` is not a future
--> $DIR/drop-track-bad-field-in-fru.rs:7:46
diff --git a/tests/ui/async-await/drop-track-field-assign.rs b/tests/ui/async-await/drop-track-field-assign.rs
index dd0e3f11c..b79d2af06 100644
--- a/tests/ui/async-await/drop-track-field-assign.rs
+++ b/tests/ui/async-await/drop-track-field-assign.rs
@@ -21,7 +21,7 @@ impl Agent {
let mut info = self.info_result.clone();
info.node = Some("bar".into());
let element = parse_info(info);
- let _ = send_element(element).await;
+ send_element(element).await;
}
}
diff --git a/tests/ui/async-await/field-assign.rs b/tests/ui/async-await/field-assign.rs
index dd0e3f11c..b79d2af06 100644
--- a/tests/ui/async-await/field-assign.rs
+++ b/tests/ui/async-await/field-assign.rs
@@ -21,7 +21,7 @@ impl Agent {
let mut info = self.info_result.clone();
info.node = Some("bar".into());
let element = parse_info(info);
- let _ = send_element(element).await;
+ send_element(element).await;
}
}
diff --git a/tests/ui/async-await/in-trait/async-associated-types2.rs b/tests/ui/async-await/in-trait/async-associated-types2.rs
deleted file mode 100644
index b889f616a..000000000
--- a/tests/ui/async-await/in-trait/async-associated-types2.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// check-pass
-// edition: 2021
-// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
-// revisions: current next
-
-#![feature(async_fn_in_trait)]
-#![feature(impl_trait_in_assoc_type)]
-#![allow(incomplete_features)]
-
-use std::future::Future;
-
-trait MyTrait {
- type Fut<'a>: Future<Output = i32>
- where
- Self: 'a;
-
- fn foo<'a>(&'a self) -> Self::Fut<'a>;
-}
-
-impl MyTrait for i32 {
- type Fut<'a> = impl Future<Output = i32> + 'a
- where
- Self: 'a;
-
- fn foo<'a>(&'a self) -> Self::Fut<'a> {
- async { *self }
- }
-}
-
-fn main() {}
diff --git a/tests/ui/async-await/in-trait/async-lifetimes-and-bounds.rs b/tests/ui/async-await/in-trait/async-lifetimes-and-bounds.rs
index d5481d277..9869a8d71 100644
--- a/tests/ui/async-await/in-trait/async-lifetimes-and-bounds.rs
+++ b/tests/ui/async-await/in-trait/async-lifetimes-and-bounds.rs
@@ -1,5 +1,7 @@
// check-pass
// edition: 2021
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
#![feature(async_fn_in_trait)]
#![allow(incomplete_features)]
diff --git a/tests/ui/async-await/in-trait/async-lifetimes.rs b/tests/ui/async-await/in-trait/async-lifetimes.rs
index f298e45d2..ecbd1910a 100644
--- a/tests/ui/async-await/in-trait/async-lifetimes.rs
+++ b/tests/ui/async-await/in-trait/async-lifetimes.rs
@@ -1,5 +1,7 @@
// check-pass
// edition: 2021
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
#![feature(async_fn_in_trait)]
#![allow(incomplete_features)]
diff --git a/tests/ui/async-await/in-trait/missing-feature-flag.current.stderr b/tests/ui/async-await/in-trait/missing-feature-flag.current.stderr
new file mode 100644
index 000000000..e6ac9bc22
--- /dev/null
+++ b/tests/ui/async-await/in-trait/missing-feature-flag.current.stderr
@@ -0,0 +1,30 @@
+error[E0046]: not all trait items implemented, missing: `foo`
+ --> $DIR/missing-feature-flag.rs:14:1
+ |
+LL | async fn foo(_: T) -> &'static str;
+ | ----------------------------------- `foo` from trait
+...
+LL | impl<T> MyTrait<T> for MyStruct {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `foo` in implementation
+
+error[E0520]: `foo` specializes an item from a parent `impl`, but that item is not marked `default`
+ --> $DIR/missing-feature-flag.rs:18:5
+ |
+LL | impl<T> MyTrait<T> for MyStruct {}
+ | ------------------------------- parent `impl` is here
+...
+LL | async fn foo(_: i32) -> &'static str {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot specialize default item `foo`
+ |
+ = note: to specialize, `foo` in the parent `impl` must be marked `default`
+
+error[E0308]: mismatched types
+ --> $DIR/missing-feature-flag.rs:18:42
+ |
+LL | async fn foo(_: i32) -> &'static str {}
+ | ^^ expected `&str`, found `()`
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0046, E0308, E0520.
+For more information about an error, try `rustc --explain E0046`.
diff --git a/tests/ui/async-await/in-trait/missing-feature-flag.next.stderr b/tests/ui/async-await/in-trait/missing-feature-flag.next.stderr
new file mode 100644
index 000000000..e6ac9bc22
--- /dev/null
+++ b/tests/ui/async-await/in-trait/missing-feature-flag.next.stderr
@@ -0,0 +1,30 @@
+error[E0046]: not all trait items implemented, missing: `foo`
+ --> $DIR/missing-feature-flag.rs:14:1
+ |
+LL | async fn foo(_: T) -> &'static str;
+ | ----------------------------------- `foo` from trait
+...
+LL | impl<T> MyTrait<T> for MyStruct {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `foo` in implementation
+
+error[E0520]: `foo` specializes an item from a parent `impl`, but that item is not marked `default`
+ --> $DIR/missing-feature-flag.rs:18:5
+ |
+LL | impl<T> MyTrait<T> for MyStruct {}
+ | ------------------------------- parent `impl` is here
+...
+LL | async fn foo(_: i32) -> &'static str {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot specialize default item `foo`
+ |
+ = note: to specialize, `foo` in the parent `impl` must be marked `default`
+
+error[E0308]: mismatched types
+ --> $DIR/missing-feature-flag.rs:18:42
+ |
+LL | async fn foo(_: i32) -> &'static str {}
+ | ^^ expected `&str`, found `()`
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0046, E0308, E0520.
+For more information about an error, try `rustc --explain E0046`.
diff --git a/tests/ui/async-await/in-trait/missing-feature-flag.rs b/tests/ui/async-await/in-trait/missing-feature-flag.rs
new file mode 100644
index 000000000..6481f4a70
--- /dev/null
+++ b/tests/ui/async-await/in-trait/missing-feature-flag.rs
@@ -0,0 +1,23 @@
+// edition:2018
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
+
+#![feature(async_fn_in_trait)]
+#![feature(min_specialization)]
+
+struct MyStruct;
+
+trait MyTrait<T> {
+ async fn foo(_: T) -> &'static str;
+}
+
+impl<T> MyTrait<T> for MyStruct {}
+//~^ ERROR: not all trait items implemented, missing: `foo` [E0046]
+
+impl MyTrait<i32> for MyStruct {
+ async fn foo(_: i32) -> &'static str {}
+ //~^ ERROR: `foo` specializes an item from a parent `impl`, but that item is not marked `default` [E0520]
+ //~| ERROR: mismatched types [E0308]
+}
+
+fn main() {}
diff --git a/tests/ui/async-await/in-trait/normalize-opaque-with-bound-vars.rs b/tests/ui/async-await/in-trait/normalize-opaque-with-bound-vars.rs
new file mode 100644
index 000000000..c4008f2b7
--- /dev/null
+++ b/tests/ui/async-await/in-trait/normalize-opaque-with-bound-vars.rs
@@ -0,0 +1,64 @@
+// build-pass
+// edition:2021
+// compile-flags: -Cdebuginfo=2
+
+// We were not normalizing opaques with escaping bound vars during codegen,
+// leading to later errors during debuginfo computation.
+
+#![feature(async_fn_in_trait)]
+
+#[derive(Clone, Copy)]
+pub struct SharedState {}
+
+pub trait State {
+ async fn execute(self, shared_state: &SharedState);
+}
+
+pub trait StateComposer {
+ fn and_then<T, F>(self, map_fn: F) -> AndThen<Self, F>
+ where
+ Self: State + Sized,
+ T: State,
+ F: FnOnce() -> T,
+ {
+ AndThen { previous: self, map_fn }
+ }
+}
+
+impl<T> StateComposer for T where T: State {}
+pub struct AndThen<T, F> {
+ previous: T,
+ map_fn: F,
+}
+
+impl<T, U, F> State for AndThen<T, F>
+where
+ T: State,
+ U: State,
+ F: FnOnce() -> U,
+{
+ async fn execute(self, shared_state: &SharedState)
+ where
+ Self: Sized,
+ {
+ self.previous.execute(shared_state).await;
+ (self.map_fn)().execute(shared_state).await
+ }
+}
+
+pub struct SomeState {}
+
+impl State for SomeState {
+ async fn execute(self, shared_state: &SharedState) {}
+}
+
+pub fn main() {
+ let shared_state = SharedState {};
+ async {
+ SomeState {}
+ .and_then(|| SomeState {})
+ .and_then(|| SomeState {})
+ .execute(&shared_state)
+ .await;
+ };
+}
diff --git a/tests/ui/async-await/in-trait/return-not-existing-pair.current.stderr b/tests/ui/async-await/in-trait/return-not-existing-pair.current.stderr
new file mode 100644
index 000000000..56973a1d1
--- /dev/null
+++ b/tests/ui/async-await/in-trait/return-not-existing-pair.current.stderr
@@ -0,0 +1,39 @@
+error[E0726]: implicit elided lifetime not allowed here
+ --> $DIR/return-not-existing-pair.rs:12:20
+ |
+LL | impl<'a, 'b, T, U> MyTrait<T> for U {
+ | ^^^^^^^^^^ expected lifetime parameters
+ |
+help: indicate the anonymous lifetimes
+ |
+LL | impl<'a, 'b, T, U> MyTrait<'_, '_, T> for U {
+ | +++++++
+
+error[E0412]: cannot find type `ConnImpl` in this scope
+ --> $DIR/return-not-existing-pair.rs:8:48
+ |
+LL | async fn foo(&'a self, key: &'b T) -> (&'a ConnImpl, &'b T);
+ | ^^^^^^^^ not found in this scope
+
+error[E0186]: method `foo` has a `&self` declaration in the trait, but not in the impl
+ --> $DIR/return-not-existing-pair.rs:14:5
+ |
+LL | async fn foo(&'a self, key: &'b T) -> (&'a ConnImpl, &'b T);
+ | ------------------------------------------------------------ `&self` used in trait
+...
+LL | async fn foo(_: T) -> (&'a U, &'b T) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `&self` in impl
+
+error[E0308]: mismatched types
+ --> $DIR/return-not-existing-pair.rs:14:42
+ |
+LL | async fn foo(_: T) -> (&'a U, &'b T) {}
+ | ^^ expected `(&U, &T)`, found `()`
+ |
+ = note: expected tuple `(&'a U, &'b T)`
+ found unit type `()`
+
+error: aborting due to 4 previous errors
+
+Some errors have detailed explanations: E0186, E0308, E0412, E0726.
+For more information about an error, try `rustc --explain E0186`.
diff --git a/tests/ui/async-await/in-trait/return-not-existing-pair.next.stderr b/tests/ui/async-await/in-trait/return-not-existing-pair.next.stderr
new file mode 100644
index 000000000..56973a1d1
--- /dev/null
+++ b/tests/ui/async-await/in-trait/return-not-existing-pair.next.stderr
@@ -0,0 +1,39 @@
+error[E0726]: implicit elided lifetime not allowed here
+ --> $DIR/return-not-existing-pair.rs:12:20
+ |
+LL | impl<'a, 'b, T, U> MyTrait<T> for U {
+ | ^^^^^^^^^^ expected lifetime parameters
+ |
+help: indicate the anonymous lifetimes
+ |
+LL | impl<'a, 'b, T, U> MyTrait<'_, '_, T> for U {
+ | +++++++
+
+error[E0412]: cannot find type `ConnImpl` in this scope
+ --> $DIR/return-not-existing-pair.rs:8:48
+ |
+LL | async fn foo(&'a self, key: &'b T) -> (&'a ConnImpl, &'b T);
+ | ^^^^^^^^ not found in this scope
+
+error[E0186]: method `foo` has a `&self` declaration in the trait, but not in the impl
+ --> $DIR/return-not-existing-pair.rs:14:5
+ |
+LL | async fn foo(&'a self, key: &'b T) -> (&'a ConnImpl, &'b T);
+ | ------------------------------------------------------------ `&self` used in trait
+...
+LL | async fn foo(_: T) -> (&'a U, &'b T) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `&self` in impl
+
+error[E0308]: mismatched types
+ --> $DIR/return-not-existing-pair.rs:14:42
+ |
+LL | async fn foo(_: T) -> (&'a U, &'b T) {}
+ | ^^ expected `(&U, &T)`, found `()`
+ |
+ = note: expected tuple `(&'a U, &'b T)`
+ found unit type `()`
+
+error: aborting due to 4 previous errors
+
+Some errors have detailed explanations: E0186, E0308, E0412, E0726.
+For more information about an error, try `rustc --explain E0186`.
diff --git a/tests/ui/async-await/in-trait/return-not-existing-pair.rs b/tests/ui/async-await/in-trait/return-not-existing-pair.rs
new file mode 100644
index 000000000..d1b3832d1
--- /dev/null
+++ b/tests/ui/async-await/in-trait/return-not-existing-pair.rs
@@ -0,0 +1,19 @@
+// edition:2021
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
+
+#![feature(async_fn_in_trait)]
+
+trait MyTrait<'a, 'b, T> {
+ async fn foo(&'a self, key: &'b T) -> (&'a ConnImpl, &'b T);
+ //~^ ERROR: cannot find type `ConnImpl` in this scope [E0412]
+}
+
+impl<'a, 'b, T, U> MyTrait<T> for U {
+ //~^ ERROR: implicit elided lifetime not allowed here [E0726]
+ async fn foo(_: T) -> (&'a U, &'b T) {}
+ //~^ ERROR: method `foo` has a `&self` declaration in the trait, but not in the impl [E0186]
+ //~| ERROR: mismatched types [E0308]
+}
+
+fn main() {}
diff --git a/tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.current.stderr b/tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.current.stderr
new file mode 100644
index 000000000..2564d68d5
--- /dev/null
+++ b/tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.current.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `Missing` in this scope
+ --> $DIR/return-not-existing-type-wrapping-rpitit.rs:10:25
+ |
+LL | fn bar() -> Wrapper<Missing<impl Sized>>;
+ | ^^^^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.next.stderr b/tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.next.stderr
new file mode 100644
index 000000000..2564d68d5
--- /dev/null
+++ b/tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.next.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `Missing` in this scope
+ --> $DIR/return-not-existing-type-wrapping-rpitit.rs:10:25
+ |
+LL | fn bar() -> Wrapper<Missing<impl Sized>>;
+ | ^^^^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.rs b/tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.rs
new file mode 100644
index 000000000..37c02827e
--- /dev/null
+++ b/tests/ui/async-await/in-trait/return-not-existing-type-wrapping-rpitit.rs
@@ -0,0 +1,20 @@
+// edition:2021
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
+
+#![feature(return_position_impl_trait_in_trait)]
+
+struct Wrapper<T>(T);
+
+trait Foo {
+ fn bar() -> Wrapper<Missing<impl Sized>>;
+ //~^ ERROR: cannot find type `Missing` in this scope [E0412]
+}
+
+impl Foo for () {
+ fn bar() -> Wrapper<i32> {
+ Wrapper(0)
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/async-await/issue-64130-4-async-move.no_drop_tracking.stderr b/tests/ui/async-await/issue-64130-4-async-move.no_drop_tracking.stderr
index 4b575a3d3..60b7551ff 100644
--- a/tests/ui/async-await/issue-64130-4-async-move.no_drop_tracking.stderr
+++ b/tests/ui/async-await/issue-64130-4-async-move.no_drop_tracking.stderr
@@ -6,13 +6,13 @@ LL | pub fn foo() -> impl Future + Send {
|
= help: the trait `Sync` is not implemented for `(dyn Any + Send + 'static)`
note: future is not `Send` as this value is used across an await
- --> $DIR/issue-64130-4-async-move.rs:27:32
+ --> $DIR/issue-64130-4-async-move.rs:27:23
|
LL | match client.status() {
| ------ has type `&Client` which is not `Send`
LL | 200 => {
-LL | let _x = get().await;
- | ^^^^^ await occurs here, with `client` maybe used later
+LL | get().await;
+ | ^^^^^ await occurs here, with `client` maybe used later
...
LL | }
| - `client` is later dropped here
diff --git a/tests/ui/async-await/issue-64130-4-async-move.rs b/tests/ui/async-await/issue-64130-4-async-move.rs
index bcb297aaa..5d68a808b 100644
--- a/tests/ui/async-await/issue-64130-4-async-move.rs
+++ b/tests/ui/async-await/issue-64130-4-async-move.rs
@@ -24,7 +24,7 @@ pub fn foo() -> impl Future + Send {
async move {
match client.status() {
200 => {
- let _x = get().await;
+ get().await;
}
_ => (),
}
diff --git a/tests/ui/async-await/issue-70935-complex-spans.drop_tracking.stderr b/tests/ui/async-await/issue-70935-complex-spans.drop_tracking.stderr
index 721234aa4..f80bb4242 100644
--- a/tests/ui/async-await/issue-70935-complex-spans.drop_tracking.stderr
+++ b/tests/ui/async-await/issue-70935-complex-spans.drop_tracking.stderr
@@ -1,18 +1,25 @@
-error[E0277]: `Sender<i32>` cannot be shared between threads safely
- --> $DIR/issue-70935-complex-spans.rs:13:45
+error[E0277]: `*mut ()` cannot be shared between threads safely
+ --> $DIR/issue-70935-complex-spans.rs:18:23
|
-LL | fn foo(tx: std::sync::mpsc::Sender<i32>) -> impl Future + Send {
- | ^^^^^^^^^^^^^^^^^^ `Sender<i32>` cannot be shared between threads safely
+LL | fn foo(x: NotSync) -> impl Future + Send {
+ | ^^^^^^^^^^^^^^^^^^ `*mut ()` cannot be shared between threads safely
|
- = help: the trait `Sync` is not implemented for `Sender<i32>`
- = note: required for `&Sender<i32>` to implement `Send`
+ = help: within `NotSync`, the trait `Sync` is not implemented for `*mut ()`
+note: required because it appears within the type `PhantomData<*mut ()>`
+ --> $SRC_DIR/core/src/marker.rs:LL:COL
+note: required because it appears within the type `NotSync`
+ --> $DIR/issue-70935-complex-spans.rs:12:8
+ |
+LL | struct NotSync(PhantomData<*mut ()>);
+ | ^^^^^^^
+ = note: required for `&NotSync` to implement `Send`
note: required because it's used within this closure
- --> $DIR/issue-70935-complex-spans.rs:17:13
+ --> $DIR/issue-70935-complex-spans.rs:22:13
|
-LL | baz(|| async{
+LL | baz(|| async {
| ^^
note: required because it's used within this `async fn` body
- --> $DIR/issue-70935-complex-spans.rs:10:67
+ --> $DIR/issue-70935-complex-spans.rs:15:67
|
LL | async fn baz<T>(_c: impl FnMut() -> T) where T: Future<Output=()> {
| ___________________________________________________________________^
@@ -20,11 +27,11 @@ LL | | }
| |_^
= note: required because it captures the following types: `ResumeTy`, `impl Future<Output = ()>`, `()`
note: required because it's used within this `async` block
- --> $DIR/issue-70935-complex-spans.rs:16:5
+ --> $DIR/issue-70935-complex-spans.rs:21:5
|
LL | / async move {
-LL | | baz(|| async{
-LL | | foo(tx.clone());
+LL | | baz(|| async {
+LL | | foo(x.clone());
LL | | }).await;
LL | | }
| |_____^
diff --git a/tests/ui/async-await/issue-70935-complex-spans.drop_tracking_mir.stderr b/tests/ui/async-await/issue-70935-complex-spans.drop_tracking_mir.stderr
index c636be15a..eb9d93e22 100644
--- a/tests/ui/async-await/issue-70935-complex-spans.drop_tracking_mir.stderr
+++ b/tests/ui/async-await/issue-70935-complex-spans.drop_tracking_mir.stderr
@@ -1,18 +1,25 @@
-error[E0277]: `Sender<i32>` cannot be shared between threads safely
- --> $DIR/issue-70935-complex-spans.rs:13:45
+error[E0277]: `*mut ()` cannot be shared between threads safely
+ --> $DIR/issue-70935-complex-spans.rs:18:23
|
-LL | fn foo(tx: std::sync::mpsc::Sender<i32>) -> impl Future + Send {
- | ^^^^^^^^^^^^^^^^^^ `Sender<i32>` cannot be shared between threads safely
+LL | fn foo(x: NotSync) -> impl Future + Send {
+ | ^^^^^^^^^^^^^^^^^^ `*mut ()` cannot be shared between threads safely
|
- = help: the trait `Sync` is not implemented for `Sender<i32>`
- = note: required for `&Sender<i32>` to implement `Send`
+ = help: within `NotSync`, the trait `Sync` is not implemented for `*mut ()`
+note: required because it appears within the type `PhantomData<*mut ()>`
+ --> $SRC_DIR/core/src/marker.rs:LL:COL
+note: required because it appears within the type `NotSync`
+ --> $DIR/issue-70935-complex-spans.rs:12:8
+ |
+LL | struct NotSync(PhantomData<*mut ()>);
+ | ^^^^^^^
+ = note: required for `&NotSync` to implement `Send`
note: required because it's used within this closure
- --> $DIR/issue-70935-complex-spans.rs:17:13
+ --> $DIR/issue-70935-complex-spans.rs:22:13
|
-LL | baz(|| async{
+LL | baz(|| async {
| ^^
note: required because it's used within this `async fn` body
- --> $DIR/issue-70935-complex-spans.rs:10:67
+ --> $DIR/issue-70935-complex-spans.rs:15:67
|
LL | async fn baz<T>(_c: impl FnMut() -> T) where T: Future<Output=()> {
| ___________________________________________________________________^
@@ -20,11 +27,11 @@ LL | | }
| |_^
= note: required because it captures the following types: `impl Future<Output = ()>`
note: required because it's used within this `async` block
- --> $DIR/issue-70935-complex-spans.rs:16:5
+ --> $DIR/issue-70935-complex-spans.rs:21:5
|
LL | / async move {
-LL | | baz(|| async{
-LL | | foo(tx.clone());
+LL | | baz(|| async {
+LL | | foo(x.clone());
LL | | }).await;
LL | | }
| |_____^
diff --git a/tests/ui/async-await/issue-70935-complex-spans.no_drop_tracking.stderr b/tests/ui/async-await/issue-70935-complex-spans.no_drop_tracking.stderr
index ef0e182e5..d8ef6a5ee 100644
--- a/tests/ui/async-await/issue-70935-complex-spans.no_drop_tracking.stderr
+++ b/tests/ui/async-await/issue-70935-complex-spans.no_drop_tracking.stderr
@@ -1,21 +1,21 @@
error: future cannot be sent between threads safely
- --> $DIR/issue-70935-complex-spans.rs:13:45
+ --> $DIR/issue-70935-complex-spans.rs:18:23
|
-LL | fn foo(tx: std::sync::mpsc::Sender<i32>) -> impl Future + Send {
- | ^^^^^^^^^^^^^^^^^^ future created by async block is not `Send`
+LL | fn foo(x: NotSync) -> impl Future + Send {
+ | ^^^^^^^^^^^^^^^^^^ future created by async block is not `Send`
|
- = help: the trait `Sync` is not implemented for `Sender<i32>`
+ = help: within `NotSync`, the trait `Sync` is not implemented for `*mut ()`
note: future is not `Send` as this value is used across an await
- --> $DIR/issue-70935-complex-spans.rs:19:12
+ --> $DIR/issue-70935-complex-spans.rs:24:12
|
-LL | baz(|| async{
+LL | baz(|| async {
| _____________-
-LL | | foo(tx.clone());
+LL | | foo(x.clone());
LL | | }).await;
| | - ^^^^^- the value is later dropped here
| | | |
| |_________| await occurs here, with the value maybe used later
- | has type `[closure@$DIR/issue-70935-complex-spans.rs:17:13: 17:15]` which is not `Send`
+ | has type `[closure@$DIR/issue-70935-complex-spans.rs:22:13: 22:15]` which is not `Send`
error: aborting due to previous error
diff --git a/tests/ui/async-await/issue-70935-complex-spans.rs b/tests/ui/async-await/issue-70935-complex-spans.rs
index 78625bd39..9ebde1d39 100644
--- a/tests/ui/async-await/issue-70935-complex-spans.rs
+++ b/tests/ui/async-await/issue-70935-complex-spans.rs
@@ -6,16 +6,21 @@
// with newlines which lead complex diagnostics.
use std::future::Future;
+use std::marker::PhantomData;
+
+#[derive(Clone)]
+struct NotSync(PhantomData<*mut ()>);
+unsafe impl Send for NotSync {}
async fn baz<T>(_c: impl FnMut() -> T) where T: Future<Output=()> {
}
-fn foo(tx: std::sync::mpsc::Sender<i32>) -> impl Future + Send {
+fn foo(x: NotSync) -> impl Future + Send {
//[no_drop_tracking]~^ ERROR future cannot be sent between threads safely
- //[drop_tracking,drop_tracking_mir]~^^ ERROR `Sender<i32>` cannot be shared between threads
+ //[drop_tracking,drop_tracking_mir]~^^ ERROR `*mut ()` cannot be shared between threads
async move {
- baz(|| async{
- foo(tx.clone());
+ baz(|| async {
+ foo(x.clone());
}).await;
}
}
@@ -24,6 +29,6 @@ fn bar(_s: impl Future + Send) {
}
fn main() {
- let (tx, _rx) = std::sync::mpsc::channel();
- bar(foo(tx));
+ let x = NotSync(PhantomData);
+ bar(foo(x));
}
diff --git a/tests/ui/issues/issue-78115.rs b/tests/ui/async-await/issue-78115.rs
index ac18470c6..ac18470c6 100644
--- a/tests/ui/issues/issue-78115.rs
+++ b/tests/ui/async-await/issue-78115.rs
diff --git a/tests/ui/async-await/non-trivial-drop.rs b/tests/ui/async-await/non-trivial-drop.rs
index d4df9d439..258da0756 100644
--- a/tests/ui/async-await/non-trivial-drop.rs
+++ b/tests/ui/async-await/non-trivial-drop.rs
@@ -7,7 +7,7 @@
#![feature(generators)]
fn main() {
- let _ = foo();
+ foo();
}
fn foo() {
diff --git a/tests/ui/async-await/return-type-notation/issue-110963-early.stderr b/tests/ui/async-await/return-type-notation/issue-110963-early.current.stderr
index 33e22dec3..1b847b59e 100644
--- a/tests/ui/async-await/return-type-notation/issue-110963-early.stderr
+++ b/tests/ui/async-await/return-type-notation/issue-110963-early.current.stderr
@@ -1,5 +1,5 @@
warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
- --> $DIR/issue-110963-early.rs:4:12
+ --> $DIR/issue-110963-early.rs:6:12
|
LL | #![feature(return_type_notation)]
| ^^^^^^^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | #![feature(return_type_notation)]
= note: `#[warn(incomplete_features)]` on by default
error: higher-ranked lifetime error
- --> $DIR/issue-110963-early.rs:15:5
+ --> $DIR/issue-110963-early.rs:17:5
|
LL | / spawn(async move {
LL | | let mut hc = hc;
@@ -18,10 +18,10 @@ LL | | }
LL | | });
| |______^
|
- = note: could not prove `[async block@$DIR/issue-110963-early.rs:15:11: 20:6]: Send`
+ = note: could not prove `[async block@$DIR/issue-110963-early.rs:17:11: 22:6]: Send`
error: higher-ranked lifetime error
- --> $DIR/issue-110963-early.rs:15:5
+ --> $DIR/issue-110963-early.rs:17:5
|
LL | / spawn(async move {
LL | | let mut hc = hc;
@@ -31,7 +31,7 @@ LL | | }
LL | | });
| |______^
|
- = note: could not prove `[async block@$DIR/issue-110963-early.rs:15:11: 20:6]: Send`
+ = note: could not prove `[async block@$DIR/issue-110963-early.rs:17:11: 22:6]: Send`
error: aborting due to 2 previous errors; 1 warning emitted
diff --git a/tests/ui/async-await/return-type-notation/issue-110963-early.next.stderr b/tests/ui/async-await/return-type-notation/issue-110963-early.next.stderr
new file mode 100644
index 000000000..1b847b59e
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/issue-110963-early.next.stderr
@@ -0,0 +1,37 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/issue-110963-early.rs:6:12
+ |
+LL | #![feature(return_type_notation)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error: higher-ranked lifetime error
+ --> $DIR/issue-110963-early.rs:17:5
+ |
+LL | / spawn(async move {
+LL | | let mut hc = hc;
+LL | | if !hc.check().await {
+LL | | log_health_check_failure().await;
+LL | | }
+LL | | });
+ | |______^
+ |
+ = note: could not prove `[async block@$DIR/issue-110963-early.rs:17:11: 22:6]: Send`
+
+error: higher-ranked lifetime error
+ --> $DIR/issue-110963-early.rs:17:5
+ |
+LL | / spawn(async move {
+LL | | let mut hc = hc;
+LL | | if !hc.check().await {
+LL | | log_health_check_failure().await;
+LL | | }
+LL | | });
+ | |______^
+ |
+ = note: could not prove `[async block@$DIR/issue-110963-early.rs:17:11: 22:6]: Send`
+
+error: aborting due to 2 previous errors; 1 warning emitted
+
diff --git a/tests/ui/async-await/return-type-notation/issue-110963-early.rs b/tests/ui/async-await/return-type-notation/issue-110963-early.rs
index 0ecbca5c1..eee31aa1f 100644
--- a/tests/ui/async-await/return-type-notation/issue-110963-early.rs
+++ b/tests/ui/async-await/return-type-notation/issue-110963-early.rs
@@ -1,5 +1,7 @@
// edition: 2021
// known-bug: #110963
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
#![feature(return_type_notation)]
#![feature(async_fn_in_trait)]
diff --git a/tests/ui/async-await/return-type-notation/issue-110963-late.stderr b/tests/ui/async-await/return-type-notation/issue-110963-late.current.stderr
index 9c6966537..018f4f220 100644
--- a/tests/ui/async-await/return-type-notation/issue-110963-late.stderr
+++ b/tests/ui/async-await/return-type-notation/issue-110963-late.current.stderr
@@ -1,5 +1,5 @@
warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
- --> $DIR/issue-110963-late.rs:4:12
+ --> $DIR/issue-110963-late.rs:6:12
|
LL | #![feature(return_type_notation)]
| ^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/async-await/return-type-notation/issue-110963-late.next.stderr b/tests/ui/async-await/return-type-notation/issue-110963-late.next.stderr
new file mode 100644
index 000000000..018f4f220
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/issue-110963-late.next.stderr
@@ -0,0 +1,11 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/issue-110963-late.rs:6:12
+ |
+LL | #![feature(return_type_notation)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/async-await/return-type-notation/issue-110963-late.rs b/tests/ui/async-await/return-type-notation/issue-110963-late.rs
index 17b5d775d..ea047cd3b 100644
--- a/tests/ui/async-await/return-type-notation/issue-110963-late.rs
+++ b/tests/ui/async-await/return-type-notation/issue-110963-late.rs
@@ -1,5 +1,7 @@
// edition: 2021
// check-pass
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
#![feature(return_type_notation)]
//~^ WARN the feature `return_type_notation` is incomplete
diff --git a/tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.rs b/tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.rs
new file mode 100644
index 000000000..e55104ee9
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.rs
@@ -0,0 +1,28 @@
+// edition:2021
+// check-pass
+
+#![feature(async_fn_in_trait, return_position_impl_trait_in_trait, return_type_notation)]
+//~^ WARN the feature `return_type_notation` is incomplete
+
+use std::future::Future;
+
+struct JoinHandle<T>(fn() -> T);
+
+fn spawn<T>(_: impl Future<Output = T>) -> JoinHandle<T> {
+ todo!()
+}
+
+trait Foo {
+ async fn bar(&self) -> i32;
+}
+
+trait SendFoo: Foo<bar(): Send> + Send {}
+
+fn foobar(foo: impl SendFoo) -> JoinHandle<i32> {
+ spawn(async move {
+ let future = foo.bar();
+ future.await
+ })
+}
+
+fn main() {}
diff --git a/tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.stderr b/tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.stderr
new file mode 100644
index 000000000..8626648b5
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/rtn-implied-in-supertrait.stderr
@@ -0,0 +1,11 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/rtn-implied-in-supertrait.rs:4:68
+ |
+LL | #![feature(async_fn_in_trait, return_position_impl_trait_in_trait, return_type_notation)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/async-await/return-type-notation/rtn-in-impl-signature.rs b/tests/ui/async-await/return-type-notation/rtn-in-impl-signature.rs
new file mode 100644
index 000000000..1b16a492a
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/rtn-in-impl-signature.rs
@@ -0,0 +1,13 @@
+#![feature(return_type_notation)]
+//~^ WARN the feature `return_type_notation` is incomplete
+
+// Shouldn't ICE when we have a (bad) RTN in an impl header
+
+trait Super1<'a> {
+ fn bar<'b>() -> bool;
+}
+
+impl Super1<'_, bar(): Send> for () {}
+//~^ ERROR associated type bindings are not allowed here
+
+fn main() {}
diff --git a/tests/ui/async-await/return-type-notation/rtn-in-impl-signature.stderr b/tests/ui/async-await/return-type-notation/rtn-in-impl-signature.stderr
new file mode 100644
index 000000000..52d8168c9
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/rtn-in-impl-signature.stderr
@@ -0,0 +1,18 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/rtn-in-impl-signature.rs:1:12
+ |
+LL | #![feature(return_type_notation)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error[E0229]: associated type bindings are not allowed here
+ --> $DIR/rtn-in-impl-signature.rs:10:17
+ |
+LL | impl Super1<'_, bar(): Send> for () {}
+ | ^^^^^^^^^^^ associated type not allowed here
+
+error: aborting due to previous error; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0229`.
diff --git a/tests/ui/async-await/return-type-notation/super-method-bound.stderr b/tests/ui/async-await/return-type-notation/super-method-bound.current.stderr
index ac0668d3c..891c802c5 100644
--- a/tests/ui/async-await/return-type-notation/super-method-bound.stderr
+++ b/tests/ui/async-await/return-type-notation/super-method-bound.current.stderr
@@ -1,5 +1,5 @@
warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
- --> $DIR/super-method-bound.rs:4:31
+ --> $DIR/super-method-bound.rs:6:31
|
LL | #![feature(async_fn_in_trait, return_type_notation)]
| ^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/async-await/return-type-notation/super-method-bound.next.stderr b/tests/ui/async-await/return-type-notation/super-method-bound.next.stderr
new file mode 100644
index 000000000..891c802c5
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/super-method-bound.next.stderr
@@ -0,0 +1,11 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/super-method-bound.rs:6:31
+ |
+LL | #![feature(async_fn_in_trait, return_type_notation)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/async-await/return-type-notation/super-method-bound.rs b/tests/ui/async-await/return-type-notation/super-method-bound.rs
index 58ea3578d..0163c62f5 100644
--- a/tests/ui/async-await/return-type-notation/super-method-bound.rs
+++ b/tests/ui/async-await/return-type-notation/super-method-bound.rs
@@ -1,5 +1,7 @@
// edition:2021
// check-pass
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
#![feature(async_fn_in_trait, return_type_notation)]
//~^ WARN the feature `return_type_notation` is incomplete
diff --git a/tests/ui/async-await/return-type-notation/supertrait-bound.stderr b/tests/ui/async-await/return-type-notation/supertrait-bound.current.stderr
index c8cec4946..05cb0ca4a 100644
--- a/tests/ui/async-await/return-type-notation/supertrait-bound.stderr
+++ b/tests/ui/async-await/return-type-notation/supertrait-bound.current.stderr
@@ -1,5 +1,5 @@
warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
- --> $DIR/supertrait-bound.rs:3:49
+ --> $DIR/supertrait-bound.rs:5:49
|
LL | #![feature(return_position_impl_trait_in_trait, return_type_notation)]
| ^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/async-await/return-type-notation/supertrait-bound.next.stderr b/tests/ui/async-await/return-type-notation/supertrait-bound.next.stderr
new file mode 100644
index 000000000..05cb0ca4a
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/supertrait-bound.next.stderr
@@ -0,0 +1,11 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/supertrait-bound.rs:5:49
+ |
+LL | #![feature(return_position_impl_trait_in_trait, return_type_notation)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/async-await/return-type-notation/supertrait-bound.rs b/tests/ui/async-await/return-type-notation/supertrait-bound.rs
index 19bcfe304..09de32c5d 100644
--- a/tests/ui/async-await/return-type-notation/supertrait-bound.rs
+++ b/tests/ui/async-await/return-type-notation/supertrait-bound.rs
@@ -1,4 +1,6 @@
// check-pass
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
#![feature(return_position_impl_trait_in_trait, return_type_notation)]
//~^ WARN the feature `return_type_notation` is incomplete and may not be safe to use
diff --git a/tests/ui/async-await/return-type-notation/ty-or-ct-params.current.stderr b/tests/ui/async-await/return-type-notation/ty-or-ct-params.current.stderr
new file mode 100644
index 000000000..1aa008fe4
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/ty-or-ct-params.current.stderr
@@ -0,0 +1,29 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/ty-or-ct-params.rs:5:31
+ |
+LL | #![feature(async_fn_in_trait, return_type_notation)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error: return type notation is not allowed for functions that have type parameters
+ --> $DIR/ty-or-ct-params.rs:16:12
+ |
+LL | async fn bar<T>() {}
+ | - type parameter declared here
+...
+LL | T: Foo<bar(): Send, baz(): Send>,
+ | ^^^^^^^^^^^
+
+error: return type notation is not allowed for functions that have const parameters
+ --> $DIR/ty-or-ct-params.rs:16:25
+ |
+LL | async fn baz<const N: usize>() {}
+ | -------------- const parameter declared here
+...
+LL | T: Foo<bar(): Send, baz(): Send>,
+ | ^^^^^^^^^^^
+
+error: aborting due to 2 previous errors; 1 warning emitted
+
diff --git a/tests/ui/async-await/return-type-notation/ty-or-ct-params.next.stderr b/tests/ui/async-await/return-type-notation/ty-or-ct-params.next.stderr
new file mode 100644
index 000000000..1aa008fe4
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/ty-or-ct-params.next.stderr
@@ -0,0 +1,29 @@
+warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/ty-or-ct-params.rs:5:31
+ |
+LL | #![feature(async_fn_in_trait, return_type_notation)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error: return type notation is not allowed for functions that have type parameters
+ --> $DIR/ty-or-ct-params.rs:16:12
+ |
+LL | async fn bar<T>() {}
+ | - type parameter declared here
+...
+LL | T: Foo<bar(): Send, baz(): Send>,
+ | ^^^^^^^^^^^
+
+error: return type notation is not allowed for functions that have const parameters
+ --> $DIR/ty-or-ct-params.rs:16:25
+ |
+LL | async fn baz<const N: usize>() {}
+ | -------------- const parameter declared here
+...
+LL | T: Foo<bar(): Send, baz(): Send>,
+ | ^^^^^^^^^^^
+
+error: aborting due to 2 previous errors; 1 warning emitted
+
diff --git a/tests/ui/async-await/return-type-notation/ty-or-ct-params.rs b/tests/ui/async-await/return-type-notation/ty-or-ct-params.rs
new file mode 100644
index 000000000..3141da1d2
--- /dev/null
+++ b/tests/ui/async-await/return-type-notation/ty-or-ct-params.rs
@@ -0,0 +1,22 @@
+// edition: 2021
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
+
+#![feature(async_fn_in_trait, return_type_notation)]
+//~^ WARN the feature `return_type_notation` is incomplete
+
+trait Foo {
+ async fn bar<T>() {}
+
+ async fn baz<const N: usize>() {}
+}
+
+fn test<T>()
+where
+ T: Foo<bar(): Send, baz(): Send>,
+ //~^ ERROR return type notation is not allowed for functions that have const parameters
+ //~| ERROR return type notation is not allowed for functions that have type parameters
+{
+}
+
+fn main() {}
diff --git a/tests/ui/attributes/doc-test-literal.rs b/tests/ui/attributes/doc-test-literal.rs
new file mode 100644
index 000000000..a06a1afcb
--- /dev/null
+++ b/tests/ui/attributes/doc-test-literal.rs
@@ -0,0 +1,7 @@
+#![deny(warnings)]
+
+#![doc(test(""))]
+//~^ ERROR `#![doc(test(...)]` does not take a literal
+//~^^ WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+
+fn main() {}
diff --git a/tests/ui/attributes/doc-test-literal.stderr b/tests/ui/attributes/doc-test-literal.stderr
new file mode 100644
index 000000000..ebee09994
--- /dev/null
+++ b/tests/ui/attributes/doc-test-literal.stderr
@@ -0,0 +1,17 @@
+error: `#![doc(test(...)]` does not take a literal
+ --> $DIR/doc-test-literal.rs:3:13
+ |
+LL | #![doc(test(""))]
+ | ^^
+ |
+ = 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 #82730 <https://github.com/rust-lang/rust/issues/82730>
+note: the lint level is defined here
+ --> $DIR/doc-test-literal.rs:1:9
+ |
+LL | #![deny(warnings)]
+ | ^^^^^^^^
+ = note: `#[deny(invalid_doc_attributes)]` implied by `#[deny(warnings)]`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/auto-traits/issue-23080-2.stderr b/tests/ui/auto-traits/issue-23080-2.current.stderr
index fed485612..a57c6d9b0 100644
--- a/tests/ui/auto-traits/issue-23080-2.stderr
+++ b/tests/ui/auto-traits/issue-23080-2.current.stderr
@@ -1,5 +1,5 @@
error[E0380]: auto traits cannot have associated items
- --> $DIR/issue-23080-2.rs:5:10
+ --> $DIR/issue-23080-2.rs:8:10
|
LL | unsafe auto trait Trait {
| ----- auto traits cannot have associated items
diff --git a/tests/ui/auto-traits/issue-23080-2.next.stderr b/tests/ui/auto-traits/issue-23080-2.next.stderr
new file mode 100644
index 000000000..a57c6d9b0
--- /dev/null
+++ b/tests/ui/auto-traits/issue-23080-2.next.stderr
@@ -0,0 +1,11 @@
+error[E0380]: auto traits cannot have associated items
+ --> $DIR/issue-23080-2.rs:8:10
+ |
+LL | unsafe auto trait Trait {
+ | ----- auto traits cannot have associated items
+LL | type Output;
+ | -----^^^^^^- help: remove these associated items
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0380`.
diff --git a/tests/ui/auto-traits/issue-23080-2.rs b/tests/ui/auto-traits/issue-23080-2.rs
index cb4cf6de1..882b8f393 100644
--- a/tests/ui/auto-traits/issue-23080-2.rs
+++ b/tests/ui/auto-traits/issue-23080-2.rs
@@ -1,3 +1,6 @@
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
+
#![feature(auto_traits)]
#![feature(negative_impls)]
diff --git a/tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.rs b/tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.rs
new file mode 100644
index 000000000..d8034d57e
--- /dev/null
+++ b/tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.rs
@@ -0,0 +1,40 @@
+use std::ops::Deref;
+use std::rc::Rc;
+
+struct Value<T>(T);
+
+pub trait Wrap<T> {
+ fn wrap() -> Self;
+}
+
+impl<R, A1, A2> Wrap<fn(A1, A2) -> R> for Value<fn(A1, A2) -> R> {
+ fn wrap() -> Self {
+ todo!()
+ }
+}
+
+impl<F, R, A1, A2> Wrap<F> for Value<Rc<dyn Fn(A1, A2) -> R>> {
+ fn wrap() -> Self {
+ todo!()
+ }
+}
+
+impl<F> Deref for Value<Rc<F>> {
+ type Target = F;
+
+ fn deref(&self) -> &Self::Target {
+ &*self.0
+ }
+}
+
+fn main() {
+ let var_fn = Value::wrap();
+ //~^ ERROR type annotations needed for `Value<Rc<_>>`
+
+ // The combination of `Value: Wrap` obligation plus the autoderef steps
+ // (caused by the `Deref` impl above) actually means that the self type
+ // of the method fn below is constrained to be `Value<Rc<dyn Fn(?0, ?1) -> ?2>>`.
+ // However, that's only known to us on the error path -- we still need
+ // to emit an ambiguity error, though.
+ let _ = var_fn.clone();
+}
diff --git a/tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.stderr b/tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.stderr
new file mode 100644
index 000000000..06a7e9085
--- /dev/null
+++ b/tests/ui/autoref-autoderef/deref-ambiguity-becomes-nonambiguous.stderr
@@ -0,0 +1,17 @@
+error[E0282]: type annotations needed for `Value<Rc<_>>`
+ --> $DIR/deref-ambiguity-becomes-nonambiguous.rs:31:9
+ |
+LL | let var_fn = Value::wrap();
+ | ^^^^^^
+...
+LL | let _ = var_fn.clone();
+ | ----- type must be known at this point
+ |
+help: consider giving `var_fn` an explicit type, where the placeholders `_` are specified
+ |
+LL | let var_fn: Value<Rc<_>> = Value::wrap();
+ | ++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/binop/binop-mul-i32-f32.stderr b/tests/ui/binop/binop-mul-i32-f32.stderr
index c986bc3fd..115e70006 100644
--- a/tests/ui/binop/binop-mul-i32-f32.stderr
+++ b/tests/ui/binop/binop-mul-i32-f32.stderr
@@ -6,10 +6,10 @@ LL | x * y
|
= help: the trait `Mul<f32>` is not implemented for `i32`
= help: the following other types implement trait `Mul<Rhs>`:
+ <i32 as Mul>
+ <i32 as Mul<&i32>>
<&'a i32 as Mul<i32>>
<&i32 as Mul<&i32>>
- <i32 as Mul<&i32>>
- <i32 as Mul>
error: aborting due to previous error
diff --git a/tests/ui/binop/shift-various-bad-types.stderr b/tests/ui/binop/shift-various-bad-types.stderr
index 38db66f86..b43672ef3 100644
--- a/tests/ui/binop/shift-various-bad-types.stderr
+++ b/tests/ui/binop/shift-various-bad-types.stderr
@@ -6,14 +6,14 @@ LL | 22 >> p.char;
|
= help: the trait `Shr<char>` is not implemented for `{integer}`
= help: the following other types implement trait `Shr<Rhs>`:
- <&'a i128 as Shr<i128>>
- <&'a i128 as Shr<i16>>
- <&'a i128 as Shr<i32>>
- <&'a i128 as Shr<i64>>
- <&'a i128 as Shr<i8>>
- <&'a i128 as Shr<isize>>
- <&'a i128 as Shr<u128>>
- <&'a i128 as Shr<u16>>
+ <isize as Shr>
+ <isize as Shr<i8>>
+ <isize as Shr<i16>>
+ <isize as Shr<i32>>
+ <isize as Shr<i64>>
+ <isize as Shr<i128>>
+ <isize as Shr<usize>>
+ <isize as Shr<u8>>
and 568 others
error[E0277]: no implementation for `{integer} >> &str`
@@ -24,14 +24,14 @@ LL | 22 >> p.str;
|
= help: the trait `Shr<&str>` is not implemented for `{integer}`
= help: the following other types implement trait `Shr<Rhs>`:
- <&'a i128 as Shr<i128>>
- <&'a i128 as Shr<i16>>
- <&'a i128 as Shr<i32>>
- <&'a i128 as Shr<i64>>
- <&'a i128 as Shr<i8>>
- <&'a i128 as Shr<isize>>
- <&'a i128 as Shr<u128>>
- <&'a i128 as Shr<u16>>
+ <isize as Shr>
+ <isize as Shr<i8>>
+ <isize as Shr<i16>>
+ <isize as Shr<i32>>
+ <isize as Shr<i64>>
+ <isize as Shr<i128>>
+ <isize as Shr<usize>>
+ <isize as Shr<u8>>
and 568 others
error[E0277]: no implementation for `{integer} >> &Panolpy`
@@ -42,14 +42,14 @@ LL | 22 >> p;
|
= help: the trait `Shr<&Panolpy>` is not implemented for `{integer}`
= help: the following other types implement trait `Shr<Rhs>`:
- <&'a i128 as Shr<i128>>
- <&'a i128 as Shr<i16>>
- <&'a i128 as Shr<i32>>
- <&'a i128 as Shr<i64>>
- <&'a i128 as Shr<i8>>
- <&'a i128 as Shr<isize>>
- <&'a i128 as Shr<u128>>
- <&'a i128 as Shr<u16>>
+ <isize as Shr>
+ <isize as Shr<i8>>
+ <isize as Shr<i16>>
+ <isize as Shr<i32>>
+ <isize as Shr<i64>>
+ <isize as Shr<i128>>
+ <isize as Shr<usize>>
+ <isize as Shr<u8>>
and 568 others
error[E0308]: mismatched types
diff --git a/tests/ui/borrowck/borrowck-thread-local-static-borrow-outlives-fn.stderr b/tests/ui/borrowck/borrowck-thread-local-static-borrow-outlives-fn.stderr
index 26453b42f..2f397f6b5 100644
--- a/tests/ui/borrowck/borrowck-thread-local-static-borrow-outlives-fn.stderr
+++ b/tests/ui/borrowck/borrowck-thread-local-static-borrow-outlives-fn.stderr
@@ -4,7 +4,7 @@ error[E0712]: thread-local variable borrowed past end of function
LL | assert_static(&FOO);
| ^^^^ thread-local variables cannot be borrowed beyond the end of the function
LL | }
- | - end of enclosing function is here
+ | - end of enclosing function is here
error: aborting due to previous error
diff --git a/tests/ui/borrowck/issue-111554.rs b/tests/ui/borrowck/issue-111554.rs
new file mode 100644
index 000000000..0dad55be3
--- /dev/null
+++ b/tests/ui/borrowck/issue-111554.rs
@@ -0,0 +1,28 @@
+struct Foo {}
+
+impl Foo {
+ pub fn foo(&mut self) {
+ || bar(&mut self);
+ //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable
+ }
+
+ pub fn baz(&self) {
+ || bar(&mut self);
+ //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable
+ //~| ERROR cannot borrow data in a `&` reference as mutable
+ }
+
+ pub fn qux(mut self) {
+ || bar(&mut self);
+ // OK
+ }
+
+ pub fn quux(self) {
+ || bar(&mut self);
+ //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable
+ }
+}
+
+fn bar(_: &mut Foo) {}
+
+fn main() {}
diff --git a/tests/ui/borrowck/issue-111554.stderr b/tests/ui/borrowck/issue-111554.stderr
new file mode 100644
index 000000000..6b7a42e49
--- /dev/null
+++ b/tests/ui/borrowck/issue-111554.stderr
@@ -0,0 +1,29 @@
+error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
+ --> $DIR/issue-111554.rs:5:16
+ |
+LL | || bar(&mut self);
+ | ^^^^^^^^^ cannot borrow as mutable
+
+error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
+ --> $DIR/issue-111554.rs:10:16
+ |
+LL | || bar(&mut self);
+ | ^^^^^^^^^ cannot borrow as mutable
+
+error[E0596]: cannot borrow data in a `&` reference as mutable
+ --> $DIR/issue-111554.rs:10:16
+ |
+LL | || bar(&mut self);
+ | ^^^^^^^^^ cannot borrow as mutable
+
+error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
+ --> $DIR/issue-111554.rs:21:16
+ |
+LL | pub fn quux(self) {
+ | ---- help: consider changing this to be mutable: `mut self`
+LL | || bar(&mut self);
+ | ^^^^^^^^^ cannot borrow as mutable
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0596`.
diff --git a/tests/ui/cfg/auxiliary/cfg_false_lib.rs b/tests/ui/cfg/auxiliary/cfg_false_lib.rs
index 3c011d72b..6c2dbb44d 100644
--- a/tests/ui/cfg/auxiliary/cfg_false_lib.rs
+++ b/tests/ui/cfg/auxiliary/cfg_false_lib.rs
@@ -1,6 +1,4 @@
-// It is unclear whether a fully unconfigured crate should link to standard library,
-// or what its `no_std`/`no_core`/`compiler_builtins` status, more precisely.
-// Currently the usual standard library prelude is added to such crates,
-// and therefore they link to libstd.
+// `#![no_std]` on a fully unconfigured crate is respected if it's placed before `cfg(FALSE)`.
+// This crate has no such attribute, therefore this crate does link to libstd.
#![cfg(FALSE)]
diff --git a/tests/ui/cfg/auxiliary/cfg_false_lib_no_std_after.rs b/tests/ui/cfg/auxiliary/cfg_false_lib_no_std_after.rs
new file mode 100644
index 000000000..3cfa6c510
--- /dev/null
+++ b/tests/ui/cfg/auxiliary/cfg_false_lib_no_std_after.rs
@@ -0,0 +1,5 @@
+// `#![no_std]` on a fully unconfigured crate is respected if it's placed before `cfg(FALSE)`.
+// Therefore this crate does link to libstd.
+
+#![cfg(FALSE)]
+#![no_std]
diff --git a/tests/ui/cfg/auxiliary/cfg_false_lib_no_std_before.rs b/tests/ui/cfg/auxiliary/cfg_false_lib_no_std_before.rs
new file mode 100644
index 000000000..8e89545b8
--- /dev/null
+++ b/tests/ui/cfg/auxiliary/cfg_false_lib_no_std_before.rs
@@ -0,0 +1,8 @@
+// `#![no_std]` on a fully unconfigured crate is respected if it's placed before `cfg(FALSE)`.
+// Therefore this crate doesn't link to libstd.
+
+// no-prefer-dynamic
+
+#![no_std]
+#![crate_type = "lib"]
+#![cfg(FALSE)]
diff --git a/tests/ui/cfg/auxiliary/cfged_out.rs b/tests/ui/cfg/auxiliary/cfged_out.rs
new file mode 100644
index 000000000..f6a9089cf
--- /dev/null
+++ b/tests/ui/cfg/auxiliary/cfged_out.rs
@@ -0,0 +1,22 @@
+pub mod inner {
+ #[cfg(FALSE)]
+ pub fn uwu() {}
+
+ #[cfg(FALSE)]
+ pub mod doesnt_exist {
+ pub fn hello() {}
+ }
+
+ pub mod wrong {
+ #[cfg(feature = "suggesting me fails the test!!")]
+ pub fn meow() {}
+ }
+
+ pub mod right {
+ #[cfg(feature = "what-a-cool-feature")]
+ pub fn meow() {}
+ }
+}
+
+#[cfg(i_dont_exist_and_you_can_do_nothing_about_it)]
+pub fn vanished() {}
diff --git a/tests/ui/cfg/cfg-false-feature.rs b/tests/ui/cfg/cfg-false-feature.rs
index 21ea3ec79..84c231562 100644
--- a/tests/ui/cfg/cfg-false-feature.rs
+++ b/tests/ui/cfg/cfg-false-feature.rs
@@ -1,5 +1,4 @@
-// It is unclear which features should be in effect in a fully unconfigured crate (issue #104633).
-// Currently none on the features are in effect, so we get the feature gates reported.
+// Features above `cfg(FALSE)` are in effect in a fully unconfigured crate (issue #104633).
// check-pass
// compile-flags: --crate-type lib
@@ -8,8 +7,7 @@
#![cfg(FALSE)]
#![feature(box_syntax)]
-macro mac() {} //~ WARN `macro` is experimental
- //~| WARN unstable syntax can change at any point in the future
+macro mac() {} // OK
trait A = Clone; //~ WARN trait aliases are experimental
//~| WARN unstable syntax can change at any point in the future
diff --git a/tests/ui/cfg/cfg-false-feature.stderr b/tests/ui/cfg/cfg-false-feature.stderr
index 14673fbdb..340930362 100644
--- a/tests/ui/cfg/cfg-false-feature.stderr
+++ b/tests/ui/cfg/cfg-false-feature.stderr
@@ -1,5 +1,5 @@
warning: trait aliases are experimental
- --> $DIR/cfg-false-feature.rs:14:1
+ --> $DIR/cfg-false-feature.rs:12:1
|
LL | trait A = Clone;
| ^^^^^^^^^^^^^^^^
@@ -9,19 +9,8 @@ LL | trait A = Clone;
= warning: unstable syntax can change at any point in the future, causing a hard error!
= note: for more information, see issue #65860 <https://github.com/rust-lang/rust/issues/65860>
-warning: `macro` is experimental
- --> $DIR/cfg-false-feature.rs:11:1
- |
-LL | macro mac() {}
- | ^^^^^^^^^^^^^^
- |
- = note: see issue #39412 <https://github.com/rust-lang/rust/issues/39412> for more information
- = help: add `#![feature(decl_macro)]` to the crate attributes to enable
- = warning: unstable syntax can change at any point in the future, causing a hard error!
- = note: for more information, see issue #65860 <https://github.com/rust-lang/rust/issues/65860>
-
warning: box pattern syntax is experimental
- --> $DIR/cfg-false-feature.rs:18:9
+ --> $DIR/cfg-false-feature.rs:16:9
|
LL | let box _ = Box::new(0);
| ^^^^^
@@ -31,5 +20,5 @@ LL | let box _ = Box::new(0);
= warning: unstable syntax can change at any point in the future, causing a hard error!
= note: for more information, see issue #65860 <https://github.com/rust-lang/rust/issues/65860>
-warning: 3 warnings emitted
+warning: 2 warnings emitted
diff --git a/tests/ui/cfg/cfg_false_no_std-1.rs b/tests/ui/cfg/cfg_false_no_std-1.rs
new file mode 100644
index 000000000..bcb49e513
--- /dev/null
+++ b/tests/ui/cfg/cfg_false_no_std-1.rs
@@ -0,0 +1,10 @@
+// No error, panic handler is supplied by libstd linked though the empty library.
+
+// check-pass
+// aux-build: cfg_false_lib_no_std_after.rs
+
+#![no_std]
+
+extern crate cfg_false_lib_no_std_after as _;
+
+fn main() {}
diff --git a/tests/ui/cfg/cfg_false_no_std-2.rs b/tests/ui/cfg/cfg_false_no_std-2.rs
new file mode 100644
index 000000000..0a2bfd5f6
--- /dev/null
+++ b/tests/ui/cfg/cfg_false_no_std-2.rs
@@ -0,0 +1,11 @@
+// Error, the linked empty library is `no_std` and doesn't provide a panic handler.
+
+// dont-check-compiler-stderr
+// error-pattern: `#[panic_handler]` function required, but not found
+// aux-build: cfg_false_lib_no_std_before.rs
+
+#![no_std]
+
+extern crate cfg_false_lib_no_std_before as _;
+
+fn main() {}
diff --git a/tests/ui/cfg/cfg_false_no_std.rs b/tests/ui/cfg/cfg_false_no_std.rs
index 319ea0781..4fa831715 100644
--- a/tests/ui/cfg/cfg_false_no_std.rs
+++ b/tests/ui/cfg/cfg_false_no_std.rs
@@ -1,5 +1,4 @@
-// Currently no error because the panic handler is supplied by libstd linked though the empty
-// library, but the desirable behavior is unclear (see comments in cfg_false_lib.rs).
+// No error, panic handler is supplied by libstd linked though the empty library.
// check-pass
// aux-build: cfg_false_lib.rs
diff --git a/tests/ui/cfg/cfg_stmt_expr.rs b/tests/ui/cfg/cfg_stmt_expr.rs
index 6381bb2d5..f9f4c9810 100644
--- a/tests/ui/cfg/cfg_stmt_expr.rs
+++ b/tests/ui/cfg/cfg_stmt_expr.rs
@@ -81,7 +81,7 @@ fn main() {
// check that lints work
#[allow(non_snake_case)]
- let FOOBAR = {
+ let FOOBAR: () = {
fn SYLADEX() {}
};
diff --git a/tests/ui/cfg/diagnostics-cross-crate.rs b/tests/ui/cfg/diagnostics-cross-crate.rs
new file mode 100644
index 000000000..d2725c94b
--- /dev/null
+++ b/tests/ui/cfg/diagnostics-cross-crate.rs
@@ -0,0 +1,31 @@
+// aux-build:cfged_out.rs
+
+extern crate cfged_out;
+
+fn main() {
+ // There is no uwu at this path - no diagnostic.
+ cfged_out::uwu(); //~ ERROR cannot find function
+ //~^ NOTE not found in `cfged_out`
+
+ // It does exist here - diagnostic.
+ cfged_out::inner::uwu(); //~ ERROR cannot find function
+ //~^ NOTE found an item that was configured out
+ //~| NOTE not found in `cfged_out::inner`
+
+ // The module isn't found - we would like to get a diagnostic, but currently don't due to
+ // the awkward way the resolver diagnostics are currently implemented.
+ // FIXME(Nilstrieb): Also add a note to the cfg diagnostic here
+ cfged_out::inner::doesnt_exist::hello(); //~ ERROR failed to resolve
+ //~^ NOTE could not find `doesnt_exist` in `inner`
+
+ // It should find the one in the right module, not the wrong one.
+ cfged_out::inner::right::meow(); //~ ERROR cannot find function
+ //~^ NOTE found an item that was configured out
+ //~| NOTE not found in `cfged_out::inner::right
+ //~| NOTE the item is gated behind the `what-a-cool-feature` feature
+
+ // Exists in the crate root - diagnostic.
+ cfged_out::vanished(); //~ ERROR cannot find function
+ //~^ NOTE found an item that was configured out
+ //~| NOTE not found in `cfged_out`
+}
diff --git a/tests/ui/cfg/diagnostics-cross-crate.stderr b/tests/ui/cfg/diagnostics-cross-crate.stderr
new file mode 100644
index 000000000..046929bc2
--- /dev/null
+++ b/tests/ui/cfg/diagnostics-cross-crate.stderr
@@ -0,0 +1,53 @@
+error[E0433]: failed to resolve: could not find `doesnt_exist` in `inner`
+ --> $DIR/diagnostics-cross-crate.rs:18:23
+ |
+LL | cfged_out::inner::doesnt_exist::hello();
+ | ^^^^^^^^^^^^ could not find `doesnt_exist` in `inner`
+
+error[E0425]: cannot find function `uwu` in crate `cfged_out`
+ --> $DIR/diagnostics-cross-crate.rs:7:16
+ |
+LL | cfged_out::uwu();
+ | ^^^ not found in `cfged_out`
+
+error[E0425]: cannot find function `uwu` in module `cfged_out::inner`
+ --> $DIR/diagnostics-cross-crate.rs:11:23
+ |
+LL | cfged_out::inner::uwu();
+ | ^^^ not found in `cfged_out::inner`
+ |
+note: found an item that was configured out
+ --> $DIR/auxiliary/cfged_out.rs:3:12
+ |
+LL | pub fn uwu() {}
+ | ^^^
+
+error[E0425]: cannot find function `meow` in module `cfged_out::inner::right`
+ --> $DIR/diagnostics-cross-crate.rs:22:30
+ |
+LL | cfged_out::inner::right::meow();
+ | ^^^^ not found in `cfged_out::inner::right`
+ |
+note: found an item that was configured out
+ --> $DIR/auxiliary/cfged_out.rs:17:16
+ |
+LL | pub fn meow() {}
+ | ^^^^
+ = note: the item is gated behind the `what-a-cool-feature` feature
+
+error[E0425]: cannot find function `vanished` in crate `cfged_out`
+ --> $DIR/diagnostics-cross-crate.rs:28:16
+ |
+LL | cfged_out::vanished();
+ | ^^^^^^^^ not found in `cfged_out`
+ |
+note: found an item that was configured out
+ --> $DIR/auxiliary/cfged_out.rs:22:8
+ |
+LL | pub fn vanished() {}
+ | ^^^^^^^^
+
+error: aborting due to 5 previous errors
+
+Some errors have detailed explanations: E0425, E0433.
+For more information about an error, try `rustc --explain E0425`.
diff --git a/tests/ui/cfg/diagnostics-not-a-def.rs b/tests/ui/cfg/diagnostics-not-a-def.rs
new file mode 100644
index 000000000..729394712
--- /dev/null
+++ b/tests/ui/cfg/diagnostics-not-a-def.rs
@@ -0,0 +1,12 @@
+pub mod inner {
+ pub fn i_am_here() {
+ #[cfg(feature = "another one that doesn't exist")]
+ loop {}
+ }
+}
+
+fn main() {
+ inner::i_am_here();
+ // ensure that nothing bad happens when we are checking for cfgs
+ inner::i_am_not(); //~ ERROR cannot find function
+}
diff --git a/tests/ui/cfg/diagnostics-not-a-def.stderr b/tests/ui/cfg/diagnostics-not-a-def.stderr
new file mode 100644
index 000000000..af0e1a172
--- /dev/null
+++ b/tests/ui/cfg/diagnostics-not-a-def.stderr
@@ -0,0 +1,9 @@
+error[E0425]: cannot find function `i_am_not` in module `inner`
+ --> $DIR/diagnostics-not-a-def.rs:11:12
+ |
+LL | inner::i_am_not();
+ | ^^^^^^^^ not found in `inner`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/cfg/diagnostics-reexport.rs b/tests/ui/cfg/diagnostics-reexport.rs
new file mode 100644
index 000000000..b9548e911
--- /dev/null
+++ b/tests/ui/cfg/diagnostics-reexport.rs
@@ -0,0 +1,40 @@
+pub mod inner {
+ #[cfg(FALSE)]
+ mod gone {
+ pub fn uwu() {}
+ }
+
+ #[cfg(FALSE)]
+ pub use super::uwu;
+ //~^ NOTE found an item that was configured out
+}
+
+pub use a::x;
+//~^ ERROR unresolved import `a::x`
+//~| NOTE no `x` in `a`
+
+mod a {
+ #[cfg(no)]
+ pub fn x() {}
+ //~^ NOTE found an item that was configured out
+}
+
+pub use b::{x, y};
+//~^ ERROR unresolved imports `b::x`, `b::y`
+//~| NOTE no `x` in `b`
+//~| NOTE no `y` in `b`
+
+mod b {
+ #[cfg(no)]
+ pub fn x() {}
+ //~^ NOTE found an item that was configured out
+ #[cfg(no)]
+ pub fn y() {}
+ //~^ NOTE found an item that was configured out
+}
+
+fn main() {
+ // There is no uwu at this path - no diagnostic.
+ inner::uwu(); //~ ERROR cannot find function
+ //~^ NOTE not found in `inner`
+}
diff --git a/tests/ui/cfg/diagnostics-reexport.stderr b/tests/ui/cfg/diagnostics-reexport.stderr
new file mode 100644
index 000000000..e25b7cf86
--- /dev/null
+++ b/tests/ui/cfg/diagnostics-reexport.stderr
@@ -0,0 +1,47 @@
+error[E0432]: unresolved import `a::x`
+ --> $DIR/diagnostics-reexport.rs:12:9
+ |
+LL | pub use a::x;
+ | ^^^^ no `x` in `a`
+ |
+note: found an item that was configured out
+ --> $DIR/diagnostics-reexport.rs:18:12
+ |
+LL | pub fn x() {}
+ | ^
+
+error[E0432]: unresolved imports `b::x`, `b::y`
+ --> $DIR/diagnostics-reexport.rs:22:13
+ |
+LL | pub use b::{x, y};
+ | ^ ^ no `y` in `b`
+ | |
+ | no `x` in `b`
+ |
+note: found an item that was configured out
+ --> $DIR/diagnostics-reexport.rs:29:12
+ |
+LL | pub fn x() {}
+ | ^
+note: found an item that was configured out
+ --> $DIR/diagnostics-reexport.rs:32:12
+ |
+LL | pub fn y() {}
+ | ^
+
+error[E0425]: cannot find function `uwu` in module `inner`
+ --> $DIR/diagnostics-reexport.rs:38:12
+ |
+LL | inner::uwu();
+ | ^^^ not found in `inner`
+ |
+note: found an item that was configured out
+ --> $DIR/diagnostics-reexport.rs:8:20
+ |
+LL | pub use super::uwu;
+ | ^^^
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0425, E0432.
+For more information about an error, try `rustc --explain E0425`.
diff --git a/tests/ui/cfg/diagnostics-same-crate.rs b/tests/ui/cfg/diagnostics-same-crate.rs
new file mode 100644
index 000000000..f76ace06a
--- /dev/null
+++ b/tests/ui/cfg/diagnostics-same-crate.rs
@@ -0,0 +1,51 @@
+pub mod inner {
+ #[cfg(FALSE)]
+ pub fn uwu() {}
+ //~^ NOTE found an item that was configured out
+
+ #[cfg(FALSE)]
+ pub mod doesnt_exist {
+ pub fn hello() {}
+ }
+
+ pub mod wrong {
+ #[cfg(feature = "suggesting me fails the test!!")]
+ pub fn meow() {}
+ }
+
+ pub mod right {
+ #[cfg(feature = "what-a-cool-feature")]
+ pub fn meow() {}
+ //~^ NOTE found an item that was configured out
+ }
+}
+
+#[cfg(i_dont_exist_and_you_can_do_nothing_about_it)]
+pub fn vanished() {}
+
+fn main() {
+ // There is no uwu at this path - no diagnostic.
+ uwu(); //~ ERROR cannot find function
+ //~^ NOTE not found in this scope
+
+ // It does exist here - diagnostic.
+ inner::uwu(); //~ ERROR cannot find function
+ //~| NOTE not found in `inner`
+
+ // The module isn't found - we would like to get a diagnostic, but currently don't due to
+ // the awkward way the resolver diagnostics are currently implemented.
+ // FIXME(Nilstrieb): Also add a note to the cfg diagnostic here
+ inner::doesnt_exist::hello(); //~ ERROR failed to resolve
+ //~| NOTE could not find `doesnt_exist` in `inner`
+
+ // It should find the one in the right module, not the wrong one.
+ inner::right::meow(); //~ ERROR cannot find function
+ //~| NOTE not found in `inner::right
+ //~| NOTE the item is gated behind the `what-a-cool-feature` feature
+
+ // Exists in the crate root - we would generally want a diagnostic,
+ // but currently don't have one.
+ // Not that it matters much though, this is highly unlikely to confuse anyone.
+ vanished(); //~ ERROR cannot find function
+ //~^ NOTE not found in this scope
+}
diff --git a/tests/ui/cfg/diagnostics-same-crate.stderr b/tests/ui/cfg/diagnostics-same-crate.stderr
new file mode 100644
index 000000000..30ee6479b
--- /dev/null
+++ b/tests/ui/cfg/diagnostics-same-crate.stderr
@@ -0,0 +1,47 @@
+error[E0433]: failed to resolve: could not find `doesnt_exist` in `inner`
+ --> $DIR/diagnostics-same-crate.rs:38:12
+ |
+LL | inner::doesnt_exist::hello();
+ | ^^^^^^^^^^^^ could not find `doesnt_exist` in `inner`
+
+error[E0425]: cannot find function `uwu` in module `inner`
+ --> $DIR/diagnostics-same-crate.rs:32:12
+ |
+LL | inner::uwu();
+ | ^^^ not found in `inner`
+ |
+note: found an item that was configured out
+ --> $DIR/diagnostics-same-crate.rs:3:12
+ |
+LL | pub fn uwu() {}
+ | ^^^
+
+error[E0425]: cannot find function `meow` in module `inner::right`
+ --> $DIR/diagnostics-same-crate.rs:42:19
+ |
+LL | inner::right::meow();
+ | ^^^^ not found in `inner::right`
+ |
+note: found an item that was configured out
+ --> $DIR/diagnostics-same-crate.rs:18:16
+ |
+LL | pub fn meow() {}
+ | ^^^^
+ = note: the item is gated behind the `what-a-cool-feature` feature
+
+error[E0425]: cannot find function `uwu` in this scope
+ --> $DIR/diagnostics-same-crate.rs:28:5
+ |
+LL | uwu();
+ | ^^^ not found in this scope
+
+error[E0425]: cannot find function `vanished` in this scope
+ --> $DIR/diagnostics-same-crate.rs:49:5
+ |
+LL | vanished();
+ | ^^^^^^^^ not found in this scope
+
+error: aborting due to 5 previous errors
+
+Some errors have detailed explanations: E0425, E0433.
+For more information about an error, try `rustc --explain E0425`.
diff --git a/tests/ui/chalkify/arithmetic.rs b/tests/ui/chalkify/arithmetic.rs
deleted file mode 100644
index 6c78a71b0..000000000
--- a/tests/ui/chalkify/arithmetic.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-fn main() {
- 1 + 2;
- 3 * 6;
- 2 - 5;
- 17 / 6;
- 23 % 11;
- 4 & 6;
- 7 | 15;
- 4 << 7;
- 123 >> 3;
- 1 == 2;
- 5 != 5;
- 6 < 2;
- 7 > 11;
- 3 <= 1;
- 9 >= 14;
-}
diff --git a/tests/ui/chalkify/assert.rs b/tests/ui/chalkify/assert.rs
deleted file mode 100644
index 834c8935e..000000000
--- a/tests/ui/chalkify/assert.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-// run-pass
-// compile-flags: -Z trait-solver=chalk
-
-fn main() {
- assert_eq!(1, 1);
-}
diff --git a/tests/ui/chalkify/basic.rs b/tests/ui/chalkify/basic.rs
deleted file mode 100644
index 4a7cd9396..000000000
--- a/tests/ui/chalkify/basic.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo {}
-
-struct Bar {}
-
-impl Foo for Bar {}
-
-fn main() -> () {
- let _ = Bar {};
-}
diff --git a/tests/ui/chalkify/bugs/async.stderr b/tests/ui/chalkify/bugs/async.stderr
deleted file mode 100644
index 7e64e67f2..000000000
--- a/tests/ui/chalkify/bugs/async.stderr
+++ /dev/null
@@ -1,29 +0,0 @@
-error[E0277]: `[async fn body@$DIR/async.rs:23:29: 25:2]` is not a future
- --> $DIR/async.rs:23:25
- |
-LL | async fn foo(x: u32) -> u32 {
- | ^^^ `[async fn body@$DIR/async.rs:23:29: 25:2]` is not a future
- |
- = help: the trait `Future` is not implemented for `[async fn body@$DIR/async.rs:23:29: 25:2]`
- = note: [async fn body@$DIR/async.rs:23:29: 25:2] must be a future or must implement `IntoFuture` to be awaited
-
-error: internal compiler error: projection clauses should be implied from elsewhere. obligation: `Obligation(predicate=Binder(ProjectionPredicate(AliasTy { substs: [[async fn body@$DIR/async.rs:23:29: 25:2]], def_id: ... }, Term::Ty(u32)), []), depth=0)`
- --> $DIR/async.rs:23:25
- |
-LL | async fn foo(x: u32) -> u32 {
- | ^^^query stack during panic:
-#0 [typeck] type-checking `foo`
-#1 [thir_body] building THIR for `foo`
-#2 [check_match] match-checking `foo`
-#3 [mir_built] building MIR for `foo`
-#4 [unsafety_check_result] unsafety-checking `foo`
-#5 [mir_const] preparing `foo` for borrow checking
-#6 [mir_promoted] promoting constants in MIR for `foo`
-#7 [mir_borrowck] borrow-checking `foo`
-#8 [type_of] computing type of `foo::{opaque#0}`
-#9 [check_mod_item_types] checking item types in top-level module
-#10 [analysis] running analysis passes on this crate
-end of query stack
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/chalkify/builtin-copy-clone.rs b/tests/ui/chalkify/builtin-copy-clone.rs
deleted file mode 100644
index a478c006e..000000000
--- a/tests/ui/chalkify/builtin-copy-clone.rs
+++ /dev/null
@@ -1,45 +0,0 @@
-// run-pass
-// compile-flags: -Z trait-solver=chalk
-
-// Test that `Clone` is correctly implemented for builtin types.
-
-#[derive(Copy, Clone)]
-struct S(#[allow(unused_tuple_struct_fields)] i32);
-
-fn test_clone<T: Clone>(arg: T) {
- let _ = arg.clone();
-}
-
-fn test_copy<T: Copy>(arg: T) {
- let _ = arg;
- let _ = arg;
-}
-
-fn test_copy_clone<T: Copy + Clone>(arg: T) {
- test_copy(arg);
- test_clone(arg);
-}
-
-fn foo() { }
-
-fn main() {
- // FIXME: add closures when they're considered WF
- test_copy_clone(foo);
- let f: fn() = foo;
- test_copy_clone(f);
- // FIXME(#86252): reinstate array test after chalk upgrade
- //test_copy_clone([1; 56]);
- test_copy_clone((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1));
- test_copy_clone((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, 'a', 1.1));
- test_copy_clone(());
- test_copy_clone(((1, 1), (1, 1, 1), (1.1, 1, 1, 'a'), ()));
-
- let a = (
- (S(1), S(0)),
- (
- (S(0), S(0), S(1)),
- S(0)
- )
- );
- test_copy_clone(a);
-}
diff --git a/tests/ui/chalkify/chalk_initial_program.rs b/tests/ui/chalkify/chalk_initial_program.rs
deleted file mode 100644
index 21de72b6f..000000000
--- a/tests/ui/chalkify/chalk_initial_program.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-
-impl Foo for i32 { }
-
-impl Foo for u32 { }
-
-fn gimme<F: Foo>() { }
-
-// Note: this also tests that `std::process::Termination` is implemented for `()`.
-fn main() {
- gimme::<i32>();
- gimme::<u32>();
- gimme::<f32>(); //~ERROR the trait bound `f32: Foo` is not satisfied
-}
diff --git a/tests/ui/chalkify/chalk_initial_program.stderr b/tests/ui/chalkify/chalk_initial_program.stderr
deleted file mode 100644
index 343c0a318..000000000
--- a/tests/ui/chalkify/chalk_initial_program.stderr
+++ /dev/null
@@ -1,18 +0,0 @@
-error[E0277]: the trait bound `f32: Foo` is not satisfied
- --> $DIR/chalk_initial_program.rs:15:13
- |
-LL | gimme::<f32>();
- | ^^^ the trait `Foo` is not implemented for `f32`
- |
- = help: the following other types implement trait `Foo`:
- i32
- u32
-note: required by a bound in `gimme`
- --> $DIR/chalk_initial_program.rs:9:13
- |
-LL | fn gimme<F: Foo>() { }
- | ^^^ required by this bound in `gimme`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/chalkify/closure.rs b/tests/ui/chalkify/closure.rs
deleted file mode 100644
index a908a1e97..000000000
--- a/tests/ui/chalkify/closure.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-// compile-flags: -Z trait-solver=chalk
-
-fn main() -> () {
- let t = || {};
- t();
-
- let mut a = 0;
- let mut b = move || {
- a = 1;
- };
- b();
-
- let mut c = b;
-
- c();
- b();
-
- let mut a = 0;
- let mut b = || {
- a = 1;
- };
- b();
-
- let mut c = b;
-
- c();
- b(); //~ ERROR
-
- // FIXME(chalk): this doesn't quite work
- /*
- let b = |c| {
- c
- };
-
- let a = &32;
- b(a);
- */
-}
diff --git a/tests/ui/chalkify/closure.stderr b/tests/ui/chalkify/closure.stderr
deleted file mode 100644
index a33c0ba0d..000000000
--- a/tests/ui/chalkify/closure.stderr
+++ /dev/null
@@ -1,22 +0,0 @@
-error[E0382]: borrow of moved value: `b`
- --> $DIR/closure.rs:27:5
- |
-LL | let mut c = b;
- | - value moved here
-...
-LL | b();
- | ^ value borrowed here after move
- |
-note: closure cannot be moved more than once as it is not `Copy` due to moving the variable `a` out of its environment
- --> $DIR/closure.rs:20:9
- |
-LL | a = 1;
- | ^
-help: consider mutably borrowing `b`
- |
-LL | let mut c = &mut b;
- | ++++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/chalkify/generic_impls.rs b/tests/ui/chalkify/generic_impls.rs
deleted file mode 100644
index 7d33e12d8..000000000
--- a/tests/ui/chalkify/generic_impls.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-
-impl<T> Foo for (T, u32) { }
-
-fn gimme<F: Foo>() { }
-
-fn foo<T>() {
- gimme::<(T, u32)>();
- gimme::<(Option<T>, u32)>();
- gimme::<(Option<T>, f32)>(); //~ ERROR
-}
-
-fn main() {
- gimme::<(i32, u32)>();
- gimme::<(i32, f32)>(); //~ ERROR
-}
diff --git a/tests/ui/chalkify/generic_impls.stderr b/tests/ui/chalkify/generic_impls.stderr
deleted file mode 100644
index d4a8354d3..000000000
--- a/tests/ui/chalkify/generic_impls.stderr
+++ /dev/null
@@ -1,29 +0,0 @@
-error[E0277]: the trait bound `(Option<T>, f32): Foo` is not satisfied
- --> $DIR/generic_impls.rs:12:13
- |
-LL | gimme::<(Option<T>, f32)>();
- | ^^^^^^^^^^^^^^^^ the trait `Foo` is not implemented for `(Option<T>, f32)`
- |
- = help: the trait `Foo` is implemented for `(T, u32)`
-note: required by a bound in `gimme`
- --> $DIR/generic_impls.rs:7:13
- |
-LL | fn gimme<F: Foo>() { }
- | ^^^ required by this bound in `gimme`
-
-error[E0277]: the trait bound `(i32, f32): Foo` is not satisfied
- --> $DIR/generic_impls.rs:17:13
- |
-LL | gimme::<(i32, f32)>();
- | ^^^^^^^^^^ the trait `Foo` is not implemented for `(i32, f32)`
- |
- = help: the trait `Foo` is implemented for `(T, u32)`
-note: required by a bound in `gimme`
- --> $DIR/generic_impls.rs:7:13
- |
-LL | fn gimme<F: Foo>() { }
- | ^^^ required by this bound in `gimme`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/chalkify/impl_wf.rs b/tests/ui/chalkify/impl_wf.rs
deleted file mode 100644
index c8dfd4c3a..000000000
--- a/tests/ui/chalkify/impl_wf.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo: Sized { }
-
-trait Bar {
- type Item: Foo;
-}
-
-impl Foo for i32 { }
-
-impl Foo for str { }
-//~^ ERROR the size for values of type `str` cannot be known at compilation time
-
-
-// Implicit `T: Sized` bound.
-impl<T> Foo for Option<T> { }
-
-trait Baz<U: ?Sized> where U: Foo { }
-
-impl Baz<i32> for i32 { }
-
-impl Baz<f32> for f32 { }
-//~^ ERROR the trait bound `f32: Foo` is not satisfied
-
-fn main() {
-}
diff --git a/tests/ui/chalkify/impl_wf.stderr b/tests/ui/chalkify/impl_wf.stderr
deleted file mode 100644
index 84c32fa37..000000000
--- a/tests/ui/chalkify/impl_wf.stderr
+++ /dev/null
@@ -1,29 +0,0 @@
-error[E0277]: the size for values of type `str` cannot be known at compilation time
- --> $DIR/impl_wf.rs:11:14
- |
-LL | impl Foo for str { }
- | ^^^ doesn't have a size known at compile-time
- |
- = help: the trait `Sized` is not implemented for `str`
-note: required by a bound in `Foo`
- --> $DIR/impl_wf.rs:3:12
- |
-LL | trait Foo: Sized { }
- | ^^^^^ required by this bound in `Foo`
-
-error[E0277]: the trait bound `f32: Foo` is not satisfied
- --> $DIR/impl_wf.rs:22:19
- |
-LL | impl Baz<f32> for f32 { }
- | ^^^ the trait `Foo` is not implemented for `f32`
- |
- = help: the trait `Foo` is implemented for `i32`
-note: required by a bound in `Baz`
- --> $DIR/impl_wf.rs:18:31
- |
-LL | trait Baz<U: ?Sized> where U: Foo { }
- | ^^^ required by this bound in `Baz`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/chalkify/impl_wf_2.rs b/tests/ui/chalkify/impl_wf_2.rs
deleted file mode 100644
index 325044ad6..000000000
--- a/tests/ui/chalkify/impl_wf_2.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Split out of impl_wf.rs to work around rust aborting compilation early
-
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo: Sized { }
-
-trait Bar {
- type Item: Foo;
-}
-
-impl Foo for i32 { }
-
-// Implicit `T: Sized` bound.
-impl<T> Foo for Option<T> { }
-
-impl Bar for () {
- type Item = i32;
-}
-
-impl<T> Bar for Option<T> {
- type Item = Option<T>;
-}
-
-impl Bar for f32 {
- type Item = f32;
- //~^ ERROR the trait bound `f32: Foo` is not satisfied
-}
-
-trait Baz<U: ?Sized> where U: Foo { }
-
-impl Baz<i32> for i32 { }
-
-fn main() {}
diff --git a/tests/ui/chalkify/impl_wf_2.stderr b/tests/ui/chalkify/impl_wf_2.stderr
deleted file mode 100644
index 1c1df644b..000000000
--- a/tests/ui/chalkify/impl_wf_2.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error[E0277]: the trait bound `f32: Foo` is not satisfied
- --> $DIR/impl_wf_2.rs:25:17
- |
-LL | type Item = f32;
- | ^^^ the trait `Foo` is not implemented for `f32`
- |
- = help: the trait `Foo` is implemented for `i32`
-note: required by a bound in `Bar::Item`
- --> $DIR/impl_wf_2.rs:8:16
- |
-LL | type Item: Foo;
- | ^^^ required by this bound in `Bar::Item`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/chalkify/inherent_impl.rs b/tests/ui/chalkify/inherent_impl.rs
deleted file mode 100644
index f0f24d485..000000000
--- a/tests/ui/chalkify/inherent_impl.rs
+++ /dev/null
@@ -1,42 +0,0 @@
-// run-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-
-impl Foo for i32 { }
-
-struct S<T: Foo> {
- x: T,
-}
-
-fn only_foo<T: Foo>(_x: &T) { }
-
-impl<T> S<T> {
- // Test that we have the correct environment inside an inherent method.
- fn dummy_foo(&self) {
- only_foo(&self.x)
- }
-}
-
-trait Bar { }
-impl Bar for u32 { }
-
-fn only_bar<T: Bar>() { }
-
-impl<T> S<T> {
- // Test that the environment of `dummy_bar` adds up with the environment
- // of the inherent impl.
- fn dummy_bar<U: Bar>(&self) {
- only_foo(&self.x);
- only_bar::<U>();
- }
-}
-
-fn main() {
- let s = S {
- x: 5,
- };
-
- s.dummy_bar::<u32>();
- s.dummy_foo();
-}
diff --git a/tests/ui/chalkify/inherent_impl_min.rs b/tests/ui/chalkify/inherent_impl_min.rs
deleted file mode 100644
index 3eda7102d..000000000
--- a/tests/ui/chalkify/inherent_impl_min.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-// run-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-
-impl Foo for i32 { }
-
-struct S<T: Foo> {
- x: T,
-}
-
-fn only_foo<T: Foo>(_x: &T) { }
-
-impl<T> S<T> {
- // Test that we have the correct environment inside an inherent method.
- fn dummy_foo(&self) {
- only_foo(&self.x)
- }
-}
-
-fn main() {
- let s = S {
- x: 5,
- };
-
- s.dummy_foo();
-}
diff --git a/tests/ui/chalkify/lower_env1.rs b/tests/ui/chalkify/lower_env1.rs
deleted file mode 100644
index c8762001e..000000000
--- a/tests/ui/chalkify/lower_env1.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-#![allow(dead_code)]
-
-trait Foo { }
-
-trait Bar where Self: Foo { }
-
-fn bar<T: Bar + ?Sized>() {
-}
-
-fn main() {
-}
diff --git a/tests/ui/chalkify/lower_env2.rs b/tests/ui/chalkify/lower_env2.rs
deleted file mode 100644
index 7d4f81f12..000000000
--- a/tests/ui/chalkify/lower_env2.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-#![allow(dead_code)]
-
-trait Foo { }
-
-struct S<'a, T: ?Sized> where T: Foo {
- data: &'a T,
-}
-
-fn bar<T: Foo>(_x: S<'_, T>) { // note that we have an implicit `T: Sized` bound
-}
-
-fn main() {
-}
diff --git a/tests/ui/chalkify/lower_env3.rs b/tests/ui/chalkify/lower_env3.rs
deleted file mode 100644
index 5b70c4abb..000000000
--- a/tests/ui/chalkify/lower_env3.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-#![allow(dead_code)]
-
-trait Foo {
- fn foo(&self);
-}
-
-impl<T> Foo for T where T: Clone {
- fn foo(&self) {
- }
-}
-
-fn main() {
-}
diff --git a/tests/ui/chalkify/lower_impl.rs b/tests/ui/chalkify/lower_impl.rs
deleted file mode 100644
index 6f79b3ba3..000000000
--- a/tests/ui/chalkify/lower_impl.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-
-impl<T: 'static> Foo for T where T: Iterator<Item = i32> { }
-
-trait Bar {
- type Assoc;
-}
-
-impl<T> Bar for T where T: Iterator<Item = i32> {
- type Assoc = Vec<T>;
-}
-
-fn main() {
-}
diff --git a/tests/ui/chalkify/lower_struct.rs b/tests/ui/chalkify/lower_struct.rs
deleted file mode 100644
index 6be0d4dd5..000000000
--- a/tests/ui/chalkify/lower_struct.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-struct Foo<'a, T> where Box<T>: Clone {
- _x: std::marker::PhantomData<&'a T>,
-}
-
-fn main() { }
diff --git a/tests/ui/chalkify/lower_trait.rs b/tests/ui/chalkify/lower_trait.rs
deleted file mode 100644
index 8f5b35822..000000000
--- a/tests/ui/chalkify/lower_trait.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Bar { }
-
-trait Foo<S, T: ?Sized> {
- type Assoc: Bar + ?Sized;
-}
-
-fn main() {
-}
diff --git a/tests/ui/chalkify/lower_trait_higher_rank.rs b/tests/ui/chalkify/lower_trait_higher_rank.rs
deleted file mode 100644
index f04a1deea..000000000
--- a/tests/ui/chalkify/lower_trait_higher_rank.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo<F: ?Sized> where for<'a> F: Fn(&'a (u8, u16)) -> &'a u8
-{
-}
-
-fn main() {
-}
diff --git a/tests/ui/chalkify/lower_trait_where_clause.rs b/tests/ui/chalkify/lower_trait_where_clause.rs
deleted file mode 100644
index a21d2f319..000000000
--- a/tests/ui/chalkify/lower_trait_where_clause.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-use std::borrow::Borrow;
-
-trait Foo<'a, 'b, T, U>
-where
- T: Borrow<U> + ?Sized,
- U: ?Sized + 'b,
- 'a: 'b,
- Box<T>:, // NOTE(#53696) this checks an empty list of bounds.
-{
-}
-
-fn main() {
-}
diff --git a/tests/ui/chalkify/println.rs b/tests/ui/chalkify/println.rs
deleted file mode 100644
index edddc3821..000000000
--- a/tests/ui/chalkify/println.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-fn main() {
- println!("hello");
-}
diff --git a/tests/ui/chalkify/projection.rs b/tests/ui/chalkify/projection.rs
deleted file mode 100644
index 19bb2ae14..000000000
--- a/tests/ui/chalkify/projection.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// run-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-
-trait Bar {
- type Item: Foo;
-}
-
-impl Foo for i32 { }
-impl Bar for i32 {
- type Item = i32;
-}
-
-fn only_foo<T: Foo>() { }
-
-fn only_bar<T: Bar>() {
- // `T` implements `Bar` hence `<T as Bar>::Item` must also implement `Bar`
- only_foo::<T::Item>()
-}
-
-fn main() {
- only_bar::<i32>();
- only_foo::<<i32 as Bar>::Item>();
-}
diff --git a/tests/ui/chalkify/recursive_where_clause_on_type.rs b/tests/ui/chalkify/recursive_where_clause_on_type.rs
deleted file mode 100644
index c2c8aa6aa..000000000
--- a/tests/ui/chalkify/recursive_where_clause_on_type.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// FIXME(chalk): should fail, see comments
-// check-fail
-// compile-flags: -Z trait-solver=chalk
-
-#![feature(trivial_bounds)]
-
-trait Bar {
- fn foo();
-}
-trait Foo: Bar { }
-
-struct S where S: Foo;
-
-impl Foo for S {
-}
-
-fn bar<T: Bar>() {
- T::foo();
-}
-
-fn foo<T: Foo>() {
- bar::<T>()
-}
-
-fn main() {
- // For some reason, the error is duplicated...
-
- foo::<S>() //~ ERROR the type `S` is not well-formed
- //~^ ERROR the type `S` is not well-formed
-}
diff --git a/tests/ui/chalkify/recursive_where_clause_on_type.stderr b/tests/ui/chalkify/recursive_where_clause_on_type.stderr
deleted file mode 100644
index cead5adea..000000000
--- a/tests/ui/chalkify/recursive_where_clause_on_type.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error: the type `S` is not well-formed
- --> $DIR/recursive_where_clause_on_type.rs:28:11
- |
-LL | foo::<S>()
- | ^
-
-error: the type `S` is not well-formed
- --> $DIR/recursive_where_clause_on_type.rs:28:5
- |
-LL | foo::<S>()
- | ^^^^^^^^
-
-error: aborting due to 2 previous errors
-
diff --git a/tests/ui/chalkify/super_trait.rs b/tests/ui/chalkify/super_trait.rs
deleted file mode 100644
index 540ae51e5..000000000
--- a/tests/ui/chalkify/super_trait.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-// run-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-trait Bar: Foo { }
-
-impl Foo for i32 { }
-impl Bar for i32 { }
-
-fn only_foo<T: Foo>() { }
-
-fn only_bar<T: Bar>() {
- // `T` implements `Bar` hence `T` must also implement `Foo`
- only_foo::<T>()
-}
-
-fn main() {
- only_bar::<i32>()
-}
diff --git a/tests/ui/chalkify/trait-objects.rs b/tests/ui/chalkify/trait-objects.rs
deleted file mode 100644
index 144d9788b..000000000
--- a/tests/ui/chalkify/trait-objects.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-// check-pass
-// compile-flags: -Z trait-solver=chalk
-
-use std::fmt::Display;
-
-fn main() {
- let d: &dyn Display = &mut 3;
- d.to_string();
- (&d).to_string();
- let f: &dyn Fn(i32) -> _ = &|x| x + x;
- f(2);
-}
diff --git a/tests/ui/chalkify/trait_implied_bound.rs b/tests/ui/chalkify/trait_implied_bound.rs
deleted file mode 100644
index f97dbf6b7..000000000
--- a/tests/ui/chalkify/trait_implied_bound.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// run-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-trait Bar<U> where U: Foo { }
-
-impl Foo for i32 { }
-impl Bar<i32> for i32 { }
-
-fn only_foo<T: Foo>() { }
-
-fn only_bar<U, T: Bar<U>>() {
- only_foo::<U>()
-}
-
-fn main() {
- only_bar::<i32, i32>()
-}
diff --git a/tests/ui/chalkify/type_implied_bound.rs b/tests/ui/chalkify/type_implied_bound.rs
deleted file mode 100644
index 70f1b4265..000000000
--- a/tests/ui/chalkify/type_implied_bound.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-// run-pass
-// compile-flags: -Z trait-solver=chalk
-
-trait Eq { }
-trait Hash: Eq { }
-
-impl Eq for i32 { }
-impl Hash for i32 { }
-
-struct Set<T: Hash> {
- _x: T,
-}
-
-fn only_eq<T: Eq>() { }
-
-fn take_a_set<T>(_: &Set<T>) {
- // `Set<T>` is an input type of `take_a_set`, hence we know that
- // `T` must implement `Hash`, and we know in turn that `T` must
- // implement `Eq`.
- only_eq::<T>()
-}
-
-fn main() {
- let set = Set {
- _x: 5,
- };
-
- take_a_set(&set);
-}
diff --git a/tests/ui/chalkify/type_inference.rs b/tests/ui/chalkify/type_inference.rs
deleted file mode 100644
index d7167d0dc..000000000
--- a/tests/ui/chalkify/type_inference.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-impl Foo for i32 { }
-
-trait Bar { }
-impl Bar for i32 { }
-impl Bar for u32 { }
-
-fn only_foo<T: Foo>(_x: T) { }
-
-fn only_bar<T: Bar>(_x: T) { }
-
-fn main() {
- let x = 5.0;
-
- // The only type which implements `Foo` is `i32`, so the chalk trait solver
- // is expecting a variable of type `i32`. This behavior differs from the
- // old-style trait solver. I guess this will change, that's why I'm
- // adding that test.
- // FIXME(chalk): order of these two errors is non-deterministic,
- // so let's just hide one for now
- //only_foo(x); // ERROR the trait bound `f64: Foo` is not satisfied
-
- // Here we have two solutions so we get back the behavior of the old-style
- // trait solver.
- only_bar(x); //~ ERROR the trait bound `{float}: Bar` is not satisfied
-}
diff --git a/tests/ui/chalkify/type_inference.stderr b/tests/ui/chalkify/type_inference.stderr
deleted file mode 100644
index 508a6dd13..000000000
--- a/tests/ui/chalkify/type_inference.stderr
+++ /dev/null
@@ -1,20 +0,0 @@
-error[E0277]: the trait bound `{float}: Bar` is not satisfied
- --> $DIR/type_inference.rs:27:14
- |
-LL | only_bar(x);
- | -------- ^ the trait `Bar` is not implemented for `{float}`
- | |
- | required by a bound introduced by this call
- |
- = help: the following other types implement trait `Bar`:
- i32
- u32
-note: required by a bound in `only_bar`
- --> $DIR/type_inference.rs:12:16
- |
-LL | fn only_bar<T: Bar>(_x: T) { }
- | ^^^ required by this bound in `only_bar`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/chalkify/type_wf.rs b/tests/ui/chalkify/type_wf.rs
deleted file mode 100644
index 37d2f5ca8..000000000
--- a/tests/ui/chalkify/type_wf.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// check-fail
-// compile-flags: -Z trait-solver=chalk
-
-trait Foo { }
-
-struct S<T: Foo> {
- x: T,
-}
-
-impl Foo for i32 { }
-impl<T> Foo for Option<T> { }
-
-fn main() {
- let s = S {
- x: 5,
- };
-
- let s = S {
- x: 5.0, //~ ERROR the trait bound `{float}: Foo` is not satisfied
- };
-
- let s = S {
- x: Some(5.0),
- };
-}
diff --git a/tests/ui/chalkify/type_wf.stderr b/tests/ui/chalkify/type_wf.stderr
deleted file mode 100644
index 6e8daf635..000000000
--- a/tests/ui/chalkify/type_wf.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error[E0277]: the trait bound `{float}: Foo` is not satisfied
- --> $DIR/type_wf.rs:19:12
- |
-LL | x: 5.0,
- | ^^^ the trait `Foo` is not implemented for `{float}`
- |
- = help: the trait `Foo` is implemented for `i32`
-note: required by a bound in `S`
- --> $DIR/type_wf.rs:6:13
- |
-LL | struct S<T: Foo> {
- | ^^^ required by this bound in `S`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.rs b/tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.rs
index 41b09ba03..c3898afa9 100644
--- a/tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.rs
+++ b/tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.rs
@@ -87,6 +87,31 @@ fn test_4_should_not_capture_array() {
}
};
c();
+
+ // We also do not need to capture an array
+ // behind a reference (#112607)
+ let array: &[i32; 3] = &[0; 3];
+ let c = #[rustc_capture_analysis]
+ || {
+ //~^ First Pass analysis includes:
+ match array {
+ [_, _, _] => {}
+ }
+ };
+ c();
+
+ // We should still not insert a read if the array is inside an
+ // irrefutable pattern
+ struct Foo<T>(T);
+ let f = &Foo(&[10; 3]);
+ let c = #[rustc_capture_analysis]
+ || {
+ //~^ First Pass analysis includes:
+ match f {
+ Foo([_, _, _]) => ()
+ }
+ };
+ c();
}
// Testing MultiVariant patterns
diff --git a/tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.stderr b/tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.stderr
index e137af1a0..c3c3f8b84 100644
--- a/tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.stderr
+++ b/tests/ui/closures/2229_closure_analysis/match/patterns-capture-analysis.stderr
@@ -109,7 +109,29 @@ LL | | };
| |_____^
error: First Pass analysis includes:
- --> $DIR/patterns-capture-analysis.rs:105:5
+ --> $DIR/patterns-capture-analysis.rs:95:5
+ |
+LL | / || {
+LL | |
+LL | | match array {
+LL | | [_, _, _] => {}
+LL | | }
+LL | | };
+ | |_____^
+
+error: First Pass analysis includes:
+ --> $DIR/patterns-capture-analysis.rs:108:5
+ |
+LL | / || {
+LL | |
+LL | | match f {
+LL | | Foo([_, _, _]) => ()
+LL | | }
+LL | | };
+ | |_____^
+
+error: First Pass analysis includes:
+ --> $DIR/patterns-capture-analysis.rs:130:5
|
LL | / || {
LL | |
@@ -121,13 +143,13 @@ LL | | };
| |_____^
|
note: Capturing variant[] -> ImmBorrow
- --> $DIR/patterns-capture-analysis.rs:108:15
+ --> $DIR/patterns-capture-analysis.rs:133:15
|
LL | match variant {
| ^^^^^^^
error: Min Capture analysis includes:
- --> $DIR/patterns-capture-analysis.rs:105:5
+ --> $DIR/patterns-capture-analysis.rs:130:5
|
LL | / || {
LL | |
@@ -139,13 +161,13 @@ LL | | };
| |_____^
|
note: Min Capture variant[] -> ImmBorrow
- --> $DIR/patterns-capture-analysis.rs:108:15
+ --> $DIR/patterns-capture-analysis.rs:133:15
|
LL | match variant {
| ^^^^^^^
error: First Pass analysis includes:
- --> $DIR/patterns-capture-analysis.rs:123:5
+ --> $DIR/patterns-capture-analysis.rs:148:5
|
LL | / || {
LL | |
@@ -157,13 +179,13 @@ LL | | };
| |_____^
|
note: Capturing slice[] -> ImmBorrow
- --> $DIR/patterns-capture-analysis.rs:126:15
+ --> $DIR/patterns-capture-analysis.rs:151:15
|
LL | match slice {
| ^^^^^
error: Min Capture analysis includes:
- --> $DIR/patterns-capture-analysis.rs:123:5
+ --> $DIR/patterns-capture-analysis.rs:148:5
|
LL | / || {
LL | |
@@ -175,13 +197,13 @@ LL | | };
| |_____^
|
note: Min Capture slice[] -> ImmBorrow
- --> $DIR/patterns-capture-analysis.rs:126:15
+ --> $DIR/patterns-capture-analysis.rs:151:15
|
LL | match slice {
| ^^^^^
error: First Pass analysis includes:
- --> $DIR/patterns-capture-analysis.rs:135:5
+ --> $DIR/patterns-capture-analysis.rs:160:5
|
LL | / || {
LL | |
@@ -193,13 +215,13 @@ LL | | };
| |_____^
|
note: Capturing slice[] -> ImmBorrow
- --> $DIR/patterns-capture-analysis.rs:138:15
+ --> $DIR/patterns-capture-analysis.rs:163:15
|
LL | match slice {
| ^^^^^
error: Min Capture analysis includes:
- --> $DIR/patterns-capture-analysis.rs:135:5
+ --> $DIR/patterns-capture-analysis.rs:160:5
|
LL | / || {
LL | |
@@ -211,13 +233,13 @@ LL | | };
| |_____^
|
note: Min Capture slice[] -> ImmBorrow
- --> $DIR/patterns-capture-analysis.rs:138:15
+ --> $DIR/patterns-capture-analysis.rs:163:15
|
LL | match slice {
| ^^^^^
error: First Pass analysis includes:
- --> $DIR/patterns-capture-analysis.rs:147:5
+ --> $DIR/patterns-capture-analysis.rs:172:5
|
LL | / || {
LL | |
@@ -229,13 +251,13 @@ LL | | };
| |_____^
|
note: Capturing slice[] -> ImmBorrow
- --> $DIR/patterns-capture-analysis.rs:150:15
+ --> $DIR/patterns-capture-analysis.rs:175:15
|
LL | match slice {
| ^^^^^
error: Min Capture analysis includes:
- --> $DIR/patterns-capture-analysis.rs:147:5
+ --> $DIR/patterns-capture-analysis.rs:172:5
|
LL | / || {
LL | |
@@ -247,13 +269,13 @@ LL | | };
| |_____^
|
note: Min Capture slice[] -> ImmBorrow
- --> $DIR/patterns-capture-analysis.rs:150:15
+ --> $DIR/patterns-capture-analysis.rs:175:15
|
LL | match slice {
| ^^^^^
error: First Pass analysis includes:
- --> $DIR/patterns-capture-analysis.rs:164:5
+ --> $DIR/patterns-capture-analysis.rs:189:5
|
LL | / || {
LL | |
@@ -264,5 +286,5 @@ LL | | }
LL | | };
| |_____^
-error: aborting due to 16 previous errors
+error: aborting due to 18 previous errors
diff --git a/tests/ui/closures/2229_closure_analysis/run_pass/disjoint-capture-in-same-closure.rs b/tests/ui/closures/2229_closure_analysis/run_pass/disjoint-capture-in-same-closure.rs
index 03400e0ee..6d4cf6fa5 100644
--- a/tests/ui/closures/2229_closure_analysis/run_pass/disjoint-capture-in-same-closure.rs
+++ b/tests/ui/closures/2229_closure_analysis/run_pass/disjoint-capture-in-same-closure.rs
@@ -15,7 +15,7 @@ struct Struct {
fn main() {
let mut s = Struct { x: 10, y: 10, s: String::new() };
- let mut c = {
+ let mut c = || {
s.x += 10;
s.y += 42;
s.s = String::from("new");
diff --git a/tests/ui/closures/2229_closure_analysis/run_pass/lit-pattern-matching-with-methods.rs b/tests/ui/closures/2229_closure_analysis/run_pass/lit-pattern-matching-with-methods.rs
index d2375aa69..a386e9f40 100644
--- a/tests/ui/closures/2229_closure_analysis/run_pass/lit-pattern-matching-with-methods.rs
+++ b/tests/ui/closures/2229_closure_analysis/run_pass/lit-pattern-matching-with-methods.rs
@@ -2,7 +2,7 @@
//check-pass
#![warn(unused)]
#![feature(rustc_attrs)]
-#![feature(btree_drain_filter)]
+#![feature(btree_extract_if)]
use std::collections::BTreeMap;
use std::panic::{catch_unwind, AssertUnwindSafe};
@@ -14,14 +14,14 @@ fn main() {
map.insert("c", ());
{
- let mut it = map.drain_filter(|_, _| true);
+ let mut it = map.extract_if(|_, _| true);
catch_unwind(AssertUnwindSafe(|| while it.next().is_some() {})).unwrap_err();
let result = catch_unwind(AssertUnwindSafe(|| it.next()));
assert!(matches!(result, Ok(None)));
}
{
- let mut it = map.drain_filter(|_, _| true);
+ let mut it = map.extract_if(|_, _| true);
catch_unwind(AssertUnwindSafe(|| while let Some(_) = it.next() {})).unwrap_err();
let result = catch_unwind(AssertUnwindSafe(|| it.next()));
assert!(matches!(result, Ok(None)));
diff --git a/tests/ui/closures/cannot-call-unsized-via-ptr-2.rs b/tests/ui/closures/cannot-call-unsized-via-ptr-2.rs
new file mode 100644
index 000000000..2d8565517
--- /dev/null
+++ b/tests/ui/closures/cannot-call-unsized-via-ptr-2.rs
@@ -0,0 +1,11 @@
+#![feature(unsized_fn_params)]
+
+fn main() {
+ // CoerceMany "LUB"
+ let f = if true { |_a| {} } else { |_b| {} };
+ //~^ ERROR the size for values of type `[u8]` cannot be known at compilation time
+ //~| ERROR the size for values of type `[u8]` cannot be known at compilation time
+
+ let slice: Box<[u8]> = Box::new([1; 8]);
+ f(*slice);
+}
diff --git a/tests/ui/closures/cannot-call-unsized-via-ptr-2.stderr b/tests/ui/closures/cannot-call-unsized-via-ptr-2.stderr
new file mode 100644
index 000000000..d88b84365
--- /dev/null
+++ b/tests/ui/closures/cannot-call-unsized-via-ptr-2.stderr
@@ -0,0 +1,21 @@
+error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
+ --> $DIR/cannot-call-unsized-via-ptr-2.rs:5:24
+ |
+LL | let f = if true { |_a| {} } else { |_b| {} };
+ | ^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[u8]`
+ = note: all function arguments must have a statically known size
+
+error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
+ --> $DIR/cannot-call-unsized-via-ptr-2.rs:5:41
+ |
+LL | let f = if true { |_a| {} } else { |_b| {} };
+ | ^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[u8]`
+ = note: all function arguments must have a statically known size
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/closures/cannot-call-unsized-via-ptr.rs b/tests/ui/closures/cannot-call-unsized-via-ptr.rs
new file mode 100644
index 000000000..5ce4650b0
--- /dev/null
+++ b/tests/ui/closures/cannot-call-unsized-via-ptr.rs
@@ -0,0 +1,10 @@
+#![feature(unsized_fn_params)]
+
+fn main() {
+ // Simple coercion
+ let f: fn([u8]) = |_result| {};
+ //~^ ERROR the size for values of type `[u8]` cannot be known at compilation time
+
+ let slice: Box<[u8]> = Box::new([1; 8]);
+ f(*slice);
+}
diff --git a/tests/ui/closures/cannot-call-unsized-via-ptr.stderr b/tests/ui/closures/cannot-call-unsized-via-ptr.stderr
new file mode 100644
index 000000000..9ecc66d5c
--- /dev/null
+++ b/tests/ui/closures/cannot-call-unsized-via-ptr.stderr
@@ -0,0 +1,12 @@
+error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
+ --> $DIR/cannot-call-unsized-via-ptr.rs:5:24
+ |
+LL | let f: fn([u8]) = |_result| {};
+ | ^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `[u8]`
+ = note: all function arguments must have a statically known size
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/closures/closure-move-sync.rs b/tests/ui/closures/closure-move-sync.rs
index ea2d1434c..3ee2b35f5 100644
--- a/tests/ui/closures/closure-move-sync.rs
+++ b/tests/ui/closures/closure-move-sync.rs
@@ -13,10 +13,4 @@ fn bar() {
t.join().unwrap();
}
-fn foo() {
- let (tx, _rx) = channel();
- thread::spawn(|| tx.send(()).unwrap());
- //~^ ERROR `Sender<()>` cannot be shared between threads safely
-}
-
fn main() {}
diff --git a/tests/ui/closures/closure-move-sync.stderr b/tests/ui/closures/closure-move-sync.stderr
index 64e3b51ea..aee903ac9 100644
--- a/tests/ui/closures/closure-move-sync.stderr
+++ b/tests/ui/closures/closure-move-sync.stderr
@@ -20,24 +20,6 @@ LL | let t = thread::spawn(|| {
note: required by a bound in `spawn`
--> $SRC_DIR/std/src/thread/mod.rs:LL:COL
-error[E0277]: `Sender<()>` cannot be shared between threads safely
- --> $DIR/closure-move-sync.rs:18:19
- |
-LL | thread::spawn(|| tx.send(()).unwrap());
- | ------------- ^^^^^^^^^^^^^^^^^^^^^^^ `Sender<()>` cannot be shared between threads safely
- | |
- | required by a bound introduced by this call
- |
- = help: the trait `Sync` is not implemented for `Sender<()>`
- = note: required for `&Sender<()>` to implement `Send`
-note: required because it's used within this closure
- --> $DIR/closure-move-sync.rs:18:19
- |
-LL | thread::spawn(|| tx.send(()).unwrap());
- | ^^
-note: required by a bound in `spawn`
- --> $SRC_DIR/std/src/thread/mod.rs:LL:COL
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/closures/issue-111932.rs b/tests/ui/closures/issue-111932.rs
new file mode 100644
index 000000000..eb3fe08cb
--- /dev/null
+++ b/tests/ui/closures/issue-111932.rs
@@ -0,0 +1,9 @@
+trait Foo: std::fmt::Debug {}
+
+fn print_foos(foos: impl Iterator<Item = dyn Foo>) {
+ foos.for_each(|foo| { //~ ERROR [E0277]
+ println!("{:?}", foo); //~ ERROR [E0277]
+ });
+}
+
+fn main() {}
diff --git a/tests/ui/closures/issue-111932.stderr b/tests/ui/closures/issue-111932.stderr
new file mode 100644
index 000000000..937bdf3be
--- /dev/null
+++ b/tests/ui/closures/issue-111932.stderr
@@ -0,0 +1,26 @@
+error[E0277]: the size for values of type `(dyn Foo + 'static)` cannot be known at compilation time
+ --> $DIR/issue-111932.rs:4:20
+ |
+LL | foos.for_each(|foo| {
+ | ^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `(dyn Foo + 'static)`
+ = note: all function arguments must have a statically known size
+ = help: unsized fn params are gated as an unstable feature
+
+error[E0277]: the size for values of type `dyn Foo` cannot be known at compilation time
+ --> $DIR/issue-111932.rs:5:26
+ |
+LL | println!("{:?}", foo);
+ | ---- ^^^ doesn't have a size known at compile-time
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `Sized` is not implemented for `dyn Foo`
+note: required by a bound in `core::fmt::rt::Argument::<'a>::new_debug`
+ --> $SRC_DIR/core/src/fmt/rt.rs:LL:COL
+ = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/closures/issue-113087.rs b/tests/ui/closures/issue-113087.rs
new file mode 100644
index 000000000..a4edc2f2f
--- /dev/null
+++ b/tests/ui/closures/issue-113087.rs
@@ -0,0 +1,11 @@
+fn some_fn<'a>(_: &'a i32, _: impl FnOnce(&'a i32)) {}
+
+fn main() {
+ let some_closure = |_| {};
+
+ for a in [1] {
+ some_fn(&a, |c| { //~ ERROR does not live long enough
+ some_closure(c);
+ });
+ }
+}
diff --git a/tests/ui/closures/issue-113087.stderr b/tests/ui/closures/issue-113087.stderr
new file mode 100644
index 000000000..8ccef4a54
--- /dev/null
+++ b/tests/ui/closures/issue-113087.stderr
@@ -0,0 +1,16 @@
+error[E0597]: `a` does not live long enough
+ --> $DIR/issue-113087.rs:7:17
+ |
+LL | for a in [1] {
+ | - binding `a` declared here
+LL | some_fn(&a, |c| {
+ | ^^ borrowed value does not live long enough
+LL | some_closure(c);
+ | ------------ borrow later captured here by closure
+LL | });
+LL | }
+ | - `a` dropped here while still borrowed
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0597`.
diff --git a/tests/ui/closures/issue-72408-nested-closures-exponential.rs b/tests/ui/closures/issue-72408-nested-closures-exponential.rs
index 2d6ba9365..d064ebcef 100644
--- a/tests/ui/closures/issue-72408-nested-closures-exponential.rs
+++ b/tests/ui/closures/issue-72408-nested-closures-exponential.rs
@@ -1,4 +1,5 @@
// build-pass
+// ignore-compare-mode-next-solver (hangs)
// Closures include captured types twice in a type tree.
//
diff --git a/tests/ui/codegen/subtyping-enforces-type-equality.rs b/tests/ui/codegen/subtyping-enforces-type-equality.rs
new file mode 100644
index 000000000..a5ffcb3f8
--- /dev/null
+++ b/tests/ui/codegen/subtyping-enforces-type-equality.rs
@@ -0,0 +1,48 @@
+// ignore-pass
+// build-pass
+// edition:2021
+use std::future::Future;
+use std::pin::Pin;
+
+type BoxFuture<T> = Pin<Box<dyn Future<Output = T>>>;
+
+fn main() {
+ let _ = wrapper_call(handler);
+}
+
+async fn wrapper_call(handler: impl Handler) {
+ handler.call().await;
+}
+async fn handler() {
+ f(&()).await;
+}
+async fn f<'a>(db: impl Acquire<'a>) {
+ db.acquire().await;
+}
+
+trait Handler {
+ type Future: Future;
+ fn call(self) -> Self::Future;
+}
+
+impl<Fut, F> Handler for F
+where
+ F: Fn() -> Fut,
+ Fut: Future,
+{
+ type Future = Fut;
+ fn call(self) -> Self::Future {
+ loop {}
+ }
+}
+
+trait Acquire<'a> {
+ type Connection;
+ fn acquire(self) -> BoxFuture<Self::Connection>;
+}
+impl<'a> Acquire<'a> for &'a () {
+ type Connection = Self;
+ fn acquire(self) -> BoxFuture<Self> {
+ loop {}
+ }
+}
diff --git a/tests/ui/codegen/subtyping-enforces-type-equality.stderr b/tests/ui/codegen/subtyping-enforces-type-equality.stderr
new file mode 100644
index 000000000..870ca0f83
--- /dev/null
+++ b/tests/ui/codegen/subtyping-enforces-type-equality.stderr
@@ -0,0 +1 @@
+WARN rustc_codegen_ssa::mir::locals Unexpected initial operand type. See the issues/114858
diff --git a/tests/ui/codegen/subtyping-impacts-selection-1.rs b/tests/ui/codegen/subtyping-impacts-selection-1.rs
new file mode 100644
index 000000000..09e06f6d6
--- /dev/null
+++ b/tests/ui/codegen/subtyping-impacts-selection-1.rs
@@ -0,0 +1,44 @@
+// run-pass
+// revisions: mir codegen
+//[mir] compile-flags: -Zmir-opt-level=3
+//[codegen] compile-flags: -Zmir-opt-level=0
+
+// A regression test for #107205
+#![allow(coherence_leak_check)]
+struct Foo<T: 'static>(T);
+
+fn useful<'a>(_: &'a u8) {}
+
+trait GetInner {
+ type Assoc;
+ fn muahaha(&mut self) -> Self::Assoc;
+}
+
+impl GetInner for Foo<fn(&'static u8)> {
+ type Assoc = String;
+ fn muahaha(&mut self) -> String {
+ String::from("I am a string")
+ }
+}
+
+impl GetInner for Foo<for<'a> fn(&'a u8)> {
+ type Assoc = [usize; 3];
+ fn muahaha(&mut self) -> [usize; 3] {
+ [100; 3]
+ }
+}
+
+fn break_me(hr_fnptr: Box<Foo::<for<'a> fn(&'a u8)>>) -> Box<dyn GetInner<Assoc = String>> {
+ let lr_fnptr = hr_fnptr as Box<Foo<fn(&'static u8)>>;
+ lr_fnptr as Box<dyn GetInner<Assoc = String>>
+}
+
+fn main() {
+ drop(Box::new(Foo(useful as fn(&'static u8))) as Box<dyn GetInner<Assoc = String>>);
+ drop(Box::new(Foo(useful as fn(&u8))) as Box<dyn GetInner<Assoc = [usize; 3]>>);
+
+ let mut any = break_me(Box::new(Foo(useful)));
+
+ let evil_string = any.muahaha();
+ assert_eq!(evil_string, "I am a string");
+}
diff --git a/tests/ui/codegen/subtyping-impacts-selection-2.rs b/tests/ui/codegen/subtyping-impacts-selection-2.rs
new file mode 100644
index 000000000..921136775
--- /dev/null
+++ b/tests/ui/codegen/subtyping-impacts-selection-2.rs
@@ -0,0 +1,12 @@
+// run-pass
+// revisions: mir codegen
+//[mir] compile-flags: -Zmir-opt-level=3
+//[codegen] compile-flags: -Zmir-opt-level=0
+
+// A regression test for #107205
+
+const X: for<'b> fn(&'b ()) = |&()| ();
+fn main() {
+ let dyn_debug = Box::new(X) as Box<fn(&'static ())> as Box<dyn Send>;
+ drop(dyn_debug)
+}
diff --git a/tests/ui/issues/issue-3794.rs b/tests/ui/coercion/issue-3794.rs
index b1f028fbc..b1f028fbc 100644
--- a/tests/ui/issues/issue-3794.rs
+++ b/tests/ui/coercion/issue-3794.rs
diff --git a/tests/ui/coherence/coherence-inherited-subtyping.re.stderr b/tests/ui/coherence/coherence-inherited-subtyping.re.stderr
deleted file mode 100644
index 4701bc0b1..000000000
--- a/tests/ui/coherence/coherence-inherited-subtyping.re.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0592]: duplicate definitions with name `method1`
- --> $DIR/coherence-inherited-subtyping.rs:14:5
- |
-LL | fn method1(&self) {}
- | ^^^^^^^^^^^^^^^^^ duplicate definitions for `method1`
-...
-LL | fn method1(&self) {}
- | ----------------- other definition for `method1`
- |
- = note: this behavior recently changed as a result of a bug fix; see rust-lang/rust#56105 for details
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0592`.
diff --git a/tests/ui/coherence/coherence-inherited-subtyping.rs b/tests/ui/coherence/coherence-inherited-subtyping.rs
index 8587eb779..f35cd2103 100644
--- a/tests/ui/coherence/coherence-inherited-subtyping.rs
+++ b/tests/ui/coherence/coherence-inherited-subtyping.rs
@@ -4,8 +4,6 @@
// Note: This scenario is currently accepted, but as part of the
// universe transition (#56105) may eventually become an error.
-// revisions: old re
-
struct Foo<T> {
t: T,
}
diff --git a/tests/ui/coherence/coherence-inherited-subtyping.old.stderr b/tests/ui/coherence/coherence-inherited-subtyping.stderr
index 4701bc0b1..f60b2aa27 100644
--- a/tests/ui/coherence/coherence-inherited-subtyping.old.stderr
+++ b/tests/ui/coherence/coherence-inherited-subtyping.stderr
@@ -1,5 +1,5 @@
error[E0592]: duplicate definitions with name `method1`
- --> $DIR/coherence-inherited-subtyping.rs:14:5
+ --> $DIR/coherence-inherited-subtyping.rs:12:5
|
LL | fn method1(&self) {}
| ^^^^^^^^^^^^^^^^^ duplicate definitions for `method1`
diff --git a/tests/ui/coinduction/canonicalization-rerun.rs b/tests/ui/coinduction/canonicalization-rerun.rs
index b10ba3a81..c68895fc4 100644
--- a/tests/ui/coinduction/canonicalization-rerun.rs
+++ b/tests/ui/coinduction/canonicalization-rerun.rs
@@ -1,6 +1,6 @@
// check-pass
-// revisions: old new
-//[new] compile-flags: -Ztrait-solver=next
+// revisions: old next
+//[next] compile-flags: -Ztrait-solver=next
// If we use canonical goals during trait solving we have to reevaluate
// the root goal of a cycle until we hit a fixpoint.
diff --git a/tests/ui/const-generics/adt_const_params/const_param_ty_bad.stderr b/tests/ui/const-generics/adt_const_params/const_param_ty_bad.stderr
index de5704ee4..48910b82a 100644
--- a/tests/ui/const-generics/adt_const_params/const_param_ty_bad.stderr
+++ b/tests/ui/const-generics/adt_const_params/const_param_ty_bad.stderr
@@ -11,6 +11,10 @@ note: required by a bound in `check`
|
LL | fn check(_: impl std::marker::ConstParamTy) {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `check`
+help: use parentheses to call this function
+ |
+LL | check(main());
+ | ++
error[E0277]: `[closure@$DIR/const_param_ty_bad.rs:8:11: 8:13]` can't be used as a const parameter type
--> $DIR/const_param_ty_bad.rs:8:11
@@ -25,6 +29,10 @@ note: required by a bound in `check`
|
LL | fn check(_: impl std::marker::ConstParamTy) {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `check`
+help: use parentheses to call this closure
+ |
+LL | check(|| {}());
+ | ++
error[E0277]: `fn()` can't be used as a const parameter type
--> $DIR/const_param_ty_bad.rs:9:11
@@ -39,6 +47,10 @@ note: required by a bound in `check`
|
LL | fn check(_: impl std::marker::ConstParamTy) {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `check`
+help: use parentheses to call this function pointer
+ |
+LL | check(main as fn()());
+ | ++
error[E0277]: `&mut ()` can't be used as a const parameter type
--> $DIR/const_param_ty_bad.rs:10:11
@@ -48,11 +60,17 @@ LL | check(&mut ());
| |
| required by a bound introduced by this call
|
+ = note: `ConstParamTy` is implemented for `&()`, but not for `&mut ()`
note: required by a bound in `check`
--> $DIR/const_param_ty_bad.rs:4:18
|
LL | fn check(_: impl std::marker::ConstParamTy) {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `check`
+help: consider removing the leading `&`-reference
+ |
+LL - check(&mut ());
+LL + check(());
+ |
error[E0277]: `*mut ()` can't be used as a const parameter type
--> $DIR/const_param_ty_bad.rs:11:11
@@ -62,6 +80,7 @@ LL | check(&mut () as *mut ());
| |
| required by a bound introduced by this call
|
+ = help: the trait `ConstParamTy` is implemented for `()`
note: required by a bound in `check`
--> $DIR/const_param_ty_bad.rs:4:18
|
@@ -76,6 +95,7 @@ LL | check(&() as *const ());
| |
| required by a bound introduced by this call
|
+ = help: the trait `ConstParamTy` is implemented for `()`
note: required by a bound in `check`
--> $DIR/const_param_ty_bad.rs:4:18
|
diff --git a/tests/ui/const-generics/adt_const_params/const_param_ty_good.rs b/tests/ui/const-generics/adt_const_params/const_param_ty_good.rs
index 87ae83dd9..100ab332a 100644
--- a/tests/ui/const-generics/adt_const_params/const_param_ty_good.rs
+++ b/tests/ui/const-generics/adt_const_params/const_param_ty_good.rs
@@ -49,5 +49,7 @@ fn main() {
check::<D<u8>>();
check::<D<[&[bool]; 8]>>();
- // FIXME: test tuples
+ check::<()>();
+ check::<(i32,)>();
+ check::<(D<u8>, D<i32>)>();
}
diff --git a/tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.rs b/tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.rs
index 37986de48..08f7c5cb5 100644
--- a/tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.rs
+++ b/tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.rs
@@ -9,9 +9,11 @@ struct CantParam(ImplementsConstParamTy);
impl std::marker::ConstParamTy for CantParam {}
//~^ error: the type `CantParam` does not `#[derive(Eq)]`
+//~| error: the type `CantParam` does not `#[derive(PartialEq)]`
#[derive(std::marker::ConstParamTy)]
//~^ error: the type `CantParamDerive` does not `#[derive(Eq)]`
+//~| error: the type `CantParamDerive` does not `#[derive(PartialEq)]`
struct CantParamDerive(ImplementsConstParamTy);
fn check<T: std::marker::ConstParamTy>() {}
diff --git a/tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.stderr b/tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.stderr
index 52701d559..43c5b96dc 100644
--- a/tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.stderr
+++ b/tests/ui/const-generics/adt_const_params/const_param_ty_impl_no_structural_eq.stderr
@@ -1,3 +1,12 @@
+error[E0277]: the type `CantParam` does not `#[derive(PartialEq)]`
+ --> $DIR/const_param_ty_impl_no_structural_eq.rs:10:36
+ |
+LL | impl std::marker::ConstParamTy for CantParam {}
+ | ^^^^^^^^^ the trait `StructuralPartialEq` is not implemented for `CantParam`
+ |
+note: required by a bound in `ConstParamTy`
+ --> $SRC_DIR/core/src/marker.rs:LL:COL
+
error[E0277]: the type `CantParam` does not `#[derive(Eq)]`
--> $DIR/const_param_ty_impl_no_structural_eq.rs:10:36
|
@@ -7,8 +16,18 @@ LL | impl std::marker::ConstParamTy for CantParam {}
note: required by a bound in `ConstParamTy`
--> $SRC_DIR/core/src/marker.rs:LL:COL
+error[E0277]: the type `CantParamDerive` does not `#[derive(PartialEq)]`
+ --> $DIR/const_param_ty_impl_no_structural_eq.rs:14:10
+ |
+LL | #[derive(std::marker::ConstParamTy)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `StructuralPartialEq` is not implemented for `CantParamDerive`
+ |
+note: required by a bound in `ConstParamTy`
+ --> $SRC_DIR/core/src/marker.rs:LL:COL
+ = note: this error originates in the derive macro `std::marker::ConstParamTy` (in Nightly builds, run with -Z macro-backtrace for more info)
+
error[E0277]: the type `CantParamDerive` does not `#[derive(Eq)]`
- --> $DIR/const_param_ty_impl_no_structural_eq.rs:13:10
+ --> $DIR/const_param_ty_impl_no_structural_eq.rs:14:10
|
LL | #[derive(std::marker::ConstParamTy)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `StructuralEq` is not implemented for `CantParamDerive`
@@ -17,6 +36,6 @@ note: required by a bound in `ConstParamTy`
--> $SRC_DIR/core/src/marker.rs:LL:COL
= note: this error originates in the derive macro `std::marker::ConstParamTy` (in Nightly builds, run with -Z macro-backtrace for more info)
-error: aborting due to 2 previous errors
+error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.rs b/tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.rs
index d70377a20..c04e96c56 100644
--- a/tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.rs
+++ b/tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.rs
@@ -14,6 +14,7 @@ impl Eq for Union {}
impl std::marker::StructuralEq for Union {}
impl std::marker::ConstParamTy for Union {}
+//~^ ERROR the type `Union` does not `#[derive(PartialEq)]`
#[derive(std::marker::ConstParamTy)]
//~^ ERROR this trait cannot be derived for unions
diff --git a/tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.stderr b/tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.stderr
index 293703046..985b933c4 100644
--- a/tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.stderr
+++ b/tests/ui/const-generics/adt_const_params/const_param_ty_impl_union.stderr
@@ -1,8 +1,18 @@
error: this trait cannot be derived for unions
- --> $DIR/const_param_ty_impl_union.rs:18:10
+ --> $DIR/const_param_ty_impl_union.rs:19:10
|
LL | #[derive(std::marker::ConstParamTy)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
-error: aborting due to previous error
+error[E0277]: the type `Union` does not `#[derive(PartialEq)]`
+ --> $DIR/const_param_ty_impl_union.rs:16:36
+ |
+LL | impl std::marker::ConstParamTy for Union {}
+ | ^^^^^ the trait `StructuralPartialEq` is not implemented for `Union`
+ |
+note: required by a bound in `ConstParamTy`
+ --> $SRC_DIR/core/src/marker.rs:LL:COL
+
+error: aborting due to 2 previous errors
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/const-generics/const-argument-if-length.full.stderr b/tests/ui/const-generics/const-argument-if-length.full.stderr
index 2ceba59cf..7997026df 100644
--- a/tests/ui/const-generics/const-argument-if-length.full.stderr
+++ b/tests/ui/const-generics/const-argument-if-length.full.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
--> $DIR/const-argument-if-length.rs:15:12
|
LL | pub struct AtLeastByte<T: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | value: T,
| ^ doesn't have a size known at compile-time
|
diff --git a/tests/ui/const-generics/const-argument-if-length.min.stderr b/tests/ui/const-generics/const-argument-if-length.min.stderr
index f85e60f63..3ba9ffebd 100644
--- a/tests/ui/const-generics/const-argument-if-length.min.stderr
+++ b/tests/ui/const-generics/const-argument-if-length.min.stderr
@@ -11,7 +11,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
--> $DIR/const-argument-if-length.rs:15:12
|
LL | pub struct AtLeastByte<T: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | value: T,
| ^ doesn't have a size known at compile-time
|
diff --git a/tests/ui/const-generics/const-param-type-depends-on-type-param.full.stderr b/tests/ui/const-generics/const-param-type-depends-on-type-param.full.stderr
index 938fb08b7..e508890dd 100644
--- a/tests/ui/const-generics/const-param-type-depends-on-type-param.full.stderr
+++ b/tests/ui/const-generics/const-param-type-depends-on-type-param.full.stderr
@@ -6,16 +6,6 @@ LL | pub struct Dependent<T, const X: T>([(); X]);
|
= note: type parameters may not be used in the type of const parameters
-error[E0392]: parameter `T` is never used
- --> $DIR/const-param-type-depends-on-type-param.rs:11:22
- |
-LL | pub struct Dependent<T, const X: T>([(); X]);
- | ^ unused parameter
- |
- = help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
- = help: if you intended `T` to be a const parameter, use `const T: usize` instead
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
-Some errors have detailed explanations: E0392, E0770.
-For more information about an error, try `rustc --explain E0392`.
+For more information about this error, try `rustc --explain E0770`.
diff --git a/tests/ui/const-generics/const-param-type-depends-on-type-param.min.stderr b/tests/ui/const-generics/const-param-type-depends-on-type-param.min.stderr
index 938fb08b7..e508890dd 100644
--- a/tests/ui/const-generics/const-param-type-depends-on-type-param.min.stderr
+++ b/tests/ui/const-generics/const-param-type-depends-on-type-param.min.stderr
@@ -6,16 +6,6 @@ LL | pub struct Dependent<T, const X: T>([(); X]);
|
= note: type parameters may not be used in the type of const parameters
-error[E0392]: parameter `T` is never used
- --> $DIR/const-param-type-depends-on-type-param.rs:11:22
- |
-LL | pub struct Dependent<T, const X: T>([(); X]);
- | ^ unused parameter
- |
- = help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
- = help: if you intended `T` to be a const parameter, use `const T: usize` instead
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
-Some errors have detailed explanations: E0392, E0770.
-For more information about an error, try `rustc --explain E0392`.
+For more information about this error, try `rustc --explain E0770`.
diff --git a/tests/ui/const-generics/const-param-type-depends-on-type-param.rs b/tests/ui/const-generics/const-param-type-depends-on-type-param.rs
index 71d91fd7e..fc3aa9cbc 100644
--- a/tests/ui/const-generics/const-param-type-depends-on-type-param.rs
+++ b/tests/ui/const-generics/const-param-type-depends-on-type-param.rs
@@ -10,6 +10,5 @@
pub struct Dependent<T, const X: T>([(); X]);
//~^ ERROR: the type of const parameters must not depend on other generic parameters
-//~| ERROR: parameter `T` is never used
fn main() {}
diff --git a/tests/ui/const-generics/const-param-with-additional-obligations.rs b/tests/ui/const-generics/const-param-with-additional-obligations.rs
new file mode 100644
index 000000000..f53cf85cd
--- /dev/null
+++ b/tests/ui/const-generics/const-param-with-additional-obligations.rs
@@ -0,0 +1,17 @@
+#![feature(adt_const_params)]
+#![allow(incomplete_features)]
+
+use std::marker::ConstParamTy;
+
+#[derive(Eq, PartialEq)]
+struct Foo<T>(T);
+
+trait Other {}
+
+impl<T> ConstParamTy for Foo<T> where T: Other + ConstParamTy {}
+
+fn foo<const N: Foo<u8>>() {}
+//~^ ERROR `Foo<u8>` must implement `ConstParamTy` to be used as the type of a const generic parameter
+//~| NOTE `u8` must implement `Other`, but it does not
+
+fn main() {}
diff --git a/tests/ui/const-generics/const-param-with-additional-obligations.stderr b/tests/ui/const-generics/const-param-with-additional-obligations.stderr
new file mode 100644
index 000000000..f7ec4d574
--- /dev/null
+++ b/tests/ui/const-generics/const-param-with-additional-obligations.stderr
@@ -0,0 +1,11 @@
+error[E0741]: `Foo<u8>` must implement `ConstParamTy` to be used as the type of a const generic parameter
+ --> $DIR/const-param-with-additional-obligations.rs:13:17
+ |
+LL | fn foo<const N: Foo<u8>>() {}
+ | ^^^^^^^
+ |
+ = note: `u8` must implement `Other`, but it does not
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0741`.
diff --git a/tests/ui/const-generics/defaults/default-param-wf-concrete.stderr b/tests/ui/const-generics/defaults/default-param-wf-concrete.next.stderr
index e8ebddade..4259ce2b6 100644
--- a/tests/ui/const-generics/defaults/default-param-wf-concrete.stderr
+++ b/tests/ui/const-generics/defaults/default-param-wf-concrete.next.stderr
@@ -1,5 +1,5 @@
error[E0080]: evaluation of constant value failed
- --> $DIR/default-param-wf-concrete.rs:1:28
+ --> $DIR/default-param-wf-concrete.rs:4:28
|
LL | struct Foo<const N: u8 = { 255 + 1 }>;
| ^^^^^^^ attempt to compute `u8::MAX + 1_u8`, which would overflow
diff --git a/tests/ui/const-generics/defaults/default-param-wf-concrete.old.stderr b/tests/ui/const-generics/defaults/default-param-wf-concrete.old.stderr
new file mode 100644
index 000000000..4259ce2b6
--- /dev/null
+++ b/tests/ui/const-generics/defaults/default-param-wf-concrete.old.stderr
@@ -0,0 +1,9 @@
+error[E0080]: evaluation of constant value failed
+ --> $DIR/default-param-wf-concrete.rs:4:28
+ |
+LL | struct Foo<const N: u8 = { 255 + 1 }>;
+ | ^^^^^^^ attempt to compute `u8::MAX + 1_u8`, which would overflow
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/const-generics/defaults/default-param-wf-concrete.rs b/tests/ui/const-generics/defaults/default-param-wf-concrete.rs
index 41a52c7eb..09a00dd8e 100644
--- a/tests/ui/const-generics/defaults/default-param-wf-concrete.rs
+++ b/tests/ui/const-generics/defaults/default-param-wf-concrete.rs
@@ -1,3 +1,6 @@
+// revisions: old next
+//[next] compile-flags: -Ztrait-solver=next
+
struct Foo<const N: u8 = { 255 + 1 }>;
//~^ ERROR evaluation of constant value failed
fn main() {}
diff --git a/tests/ui/const-generics/exhaustive-value.stderr b/tests/ui/const-generics/exhaustive-value.stderr
index 76a83ba67..4a26e0977 100644
--- a/tests/ui/const-generics/exhaustive-value.stderr
+++ b/tests/ui/const-generics/exhaustive-value.stderr
@@ -6,13 +6,13 @@ LL | <() as Foo<N>>::test()
|
= help: the following other types implement trait `Foo<N>`:
<() as Foo<0>>
- <() as Foo<100>>
- <() as Foo<101>>
- <() as Foo<102>>
- <() as Foo<103>>
- <() as Foo<104>>
- <() as Foo<105>>
- <() as Foo<106>>
+ <() as Foo<1>>
+ <() as Foo<2>>
+ <() as Foo<3>>
+ <() as Foo<4>>
+ <() as Foo<5>>
+ <() as Foo<6>>
+ <() as Foo<7>>
and 248 others
error: aborting due to previous error
diff --git a/tests/ui/const-generics/float-generic.adt_const_params.stderr b/tests/ui/const-generics/float-generic.adt_const_params.stderr
index fef5ef0d1..6fe539047 100644
--- a/tests/ui/const-generics/float-generic.adt_const_params.stderr
+++ b/tests/ui/const-generics/float-generic.adt_const_params.stderr
@@ -3,8 +3,6 @@ error[E0741]: `f32` is forbidden as the type of a const generic parameter
|
LL | fn foo<const F: f32>() {}
| ^^^
- |
- = note: floats do not derive `Eq` or `Ord`, which are required for const parameters
error: aborting due to previous error
diff --git a/tests/ui/const-generics/forbid-non-structural_match-types.rs b/tests/ui/const-generics/forbid-non-structural_match-types.rs
index 6ae9d5cfb..4fec2a9f3 100644
--- a/tests/ui/const-generics/forbid-non-structural_match-types.rs
+++ b/tests/ui/const-generics/forbid-non-structural_match-types.rs
@@ -1,13 +1,15 @@
#![feature(adt_const_params)]
#![allow(incomplete_features)]
-#[derive(PartialEq, Eq)]
+use std::marker::ConstParamTy;
+
+#[derive(PartialEq, Eq, ConstParamTy)]
struct A;
struct B<const X: A>; // ok
struct C;
-struct D<const X: C>; //~ ERROR `C` must be annotated with `#[derive(PartialEq, Eq)]`
+struct D<const X: C>; //~ ERROR `C` must implement `ConstParamTy` to be used as the type of a const generic parameter
fn main() {}
diff --git a/tests/ui/const-generics/forbid-non-structural_match-types.stderr b/tests/ui/const-generics/forbid-non-structural_match-types.stderr
index 81b9bdfbd..0efb9e9d3 100644
--- a/tests/ui/const-generics/forbid-non-structural_match-types.stderr
+++ b/tests/ui/const-generics/forbid-non-structural_match-types.stderr
@@ -1,8 +1,14 @@
-error[E0741]: `C` must be annotated with `#[derive(PartialEq, Eq)]` to be used as the type of a const parameter
- --> $DIR/forbid-non-structural_match-types.rs:11:19
+error[E0741]: `C` must implement `ConstParamTy` to be used as the type of a const generic parameter
+ --> $DIR/forbid-non-structural_match-types.rs:13:19
|
LL | struct D<const X: C>;
- | ^ `C` doesn't derive both `PartialEq` and `Eq`
+ | ^
+ |
+help: add `#[derive(ConstParamTy, PartialEq, Eq)]` to the struct
+ |
+LL + #[derive(ConstParamTy, PartialEq, Eq)]
+LL | struct C;
+ |
error: aborting due to previous error
diff --git a/tests/ui/const-generics/generic_arg_infer/in-signature.rs b/tests/ui/const-generics/generic_arg_infer/in-signature.rs
index 1f60b2242..cd852a269 100644
--- a/tests/ui/const-generics/generic_arg_infer/in-signature.rs
+++ b/tests/ui/const-generics/generic_arg_infer/in-signature.rs
@@ -33,15 +33,15 @@ static TY_STATIC_MIXED: Bar<_, _> = Bar::<i32, 3>(0);
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for static variables
trait ArrAssocConst {
const ARR: [u8; _];
- //~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
}
trait TyAssocConst {
const ARR: Bar<i32, _>;
- //~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
}
trait TyAssocConstMixed {
const ARR: Bar<_, _>;
- //~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
}
trait AssocTy {
diff --git a/tests/ui/const-generics/generic_arg_infer/in-signature.stderr b/tests/ui/const-generics/generic_arg_infer/in-signature.stderr
index 52d1b29f9..b32018a6a 100644
--- a/tests/ui/const-generics/generic_arg_infer/in-signature.stderr
+++ b/tests/ui/const-generics/generic_arg_infer/in-signature.stderr
@@ -74,19 +74,19 @@ LL | static TY_STATIC_MIXED: Bar<_, _> = Bar::<i32, 3>(0);
| not allowed in type signatures
| help: replace with the correct type: `Bar<i32, 3>`
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/in-signature.rs:35:21
|
LL | const ARR: [u8; _];
| ^ not allowed in type signatures
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/in-signature.rs:39:25
|
LL | const ARR: Bar<i32, _>;
| ^ not allowed in type signatures
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/in-signature.rs:43:20
|
LL | const ARR: Bar<_, _>;
diff --git a/tests/ui/const-generics/generic_arg_infer/issue-91614.stderr b/tests/ui/const-generics/generic_arg_infer/issue-91614.stderr
index 13ea4a295..0096d4ee2 100644
--- a/tests/ui/const-generics/generic_arg_infer/issue-91614.stderr
+++ b/tests/ui/const-generics/generic_arg_infer/issue-91614.stderr
@@ -6,11 +6,11 @@ LL | let y = Mask::<_, _>::splat(false);
|
= note: cannot satisfy `_: MaskElement`
= help: the following types implement trait `MaskElement`:
+ isize
+ i8
i16
i32
i64
- i8
- isize
note: required by a bound in `Mask::<T, LANES>::splat`
--> $SRC_DIR/core/src/../../portable-simd/crates/core_simd/src/masks.rs:LL:COL
help: consider giving `y` an explicit type, where the type for type parameter `T` is specified
diff --git a/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.full.stderr b/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.full.stderr
index 1d10dfdf1..c478718b4 100644
--- a/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.full.stderr
+++ b/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.full.stderr
@@ -7,7 +7,7 @@ LL | struct ArithArrayLen<const N: usize>([u32; 0 + N]);
= help: try adding a `where` bound using this expression: `where [(); 0 + N]:`
error: overly complex generic constant
- --> $DIR/array-size-in-generic-struct-param.rs:19:15
+ --> $DIR/array-size-in-generic-struct-param.rs:23:15
|
LL | arr: [u8; CFG.arr_size],
| ^^^^^^^^^^^^ field access is not supported in generic constants
diff --git a/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.min.stderr b/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.min.stderr
index 18e9135d0..956e9c9c9 100644
--- a/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.min.stderr
+++ b/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.min.stderr
@@ -8,7 +8,7 @@ LL | struct ArithArrayLen<const N: usize>([u32; 0 + N]);
= help: use `#![feature(generic_const_exprs)]` to allow generic const expressions
error: generic parameters may not be used in const operations
- --> $DIR/array-size-in-generic-struct-param.rs:19:15
+ --> $DIR/array-size-in-generic-struct-param.rs:23:15
|
LL | arr: [u8; CFG.arr_size],
| ^^^ cannot perform const operation using `CFG`
@@ -17,7 +17,7 @@ LL | arr: [u8; CFG.arr_size],
= help: use `#![feature(generic_const_exprs)]` to allow generic const expressions
error: `Config` is forbidden as the type of a const generic parameter
- --> $DIR/array-size-in-generic-struct-param.rs:17:21
+ --> $DIR/array-size-in-generic-struct-param.rs:21:21
|
LL | struct B<const CFG: Config> {
| ^^^^^^
diff --git a/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.rs b/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.rs
index 7d3fe413c..33ca6dcb3 100644
--- a/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.rs
+++ b/tests/ui/const-generics/generic_const_exprs/array-size-in-generic-struct-param.rs
@@ -9,7 +9,11 @@ struct ArithArrayLen<const N: usize>([u32; 0 + N]);
//[full]~^ ERROR unconstrained generic constant
//[min]~^^ ERROR generic parameters may not be used in const operations
+#[cfg(full)]
+use std::marker::ConstParamTy;
+
#[derive(PartialEq, Eq)]
+#[cfg_attr(full, derive(ConstParamTy))]
struct Config {
arr_size: usize,
}
diff --git a/tests/ui/const-generics/generic_const_exprs/eval-privacy.rs b/tests/ui/const-generics/generic_const_exprs/eval-privacy.rs
index 8023b998a..e5464a425 100644
--- a/tests/ui/const-generics/generic_const_exprs/eval-privacy.rs
+++ b/tests/ui/const-generics/generic_const_exprs/eval-privacy.rs
@@ -1,6 +1,12 @@
#![crate_type = "lib"]
#![feature(generic_const_exprs)]
+#![feature(type_privacy_lints)]
#![allow(incomplete_features)]
+#![warn(private_interfaces)]
+
+// In this test both old and new private-in-public diagnostic were emitted.
+// Old diagnostic will be deleted soon.
+// See https://rust-lang.github.io/rfcs/2145-type-privacy.html.
pub struct Const<const U: u8>;
@@ -15,6 +21,7 @@ where
{
type AssocTy = Const<{ my_const_fn(U) }>;
//~^ ERROR private type
+ //~| WARNING type `fn(u8) -> u8 {my_const_fn}` is more private than the item `<Const<U> as Trait>::AssocTy`
fn assoc_fn() -> Self::AssocTy {
Const
}
diff --git a/tests/ui/const-generics/generic_const_exprs/eval-privacy.stderr b/tests/ui/const-generics/generic_const_exprs/eval-privacy.stderr
index 2d9de8805..16fae6b5c 100644
--- a/tests/ui/const-generics/generic_const_exprs/eval-privacy.stderr
+++ b/tests/ui/const-generics/generic_const_exprs/eval-privacy.stderr
@@ -1,5 +1,5 @@
error[E0446]: private type `fn(u8) -> u8 {my_const_fn}` in public interface
- --> $DIR/eval-privacy.rs:16:5
+ --> $DIR/eval-privacy.rs:22:5
|
LL | type AssocTy = Const<{ my_const_fn(U) }>;
| ^^^^^^^^^^^^ can't leak private type
@@ -7,6 +7,23 @@ LL | type AssocTy = Const<{ my_const_fn(U) }>;
LL | const fn my_const_fn(val: u8) -> u8 {
| ----------------------------------- `fn(u8) -> u8 {my_const_fn}` declared as private
-error: aborting due to previous error
+warning: type `fn(u8) -> u8 {my_const_fn}` is more private than the item `<Const<U> as Trait>::AssocTy`
+ --> $DIR/eval-privacy.rs:22:5
+ |
+LL | type AssocTy = Const<{ my_const_fn(U) }>;
+ | ^^^^^^^^^^^^ associated type `<Const<U> as Trait>::AssocTy` is reachable at visibility `pub`
+ |
+note: but type `fn(u8) -> u8 {my_const_fn}` is only usable at visibility `pub(crate)`
+ --> $DIR/eval-privacy.rs:30:1
+ |
+LL | const fn my_const_fn(val: u8) -> u8 {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/eval-privacy.rs:5:9
+ |
+LL | #![warn(private_interfaces)]
+ | ^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0446`.
diff --git a/tests/ui/const-generics/generic_const_exprs/inline-const-in-const-generic-defaults.rs b/tests/ui/const-generics/generic_const_exprs/inline-const-in-const-generic-defaults.rs
new file mode 100644
index 000000000..d81cba627
--- /dev/null
+++ b/tests/ui/const-generics/generic_const_exprs/inline-const-in-const-generic-defaults.rs
@@ -0,0 +1,9 @@
+// check-pass
+
+#![feature(generic_const_exprs)]
+#![feature(inline_const)]
+#![allow(incomplete_features)]
+
+pub struct ConstDefaultUnstable<const N: usize = { const { 3 } }>;
+
+pub fn main() {}
diff --git a/tests/ui/const-generics/generic_const_exprs/issue-109141.rs b/tests/ui/const-generics/generic_const_exprs/issue-109141.rs
new file mode 100644
index 000000000..148c3bda8
--- /dev/null
+++ b/tests/ui/const-generics/generic_const_exprs/issue-109141.rs
@@ -0,0 +1,13 @@
+#![feature(generic_const_exprs)]
+#![allow(incomplete_features)]
+
+impl EntriesBuffer {
+ fn a(&self) -> impl Iterator {
+ self.0.iter_mut() //~ ERROR: cannot borrow `*self.0` as mutable, as it is behind a `&` reference
+ }
+}
+
+struct EntriesBuffer(Box<[[u8; HashesEntryLEN]; 5]>);
+//~^ ERROR: cannot find value `HashesEntryLEN` in this scope
+
+fn main() {}
diff --git a/tests/ui/const-generics/generic_const_exprs/issue-109141.stderr b/tests/ui/const-generics/generic_const_exprs/issue-109141.stderr
new file mode 100644
index 000000000..f61edd60e
--- /dev/null
+++ b/tests/ui/const-generics/generic_const_exprs/issue-109141.stderr
@@ -0,0 +1,26 @@
+error[E0425]: cannot find value `HashesEntryLEN` in this scope
+ --> $DIR/issue-109141.rs:10:32
+ |
+LL | struct EntriesBuffer(Box<[[u8; HashesEntryLEN]; 5]>);
+ | ^^^^^^^^^^^^^^ not found in this scope
+ |
+help: you might be missing a const parameter
+ |
+LL | struct EntriesBuffer<const HashesEntryLEN: /* Type */>(Box<[[u8; HashesEntryLEN]; 5]>);
+ | ++++++++++++++++++++++++++++++++++
+
+error[E0596]: cannot borrow `*self.0` as mutable, as it is behind a `&` reference
+ --> $DIR/issue-109141.rs:6:9
+ |
+LL | self.0.iter_mut()
+ | ^^^^^^^^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+ |
+help: consider changing this to be a mutable reference
+ |
+LL | fn a(&mut self) -> impl Iterator {
+ | ~~~~~~~~~
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0425, E0596.
+For more information about an error, try `rustc --explain E0425`.
diff --git a/tests/ui/const-generics/generic_const_exprs/issue-80742.stderr b/tests/ui/const-generics/generic_const_exprs/issue-80742.stderr
index 6aa8ee13b..dc3a400cb 100644
--- a/tests/ui/const-generics/generic_const_exprs/issue-80742.stderr
+++ b/tests/ui/const-generics/generic_const_exprs/issue-80742.stderr
@@ -1,4 +1,4 @@
-error[E0080]: evaluation of `Inline::<dyn std::fmt::Debug>::{constant#0}` failed
+error[E0080]: evaluation of `Inline::<dyn Debug>::{constant#0}` failed
--> $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
= note: size_of called on unsized type `dyn Debug`
@@ -35,7 +35,7 @@ help: consider relaxing the type parameter's implicit `Sized` bound
LL | impl<T: ?Sized> Inline<T>
| ++++++++
-error[E0080]: evaluation of `Inline::<dyn std::fmt::Debug>::{constant#0}` failed
+error[E0080]: evaluation of `Inline::<dyn Debug>::{constant#0}` failed
--> $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
= note: size_of called on unsized type `dyn Debug`
diff --git a/tests/ui/const-generics/generic_const_exprs/issue-86710.rs b/tests/ui/const-generics/generic_const_exprs/issue-86710.rs
index bdd8a21b3..281b12458 100644
--- a/tests/ui/const-generics/generic_const_exprs/issue-86710.rs
+++ b/tests/ui/const-generics/generic_const_exprs/issue-86710.rs
@@ -7,7 +7,7 @@ use std::marker::PhantomData;
fn main() {
let x = FooImpl::<BarImpl<1>> { phantom: PhantomData };
- let _ = x.foo::<BarImpl<1>>();
+ x.foo::<BarImpl<1>>();
}
trait Foo<T>
diff --git a/tests/ui/const-generics/generic_const_exprs/issue-96699.rs b/tests/ui/const-generics/generic_const_exprs/issue-96699.rs
new file mode 100644
index 000000000..83f329d2a
--- /dev/null
+++ b/tests/ui/const-generics/generic_const_exprs/issue-96699.rs
@@ -0,0 +1,87 @@
+// check-pass
+
+#![allow(dead_code, incomplete_features)]
+#![feature(generic_const_exprs)]
+
+const fn min(a: usize, b: usize) -> usize {
+ if a < b {
+ a
+ } else {
+ b
+ }
+}
+
+trait Trait1<Inner1>
+where
+ Self: Sized,
+{
+ fn crash_here()
+ where
+ Inner1: Default,
+ {
+ Inner1::default();
+ }
+}
+
+struct Struct1<T>(T);
+impl<T> Trait1<T> for Struct1<T> {}
+
+trait Trait2<Inner2>
+where
+ Self: Sized,
+{
+ type Assoc: Trait1<Inner2>;
+
+ fn call_crash()
+ where
+ Inner2: Default,
+ {
+ // if Inner2 implements Default, we can call crash_here.
+ Self::Assoc::crash_here();
+ }
+}
+
+struct Struct2<const SIZE1: usize, const SIZE2: usize> {}
+/*
+where
+ [(); min(SIZE1, SIZE2)]:,
+{
+ elem: [i32; min(SIZE1, SIZE2)],
+}
+*/
+
+impl<const SIZE1: usize, const SIZE2: usize> Trait2<[i32; min(SIZE1, SIZE2)]>
+ for Struct2<SIZE1, SIZE2>
+{
+ type Assoc = Struct1<[i32; min(SIZE1, SIZE2)]>;
+ // dose Struct1<[i32; min(SIZE1, SIZE2)]> implement Default?
+}
+
+fn main() {
+ pattern2();
+
+ print_fully_name(<Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::Assoc::crash_here);
+ // <compiler_bug2::Struct1<[i32; 1]> as compiler_bug2::Trait1<[i32; 1]>>::crash_here
+}
+
+fn pattern1() {
+ // no crash
+ <Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::Assoc::crash_here();
+ <Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::call_crash();
+}
+
+fn pattern2() {
+ // crash
+ <Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::call_crash();
+
+ // undefined reference to `compiler_bug2::Trait1::crash_here'
+}
+
+fn pattern3() {
+ // no crash
+ <Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::Assoc::crash_here();
+}
+
+fn print_fully_name<T>(_: T) {
+ let _ = std::any::type_name::<T>();
+}
diff --git a/tests/ui/const-generics/invalid-enum.rs b/tests/ui/const-generics/invalid-enum.rs
index cb6d05349..fcfad300c 100644
--- a/tests/ui/const-generics/invalid-enum.rs
+++ b/tests/ui/const-generics/invalid-enum.rs
@@ -1,7 +1,9 @@
#![feature(adt_const_params)]
#![allow(incomplete_features)]
-#[derive(PartialEq, Eq)]
+use std::marker::ConstParamTy;
+
+#[derive(PartialEq, Eq, ConstParamTy)]
enum CompileFlag {
A,
B,
diff --git a/tests/ui/const-generics/invalid-enum.stderr b/tests/ui/const-generics/invalid-enum.stderr
index 0d3643f6f..7e8a632b3 100644
--- a/tests/ui/const-generics/invalid-enum.stderr
+++ b/tests/ui/const-generics/invalid-enum.stderr
@@ -1,5 +1,5 @@
error[E0573]: expected type, found variant `CompileFlag::A`
- --> $DIR/invalid-enum.rs:21:12
+ --> $DIR/invalid-enum.rs:23:12
|
LL | test_1::<CompileFlag::A>();
| ^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | test_1::<CompileFlag::A>();
| help: try using the variant's enum: `CompileFlag`
error[E0573]: expected type, found variant `CompileFlag::A`
- --> $DIR/invalid-enum.rs:25:15
+ --> $DIR/invalid-enum.rs:27:15
|
LL | test_2::<_, CompileFlag::A>(0);
| ^^^^^^^^^^^^^^
@@ -17,7 +17,7 @@ LL | test_2::<_, CompileFlag::A>(0);
| help: try using the variant's enum: `CompileFlag`
error[E0573]: expected type, found variant `CompileFlag::A`
- --> $DIR/invalid-enum.rs:29:18
+ --> $DIR/invalid-enum.rs:31:18
|
LL | let _: Example<CompileFlag::A, _> = Example { x: 0 };
| ^^^^^^^^^^^^^^
@@ -26,7 +26,7 @@ LL | let _: Example<CompileFlag::A, _> = Example { x: 0 };
| help: try using the variant's enum: `CompileFlag`
error[E0747]: unresolved item provided when a constant was expected
- --> $DIR/invalid-enum.rs:29:18
+ --> $DIR/invalid-enum.rs:31:18
|
LL | let _: Example<CompileFlag::A, _> = Example { x: 0 };
| ^^^^^^^^^^^^^^
@@ -37,7 +37,7 @@ LL | let _: Example<{ CompileFlag::A }, _> = Example { x: 0 };
| + +
error[E0747]: type provided when a constant was expected
- --> $DIR/invalid-enum.rs:33:18
+ --> $DIR/invalid-enum.rs:35:18
|
LL | let _: Example<Example::ASSOC_FLAG, _> = Example { x: 0 };
| ^^^^^^^^^^^^^^^^^^^
@@ -48,7 +48,7 @@ LL | let _: Example<{ Example::ASSOC_FLAG }, _> = Example { x: 0 };
| + +
error[E0747]: unresolved item provided when a constant was expected
- --> $DIR/invalid-enum.rs:21:12
+ --> $DIR/invalid-enum.rs:23:12
|
LL | test_1::<CompileFlag::A>();
| ^^^^^^^^^^^^^^
@@ -59,7 +59,7 @@ LL | test_1::<{ CompileFlag::A }>();
| + +
error[E0747]: unresolved item provided when a constant was expected
- --> $DIR/invalid-enum.rs:25:15
+ --> $DIR/invalid-enum.rs:27:15
|
LL | test_2::<_, CompileFlag::A>(0);
| ^^^^^^^^^^^^^^
diff --git a/tests/ui/const-generics/issue-112505-overflow.rs b/tests/ui/const-generics/issue-112505-overflow.rs
new file mode 100644
index 000000000..0dd7776d5
--- /dev/null
+++ b/tests/ui/const-generics/issue-112505-overflow.rs
@@ -0,0 +1,7 @@
+#![feature(transmute_generic_consts)]
+
+fn overflow(v: [[[u32; 8888888]; 9999999]; 777777777]) -> [[[u32; 9999999]; 777777777]; 239] {
+ unsafe { std::mem::transmute(v) } //~ ERROR cannot transmute between types of different sizes
+}
+
+fn main() { }
diff --git a/tests/ui/const-generics/issue-112505-overflow.stderr b/tests/ui/const-generics/issue-112505-overflow.stderr
new file mode 100644
index 000000000..bd8a4feef
--- /dev/null
+++ b/tests/ui/const-generics/issue-112505-overflow.stderr
@@ -0,0 +1,12 @@
+error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
+ --> $DIR/issue-112505-overflow.rs:4:14
+ |
+LL | unsafe { std::mem::transmute(v) }
+ | ^^^^^^^^^^^^^^^^^^^
+ |
+ = note: source type: `[[[u32; 8888888]; 9999999]; 777777777]` (values of the type `[[u32; 8888888]; 9999999]` are too big for the current architecture)
+ = note: target type: `[[[u32; 9999999]; 777777777]; 239]` (values of the type `[[u32; 9999999]; 777777777]` are too big for the current architecture)
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0512`.
diff --git a/tests/ui/const-generics/issue-66451.rs b/tests/ui/const-generics/issue-66451.rs
index 3335f7d59..c8d5515e9 100644
--- a/tests/ui/const-generics/issue-66451.rs
+++ b/tests/ui/const-generics/issue-66451.rs
@@ -1,13 +1,15 @@
#![feature(adt_const_params)]
#![allow(incomplete_features)]
-#[derive(Debug, PartialEq, Eq)]
+use std::marker::ConstParamTy;
+
+#[derive(Debug, PartialEq, Eq, ConstParamTy)]
struct Foo {
value: i32,
nested: &'static Bar<i32>,
}
-#[derive(Debug, PartialEq, Eq)]
+#[derive(Debug, PartialEq, Eq, ConstParamTy)]
struct Bar<T>(T);
struct Test<const F: Foo>;
diff --git a/tests/ui/const-generics/issue-66451.stderr b/tests/ui/const-generics/issue-66451.stderr
index e0cb0b661..946d51486 100644
--- a/tests/ui/const-generics/issue-66451.stderr
+++ b/tests/ui/const-generics/issue-66451.stderr
@@ -1,5 +1,5 @@
error[E0308]: mismatched types
- --> $DIR/issue-66451.rs:27:10
+ --> $DIR/issue-66451.rs:29:10
|
LL | let y: Test<{
| ____________-
diff --git a/tests/ui/const-generics/issue-80471.rs b/tests/ui/const-generics/issue-80471.rs
index d0af8a5ea..fa6f1fde4 100644
--- a/tests/ui/const-generics/issue-80471.rs
+++ b/tests/ui/const-generics/issue-80471.rs
@@ -8,6 +8,6 @@ enum Nat {
}
fn foo<const N: Nat>() {}
-//~^ ERROR `Box<Nat>` must be annotated with `#[derive(PartialEq, Eq)]` to be used as the type of a const parameter
+//~^ ERROR `Nat` must implement `ConstParamTy` to be used as the type of a const generic parameter
fn main() {}
diff --git a/tests/ui/const-generics/issue-80471.stderr b/tests/ui/const-generics/issue-80471.stderr
index b89706710..3b7143de5 100644
--- a/tests/ui/const-generics/issue-80471.stderr
+++ b/tests/ui/const-generics/issue-80471.stderr
@@ -7,11 +7,17 @@ LL | #![feature(adt_const_params)]
= note: see issue #95174 <https://github.com/rust-lang/rust/issues/95174> for more information
= note: `#[warn(incomplete_features)]` on by default
-error[E0741]: `Box<Nat>` must be annotated with `#[derive(PartialEq, Eq)]` to be used as the type of a const parameter
+error[E0741]: `Nat` must implement `ConstParamTy` to be used as the type of a const generic parameter
--> $DIR/issue-80471.rs:10:17
|
LL | fn foo<const N: Nat>() {}
| ^^^
+ |
+help: add `#[derive(ConstParamTy)]` to the struct
+ |
+LL + #[derive(ConstParamTy)]
+LL | enum Nat {
+ |
error: aborting due to previous error; 1 warning emitted
diff --git a/tests/ui/const-generics/issues/issue-63322-forbid-dyn.full.stderr b/tests/ui/const-generics/issues/issue-63322-forbid-dyn.full.stderr
index 16fabd1e8..e2d8c5ca0 100644
--- a/tests/ui/const-generics/issues/issue-63322-forbid-dyn.full.stderr
+++ b/tests/ui/const-generics/issues/issue-63322-forbid-dyn.full.stderr
@@ -1,8 +1,10 @@
-error[E0741]: `(dyn A + 'static)` must be annotated with `#[derive(PartialEq, Eq)]` to be used as the type of a const parameter
+error[E0741]: `&'static (dyn A + 'static)` can't be used as a const parameter type
--> $DIR/issue-63322-forbid-dyn.rs:9:18
|
LL | fn test<const T: &'static dyn A>() {
| ^^^^^^^^^^^^^^
+ |
+ = note: `(dyn A + 'static)` must implement `ConstParamTy`, but it does not
error: aborting due to previous error
diff --git a/tests/ui/const-generics/issues/issue-63322-forbid-dyn.rs b/tests/ui/const-generics/issues/issue-63322-forbid-dyn.rs
index 116c3fcfb..8bc35ab3d 100644
--- a/tests/ui/const-generics/issues/issue-63322-forbid-dyn.rs
+++ b/tests/ui/const-generics/issues/issue-63322-forbid-dyn.rs
@@ -7,7 +7,7 @@ struct B;
impl A for B {}
fn test<const T: &'static dyn A>() {
- //[full]~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` to be used
+ //[full]~^ ERROR `&'static (dyn A + 'static)` can't be used as a const parameter type
//[min]~^^ ERROR `&'static (dyn A + 'static)` is forbidden
unimplemented!()
}
diff --git a/tests/ui/const-generics/issues/issue-67185-2.stderr b/tests/ui/const-generics/issues/issue-67185-2.stderr
index 032b0c410..a2e5b8053 100644
--- a/tests/ui/const-generics/issues/issue-67185-2.stderr
+++ b/tests/ui/const-generics/issues/issue-67185-2.stderr
@@ -5,8 +5,8 @@ LL | <u8 as Baz>::Quaks: Bar,
| ^^^^^^^^^^^^^^^^^^^^^^^ the trait `Bar` is not implemented for `[u16; 3]`
|
= help: the following other types implement trait `Bar`:
- [[u16; 3]; 3]
[u16; 4]
+ [[u16; 3]; 3]
= help: see issue #48214
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
@@ -17,8 +17,8 @@ LL | [<u8 as Baz>::Quaks; 2]: Bar,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Bar` is not implemented for `[[u16; 3]; 2]`
|
= help: the following other types implement trait `Bar`:
- [[u16; 3]; 3]
[u16; 4]
+ [[u16; 3]; 3]
= help: see issue #48214
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
@@ -29,8 +29,8 @@ LL | impl Foo for FooImpl {}
| ^^^ the trait `Bar` is not implemented for `[u16; 3]`
|
= help: the following other types implement trait `Bar`:
- [[u16; 3]; 3]
[u16; 4]
+ [[u16; 3]; 3]
note: required by a bound in `Foo`
--> $DIR/issue-67185-2.rs:15:25
|
@@ -47,8 +47,8 @@ LL | impl Foo for FooImpl {}
| ^^^ the trait `Bar` is not implemented for `[[u16; 3]; 2]`
|
= help: the following other types implement trait `Bar`:
- [[u16; 3]; 3]
[u16; 4]
+ [[u16; 3]; 3]
note: required by a bound in `Foo`
--> $DIR/issue-67185-2.rs:14:30
|
@@ -65,8 +65,8 @@ LL | fn f(_: impl Foo) {}
| ^^^ the trait `Bar` is not implemented for `[[u16; 3]; 2]`
|
= help: the following other types implement trait `Bar`:
- [[u16; 3]; 3]
[u16; 4]
+ [[u16; 3]; 3]
note: required by a bound in `Foo`
--> $DIR/issue-67185-2.rs:14:30
|
@@ -83,8 +83,8 @@ LL | fn f(_: impl Foo) {}
| ^^^ the trait `Bar` is not implemented for `[u16; 3]`
|
= help: the following other types implement trait `Bar`:
- [[u16; 3]; 3]
[u16; 4]
+ [[u16; 3]; 3]
note: required by a bound in `Foo`
--> $DIR/issue-67185-2.rs:15:25
|
diff --git a/tests/ui/const-generics/issues/issue-70273-assoc-fn.rs b/tests/ui/const-generics/issues/issue-70273-assoc-fn.rs
index a76488249..f02ab355f 100644
--- a/tests/ui/const-generics/issues/issue-70273-assoc-fn.rs
+++ b/tests/ui/const-generics/issues/issue-70273-assoc-fn.rs
@@ -10,5 +10,5 @@ impl T<0usize> for S {
}
fn main() {
- let _err = <S as T<0usize>>::f();
+ <S as T<0usize>>::f();
}
diff --git a/tests/ui/const-generics/issues/issue-71381.full.stderr b/tests/ui/const-generics/issues/issue-71381.full.stderr
index 962eaf75b..b6460e001 100644
--- a/tests/ui/const-generics/issues/issue-71381.full.stderr
+++ b/tests/ui/const-generics/issues/issue-71381.full.stderr
@@ -14,19 +14,6 @@ LL | const FN: unsafe extern "C" fn(Args),
|
= note: type parameters may not be used in the type of const parameters
-error[E0741]: using function pointers as const generic parameters is forbidden
- --> $DIR/issue-71381.rs:14:61
- |
-LL | pub fn call_me<Args: Sized, const IDX: usize, const FN: unsafe extern "C" fn(Args)>(&self) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0741]: using function pointers as const generic parameters is forbidden
- --> $DIR/issue-71381.rs:23:19
- |
-LL | const FN: unsafe extern "C" fn(Args),
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 4 previous errors
+error: aborting due to 2 previous errors
-Some errors have detailed explanations: E0741, E0770.
-For more information about an error, try `rustc --explain E0741`.
+For more information about this error, try `rustc --explain E0770`.
diff --git a/tests/ui/const-generics/issues/issue-71381.rs b/tests/ui/const-generics/issues/issue-71381.rs
index 66f819dbe..8a878efb4 100644
--- a/tests/ui/const-generics/issues/issue-71381.rs
+++ b/tests/ui/const-generics/issues/issue-71381.rs
@@ -12,8 +12,8 @@ unsafe extern "C" fn pass(args: PassArg) {
impl Test {
pub fn call_me<Args: Sized, const IDX: usize, const FN: unsafe extern "C" fn(Args)>(&self) {
- //~^ ERROR: using function pointers as const generic parameters is forbidden
- //~| ERROR: the type of const parameters must not depend on other generic parameters
+ //[min]~^ ERROR: using function pointers as const generic parameters is forbidden
+ //~^^ ERROR: the type of const parameters must not depend on other generic parameters
self.0 = Self::trampiline::<Args, IDX, FN> as _
}
@@ -21,8 +21,8 @@ impl Test {
Args: Sized,
const IDX: usize,
const FN: unsafe extern "C" fn(Args),
- //~^ ERROR: using function pointers as const generic parameters is forbidden
- //~| ERROR: the type of const parameters must not depend on other generic parameters
+ //[min]~^ ERROR: using function pointers as const generic parameters is forbidden
+ //~^^ ERROR: the type of const parameters must not depend on other generic parameters
>(
args: Args,
) {
@@ -31,6 +31,6 @@ impl Test {
}
fn main() {
- let x = Test();
+ let x = Test(std::ptr::null());
x.call_me::<PassArg, 30, pass>()
}
diff --git a/tests/ui/const-generics/issues/issue-71611.full.stderr b/tests/ui/const-generics/issues/issue-71611.full.stderr
index e109459f2..b55f410a0 100644
--- a/tests/ui/const-generics/issues/issue-71611.full.stderr
+++ b/tests/ui/const-generics/issues/issue-71611.full.stderr
@@ -6,13 +6,6 @@ LL | fn func<A, const F: fn(inner: A)>(outer: A) {
|
= note: type parameters may not be used in the type of const parameters
-error[E0741]: using function pointers as const generic parameters is forbidden
- --> $DIR/issue-71611.rs:5:21
- |
-LL | fn func<A, const F: fn(inner: A)>(outer: A) {
- | ^^^^^^^^^^^^
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
-Some errors have detailed explanations: E0741, E0770.
-For more information about an error, try `rustc --explain E0741`.
+For more information about this error, try `rustc --explain E0770`.
diff --git a/tests/ui/const-generics/issues/issue-71611.rs b/tests/ui/const-generics/issues/issue-71611.rs
index fbb91ca18..c917f6681 100644
--- a/tests/ui/const-generics/issues/issue-71611.rs
+++ b/tests/ui/const-generics/issues/issue-71611.rs
@@ -3,8 +3,8 @@
#![cfg_attr(full, allow(incomplete_features))]
fn func<A, const F: fn(inner: A)>(outer: A) {
- //~^ ERROR: using function pointers as const generic parameters is forbidden
- //~| ERROR: the type of const parameters must not depend on other generic parameters
+ //[min]~^ ERROR: using function pointers as const generic parameters is forbidden
+ //~^^ ERROR: the type of const parameters must not depend on other generic parameters
F(outer);
}
diff --git a/tests/ui/const-generics/issues/issue-74255.min.stderr b/tests/ui/const-generics/issues/issue-74255.min.stderr
index b462d8448..bbcf8682b 100644
--- a/tests/ui/const-generics/issues/issue-74255.min.stderr
+++ b/tests/ui/const-generics/issues/issue-74255.min.stderr
@@ -1,5 +1,5 @@
error: `IceEnum` is forbidden as the type of a const generic parameter
- --> $DIR/issue-74255.rs:14:31
+ --> $DIR/issue-74255.rs:18:31
|
LL | fn ice_struct_fn<const I: IceEnum>() {}
| ^^^^^^^
diff --git a/tests/ui/const-generics/issues/issue-74255.rs b/tests/ui/const-generics/issues/issue-74255.rs
index 0e523926f..60b2fd37c 100644
--- a/tests/ui/const-generics/issues/issue-74255.rs
+++ b/tests/ui/const-generics/issues/issue-74255.rs
@@ -3,7 +3,11 @@
#![cfg_attr(full, feature(adt_const_params))]
#![cfg_attr(full, allow(incomplete_features))]
+#[cfg(full)]
+use std::marker::ConstParamTy;
+
#[derive(PartialEq, Eq)]
+#[cfg_attr(full, derive(ConstParamTy))]
enum IceEnum {
Variant
}
diff --git a/tests/ui/const-generics/issues/issue-74950.min.stderr b/tests/ui/const-generics/issues/issue-74950.min.stderr
index 729ecc202..c37ee93d4 100644
--- a/tests/ui/const-generics/issues/issue-74950.min.stderr
+++ b/tests/ui/const-generics/issues/issue-74950.min.stderr
@@ -1,5 +1,5 @@
error: `Inner` is forbidden as the type of a const generic parameter
- --> $DIR/issue-74950.rs:17:23
+ --> $DIR/issue-74950.rs:20:23
|
LL | struct Outer<const I: Inner>;
| ^^^^^
@@ -8,7 +8,7 @@ LL | struct Outer<const I: Inner>;
= help: more complex types are supported with `#![feature(adt_const_params)]`
error: `Inner` is forbidden as the type of a const generic parameter
- --> $DIR/issue-74950.rs:17:23
+ --> $DIR/issue-74950.rs:20:23
|
LL | struct Outer<const I: Inner>;
| ^^^^^
@@ -17,7 +17,7 @@ LL | struct Outer<const I: Inner>;
= help: more complex types are supported with `#![feature(adt_const_params)]`
error: `Inner` is forbidden as the type of a const generic parameter
- --> $DIR/issue-74950.rs:17:23
+ --> $DIR/issue-74950.rs:20:23
|
LL | struct Outer<const I: Inner>;
| ^^^^^
@@ -26,7 +26,7 @@ LL | struct Outer<const I: Inner>;
= help: more complex types are supported with `#![feature(adt_const_params)]`
error: `Inner` is forbidden as the type of a const generic parameter
- --> $DIR/issue-74950.rs:17:23
+ --> $DIR/issue-74950.rs:20:23
|
LL | struct Outer<const I: Inner>;
| ^^^^^
@@ -35,7 +35,7 @@ LL | struct Outer<const I: Inner>;
= help: more complex types are supported with `#![feature(adt_const_params)]`
error: `Inner` is forbidden as the type of a const generic parameter
- --> $DIR/issue-74950.rs:17:23
+ --> $DIR/issue-74950.rs:20:23
|
LL | struct Outer<const I: Inner>;
| ^^^^^
diff --git a/tests/ui/const-generics/issues/issue-74950.rs b/tests/ui/const-generics/issues/issue-74950.rs
index 3e1ca4735..43bb32265 100644
--- a/tests/ui/const-generics/issues/issue-74950.rs
+++ b/tests/ui/const-generics/issues/issue-74950.rs
@@ -3,8 +3,11 @@
#![cfg_attr(full, feature(adt_const_params))]
#![cfg_attr(full, allow(incomplete_features))]
+#[cfg(full)]
+use std::marker::ConstParamTy;
#[derive(PartialEq, Eq)]
+#[cfg_attr(full, derive(ConstParamTy))]
struct Inner;
// Note: We emit the error 5 times if we don't deduplicate:
diff --git a/tests/ui/const-generics/issues/issue-87076.rs b/tests/ui/const-generics/issues/issue-87076.rs
index 8a567678b..a32c1f965 100644
--- a/tests/ui/const-generics/issues/issue-87076.rs
+++ b/tests/ui/const-generics/issues/issue-87076.rs
@@ -3,7 +3,9 @@
#![feature(adt_const_params)]
#![allow(incomplete_features)]
-#[derive(PartialEq, Eq)]
+use std::marker::ConstParamTy;
+
+#[derive(PartialEq, Eq, ConstParamTy)]
pub struct UnitDims {
pub time: u8,
pub length: u8,
diff --git a/tests/ui/const-generics/issues/issue-97278.rs b/tests/ui/const-generics/issues/issue-97278.rs
index da0a9776f..8e7a1fcd9 100644
--- a/tests/ui/const-generics/issues/issue-97278.rs
+++ b/tests/ui/const-generics/issues/issue-97278.rs
@@ -9,6 +9,6 @@ enum Bar {
}
fn test<const BAR: Bar>() {}
-//~^ ERROR `Arc<i32>` must be annotated with `#[derive(PartialEq, Eq)]`
+//~^ ERROR `Bar` must implement `ConstParamTy` to be used as the type of a const generic parameter
fn main() {}
diff --git a/tests/ui/const-generics/issues/issue-97278.stderr b/tests/ui/const-generics/issues/issue-97278.stderr
index ff13cb505..31e92f840 100644
--- a/tests/ui/const-generics/issues/issue-97278.stderr
+++ b/tests/ui/const-generics/issues/issue-97278.stderr
@@ -1,8 +1,14 @@
-error[E0741]: `Arc<i32>` must be annotated with `#[derive(PartialEq, Eq)]` to be used as the type of a const parameter
+error[E0741]: `Bar` must implement `ConstParamTy` to be used as the type of a const generic parameter
--> $DIR/issue-97278.rs:11:20
|
LL | fn test<const BAR: Bar>() {}
| ^^^
+ |
+help: add `#[derive(ConstParamTy)]` to the struct
+ |
+LL + #[derive(ConstParamTy)]
+LL | enum Bar {
+ |
error: aborting due to previous error
diff --git a/tests/ui/const-generics/issues/issue-99641.rs b/tests/ui/const-generics/issues/issue-99641.rs
index fae6d3fc4..dd075a6ad 100644
--- a/tests/ui/const-generics/issues/issue-99641.rs
+++ b/tests/ui/const-generics/issues/issue-99641.rs
@@ -3,10 +3,10 @@
fn main() {
pub struct Color<const WHITE: (fn(),)>;
- //~^ ERROR using function pointers
+ //~^ ERROR `(fn(),)` can't be used as a const parameter type
impl<const WHITE: (fn(),)> Color<WHITE> {
- //~^ ERROR using function pointers
+ //~^ ERROR `(fn(),)` can't be used as a const parameter type
pub fn new() -> Self {
Color::<WHITE>
}
diff --git a/tests/ui/const-generics/issues/issue-99641.stderr b/tests/ui/const-generics/issues/issue-99641.stderr
index 349ebba08..800aec3ef 100644
--- a/tests/ui/const-generics/issues/issue-99641.stderr
+++ b/tests/ui/const-generics/issues/issue-99641.stderr
@@ -1,14 +1,18 @@
-error[E0741]: using function pointers as const generic parameters is forbidden
+error[E0741]: `(fn(),)` can't be used as a const parameter type
--> $DIR/issue-99641.rs:5:35
|
LL | pub struct Color<const WHITE: (fn(),)>;
| ^^^^^^^
+ |
+ = note: `fn()` must implement `ConstParamTy`, but it does not
-error[E0741]: using function pointers as const generic parameters is forbidden
+error[E0741]: `(fn(),)` can't be used as a const parameter type
--> $DIR/issue-99641.rs:8:23
|
LL | impl<const WHITE: (fn(),)> Color<WHITE> {
| ^^^^^^^
+ |
+ = note: `fn()` must implement `ConstParamTy`, but it does not
error: aborting due to 2 previous errors
diff --git a/tests/ui/const-generics/overlapping_impls.rs b/tests/ui/const-generics/overlapping_impls.rs
index e599eadd8..2ce6c4a82 100644
--- a/tests/ui/const-generics/overlapping_impls.rs
+++ b/tests/ui/const-generics/overlapping_impls.rs
@@ -2,7 +2,8 @@
#![allow(incomplete_features)]
#![feature(adt_const_params)]
#![feature(generic_const_exprs)]
-use std::marker::PhantomData;
+
+use std::marker::{ConstParamTy, PhantomData};
struct Foo<const I: i32, const J: i32> {}
@@ -22,7 +23,7 @@ pub struct Foo2<const P: Protocol, T> {
_marker: PhantomData<T>,
}
-#[derive(PartialEq, Eq)]
+#[derive(PartialEq, Eq, ConstParamTy)]
pub enum Protocol {
Variant1,
Variant2,
diff --git a/tests/ui/const-generics/std/const-generics-range.full.stderr b/tests/ui/const-generics/std/const-generics-range.full.stderr
new file mode 100644
index 000000000..5bf48ad73
--- /dev/null
+++ b/tests/ui/const-generics/std/const-generics-range.full.stderr
@@ -0,0 +1,39 @@
+error[E0741]: `std::ops::Range<usize>` must implement `ConstParamTy` to be used as the type of a const generic parameter
+ --> $DIR/const-generics-range.rs:8:24
+ |
+LL | struct _Range<const R: std::ops::Range<usize>>;
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0741]: `RangeFrom<usize>` must implement `ConstParamTy` to be used as the type of a const generic parameter
+ --> $DIR/const-generics-range.rs:13:28
+ |
+LL | struct _RangeFrom<const R: std::ops::RangeFrom<usize>>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0741]: `RangeFull` must implement `ConstParamTy` to be used as the type of a const generic parameter
+ --> $DIR/const-generics-range.rs:18:28
+ |
+LL | struct _RangeFull<const R: std::ops::RangeFull>;
+ | ^^^^^^^^^^^^^^^^^^^
+
+error[E0741]: `RangeInclusive<usize>` must implement `ConstParamTy` to be used as the type of a const generic parameter
+ --> $DIR/const-generics-range.rs:24:33
+ |
+LL | struct _RangeInclusive<const R: std::ops::RangeInclusive<usize>>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0741]: `RangeTo<usize>` must implement `ConstParamTy` to be used as the type of a const generic parameter
+ --> $DIR/const-generics-range.rs:29:26
+ |
+LL | struct _RangeTo<const R: std::ops::RangeTo<usize>>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0741]: `RangeToInclusive<usize>` must implement `ConstParamTy` to be used as the type of a const generic parameter
+ --> $DIR/const-generics-range.rs:34:35
+ |
+LL | struct _RangeToInclusive<const R: std::ops::RangeToInclusive<usize>>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 6 previous errors
+
+For more information about this error, try `rustc --explain E0741`.
diff --git a/tests/ui/const-generics/std/const-generics-range.min.stderr b/tests/ui/const-generics/std/const-generics-range.min.stderr
index d4b2ad6fd..53fca6e88 100644
--- a/tests/ui/const-generics/std/const-generics-range.min.stderr
+++ b/tests/ui/const-generics/std/const-generics-range.min.stderr
@@ -1,5 +1,5 @@
error: `std::ops::Range<usize>` is forbidden as the type of a const generic parameter
- --> $DIR/const-generics-range.rs:7:24
+ --> $DIR/const-generics-range.rs:8:24
|
LL | struct _Range<const R: std::ops::Range<usize>>;
| ^^^^^^^^^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | struct _Range<const R: std::ops::Range<usize>>;
= help: more complex types are supported with `#![feature(adt_const_params)]`
error: `RangeFrom<usize>` is forbidden as the type of a const generic parameter
- --> $DIR/const-generics-range.rs:12:28
+ --> $DIR/const-generics-range.rs:13:28
|
LL | struct _RangeFrom<const R: std::ops::RangeFrom<usize>>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -17,7 +17,7 @@ LL | struct _RangeFrom<const R: std::ops::RangeFrom<usize>>;
= help: more complex types are supported with `#![feature(adt_const_params)]`
error: `RangeFull` is forbidden as the type of a const generic parameter
- --> $DIR/const-generics-range.rs:17:28
+ --> $DIR/const-generics-range.rs:18:28
|
LL | struct _RangeFull<const R: std::ops::RangeFull>;
| ^^^^^^^^^^^^^^^^^^^
@@ -26,7 +26,7 @@ LL | struct _RangeFull<const R: std::ops::RangeFull>;
= help: more complex types are supported with `#![feature(adt_const_params)]`
error: `RangeInclusive<usize>` is forbidden as the type of a const generic parameter
- --> $DIR/const-generics-range.rs:23:33
+ --> $DIR/const-generics-range.rs:24:33
|
LL | struct _RangeInclusive<const R: std::ops::RangeInclusive<usize>>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -35,7 +35,7 @@ LL | struct _RangeInclusive<const R: std::ops::RangeInclusive<usize>>;
= help: more complex types are supported with `#![feature(adt_const_params)]`
error: `RangeTo<usize>` is forbidden as the type of a const generic parameter
- --> $DIR/const-generics-range.rs:28:26
+ --> $DIR/const-generics-range.rs:29:26
|
LL | struct _RangeTo<const R: std::ops::RangeTo<usize>>;
| ^^^^^^^^^^^^^^^^^^^^^^^^
@@ -44,7 +44,7 @@ LL | struct _RangeTo<const R: std::ops::RangeTo<usize>>;
= help: more complex types are supported with `#![feature(adt_const_params)]`
error: `RangeToInclusive<usize>` is forbidden as the type of a const generic parameter
- --> $DIR/const-generics-range.rs:33:35
+ --> $DIR/const-generics-range.rs:34:35
|
LL | struct _RangeToInclusive<const R: std::ops::RangeToInclusive<usize>>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/const-generics/std/const-generics-range.rs b/tests/ui/const-generics/std/const-generics-range.rs
index 46c06f312..bda59f3ec 100644
--- a/tests/ui/const-generics/std/const-generics-range.rs
+++ b/tests/ui/const-generics/std/const-generics-range.rs
@@ -1,4 +1,5 @@
-// [full] check-pass
+// [full] known-bug: unknown
+
// revisions: full min
#![cfg_attr(full, feature(adt_const_params))]
#![cfg_attr(full, allow(incomplete_features))]
diff --git a/tests/ui/const-generics/transmute-fail.stderr b/tests/ui/const-generics/transmute-fail.stderr
index 3d1197afd..9e308620a 100644
--- a/tests/ui/const-generics/transmute-fail.stderr
+++ b/tests/ui/const-generics/transmute-fail.stderr
@@ -43,8 +43,8 @@ error[E0512]: cannot transmute between types of different sizes, or dependently-
LL | std::mem::transmute(v)
| ^^^^^^^^^^^^^^^^^^^
|
- = note: source type: `[[[u32; 8888888]; 9999999]; 777777777]` (values of the type `[[[u32; 8888888]; 9999999]; 777777777]` are too big for the current architecture)
- = note: target type: `[[[u32; 9999999]; 777777777]; 8888888]` (values of the type `[[[u32; 9999999]; 777777777]; 8888888]` are too big for the current architecture)
+ = note: source type: `[[[u32; 8888888]; 9999999]; 777777777]` (values of the type `[[u32; 8888888]; 9999999]` are too big for the current architecture)
+ = note: target type: `[[[u32; 9999999]; 777777777]; 8888888]` (values of the type `[[u32; 9999999]; 777777777]` are too big for the current architecture)
error: aborting due to 6 previous errors
diff --git a/tests/ui/const-ptr/forbidden_slices.stderr b/tests/ui/const-ptr/forbidden_slices.stderr
index 817cfb0ac..22c3dfa64 100644
--- a/tests/ui/const-ptr/forbidden_slices.stderr
+++ b/tests/ui/const-ptr/forbidden_slices.stderr
@@ -54,11 +54,11 @@ error[E0080]: it is undefined behavior to use this value
LL | pub static S5: &[u8] = unsafe { from_raw_parts((&D3) as *const _ as _, size_of::<&u32>()) };
| ^^^^^^^^^^^^^^^^^^^^ unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
HEX_DUMP
}
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error[E0080]: it is undefined behavior to use this value
--> $DIR/forbidden_slices.rs:30:1
@@ -98,7 +98,7 @@ LL | from_raw_parts(ptr, 1)
error[E0080]: could not evaluate static initializer
--> $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
- = note: out-of-bounds offset_from: null pointer is a dangling pointer (it has no provenance)
+ = note: out-of-bounds `offset_from`: null pointer is a dangling pointer (it has no provenance)
|
note: inside `ptr::const_ptr::<impl *const u32>::sub_ptr`
--> $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
@@ -156,11 +156,11 @@ error[E0080]: it is undefined behavior to use this value
LL | pub static R5: &[u8] = unsafe {
| ^^^^^^^^^^^^^^^^^^^^ unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
HEX_DUMP
}
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error[E0080]: it is undefined behavior to use this value
--> $DIR/forbidden_slices.rs:63:1
diff --git a/tests/ui/consts/assoc_const_generic_impl.rs b/tests/ui/consts/assoc_const_generic_impl.rs
index 3475c862b..ba358628d 100644
--- a/tests/ui/consts/assoc_const_generic_impl.rs
+++ b/tests/ui/consts/assoc_const_generic_impl.rs
@@ -8,7 +8,7 @@ trait ZeroSized: Sized {
impl<T: Sized> ZeroSized for T {
const I_AM_ZERO_SIZED: () = [()][std::mem::size_of::<Self>()]; //~ ERROR evaluation of `<u32 as ZeroSized>::I_AM_ZERO_SIZED` failed
fn requires_zero_size(self) {
- let () = Self::I_AM_ZERO_SIZED;
+ Self::I_AM_ZERO_SIZED;
println!("requires_zero_size called");
}
}
diff --git a/tests/ui/consts/const-eval/const-eval-overflow-3b.stderr b/tests/ui/consts/const-eval/const-eval-overflow-3b.stderr
index 05f33c339..06e398edc 100644
--- a/tests/ui/consts/const-eval/const-eval-overflow-3b.stderr
+++ b/tests/ui/consts/const-eval/const-eval-overflow-3b.stderr
@@ -12,10 +12,10 @@ LL | = [0; (i8::MAX + 1u8) as usize];
|
= help: the trait `Add<u8>` is not implemented for `i8`
= help: the following other types implement trait `Add<Rhs>`:
+ <i8 as Add>
+ <i8 as Add<&i8>>
<&'a i8 as Add<i8>>
<&i8 as Add<&i8>>
- <i8 as Add<&i8>>
- <i8 as Add>
error: aborting due to 2 previous errors
diff --git a/tests/ui/consts/const-eval/const-eval-overflow-4b.stderr b/tests/ui/consts/const-eval/const-eval-overflow-4b.stderr
index d019f5920..07ef2ac09 100644
--- a/tests/ui/consts/const-eval/const-eval-overflow-4b.stderr
+++ b/tests/ui/consts/const-eval/const-eval-overflow-4b.stderr
@@ -12,10 +12,10 @@ LL | : [u32; (i8::MAX as i8 + 1u8) as usize]
|
= help: the trait `Add<u8>` is not implemented for `i8`
= help: the following other types implement trait `Add<Rhs>`:
+ <i8 as Add>
+ <i8 as Add<&i8>>
<&'a i8 as Add<i8>>
<&i8 as Add<&i8>>
- <i8 as Add<&i8>>
- <i8 as Add>
error[E0604]: only `u8` can be cast as `char`, not `i8`
--> $DIR/const-eval-overflow-4b.rs:22:13
diff --git a/tests/ui/consts/const-eval/erroneous-const.rs b/tests/ui/consts/const-eval/erroneous-const.rs
index e0fd057a2..74d44c525 100644
--- a/tests/ui/consts/const-eval/erroneous-const.rs
+++ b/tests/ui/consts/const-eval/erroneous-const.rs
@@ -10,7 +10,7 @@ const fn no_codegen<T>() {
if false {
// This bad constant is only used in dead code in a no-codegen function... and yet we still
// must make sure that the build fails.
- let _ = PrintName::<T>::VOID; //~ constant
+ PrintName::<T>::VOID; //~ constant
}
}
diff --git a/tests/ui/consts/const-eval/erroneous-const.stderr b/tests/ui/consts/const-eval/erroneous-const.stderr
index 03030392a..770f95062 100644
--- a/tests/ui/consts/const-eval/erroneous-const.stderr
+++ b/tests/ui/consts/const-eval/erroneous-const.stderr
@@ -5,10 +5,10 @@ LL | const VOID: () = [()][2];
| ^^^^^^^ index out of bounds: the length is 1 but the index is 2
note: erroneous constant used
- --> $DIR/erroneous-const.rs:13:17
+ --> $DIR/erroneous-const.rs:13:13
|
-LL | let _ = PrintName::<T>::VOID;
- | ^^^^^^^^^^^^^^^^^^^^
+LL | PrintName::<T>::VOID;
+ | ^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/tests/ui/consts/const-eval/erroneous-const2.rs b/tests/ui/consts/const-eval/erroneous-const2.rs
index 15c0f9107..61f2955f2 100644
--- a/tests/ui/consts/const-eval/erroneous-const2.rs
+++ b/tests/ui/consts/const-eval/erroneous-const2.rs
@@ -10,7 +10,7 @@ pub static FOO: () = {
if false {
// This bad constant is only used in dead code in a static initializer... and yet we still
// must make sure that the build fails.
- let _ = PrintName::<i32>::VOID; //~ constant
+ PrintName::<i32>::VOID; //~ constant
}
};
diff --git a/tests/ui/consts/const-eval/erroneous-const2.stderr b/tests/ui/consts/const-eval/erroneous-const2.stderr
index 8626f4d78..082c28765 100644
--- a/tests/ui/consts/const-eval/erroneous-const2.stderr
+++ b/tests/ui/consts/const-eval/erroneous-const2.stderr
@@ -5,10 +5,10 @@ LL | const VOID: () = [()][2];
| ^^^^^^^ index out of bounds: the length is 1 but the index is 2
note: erroneous constant used
- --> $DIR/erroneous-const2.rs:13:17
+ --> $DIR/erroneous-const2.rs:13:9
|
-LL | let _ = PrintName::<i32>::VOID;
- | ^^^^^^^^^^^^^^^^^^^^^^
+LL | PrintName::<i32>::VOID;
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/tests/ui/consts/const-eval/heap/alloc_intrinsic_errors.stderr b/tests/ui/consts/const-eval/heap/alloc_intrinsic_errors.stderr
index 8f3b3d5f7..23ba2c2f5 100644
--- a/tests/ui/consts/const-eval/heap/alloc_intrinsic_errors.stderr
+++ b/tests/ui/consts/const-eval/heap/alloc_intrinsic_errors.stderr
@@ -2,7 +2,7 @@ error[E0080]: evaluation of constant value failed
--> $DIR/alloc_intrinsic_errors.rs:9:17
|
LL | let _ = intrinsics::const_allocate(4, 3) as *mut i32;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ align has to be a power of 2, `3` is not a power of 2
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid align passed to `const_allocate`: 3 is not a power of 2
|
note: inside `foo`
--> $DIR/alloc_intrinsic_errors.rs:9:17
diff --git a/tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.rs b/tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.rs
index f746f2700..9ae906bbb 100644
--- a/tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.rs
+++ b/tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.rs
@@ -4,11 +4,11 @@
use std::intrinsics;
const FOO: *const i32 = foo();
-//~^ ERROR untyped pointers are not allowed in constant
+//~^ ERROR unsupported untyped pointer in constant
const fn foo() -> &'static i32 {
let t = unsafe {
- let i = intrinsics::const_allocate(4, 4) as * mut i32;
+ let i = intrinsics::const_allocate(4, 4) as *mut i32;
*i = 20;
i
};
diff --git a/tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.stderr b/tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.stderr
index 00ab0dfc5..2103f842b 100644
--- a/tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.stderr
+++ b/tests/ui/consts/const-eval/heap/alloc_intrinsic_nontransient_fail.stderr
@@ -1,8 +1,10 @@
-error: untyped pointers are not allowed in constant
+error: unsupported untyped pointer in constant
--> $DIR/alloc_intrinsic_nontransient_fail.rs:6:1
|
LL | const FOO: *const i32 = foo();
| ^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: memory only reachable via raw pointers is not supported
error: aborting due to previous error
diff --git a/tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.rs b/tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.rs
index 77871c394..1354b3c33 100644
--- a/tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.rs
+++ b/tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.rs
@@ -3,7 +3,7 @@
#![feature(const_mut_refs)]
use std::intrinsics;
-const BAR: *mut i32 = unsafe { intrinsics::const_allocate(4, 4) as *mut i32};
-//~^ error: untyped pointers are not allowed in constant
+const BAR: *mut i32 = unsafe { intrinsics::const_allocate(4, 4) as *mut i32 };
+//~^ error: unsupported untyped pointer in constant
fn main() {}
diff --git a/tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.stderr b/tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.stderr
index 36002b850..b62766473 100644
--- a/tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.stderr
+++ b/tests/ui/consts/const-eval/heap/alloc_intrinsic_untyped.stderr
@@ -1,8 +1,10 @@
-error: untyped pointers are not allowed in constant
+error: unsupported untyped pointer in constant
--> $DIR/alloc_intrinsic_untyped.rs:6:1
|
-LL | const BAR: *mut i32 = unsafe { intrinsics::const_allocate(4, 4) as *mut i32};
+LL | const BAR: *mut i32 = unsafe { intrinsics::const_allocate(4, 4) as *mut i32 };
| ^^^^^^^^^^^^^^^^^^^
+ |
+ = note: memory only reachable via raw pointers is not supported
error: aborting due to previous error
diff --git a/tests/ui/consts/const-eval/heap/dealloc_intrinsic_incorrect_layout.stderr b/tests/ui/consts/const-eval/heap/dealloc_intrinsic_incorrect_layout.stderr
index 650b409b1..4c23957a1 100644
--- a/tests/ui/consts/const-eval/heap/dealloc_intrinsic_incorrect_layout.stderr
+++ b/tests/ui/consts/const-eval/heap/dealloc_intrinsic_incorrect_layout.stderr
@@ -20,7 +20,7 @@ error[E0080]: evaluation of constant value failed
--> $DIR/dealloc_intrinsic_incorrect_layout.rs:25:5
|
LL | intrinsics::const_deallocate(ptr, 4, 3);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ align has to be a power of 2, `3` is not a power of 2
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid align passed to `const_deallocate`: 3 is not a power of 2
error: aborting due to 4 previous errors
diff --git a/tests/ui/consts/const-eval/infinite_loop.rs b/tests/ui/consts/const-eval/infinite_loop.rs
index 4babc9a28..217814906 100644
--- a/tests/ui/consts/const-eval/infinite_loop.rs
+++ b/tests/ui/consts/const-eval/infinite_loop.rs
@@ -4,8 +4,8 @@ fn main() {
let _ = [(); {
let mut n = 113383; // #20 in https://oeis.org/A006884
while n != 0 {
- //~^ ERROR evaluation of constant value failed
- n = if n % 2 == 0 { n/2 } else { 3*n + 1 };
+ //~^ ERROR is taking a long time
+ n = if n % 2 == 0 { n / 2 } else { 3 * n + 1 };
}
n
}];
diff --git a/tests/ui/consts/const-eval/infinite_loop.stderr b/tests/ui/consts/const-eval/infinite_loop.stderr
index f30bfaf3f..f0434a847 100644
--- a/tests/ui/consts/const-eval/infinite_loop.stderr
+++ b/tests/ui/consts/const-eval/infinite_loop.stderr
@@ -1,12 +1,27 @@
-error[E0080]: evaluation of constant value failed
+error: constant evaluation is taking a long time
--> $DIR/infinite_loop.rs:6:9
|
LL | / while n != 0 {
LL | |
-LL | | n = if n % 2 == 0 { n/2 } else { 3*n + 1 };
+LL | | n = if n % 2 == 0 { n / 2 } else { 3 * n + 1 };
LL | | }
- | |_________^ exceeded interpreter step limit (see `#[const_eval_limit]`)
+ | |_________^
+ |
+ = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
+ If your compilation actually takes a long time, you can safely allow the lint.
+help: the constant being evaluated
+ --> $DIR/infinite_loop.rs:4:18
+ |
+LL | let _ = [(); {
+ | __________________^
+LL | | let mut n = 113383; // #20 in https://oeis.org/A006884
+LL | | while n != 0 {
+LL | |
+... |
+LL | | n
+LL | | }];
+ | |_____^
+ = note: `#[deny(long_running_const_eval)]` on by default
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const-eval/issue-52475.rs b/tests/ui/consts/const-eval/issue-52475.rs
index 307c1a668..ee26d2800 100644
--- a/tests/ui/consts/const-eval/issue-52475.rs
+++ b/tests/ui/consts/const-eval/issue-52475.rs
@@ -2,7 +2,8 @@ fn main() {
let _ = [(); {
let mut x = &0;
let mut n = 0;
- while n < 5 { //~ ERROR evaluation of constant value failed [E0080]
+ while n < 5 {
+ //~^ ERROR: constant evaluation is taking a long time
n = (n + 1) % 5;
x = &0; // Materialize a new AllocId
}
diff --git a/tests/ui/consts/const-eval/issue-52475.stderr b/tests/ui/consts/const-eval/issue-52475.stderr
index 3aa6bd277..ebf9d12a6 100644
--- a/tests/ui/consts/const-eval/issue-52475.stderr
+++ b/tests/ui/consts/const-eval/issue-52475.stderr
@@ -1,12 +1,28 @@
-error[E0080]: evaluation of constant value failed
+error: constant evaluation is taking a long time
--> $DIR/issue-52475.rs:5:9
|
LL | / while n < 5 {
+LL | |
LL | | n = (n + 1) % 5;
LL | | x = &0; // Materialize a new AllocId
LL | | }
- | |_________^ exceeded interpreter step limit (see `#[const_eval_limit]`)
+ | |_________^
+ |
+ = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
+ If your compilation actually takes a long time, you can safely allow the lint.
+help: the constant being evaluated
+ --> $DIR/issue-52475.rs:2:18
+ |
+LL | let _ = [(); {
+ | __________________^
+LL | | let mut x = &0;
+LL | | let mut n = 0;
+LL | | while n < 5 {
+... |
+LL | | 0
+LL | | }];
+ | |_____^
+ = note: `#[deny(long_running_const_eval)]` on by default
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const-eval/issue-70723.rs b/tests/ui/consts/const-eval/issue-70723.rs
index 3c81afa67..c8c809a25 100644
--- a/tests/ui/consts/const-eval/issue-70723.rs
+++ b/tests/ui/consts/const-eval/issue-70723.rs
@@ -1,3 +1,3 @@
-static _X: () = loop {}; //~ ERROR could not evaluate static initializer
+static _X: () = loop {}; //~ ERROR taking a long time
fn main() {}
diff --git a/tests/ui/consts/const-eval/issue-70723.stderr b/tests/ui/consts/const-eval/issue-70723.stderr
index 09fb3e060..572a43072 100644
--- a/tests/ui/consts/const-eval/issue-70723.stderr
+++ b/tests/ui/consts/const-eval/issue-70723.stderr
@@ -1,9 +1,17 @@
-error[E0080]: could not evaluate static initializer
+error: constant evaluation is taking a long time
--> $DIR/issue-70723.rs:1:17
|
LL | static _X: () = loop {};
- | ^^^^^^^ exceeded interpreter step limit (see `#[const_eval_limit]`)
+ | ^^^^^^^
+ |
+ = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
+ If your compilation actually takes a long time, you can safely allow the lint.
+help: the constant being evaluated
+ --> $DIR/issue-70723.rs:1:1
+ |
+LL | static _X: () = loop {};
+ | ^^^^^^^^^^^^^
+ = note: `#[deny(long_running_const_eval)]` on by default
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const-eval/promoted_errors.rs b/tests/ui/consts/const-eval/promoted_errors.rs
index 2c42d0356..5e67dc6f6 100644
--- a/tests/ui/consts/const-eval/promoted_errors.rs
+++ b/tests/ui/consts/const-eval/promoted_errors.rs
@@ -48,5 +48,5 @@ const Y: () = {
};
fn main() {
- let _y = Y;
+ Y;
}
diff --git a/tests/ui/consts/const-eval/raw-bytes.32bit.stderr b/tests/ui/consts/const-eval/raw-bytes.32bit.stderr
index a93b561e5..c0ddaceea 100644
--- a/tests/ui/consts/const-eval/raw-bytes.32bit.stderr
+++ b/tests/ui/consts/const-eval/raw-bytes.32bit.stderr
@@ -35,7 +35,7 @@ error[E0080]: it is undefined behavior to use this value
--> $DIR/raw-bytes.rs:44:1
|
LL | const BAD_UNINHABITED_VARIANT2: UninhDiscriminant = unsafe { mem::transmute(3u8) };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(D)>.0: encountered a value of uninhabited type Never
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(D)>.0: encountered a value of uninhabited type `Never`
|
= note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.
= note: the raw bytes of the constant (size: 1, align: 1) {
@@ -290,11 +290,11 @@ error[E0080]: it is undefined behavior to use this value
LL | const MYSTR_NO_INIT_ISSUE83182: &MyStr = unsafe { mem::transmute::<&[_], _>(&[&()]) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
= note: the raw bytes of the constant (size: 8, align: 4) {
╾ALLOC_ID╼ 01 00 00 00 │ ╾──╼....
}
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error[E0080]: it is undefined behavior to use this value
--> $DIR/raw-bytes.rs:152:1
@@ -529,11 +529,11 @@ error[E0080]: it is undefined behavior to use this value
LL | pub static S5: &[u8] = unsafe { from_raw_parts((&D3) as *const _ as _, mem::size_of::<&u32>()) };
| ^^^^^^^^^^^^^^^^^^^^ unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
= note: the raw bytes of the constant (size: 8, align: 4) {
╾ALLOC_ID╼ 04 00 00 00 │ ╾──╼....
}
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error[E0080]: it is undefined behavior to use this value
--> $DIR/raw-bytes.rs:221:1
@@ -574,11 +574,11 @@ error[E0080]: it is undefined behavior to use this value
LL | pub static R5: &[u8] = unsafe {
| ^^^^^^^^^^^^^^^^^^^^ unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
= note: the raw bytes of the constant (size: 8, align: 4) {
╾ALLOC_ID╼ 04 00 00 00 │ ╾──╼....
}
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error[E0080]: it is undefined behavior to use this value
--> $DIR/raw-bytes.rs:242:1
diff --git a/tests/ui/consts/const-eval/raw-bytes.64bit.stderr b/tests/ui/consts/const-eval/raw-bytes.64bit.stderr
index a32d4863a..20c905878 100644
--- a/tests/ui/consts/const-eval/raw-bytes.64bit.stderr
+++ b/tests/ui/consts/const-eval/raw-bytes.64bit.stderr
@@ -35,7 +35,7 @@ error[E0080]: it is undefined behavior to use this value
--> $DIR/raw-bytes.rs:44:1
|
LL | const BAD_UNINHABITED_VARIANT2: UninhDiscriminant = unsafe { mem::transmute(3u8) };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(D)>.0: encountered a value of uninhabited type Never
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(D)>.0: encountered a value of uninhabited type `Never`
|
= note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.
= note: the raw bytes of the constant (size: 1, align: 1) {
@@ -290,11 +290,11 @@ error[E0080]: it is undefined behavior to use this value
LL | const MYSTR_NO_INIT_ISSUE83182: &MyStr = unsafe { mem::transmute::<&[_], _>(&[&()]) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
= note: the raw bytes of the constant (size: 16, align: 8) {
╾ALLOC_ID╼ 01 00 00 00 00 00 00 00 │ ╾──────╼........
}
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error[E0080]: it is undefined behavior to use this value
--> $DIR/raw-bytes.rs:152:1
@@ -529,11 +529,11 @@ error[E0080]: it is undefined behavior to use this value
LL | pub static S5: &[u8] = unsafe { from_raw_parts((&D3) as *const _ as _, mem::size_of::<&u32>()) };
| ^^^^^^^^^^^^^^^^^^^^ unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
= note: the raw bytes of the constant (size: 16, align: 8) {
╾ALLOC_ID╼ 08 00 00 00 00 00 00 00 │ ╾──────╼........
}
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error[E0080]: it is undefined behavior to use this value
--> $DIR/raw-bytes.rs:221:1
@@ -574,11 +574,11 @@ error[E0080]: it is undefined behavior to use this value
LL | pub static R5: &[u8] = unsafe {
| ^^^^^^^^^^^^^^^^^^^^ unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
= note: the raw bytes of the constant (size: 16, align: 8) {
╾ALLOC_ID╼ 08 00 00 00 00 00 00 00 │ ╾──────╼........
}
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error[E0080]: it is undefined behavior to use this value
--> $DIR/raw-bytes.rs:242:1
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.rs b/tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.rs
index c59596238..a30518170 100644
--- a/tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.rs
+++ b/tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.rs
@@ -25,7 +25,7 @@ const fn call_foo() -> u32 {
foo();
foo();
foo();
- foo(); //~ ERROR evaluation of constant value failed [E0080]
+ foo(); //~ ERROR is taking a long time
0
}
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.stderr b/tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.stderr
index ed70975af..a3fd712ca 100644
--- a/tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.stderr
+++ b/tests/ui/consts/const-eval/stable-metric/ctfe-fn-call.stderr
@@ -1,20 +1,17 @@
-error[E0080]: evaluation of constant value failed
- --> $DIR/ctfe-fn-call.rs:28:5
- |
-LL | foo();
- | ^^^^^ exceeded interpreter step limit (see `#[const_eval_limit]`)
- |
-note: inside `call_foo`
+error: constant evaluation is taking a long time
--> $DIR/ctfe-fn-call.rs:28:5
|
LL | foo();
| ^^^^^
-note: inside `X`
- --> $DIR/ctfe-fn-call.rs:32:16
+ |
+ = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
+ If your compilation actually takes a long time, you can safely allow the lint.
+help: the constant being evaluated
+ --> $DIR/ctfe-fn-call.rs:32:1
|
LL | const X: u32 = call_foo();
- | ^^^^^^^^^^
+ | ^^^^^^^^^^^^
+ = note: `#[deny(long_running_const_eval)]` on by default
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.rs b/tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.rs
index c10b8d837..f7cd04568 100644
--- a/tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.rs
+++ b/tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.rs
@@ -3,9 +3,10 @@
const fn labelled_loop(n: u32) -> u32 {
let mut i = 0;
- 'mylabel: loop { //~ ERROR evaluation of constant value failed [E0080]
+ 'mylabel: loop {
+ //~^ ERROR is taking a long time
if i > n {
- break 'mylabel
+ break 'mylabel;
}
i += 1;
}
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.stderr b/tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.stderr
index d9404edd5..5808ee35a 100644
--- a/tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.stderr
+++ b/tests/ui/consts/const-eval/stable-metric/ctfe-labelled-loop.stderr
@@ -1,30 +1,23 @@
-error[E0080]: evaluation of constant value failed
+error: constant evaluation is taking a long time
--> $DIR/ctfe-labelled-loop.rs:6:5
|
LL | / 'mylabel: loop {
+LL | |
LL | | if i > n {
-LL | | break 'mylabel
-LL | | }
-LL | | i += 1;
-LL | | }
- | |_____^ exceeded interpreter step limit (see `#[const_eval_limit]`)
- |
-note: inside `labelled_loop`
- --> $DIR/ctfe-labelled-loop.rs:6:5
- |
-LL | / 'mylabel: loop {
-LL | | if i > n {
-LL | | break 'mylabel
+LL | | break 'mylabel;
LL | | }
LL | | i += 1;
LL | | }
| |_____^
-note: inside `X`
- --> $DIR/ctfe-labelled-loop.rs:15:16
+ |
+ = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
+ If your compilation actually takes a long time, you can safely allow the lint.
+help: the constant being evaluated
+ --> $DIR/ctfe-labelled-loop.rs:16:1
|
LL | const X: u32 = labelled_loop(19);
- | ^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^
+ = note: `#[deny(long_running_const_eval)]` on by default
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-recursion.rs b/tests/ui/consts/const-eval/stable-metric/ctfe-recursion.rs
index 80ff835f3..56a39fc45 100644
--- a/tests/ui/consts/const-eval/stable-metric/ctfe-recursion.rs
+++ b/tests/ui/consts/const-eval/stable-metric/ctfe-recursion.rs
@@ -1,11 +1,12 @@
// check-fail
// compile-flags: -Z tiny-const-eval-limit
+#[rustfmt::skip]
const fn recurse(n: u32) -> u32 {
if n == 0 {
n
} else {
- recurse(n - 1) //~ ERROR evaluation of constant value failed [E0080]
+ recurse(n - 1) //~ ERROR is taking a long time
}
}
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-recursion.stderr b/tests/ui/consts/const-eval/stable-metric/ctfe-recursion.stderr
index ed9a31119..524c8e554 100644
--- a/tests/ui/consts/const-eval/stable-metric/ctfe-recursion.stderr
+++ b/tests/ui/consts/const-eval/stable-metric/ctfe-recursion.stderr
@@ -1,25 +1,17 @@
-error[E0080]: evaluation of constant value failed
- --> $DIR/ctfe-recursion.rs:8:9
- |
-LL | recurse(n - 1)
- | ^^^^^^^^^^^^^^ exceeded interpreter step limit (see `#[const_eval_limit]`)
- |
-note: inside `recurse`
- --> $DIR/ctfe-recursion.rs:8:9
+error: constant evaluation is taking a long time
+ --> $DIR/ctfe-recursion.rs:9:9
|
LL | recurse(n - 1)
| ^^^^^^^^^^^^^^
-note: [... 18 additional calls inside `recurse` ...]
- --> $DIR/ctfe-recursion.rs:8:9
|
-LL | recurse(n - 1)
- | ^^^^^^^^^^^^^^
-note: inside `X`
- --> $DIR/ctfe-recursion.rs:12:16
+ = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
+ If your compilation actually takes a long time, you can safely allow the lint.
+help: the constant being evaluated
+ --> $DIR/ctfe-recursion.rs:13:1
|
LL | const X: u32 = recurse(19);
- | ^^^^^^^^^^^
+ | ^^^^^^^^^^^^
+ = note: `#[deny(long_running_const_eval)]` on by default
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.allow.stderr b/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.allow.stderr
new file mode 100644
index 000000000..30550f93a
--- /dev/null
+++ b/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.allow.stderr
@@ -0,0 +1,19 @@
+warning: constant evaluation is taking a long time
+ --> $DIR/ctfe-simple-loop.rs:9:5
+ |
+LL | / while index < n {
+LL | |
+LL | |
+LL | |
+LL | | index = index + 1;
+LL | | }
+ | |_____^ the const evaluator is currently interpreting this expression
+ |
+help: the constant being evaluated
+ --> $DIR/ctfe-simple-loop.rs:19:1
+ |
+LL | const Y: u32 = simple_loop(35);
+ | ^^^^^^^^^^^^
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.rs b/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.rs
index ca0eec93c..214f33dfb 100644
--- a/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.rs
+++ b/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.rs
@@ -1,14 +1,22 @@
-// check-fail
+// check-pass
+// revisions: warn allow
+#![cfg_attr(warn, warn(long_running_const_eval))]
+#![cfg_attr(allow, allow(long_running_const_eval))]
+
// compile-flags: -Z tiny-const-eval-limit
const fn simple_loop(n: u32) -> u32 {
let mut index = 0;
- while index < n { //~ ERROR evaluation of constant value failed [E0080]
+ while index < n {
+ //~^ WARN is taking a long time
+ //[warn]~| WARN is taking a long time
+ //[warn]~| WARN is taking a long time
index = index + 1;
}
0
}
const X: u32 = simple_loop(19);
+const Y: u32 = simple_loop(35);
fn main() {
println!("{X}");
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.stderr b/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.stderr
deleted file mode 100644
index 83ff275de..000000000
--- a/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.stderr
+++ /dev/null
@@ -1,24 +0,0 @@
-error[E0080]: evaluation of constant value failed
- --> $DIR/ctfe-simple-loop.rs:5:5
- |
-LL | / while index < n {
-LL | | index = index + 1;
-LL | | }
- | |_____^ exceeded interpreter step limit (see `#[const_eval_limit]`)
- |
-note: inside `simple_loop`
- --> $DIR/ctfe-simple-loop.rs:5:5
- |
-LL | / while index < n {
-LL | | index = index + 1;
-LL | | }
- | |_____^
-note: inside `X`
- --> $DIR/ctfe-simple-loop.rs:11:16
- |
-LL | const X: u32 = simple_loop(19);
- | ^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.warn.stderr b/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.warn.stderr
new file mode 100644
index 000000000..40fc4a876
--- /dev/null
+++ b/tests/ui/consts/const-eval/stable-metric/ctfe-simple-loop.warn.stderr
@@ -0,0 +1,62 @@
+warning: constant evaluation is taking a long time
+ --> $DIR/ctfe-simple-loop.rs:9:5
+ |
+LL | / while index < n {
+LL | |
+LL | |
+LL | |
+LL | | index = index + 1;
+LL | | }
+ | |_____^
+ |
+ = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
+ If your compilation actually takes a long time, you can safely allow the lint.
+help: the constant being evaluated
+ --> $DIR/ctfe-simple-loop.rs:18:1
+ |
+LL | const X: u32 = simple_loop(19);
+ | ^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/ctfe-simple-loop.rs:3:24
+ |
+LL | #![cfg_attr(warn, warn(long_running_const_eval))]
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: constant evaluation is taking a long time
+ --> $DIR/ctfe-simple-loop.rs:9:5
+ |
+LL | / while index < n {
+LL | |
+LL | |
+LL | |
+LL | | index = index + 1;
+LL | | }
+ | |_____^
+ |
+ = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
+ If your compilation actually takes a long time, you can safely allow the lint.
+help: the constant being evaluated
+ --> $DIR/ctfe-simple-loop.rs:19:1
+ |
+LL | const Y: u32 = simple_loop(35);
+ | ^^^^^^^^^^^^
+
+warning: constant evaluation is taking a long time
+ --> $DIR/ctfe-simple-loop.rs:9:5
+ |
+LL | / while index < n {
+LL | |
+LL | |
+LL | |
+LL | | index = index + 1;
+LL | | }
+ | |_____^ the const evaluator is currently interpreting this expression
+ |
+help: the constant being evaluated
+ --> $DIR/ctfe-simple-loop.rs:19:1
+ |
+LL | const Y: u32 = simple_loop(35);
+ | ^^^^^^^^^^^^
+
+warning: 3 warnings emitted
+
diff --git a/tests/ui/consts/const-eval/ub-enum.32bit.stderr b/tests/ui/consts/const-eval/ub-enum.32bit.stderr
index 3ad1ac974..1810600b7 100644
--- a/tests/ui/consts/const-eval/ub-enum.32bit.stderr
+++ b/tests/ui/consts/const-eval/ub-enum.32bit.stderr
@@ -86,7 +86,7 @@ error[E0080]: it is undefined behavior to use this value
--> $DIR/ub-enum.rs:83:1
|
LL | const BAD_UNINHABITED_VARIANT2: UninhDiscriminant = unsafe { mem::transmute(3u8) };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(D)>.0: encountered a value of uninhabited type Never
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(D)>.0: encountered a value of uninhabited type `Never`
|
= note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
@@ -108,7 +108,7 @@ error[E0080]: evaluation of constant value failed
--> $DIR/ub-enum.rs:96:77
|
LL | const BAD_UNINHABITED_WITH_DATA1: Result<(i32, Never), (i32, !)> = unsafe { mem::transmute(0u64) };
- | ^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(Ok)>.0.1: encountered a value of uninhabited type Never
+ | ^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(Ok)>.0.1: encountered a value of uninhabited type `Never`
error[E0080]: evaluation of constant value failed
--> $DIR/ub-enum.rs:98:77
diff --git a/tests/ui/consts/const-eval/ub-enum.64bit.stderr b/tests/ui/consts/const-eval/ub-enum.64bit.stderr
index a66706d1a..fb40babb0 100644
--- a/tests/ui/consts/const-eval/ub-enum.64bit.stderr
+++ b/tests/ui/consts/const-eval/ub-enum.64bit.stderr
@@ -86,7 +86,7 @@ error[E0080]: it is undefined behavior to use this value
--> $DIR/ub-enum.rs:83:1
|
LL | const BAD_UNINHABITED_VARIANT2: UninhDiscriminant = unsafe { mem::transmute(3u8) };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(D)>.0: encountered a value of uninhabited type Never
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(D)>.0: encountered a value of uninhabited type `Never`
|
= note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
@@ -108,7 +108,7 @@ error[E0080]: evaluation of constant value failed
--> $DIR/ub-enum.rs:96:77
|
LL | const BAD_UNINHABITED_WITH_DATA1: Result<(i32, Never), (i32, !)> = unsafe { mem::transmute(0u64) };
- | ^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(Ok)>.0.1: encountered a value of uninhabited type Never
+ | ^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .<enum-variant(Ok)>.0.1: encountered a value of uninhabited type `Never`
error[E0080]: evaluation of constant value failed
--> $DIR/ub-enum.rs:98:77
diff --git a/tests/ui/consts/const-eval/ub-uninhabit.stderr b/tests/ui/consts/const-eval/ub-uninhabit.stderr
index 733975fc0..f1ad0f04d 100644
--- a/tests/ui/consts/const-eval/ub-uninhabit.stderr
+++ b/tests/ui/consts/const-eval/ub-uninhabit.stderr
@@ -2,7 +2,7 @@ error[E0080]: evaluation of constant value failed
--> $DIR/ub-uninhabit.rs:16:35
|
LL | const BAD_BAD_BAD: Bar = unsafe { MaybeUninit { uninit: () }.init };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value: encountered a value of uninhabited type Bar
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value: encountered a value of uninhabited type `Bar`
error[E0080]: it is undefined behavior to use this value
--> $DIR/ub-uninhabit.rs:19:1
@@ -19,7 +19,7 @@ error[E0080]: evaluation of constant value failed
--> $DIR/ub-uninhabit.rs:22:42
|
LL | const BAD_BAD_ARRAY: [Bar; 1] = unsafe { MaybeUninit { uninit: () }.init };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at [0]: encountered a value of uninhabited type Bar
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at [0]: encountered a value of uninhabited type `Bar`
error: aborting due to 3 previous errors
diff --git a/tests/ui/consts/const-eval/unwind-abort.rs b/tests/ui/consts/const-eval/unwind-abort.rs
index 2b0e58166..57959e7db 100644
--- a/tests/ui/consts/const-eval/unwind-abort.rs
+++ b/tests/ui/consts/const-eval/unwind-abort.rs
@@ -8,5 +8,5 @@ const _: () = foo();
// Ensure that the CTFE engine handles calls to `extern "C"` aborting gracefully
fn main() {
- let _ = foo();
+ foo();
}
diff --git a/tests/ui/consts/const-eval/validate_uninhabited_zsts.32bit.stderr b/tests/ui/consts/const-eval/validate_uninhabited_zsts.32bit.stderr
index 74bc6317c..b423edbdc 100644
--- a/tests/ui/consts/const-eval/validate_uninhabited_zsts.32bit.stderr
+++ b/tests/ui/consts/const-eval/validate_uninhabited_zsts.32bit.stderr
@@ -28,7 +28,7 @@ error[E0080]: evaluation of constant value failed
--> $DIR/validate_uninhabited_zsts.rs:21:42
|
LL | const BAR: [empty::Empty; 3] = [unsafe { std::mem::transmute(()) }; 3];
- | ^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .0: encountered a value of uninhabited type empty::Void
+ | ^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .0: encountered a value of uninhabited type `Void`
warning: the type `empty::Empty` does not permit zero-initialization
--> $DIR/validate_uninhabited_zsts.rs:21:42
diff --git a/tests/ui/consts/const-eval/validate_uninhabited_zsts.64bit.stderr b/tests/ui/consts/const-eval/validate_uninhabited_zsts.64bit.stderr
index 74bc6317c..b423edbdc 100644
--- a/tests/ui/consts/const-eval/validate_uninhabited_zsts.64bit.stderr
+++ b/tests/ui/consts/const-eval/validate_uninhabited_zsts.64bit.stderr
@@ -28,7 +28,7 @@ error[E0080]: evaluation of constant value failed
--> $DIR/validate_uninhabited_zsts.rs:21:42
|
LL | const BAR: [empty::Empty; 3] = [unsafe { std::mem::transmute(()) }; 3];
- | ^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .0: encountered a value of uninhabited type empty::Void
+ | ^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value at .0: encountered a value of uninhabited type `Void`
warning: the type `empty::Empty` does not permit zero-initialization
--> $DIR/validate_uninhabited_zsts.rs:21:42
diff --git a/tests/ui/consts/const-len-underflow-separate-spans.stderr b/tests/ui/consts/const-len-underflow-separate-spans.next.stderr
index 269553631..d9208d070 100644
--- a/tests/ui/consts/const-len-underflow-separate-spans.stderr
+++ b/tests/ui/consts/const-len-underflow-separate-spans.next.stderr
@@ -1,11 +1,11 @@
error[E0080]: evaluation of constant value failed
- --> $DIR/const-len-underflow-separate-spans.rs:7:20
+ --> $DIR/const-len-underflow-separate-spans.rs:10:20
|
LL | const LEN: usize = ONE - TWO;
| ^^^^^^^^^ attempt to compute `1_usize - 2_usize`, which would overflow
note: erroneous constant used
- --> $DIR/const-len-underflow-separate-spans.rs:11:17
+ --> $DIR/const-len-underflow-separate-spans.rs:14:17
|
LL | let a: [i8; LEN] = unimplemented!();
| ^^^
diff --git a/tests/ui/consts/const-len-underflow-separate-spans.old.stderr b/tests/ui/consts/const-len-underflow-separate-spans.old.stderr
new file mode 100644
index 000000000..d9208d070
--- /dev/null
+++ b/tests/ui/consts/const-len-underflow-separate-spans.old.stderr
@@ -0,0 +1,15 @@
+error[E0080]: evaluation of constant value failed
+ --> $DIR/const-len-underflow-separate-spans.rs:10:20
+ |
+LL | const LEN: usize = ONE - TWO;
+ | ^^^^^^^^^ attempt to compute `1_usize - 2_usize`, which would overflow
+
+note: erroneous constant used
+ --> $DIR/const-len-underflow-separate-spans.rs:14:17
+ |
+LL | let a: [i8; LEN] = unimplemented!();
+ | ^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const-len-underflow-separate-spans.rs b/tests/ui/consts/const-len-underflow-separate-spans.rs
index 4544c8876..55704b641 100644
--- a/tests/ui/consts/const-len-underflow-separate-spans.rs
+++ b/tests/ui/consts/const-len-underflow-separate-spans.rs
@@ -2,6 +2,9 @@
// spot (where the underflow occurred), while also providing the
// overall context for what caused the evaluation.
+// revisions: old next
+//[next] compile-flags: -Ztrait-solver=next
+
const ONE: usize = 1;
const TWO: usize = 2;
const LEN: usize = ONE - TWO;
diff --git a/tests/ui/consts/const_in_pattern/issue-73431.rs b/tests/ui/consts/const_in_pattern/issue-73431.rs
index fa18a3af1..835f502b4 100644
--- a/tests/ui/consts/const_in_pattern/issue-73431.rs
+++ b/tests/ui/consts/const_in_pattern/issue-73431.rs
@@ -1,4 +1,5 @@
// run-pass
+// unset-rustc-env:RUSTC_LOG_COLOR
// Regression test for https://github.com/rust-lang/rust/issues/73431.
diff --git a/tests/ui/consts/const_limit/const_eval_limit_not_reached.rs b/tests/ui/consts/const_limit/const_eval_limit_not_reached.rs
deleted file mode 100644
index 629d1f02a..000000000
--- a/tests/ui/consts/const_limit/const_eval_limit_not_reached.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-// check-pass
-
-#![feature(const_eval_limit)]
-
-// This needs to be higher than the number of loop iterations since each pass through the loop may
-// hit more than one terminator.
-#![const_eval_limit="4000"]
-
-const X: usize = {
- let mut x = 0;
- while x != 1000 {
- x += 1;
- }
-
- x
-};
-
-fn main() {
- assert_eq!(X, 1000);
-}
diff --git a/tests/ui/consts/const_limit/const_eval_limit_overflow.rs b/tests/ui/consts/const_limit/const_eval_limit_overflow.rs
deleted file mode 100644
index 1c49593cd..000000000
--- a/tests/ui/consts/const_limit/const_eval_limit_overflow.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-#![feature(const_eval_limit)]
-#![const_eval_limit="18_446_744_073_709_551_615"]
-//~^ ERROR `limit` must be a non-negative integer
-
-const CONSTANT: usize = limit();
-
-fn main() {
- assert_eq!(CONSTANT, 1764);
-}
-
-const fn limit() -> usize {
- let x = 42;
-
- x * 42
-}
diff --git a/tests/ui/consts/const_limit/const_eval_limit_overflow.stderr b/tests/ui/consts/const_limit/const_eval_limit_overflow.stderr
deleted file mode 100644
index 7f5d5e6cd..000000000
--- a/tests/ui/consts/const_limit/const_eval_limit_overflow.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: `limit` must be a non-negative integer
- --> $DIR/const_eval_limit_overflow.rs:2:1
- |
-LL | #![const_eval_limit="18_446_744_073_709_551_615"]
- | ^^^^^^^^^^^^^^^^^^^^----------------------------^
- | |
- | not a valid integer
-
-error: aborting due to previous error
-
diff --git a/tests/ui/consts/const_limit/const_eval_limit_reached.rs b/tests/ui/consts/const_limit/const_eval_limit_reached.rs
deleted file mode 100644
index 3ce038c1d..000000000
--- a/tests/ui/consts/const_limit/const_eval_limit_reached.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-#![feature(const_eval_limit)]
-#![const_eval_limit = "500"]
-
-const X: usize = {
- let mut x = 0;
- while x != 1000 {
- //~^ ERROR evaluation of constant value failed
- x += 1;
- }
-
- x
-};
-
-fn main() {
- assert_eq!(X, 1000);
-}
diff --git a/tests/ui/consts/const_limit/const_eval_limit_reached.stderr b/tests/ui/consts/const_limit/const_eval_limit_reached.stderr
deleted file mode 100644
index a8e8ae9bb..000000000
--- a/tests/ui/consts/const_limit/const_eval_limit_reached.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0080]: evaluation of constant value failed
- --> $DIR/const_eval_limit_reached.rs:6:5
- |
-LL | / while x != 1000 {
-LL | |
-LL | | x += 1;
-LL | | }
- | |_____^ exceeded interpreter step limit (see `#[const_eval_limit]`)
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0080`.
diff --git a/tests/ui/consts/const_limit/feature-gate-const_eval_limit.rs b/tests/ui/consts/const_limit/feature-gate-const_eval_limit.rs
deleted file mode 100644
index 61119d751..000000000
--- a/tests/ui/consts/const_limit/feature-gate-const_eval_limit.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-#![const_eval_limit="42"]
-//~^ ERROR the `#[const_eval_limit]` attribute is an experimental feature [E0658]
-
-const CONSTANT: usize = limit();
-
-fn main() {
- assert_eq!(CONSTANT, 1764);
-}
-
-const fn limit() -> usize {
- let x = 42;
-
- x * 42
-}
diff --git a/tests/ui/consts/const_limit/feature-gate-const_eval_limit.stderr b/tests/ui/consts/const_limit/feature-gate-const_eval_limit.stderr
deleted file mode 100644
index 5bd29c7df..000000000
--- a/tests/ui/consts/const_limit/feature-gate-const_eval_limit.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0658]: the `#[const_eval_limit]` attribute is an experimental feature
- --> $DIR/feature-gate-const_eval_limit.rs:1:1
- |
-LL | #![const_eval_limit="42"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: see issue #67217 <https://github.com/rust-lang/rust/issues/67217> for more information
- = help: add `#![feature(const_eval_limit)]` 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/tests/ui/issues/issue-16538.mir.stderr b/tests/ui/consts/issue-16538.mir.stderr
index e320df4b7..e320df4b7 100644
--- a/tests/ui/issues/issue-16538.mir.stderr
+++ b/tests/ui/consts/issue-16538.mir.stderr
diff --git a/tests/ui/issues/issue-16538.rs b/tests/ui/consts/issue-16538.rs
index 270fa3014..270fa3014 100644
--- a/tests/ui/issues/issue-16538.rs
+++ b/tests/ui/consts/issue-16538.rs
diff --git a/tests/ui/issues/issue-16538.thir.stderr b/tests/ui/consts/issue-16538.thir.stderr
index 4a8628692..4a8628692 100644
--- a/tests/ui/issues/issue-16538.thir.stderr
+++ b/tests/ui/consts/issue-16538.thir.stderr
diff --git a/tests/ui/issues/issue-28822.rs b/tests/ui/consts/issue-28822.rs
index 10e5d1dd0..10e5d1dd0 100644
--- a/tests/ui/issues/issue-28822.rs
+++ b/tests/ui/consts/issue-28822.rs
diff --git a/tests/ui/issues/issue-29798.rs b/tests/ui/consts/issue-29798.rs
index 5eff5d191..5eff5d191 100644
--- a/tests/ui/issues/issue-29798.rs
+++ b/tests/ui/consts/issue-29798.rs
diff --git a/tests/ui/consts/issue-64506.stderr b/tests/ui/consts/issue-64506.stderr
index 31a5b1df8..2fe84245b 100644
--- a/tests/ui/consts/issue-64506.stderr
+++ b/tests/ui/consts/issue-64506.stderr
@@ -2,7 +2,7 @@ error[E0080]: evaluation of constant value failed
--> $DIR/issue-64506.rs:16:22
|
LL | let x = unsafe { Foo { b: () }.a };
- | ^^^^^^^^^^^^^^^ constructing invalid value at .inner: encountered a value of uninhabited type AnonPipe
+ | ^^^^^^^^^^^^^^^ constructing invalid value at .inner: encountered a value of uninhabited type `AnonPipe`
error: aborting due to previous error
diff --git a/tests/ui/consts/issue-83182.stderr b/tests/ui/consts/issue-83182.stderr
index 1d578f910..ca4e0f7aa 100644
--- a/tests/ui/consts/issue-83182.stderr
+++ b/tests/ui/consts/issue-83182.stderr
@@ -4,11 +4,11 @@ error[E0080]: it is undefined behavior to use this value
LL | const MYSTR_NO_INIT: &MyStr = unsafe { mem::transmute::<&[_], _>(&[&()]) };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
HEX_DUMP
}
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error: aborting due to previous error
diff --git a/tests/ui/consts/issue-miri-1910.stderr b/tests/ui/consts/issue-miri-1910.stderr
index fb758d406..67797e6fb 100644
--- a/tests/ui/consts/issue-miri-1910.stderr
+++ b/tests/ui/consts/issue-miri-1910.stderr
@@ -3,8 +3,6 @@ error[E0080]: evaluation of constant value failed
|
= note: unable to turn pointer into raw bytes
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
note: inside `std::ptr::read::<u8>`
--> $SRC_DIR/core/src/ptr/mod.rs:LL:COL
note: inside `ptr::const_ptr::<impl *const u8>::read`
@@ -14,6 +12,8 @@ note: inside `C`
|
LL | (&foo as *const _ as *const u8).add(one_and_a_half_pointers).read();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error: aborting due to previous error
diff --git a/tests/ui/consts/large_const_alloc.rs b/tests/ui/consts/large_const_alloc.rs
index 54abaab22..298ed38d1 100644
--- a/tests/ui/consts/large_const_alloc.rs
+++ b/tests/ui/consts/large_const_alloc.rs
@@ -13,6 +13,6 @@ static FOO2: () = {
};
fn main() {
- let _ = FOO;
- let _ = FOO2;
+ FOO;
+ FOO2;
}
diff --git a/tests/ui/consts/miri_unleashed/assoc_const.stderr b/tests/ui/consts/miri_unleashed/assoc_const.stderr
index 8e22cb74b..d97097d35 100644
--- a/tests/ui/consts/miri_unleashed/assoc_const.stderr
+++ b/tests/ui/consts/miri_unleashed/assoc_const.stderr
@@ -1,4 +1,4 @@
-error[E0080]: evaluation of `<std::string::String as Bar<std::vec::Vec<u32>, std::string::String>>::F` failed
+error[E0080]: evaluation of `<String as Bar<Vec<u32>, String>>::F` failed
--> $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
= note: calling non-const function `<Vec<u32> as Drop>::drop`
diff --git a/tests/ui/consts/miri_unleashed/raw_mutable_const.rs b/tests/ui/consts/miri_unleashed/raw_mutable_const.rs
index 5f8ec4e6e..adb1f8bf3 100644
--- a/tests/ui/consts/miri_unleashed/raw_mutable_const.rs
+++ b/tests/ui/consts/miri_unleashed/raw_mutable_const.rs
@@ -3,6 +3,6 @@
use std::cell::UnsafeCell;
const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *mut _;
-//~^ ERROR: untyped pointers are not allowed in constant
+//~^ ERROR: unsupported untyped pointer in constant
fn main() {}
diff --git a/tests/ui/consts/miri_unleashed/raw_mutable_const.stderr b/tests/ui/consts/miri_unleashed/raw_mutable_const.stderr
index f8dc11d69..5acdcdd95 100644
--- a/tests/ui/consts/miri_unleashed/raw_mutable_const.stderr
+++ b/tests/ui/consts/miri_unleashed/raw_mutable_const.stderr
@@ -1,8 +1,10 @@
-error: untyped pointers are not allowed in constant
+error: unsupported untyped pointer in constant
--> $DIR/raw_mutable_const.rs:5:1
|
LL | const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *mut _;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: memory only reachable via raw pointers is not supported
warning: skipping const checks
|
diff --git a/tests/ui/consts/missing-larger-array-impl.rs b/tests/ui/consts/missing-larger-array-impl.rs
new file mode 100644
index 000000000..e6c879c8e
--- /dev/null
+++ b/tests/ui/consts/missing-larger-array-impl.rs
@@ -0,0 +1,9 @@
+struct X;
+
+// Make sure that we show the impl trait refs in the help message with
+// their evaluated constants, rather than `core::::array::{impl#30}::{constant#0}`
+
+fn main() {
+ <[X; 35] as Default>::default();
+ //~^ ERROR the trait bound `[X; 35]: Default` is not satisfied
+}
diff --git a/tests/ui/consts/missing-larger-array-impl.stderr b/tests/ui/consts/missing-larger-array-impl.stderr
new file mode 100644
index 000000000..b8f6cb5ef
--- /dev/null
+++ b/tests/ui/consts/missing-larger-array-impl.stderr
@@ -0,0 +1,20 @@
+error[E0277]: the trait bound `[X; 35]: Default` is not satisfied
+ --> $DIR/missing-larger-array-impl.rs:7:5
+ |
+LL | <[X; 35] as Default>::default();
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Default` is not implemented for `[X; 35]`
+ |
+ = help: the following other types implement trait `Default`:
+ [T; 0]
+ [T; 1]
+ [T; 2]
+ [T; 3]
+ [T; 4]
+ [T; 5]
+ [T; 6]
+ [T; 7]
+ and 27 others
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/consts/missing_span_in_backtrace.stderr b/tests/ui/consts/missing_span_in_backtrace.stderr
index e6d3d5199..fcfb9fbb3 100644
--- a/tests/ui/consts/missing_span_in_backtrace.stderr
+++ b/tests/ui/consts/missing_span_in_backtrace.stderr
@@ -3,8 +3,6 @@ error[E0080]: evaluation of constant value failed
|
= note: unable to copy parts of a pointer from memory at ALLOC_ID
|
- = help: this code performed an operation that depends on the underlying bytes representing a pointer
- = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
note: inside `std::ptr::read::<MaybeUninit<MaybeUninit<u8>>>`
--> $SRC_DIR/core/src/ptr/mod.rs:LL:COL
note: inside `mem::swap_simple::<MaybeUninit<MaybeUninit<u8>>>`
@@ -22,6 +20,8 @@ note: inside `X`
20 | | mem::size_of::<&i32>(),
21 | | );
| |_________^
+ = help: this code performed an operation that depends on the underlying bytes representing a pointer
+ = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
error: aborting due to previous error
diff --git a/tests/ui/consts/offset_from_ub.stderr b/tests/ui/consts/offset_from_ub.stderr
index 6530084a5..97ff6efdd 100644
--- a/tests/ui/consts/offset_from_ub.stderr
+++ b/tests/ui/consts/offset_from_ub.stderr
@@ -27,31 +27,31 @@ error[E0080]: evaluation of constant value failed
--> $DIR/offset_from_ub.rs:37:14
|
LL | unsafe { ptr_offset_from(ptr, ptr) }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds offset_from: null pointer is a dangling pointer (it has no provenance)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds `offset_from`: null pointer is a dangling pointer (it has no provenance)
error[E0080]: evaluation of constant value failed
--> $DIR/offset_from_ub.rs:44:14
|
LL | unsafe { ptr_offset_from(ptr2, ptr1) }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds offset_from: 0x8[noalloc] is a dangling pointer (it has no provenance)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds `offset_from`: 0x8[noalloc] is a dangling pointer (it has no provenance)
error[E0080]: evaluation of constant value failed
--> $DIR/offset_from_ub.rs:53:14
|
LL | unsafe { ptr_offset_from(end_ptr, start_ptr) }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds offset_from: alloc17 has size 4, so pointer to 10 bytes starting at offset 0 is out-of-bounds
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds `offset_from`: alloc17 has size 4, so pointer to 10 bytes starting at offset 0 is out-of-bounds
error[E0080]: evaluation of constant value failed
--> $DIR/offset_from_ub.rs:62:14
|
LL | unsafe { ptr_offset_from(start_ptr, end_ptr) }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds offset_from: alloc20 has size 4, so pointer to 10 bytes starting at offset 0 is out-of-bounds
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds `offset_from`: alloc20 has size 4, so pointer to 10 bytes starting at offset 0 is out-of-bounds
error[E0080]: evaluation of constant value failed
--> $DIR/offset_from_ub.rs:70:14
|
LL | unsafe { ptr_offset_from(end_ptr, end_ptr) }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds offset_from: alloc23 has size 4, so pointer at offset 10 is out-of-bounds
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds `offset_from`: alloc23 has size 4, so pointer at offset 10 is out-of-bounds
error[E0080]: evaluation of constant value failed
--> $DIR/offset_from_ub.rs:79:14
@@ -86,7 +86,7 @@ LL | unsafe { ptr_offset_from_unsigned(ptr2, ptr1) }
error[E0080]: evaluation of constant value failed
--> $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
- = note: out-of-bounds offset_from: null pointer is a dangling pointer (it has no provenance)
+ = note: out-of-bounds `offset_from`: null pointer is a dangling pointer (it has no provenance)
|
note: inside `ptr::const_ptr::<impl *const u8>::offset_from`
--> $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
@@ -99,7 +99,7 @@ LL | unsafe { ptr2.offset_from(ptr1) }
error[E0080]: evaluation of constant value failed
--> $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
|
- = note: out-of-bounds offset_from: null pointer is a dangling pointer (it has no provenance)
+ = note: out-of-bounds `offset_from`: null pointer is a dangling pointer (it has no provenance)
|
note: inside `ptr::const_ptr::<impl *const u8>::offset_from`
--> $SRC_DIR/core/src/ptr/const_ptr.rs:LL:COL
diff --git a/tests/ui/consts/raw-ptr-const.rs b/tests/ui/consts/raw-ptr-const.rs
index b9c542d03..fc774be54 100644
--- a/tests/ui/consts/raw-ptr-const.rs
+++ b/tests/ui/consts/raw-ptr-const.rs
@@ -3,6 +3,6 @@
// could also be allowed.
const CONST_RAW: *const Vec<i32> = &Vec::new() as *const _;
-//~^ ERROR untyped pointers are not allowed in constant
+//~^ ERROR unsupported untyped pointer in constant
fn main() {}
diff --git a/tests/ui/consts/raw-ptr-const.stderr b/tests/ui/consts/raw-ptr-const.stderr
index f7b53433b..82f782fab 100644
--- a/tests/ui/consts/raw-ptr-const.stderr
+++ b/tests/ui/consts/raw-ptr-const.stderr
@@ -1,8 +1,10 @@
-error: untyped pointers are not allowed in constant
+error: unsupported untyped pointer in constant
--> $DIR/raw-ptr-const.rs:5:1
|
LL | const CONST_RAW: *const Vec<i32> = &Vec::new() as *const _;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: memory only reachable via raw pointers is not supported
error: aborting due to previous error
diff --git a/tests/ui/consts/refs_check_const_eq-issue-88384.rs b/tests/ui/consts/refs_check_const_eq-issue-88384.rs
index 1496b28bd..fb0405b65 100644
--- a/tests/ui/consts/refs_check_const_eq-issue-88384.rs
+++ b/tests/ui/consts/refs_check_const_eq-issue-88384.rs
@@ -8,10 +8,10 @@ struct CompileTimeSettings{
}
struct Foo<const T: CompileTimeSettings>;
-//~^ ERROR using function pointers as const generic parameters is forbidden
+//~^ ERROR `CompileTimeSettings` must implement `ConstParamTy` to be used as the type of a const generic parameter
impl<const T: CompileTimeSettings> Foo<T> {
- //~^ ERROR using function pointers as const generic parameters is forbidden
+ //~^ ERROR `CompileTimeSettings` must implement `ConstParamTy` to be used as the type of a const generic parameter
fn call_hooks(){
}
}
diff --git a/tests/ui/consts/refs_check_const_eq-issue-88384.stderr b/tests/ui/consts/refs_check_const_eq-issue-88384.stderr
index 3855b5f2a..c490cd053 100644
--- a/tests/ui/consts/refs_check_const_eq-issue-88384.stderr
+++ b/tests/ui/consts/refs_check_const_eq-issue-88384.stderr
@@ -7,17 +7,29 @@ LL | #![feature(adt_const_params)]
= note: see issue #95174 <https://github.com/rust-lang/rust/issues/95174> for more information
= note: `#[warn(incomplete_features)]` on by default
-error[E0741]: using function pointers as const generic parameters is forbidden
+error[E0741]: `CompileTimeSettings` must implement `ConstParamTy` to be used as the type of a const generic parameter
--> $DIR/refs_check_const_eq-issue-88384.rs:10:21
|
LL | struct Foo<const T: CompileTimeSettings>;
| ^^^^^^^^^^^^^^^^^^^
+ |
+help: add `#[derive(ConstParamTy)]` to the struct
+ |
+LL + #[derive(ConstParamTy)]
+LL | struct CompileTimeSettings{
+ |
-error[E0741]: using function pointers as const generic parameters is forbidden
+error[E0741]: `CompileTimeSettings` must implement `ConstParamTy` to be used as the type of a const generic parameter
--> $DIR/refs_check_const_eq-issue-88384.rs:13:15
|
LL | impl<const T: CompileTimeSettings> Foo<T> {
| ^^^^^^^^^^^^^^^^^^^
+ |
+help: add `#[derive(ConstParamTy)]` to the struct
+ |
+LL + #[derive(ConstParamTy)]
+LL | struct CompileTimeSettings{
+ |
error: aborting due to 2 previous errors; 1 warning emitted
diff --git a/tests/ui/consts/timeout.rs b/tests/ui/consts/timeout.rs
new file mode 100644
index 000000000..c9094999e
--- /dev/null
+++ b/tests/ui/consts/timeout.rs
@@ -0,0 +1,25 @@
+//! This test checks that external macros don't hide
+//! the const eval timeout lint and then subsequently
+//! ICE.
+
+// compile-flags: --crate-type=lib -Ztiny-const-eval-limit
+// error-pattern: constant evaluation is taking a long time
+
+static ROOK_ATTACKS_TABLE: () = {
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+ 0_u64.count_ones();
+};
diff --git a/tests/ui/consts/timeout.stderr b/tests/ui/consts/timeout.stderr
new file mode 100644
index 000000000..799b5ec8d
--- /dev/null
+++ b/tests/ui/consts/timeout.stderr
@@ -0,0 +1,15 @@
+error: constant evaluation is taking a long time
+ --> $SRC_DIR/core/src/num/mod.rs:LL:COL
+ |
+ = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
+ If your compilation actually takes a long time, you can safely allow the lint.
+help: the constant being evaluated
+ --> $DIR/timeout.rs:8:1
+ |
+LL | static ROOK_ATTACKS_TABLE: () = {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: `#[deny(long_running_const_eval)]` on by default
+ = note: this error originates in the macro `uint_impl` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to previous error
+
diff --git a/tests/ui/consts/too_generic_eval_ice.stderr b/tests/ui/consts/too_generic_eval_ice.stderr
index 5af82a3e3..843d6d9e0 100644
--- a/tests/ui/consts/too_generic_eval_ice.stderr
+++ b/tests/ui/consts/too_generic_eval_ice.stderr
@@ -22,14 +22,14 @@ LL | [5; Self::HOST_SIZE] == [6; 0]
|
= help: the trait `PartialEq<[{integer}; 0]>` is not implemented for `[{integer}; Self::HOST_SIZE]`
= help: the following other types implement trait `PartialEq<Rhs>`:
- <&[B] as PartialEq<[A; N]>>
- <&[T] as PartialEq<Vec<U, A>>>
- <&mut [B] as PartialEq<[A; N]>>
- <&mut [T] as PartialEq<Vec<U, A>>>
- <[A; N] as PartialEq<&[B]>>
- <[A; N] as PartialEq<&mut [B]>>
<[A; N] as PartialEq<[B; N]>>
<[A; N] as PartialEq<[B]>>
+ <[A; N] as PartialEq<&[B]>>
+ <[A; N] as PartialEq<&mut [B]>>
+ <[T] as PartialEq<Vec<U, A>>>
+ <[A] as PartialEq<[B]>>
+ <[B] as PartialEq<[A; N]>>
+ <&[T] as PartialEq<Vec<U, A>>>
and 3 others
error: aborting due to 3 previous errors
diff --git a/tests/ui/deriving/deriving-all-codegen.stdout b/tests/ui/deriving/deriving-all-codegen.stdout
index 5bca83e87..d6a2c80cc 100644
--- a/tests/ui/deriving/deriving-all-codegen.stdout
+++ b/tests/ui/deriving/deriving-all-codegen.stdout
@@ -44,6 +44,7 @@ impl ::core::default::Default for Empty {
}
#[automatically_derived]
impl ::core::hash::Hash for Empty {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {}
}
#[automatically_derived]
@@ -113,6 +114,7 @@ impl ::core::default::Default for Point {
}
#[automatically_derived]
impl ::core::hash::Hash for Point {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
::core::hash::Hash::hash(&self.x, state);
::core::hash::Hash::hash(&self.y, state)
@@ -198,6 +200,7 @@ impl ::core::default::Default for PackedPoint {
}
#[automatically_derived]
impl ::core::hash::Hash for PackedPoint {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
::core::hash::Hash::hash(&{ self.x }, state);
::core::hash::Hash::hash(&{ self.y }, state)
@@ -301,6 +304,7 @@ impl ::core::default::Default for Big {
}
#[automatically_derived]
impl ::core::hash::Hash for Big {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
::core::hash::Hash::hash(&self.b1, state);
::core::hash::Hash::hash(&self.b2, state);
@@ -478,6 +482,7 @@ impl ::core::fmt::Debug for Unsized {
}
#[automatically_derived]
impl ::core::hash::Hash for Unsized {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
::core::hash::Hash::hash(&self.0, state)
}
@@ -529,6 +534,7 @@ impl ::core::fmt::Debug for PackedUnsizedU8 {
}
#[automatically_derived]
impl ::core::hash::Hash for PackedUnsizedU8 {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
::core::hash::Hash::hash(&self.0, state)
}
@@ -584,6 +590,7 @@ impl<T: ::core::default::Default + Trait, U: ::core::default::Default>
#[automatically_derived]
impl<T: ::core::hash::Hash + Trait, U: ::core::hash::Hash> ::core::hash::Hash
for Generic<T, U> where T::A: ::core::hash::Hash {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
::core::hash::Hash::hash(&self.t, state);
::core::hash::Hash::hash(&self.ta, state);
@@ -701,6 +708,7 @@ impl<T: ::core::hash::Hash + ::core::marker::Copy + Trait,
U: ::core::hash::Hash + ::core::marker::Copy> ::core::hash::Hash for
PackedGeneric<T, U> where T::A: ::core::hash::Hash + ::core::marker::Copy
{
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
::core::hash::Hash::hash(&{ self.0 }, state);
::core::hash::Hash::hash(&{ self.1 }, state);
@@ -795,6 +803,7 @@ impl ::core::fmt::Debug for Enum0 {
}
#[automatically_derived]
impl ::core::hash::Hash for Enum0 {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
unsafe { ::core::intrinsics::unreachable() }
}
@@ -861,6 +870,7 @@ impl ::core::fmt::Debug for Enum1 {
}
#[automatically_derived]
impl ::core::hash::Hash for Enum1 {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
match self {
Enum1::Single { x: __self_0 } =>
@@ -937,6 +947,7 @@ impl ::core::default::Default for Fieldless1 {
}
#[automatically_derived]
impl ::core::hash::Hash for Fieldless1 {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {}
}
#[automatically_derived]
@@ -1004,6 +1015,7 @@ impl ::core::default::Default for Fieldless {
}
#[automatically_derived]
impl ::core::hash::Hash for Fieldless {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
let __self_tag = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_tag, state)
@@ -1095,6 +1107,7 @@ impl ::core::default::Default for Mixed {
}
#[automatically_derived]
impl ::core::hash::Hash for Mixed {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
let __self_tag = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_tag, state);
@@ -1224,6 +1237,7 @@ impl ::core::fmt::Debug for Fielded {
}
#[automatically_derived]
impl ::core::hash::Hash for Fielded {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
let __self_tag = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_tag, state);
@@ -1345,6 +1359,7 @@ impl<T: ::core::fmt::Debug, U: ::core::fmt::Debug> ::core::fmt::Debug for
#[automatically_derived]
impl<T: ::core::hash::Hash, U: ::core::hash::Hash> ::core::hash::Hash for
EnumGeneric<T, U> {
+ #[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) -> () {
let __self_tag = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_tag, state);
diff --git a/tests/ui/deriving/issue-103157.stderr b/tests/ui/deriving/issue-103157.stderr
index b18e1e509..01cce2a39 100644
--- a/tests/ui/deriving/issue-103157.stderr
+++ b/tests/ui/deriving/issue-103157.stderr
@@ -8,14 +8,14 @@ LL | Float(Option<f64>),
| ^^^^^^^^^^^ the trait `Eq` is not implemented for `f64`
|
= help: the following other types implement trait `Eq`:
- i128
+ isize
+ i8
i16
i32
i64
- i8
- isize
- u128
- u16
+ i128
+ usize
+ u8
and 4 others
= note: required for `Option<f64>` to implement `Eq`
note: required by a bound in `AssertParamIsEq`
diff --git a/tests/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.stderr b/tests/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.stderr
index 5e0e4a011..2d50c0964 100644
--- a/tests/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.stderr
+++ b/tests/ui/did_you_mean/issue-21659-show-relevant-trait-impls-2.stderr
@@ -7,12 +7,12 @@ LL | f1.foo(1usize);
| required by a bound introduced by this call
|
= help: the following other types implement trait `Foo<A>`:
+ <Bar as Foo<i8>>
<Bar as Foo<i16>>
<Bar as Foo<i32>>
- <Bar as Foo<i8>>
+ <Bar as Foo<u8>>
<Bar as Foo<u16>>
<Bar as Foo<u32>>
- <Bar as Foo<u8>>
error: aborting due to previous error
diff --git a/tests/ui/did_you_mean/issue-39802-show-5-trait-impls.stderr b/tests/ui/did_you_mean/issue-39802-show-5-trait-impls.stderr
index 7229b9ac9..ae15e054f 100644
--- a/tests/ui/did_you_mean/issue-39802-show-5-trait-impls.stderr
+++ b/tests/ui/did_you_mean/issue-39802-show-5-trait-impls.stderr
@@ -8,10 +8,10 @@ LL | Foo::<i32>::bar(&1i8);
|
= help: the following other types implement trait `Foo<B>`:
<i8 as Foo<bool>>
+ <i8 as Foo<u8>>
<i8 as Foo<u16>>
<i8 as Foo<u32>>
<i8 as Foo<u64>>
- <i8 as Foo<u8>>
error[E0277]: the trait bound `u8: Foo<i32>` is not satisfied
--> $DIR/issue-39802-show-5-trait-impls.rs:25:21
@@ -38,10 +38,10 @@ LL | Foo::<i32>::bar(&true);
= help: the following other types implement trait `Foo<B>`:
<bool as Foo<bool>>
<bool as Foo<i8>>
+ <bool as Foo<u8>>
<bool as Foo<u16>>
<bool as Foo<u32>>
<bool as Foo<u64>>
- <bool as Foo<u8>>
error: aborting due to 3 previous errors
diff --git a/tests/ui/did_you_mean/issue-42599_available_fields_note.stderr b/tests/ui/did_you_mean/issue-42599_available_fields_note.stderr
index dbd9dc1bc..c20bbce3f 100644
--- a/tests/ui/did_you_mean/issue-42599_available_fields_note.stderr
+++ b/tests/ui/did_you_mean/issue-42599_available_fields_note.stderr
@@ -10,7 +10,7 @@ error[E0560]: struct `Demo` has no field named `egregiously_nonexistent_field`
LL | Self { secret_integer: 3, egregiously_nonexistent_field: () }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Demo` does not have this field
|
- = note: available fields are: `favorite_integer`, `secret_integer`, `innocently_misspellable`, `another_field`, `yet_another_field` ... and 2 others
+ = note: available fields are: `favorite_integer`, `innocently_misspellable`, `another_field`, `yet_another_field`, `always_more_fields`, `and_ever`
error[E0609]: no field `inocently_mispellable` on type `Demo`
--> $DIR/issue-42599_available_fields_note.rs:32:41
diff --git a/tests/ui/did_you_mean/issue-49746-unicode-confusable-in-float-literal-expt.stderr b/tests/ui/did_you_mean/issue-49746-unicode-confusable-in-float-literal-expt.stderr
index 26986684f..44bdbb93f 100644
--- a/tests/ui/did_you_mean/issue-49746-unicode-confusable-in-float-literal-expt.stderr
+++ b/tests/ui/did_you_mean/issue-49746-unicode-confusable-in-float-literal-expt.stderr
@@ -23,14 +23,14 @@ LL | const UNIVERSAL_GRAVITATIONAL_CONSTANT: f64 = 6.674e−11; // m³⋅kg⁻¹
|
= help: the trait `Sub<{integer}>` is not implemented for `{float}`
= help: the following other types implement trait `Sub<Rhs>`:
- <&'a f32 as Sub<f32>>
- <&'a f64 as Sub<f64>>
- <&'a i128 as Sub<i128>>
- <&'a i16 as Sub<i16>>
- <&'a i32 as Sub<i32>>
- <&'a i64 as Sub<i64>>
- <&'a i8 as Sub<i8>>
- <&'a isize as Sub<isize>>
+ <isize as Sub>
+ <isize as Sub<&isize>>
+ <i8 as Sub>
+ <i8 as Sub<&i8>>
+ <i16 as Sub>
+ <i16 as Sub<&i16>>
+ <i32 as Sub>
+ <i32 as Sub<&i32>>
and 48 others
error: aborting due to 3 previous errors
diff --git a/tests/ui/dst/dst-object-from-unsized-type.stderr b/tests/ui/dst/dst-object-from-unsized-type.stderr
index d5e464aed..cbb7dc5e9 100644
--- a/tests/ui/dst/dst-object-from-unsized-type.stderr
+++ b/tests/ui/dst/dst-object-from-unsized-type.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
--> $DIR/dst-object-from-unsized-type.rs:8:23
|
LL | fn test1<T: ?Sized + Foo>(t: &T) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | let u: &dyn Foo = t;
| ^ doesn't have a size known at compile-time
|
@@ -17,7 +17,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
--> $DIR/dst-object-from-unsized-type.rs:13:23
|
LL | fn test2<T: ?Sized + Foo>(t: &T) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | let v: &dyn Foo = t as &dyn Foo;
| ^ doesn't have a size known at compile-time
|
diff --git a/tests/ui/duplicate/dupe-symbols-7.rs b/tests/ui/duplicate/dupe-symbols-7.rs
index 633ca4c31..498387472 100644
--- a/tests/ui/duplicate/dupe-symbols-7.rs
+++ b/tests/ui/duplicate/dupe-symbols-7.rs
@@ -3,9 +3,6 @@
//
// error-pattern: entry symbol `main` declared multiple times
-// FIXME https://github.com/rust-lang/rust/issues/59774
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
#![allow(warnings)]
#[no_mangle]
diff --git a/tests/ui/duplicate/dupe-symbols-7.stderr b/tests/ui/duplicate/dupe-symbols-7.stderr
index 1455f0e75..cd5147c0e 100644
--- a/tests/ui/duplicate/dupe-symbols-7.stderr
+++ b/tests/ui/duplicate/dupe-symbols-7.stderr
@@ -1,5 +1,5 @@
error: entry symbol `main` declared multiple times
- --> $DIR/dupe-symbols-7.rs:12:1
+ --> $DIR/dupe-symbols-7.rs:9:1
|
LL | fn main(){}
| ^^^^^^^^^
diff --git a/tests/ui/dyn-star/box.rs b/tests/ui/dyn-star/box.rs
index d1f1819d9..87c8356a1 100644
--- a/tests/ui/dyn-star/box.rs
+++ b/tests/ui/dyn-star/box.rs
@@ -1,5 +1,7 @@
// run-pass
-// compile-flags: -C opt-level=0
+// revisions: current next
+//[current] compile-flags: -C opt-level=0
+//[next] compile-flags: -Ztrait-solver=next -C opt-level=0
#![feature(dyn_star)]
#![allow(incomplete_features)]
diff --git a/tests/ui/dyn-star/param-env-infer.current.stderr b/tests/ui/dyn-star/param-env-infer.current.stderr
deleted file mode 100644
index b3af7be79..000000000
--- a/tests/ui/dyn-star/param-env-infer.current.stderr
+++ /dev/null
@@ -1,18 +0,0 @@
-warning: the feature `dyn_star` is incomplete and may not be safe to use and/or cause compiler crashes
- --> $DIR/param-env-infer.rs:5:12
- |
-LL | #![feature(dyn_star, pointer_like_trait)]
- | ^^^^^^^^
- |
- = note: see issue #102425 <https://github.com/rust-lang/rust/issues/102425> for more information
- = note: `#[warn(incomplete_features)]` on by default
-
-error[E0282]: type annotations needed
- --> $DIR/param-env-infer.rs:13:10
- |
-LL | t as _
- | ^ cannot infer type
-
-error: aborting due to previous error; 1 warning emitted
-
-For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/dyn-star/param-env-infer.next.stderr b/tests/ui/dyn-star/param-env-infer.next.stderr
deleted file mode 100644
index 64d76bb04..000000000
--- a/tests/ui/dyn-star/param-env-infer.next.stderr
+++ /dev/null
@@ -1,73 +0,0 @@
-warning: the feature `dyn_star` is incomplete and may not be safe to use and/or cause compiler crashes
- --> $DIR/param-env-infer.rs:5:12
- |
-LL | #![feature(dyn_star, pointer_like_trait)]
- | ^^^^^^^^
- |
- = note: see issue #102425 <https://github.com/rust-lang/rust/issues/102425> for more information
- = note: `#[warn(incomplete_features)]` on by default
-
-error[E0391]: cycle detected when computing type of `make_dyn_star::{opaque#0}`
- --> $DIR/param-env-infer.rs:11:60
- |
-LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
-note: ...which requires borrow-checking `make_dyn_star`...
- --> $DIR/param-env-infer.rs:11:1
- |
-LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires promoting constants in MIR for `make_dyn_star`...
- --> $DIR/param-env-infer.rs:11:1
- |
-LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires preparing `make_dyn_star` for borrow checking...
- --> $DIR/param-env-infer.rs:11:1
- |
-LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires unsafety-checking `make_dyn_star`...
- --> $DIR/param-env-infer.rs:11:1
- |
-LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires building MIR for `make_dyn_star`...
- --> $DIR/param-env-infer.rs:11:1
- |
-LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires match-checking `make_dyn_star`...
- --> $DIR/param-env-infer.rs:11:1
- |
-LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires building THIR for `make_dyn_star`...
- --> $DIR/param-env-infer.rs:11:1
- |
-LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires type-checking `make_dyn_star`...
- --> $DIR/param-env-infer.rs:11:1
- |
-LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- = note: ...which requires computing layout of `make_dyn_star::{opaque#0}`...
- = note: ...which requires normalizing `make_dyn_star::{opaque#0}`...
- = note: ...which again requires computing type of `make_dyn_star::{opaque#0}`, completing the cycle
-note: cycle used when checking item types in top-level module
- --> $DIR/param-env-infer.rs:5:1
- |
-LL | / #![feature(dyn_star, pointer_like_trait)]
-LL | |
-LL | |
-LL | | use std::fmt::Debug;
-... |
-LL | |
-LL | | fn main() {}
- | |____________^
-
-error: aborting due to previous error; 1 warning emitted
-
-For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/dyn-star/param-env-infer.rs b/tests/ui/dyn-star/param-env-infer.rs
deleted file mode 100644
index 1fb16d768..000000000
--- a/tests/ui/dyn-star/param-env-infer.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-// revisions: current next
-//[next] compile-flags: -Ztrait-solver=next
-// incremental
-
-#![feature(dyn_star, pointer_like_trait)]
-//~^ WARN the feature `dyn_star` is incomplete and may not be safe to use and/or cause compiler crashes
-
-use std::fmt::Debug;
-use std::marker::PointerLike;
-
-fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
- //[next]~^ ERROR cycle detected when computing type of `make_dyn_star::{opaque#0}`
- t as _
- //[current]~^ ERROR type annotations needed
-}
-
-fn main() {}
diff --git a/tests/ui/dyn-star/param-env-region-infer.current.stderr b/tests/ui/dyn-star/param-env-region-infer.current.stderr
new file mode 100644
index 000000000..902053ecf
--- /dev/null
+++ b/tests/ui/dyn-star/param-env-region-infer.current.stderr
@@ -0,0 +1,9 @@
+error[E0282]: type annotations needed
+ --> $DIR/param-env-region-infer.rs:18:10
+ |
+LL | t as _
+ | ^ cannot infer type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/tests/ui/dyn-star/param-env-region-infer.next.stderr b/tests/ui/dyn-star/param-env-region-infer.next.stderr
new file mode 100644
index 000000000..dd724a659
--- /dev/null
+++ b/tests/ui/dyn-star/param-env-region-infer.next.stderr
@@ -0,0 +1,29 @@
+error[E0391]: cycle detected when computing type of `make_dyn_star::{opaque#0}`
+ --> $DIR/param-env-region-infer.rs:16:60
+ |
+LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: ...which requires type-checking `make_dyn_star`...
+ --> $DIR/param-env-region-infer.rs:16:1
+ |
+LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: ...which requires computing layout of `make_dyn_star::{opaque#0}`...
+ = note: ...which requires normalizing `make_dyn_star::{opaque#0}`...
+ = note: ...which again requires computing type of `make_dyn_star::{opaque#0}`, completing the cycle
+note: cycle used when checking item types in top-level module
+ --> $DIR/param-env-region-infer.rs:10:1
+ |
+LL | / #![feature(dyn_star, pointer_like_trait)]
+LL | | #![allow(incomplete_features)]
+LL | |
+LL | | use std::fmt::Debug;
+... |
+LL | |
+LL | | fn main() {}
+ | |____________^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/dyn-star/param-env-region-infer.rs b/tests/ui/dyn-star/param-env-region-infer.rs
new file mode 100644
index 000000000..537473abc
--- /dev/null
+++ b/tests/ui/dyn-star/param-env-region-infer.rs
@@ -0,0 +1,22 @@
+// revisions: current next
+// Need `-Zdeduplicate-diagnostics=yes` because the number of cycle errors
+// emitted is for some horrible reason platform-specific.
+//[next] compile-flags: -Ztrait-solver=next -Zdeduplicate-diagnostics=yes
+// incremental
+
+// checks that we don't ICE if there are region inference variables in the environment
+// when computing `PointerLike` builtin candidates.
+
+#![feature(dyn_star, pointer_like_trait)]
+#![allow(incomplete_features)]
+
+use std::fmt::Debug;
+use std::marker::PointerLike;
+
+fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
+ //[next]~^ ERROR cycle detected when computing
+ t as _
+ //[current]~^ ERROR type annotations needed
+}
+
+fn main() {}
diff --git a/tests/ui/empty-allocation-rvalue-non-null.rs b/tests/ui/empty-allocation-rvalue-non-null.rs
index 2f5a5c4bb..ad0f22031 100644
--- a/tests/ui/empty-allocation-rvalue-non-null.rs
+++ b/tests/ui/empty-allocation-rvalue-non-null.rs
@@ -4,5 +4,5 @@
// pretty-expanded FIXME #23616
pub fn main() {
- let x = *Box::new(());
+ let x: () = *Box::new(());
}
diff --git a/tests/ui/empty/empty-macro-use.stderr b/tests/ui/empty/empty-macro-use.stderr
index e0b3b8685..5d552e4c4 100644
--- a/tests/ui/empty/empty-macro-use.stderr
+++ b/tests/ui/empty/empty-macro-use.stderr
@@ -4,8 +4,10 @@ error: cannot find macro `macro_two` in this scope
LL | macro_two!();
| ^^^^^^^^^
|
- = help: consider importing this macro:
- two_macros::macro_two
+help: consider importing this macro
+ |
+LL + use two_macros::macro_two;
+ |
error: aborting due to previous error
diff --git a/tests/ui/discrim/discrim-ill-typed.rs b/tests/ui/enum-discriminant/discriminant-ill-typed.rs
index 3cf0ea0e6..3cf0ea0e6 100644
--- a/tests/ui/discrim/discrim-ill-typed.rs
+++ b/tests/ui/enum-discriminant/discriminant-ill-typed.rs
diff --git a/tests/ui/discrim/discrim-ill-typed.stderr b/tests/ui/enum-discriminant/discriminant-ill-typed.stderr
index 27f516341..275714528 100644
--- a/tests/ui/discrim/discrim-ill-typed.stderr
+++ b/tests/ui/enum-discriminant/discriminant-ill-typed.stderr
@@ -1,5 +1,5 @@
error[E0308]: mismatched types
- --> $DIR/discrim-ill-typed.rs:15:16
+ --> $DIR/discriminant-ill-typed.rs:15:16
|
LL | OhNo = 0_u8,
| ^^^^ expected `i8`, found `u8`
@@ -10,7 +10,7 @@ LL | OhNo = 0_i8,
| ~~
error[E0308]: mismatched types
- --> $DIR/discrim-ill-typed.rs:28:16
+ --> $DIR/discriminant-ill-typed.rs:28:16
|
LL | OhNo = 0_i8,
| ^^^^ expected `u8`, found `i8`
@@ -21,7 +21,7 @@ LL | OhNo = 0_u8,
| ~~
error[E0308]: mismatched types
- --> $DIR/discrim-ill-typed.rs:41:16
+ --> $DIR/discriminant-ill-typed.rs:41:16
|
LL | OhNo = 0_u16,
| ^^^^^ expected `i16`, found `u16`
@@ -32,7 +32,7 @@ LL | OhNo = 0_i16,
| ~~~
error[E0308]: mismatched types
- --> $DIR/discrim-ill-typed.rs:54:16
+ --> $DIR/discriminant-ill-typed.rs:54:16
|
LL | OhNo = 0_i16,
| ^^^^^ expected `u16`, found `i16`
@@ -43,7 +43,7 @@ LL | OhNo = 0_u16,
| ~~~
error[E0308]: mismatched types
- --> $DIR/discrim-ill-typed.rs:67:16
+ --> $DIR/discriminant-ill-typed.rs:67:16
|
LL | OhNo = 0_u32,
| ^^^^^ expected `i32`, found `u32`
@@ -54,7 +54,7 @@ LL | OhNo = 0_i32,
| ~~~
error[E0308]: mismatched types
- --> $DIR/discrim-ill-typed.rs:80:16
+ --> $DIR/discriminant-ill-typed.rs:80:16
|
LL | OhNo = 0_i32,
| ^^^^^ expected `u32`, found `i32`
@@ -65,7 +65,7 @@ LL | OhNo = 0_u32,
| ~~~
error[E0308]: mismatched types
- --> $DIR/discrim-ill-typed.rs:93:16
+ --> $DIR/discriminant-ill-typed.rs:93:16
|
LL | OhNo = 0_u64,
| ^^^^^ expected `i64`, found `u64`
@@ -76,7 +76,7 @@ LL | OhNo = 0_i64,
| ~~~
error[E0308]: mismatched types
- --> $DIR/discrim-ill-typed.rs:106:16
+ --> $DIR/discriminant-ill-typed.rs:106:16
|
LL | OhNo = 0_i64,
| ^^^^^ expected `u64`, found `i64`
diff --git a/tests/ui/discrim/discrim-overflow-2.rs b/tests/ui/enum-discriminant/discriminant-overflow-2.rs
index ca24317c5..ca24317c5 100644
--- a/tests/ui/discrim/discrim-overflow-2.rs
+++ b/tests/ui/enum-discriminant/discriminant-overflow-2.rs
diff --git a/tests/ui/discrim/discrim-overflow.stderr b/tests/ui/enum-discriminant/discriminant-overflow-2.stderr
index 1b331bb1b..5f7387c59 100644
--- a/tests/ui/discrim/discrim-overflow.stderr
+++ b/tests/ui/enum-discriminant/discriminant-overflow-2.stderr
@@ -1,5 +1,5 @@
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow.rs:11:9
+ --> $DIR/discriminant-overflow-2.rs:13:9
|
LL | OhNo,
| ^^^^ overflowed on value after 127
@@ -7,7 +7,7 @@ LL | OhNo,
= note: explicitly set `OhNo = -128` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow.rs:22:9
+ --> $DIR/discriminant-overflow-2.rs:22:9
|
LL | OhNo,
| ^^^^ overflowed on value after 255
@@ -15,7 +15,7 @@ LL | OhNo,
= note: explicitly set `OhNo = 0` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow.rs:33:9
+ --> $DIR/discriminant-overflow-2.rs:31:9
|
LL | OhNo,
| ^^^^ overflowed on value after 32767
@@ -23,7 +23,7 @@ LL | OhNo,
= note: explicitly set `OhNo = -32768` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow.rs:44:9
+ --> $DIR/discriminant-overflow-2.rs:40:9
|
LL | OhNo,
| ^^^^ overflowed on value after 65535
@@ -31,7 +31,7 @@ LL | OhNo,
= note: explicitly set `OhNo = 0` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow.rs:56:9
+ --> $DIR/discriminant-overflow-2.rs:49:9
|
LL | OhNo,
| ^^^^ overflowed on value after 2147483647
@@ -39,7 +39,7 @@ LL | OhNo,
= note: explicitly set `OhNo = -2147483648` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow.rs:68:9
+ --> $DIR/discriminant-overflow-2.rs:58:9
|
LL | OhNo,
| ^^^^ overflowed on value after 4294967295
@@ -47,7 +47,7 @@ LL | OhNo,
= note: explicitly set `OhNo = 0` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow.rs:80:9
+ --> $DIR/discriminant-overflow-2.rs:67:9
|
LL | OhNo,
| ^^^^ overflowed on value after 9223372036854775807
@@ -55,7 +55,7 @@ LL | OhNo,
= note: explicitly set `OhNo = -9223372036854775808` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow.rs:92:9
+ --> $DIR/discriminant-overflow-2.rs:76:9
|
LL | OhNo,
| ^^^^ overflowed on value after 18446744073709551615
diff --git a/tests/ui/discrim/discrim-overflow.rs b/tests/ui/enum-discriminant/discriminant-overflow.rs
index 774ced93c..774ced93c 100644
--- a/tests/ui/discrim/discrim-overflow.rs
+++ b/tests/ui/enum-discriminant/discriminant-overflow.rs
diff --git a/tests/ui/discrim/discrim-overflow-2.stderr b/tests/ui/enum-discriminant/discriminant-overflow.stderr
index 3ca84c667..2ecc1839f 100644
--- a/tests/ui/discrim/discrim-overflow-2.stderr
+++ b/tests/ui/enum-discriminant/discriminant-overflow.stderr
@@ -1,5 +1,5 @@
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow-2.rs:13:9
+ --> $DIR/discriminant-overflow.rs:11:9
|
LL | OhNo,
| ^^^^ overflowed on value after 127
@@ -7,7 +7,7 @@ LL | OhNo,
= note: explicitly set `OhNo = -128` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow-2.rs:22:9
+ --> $DIR/discriminant-overflow.rs:22:9
|
LL | OhNo,
| ^^^^ overflowed on value after 255
@@ -15,7 +15,7 @@ LL | OhNo,
= note: explicitly set `OhNo = 0` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow-2.rs:31:9
+ --> $DIR/discriminant-overflow.rs:33:9
|
LL | OhNo,
| ^^^^ overflowed on value after 32767
@@ -23,7 +23,7 @@ LL | OhNo,
= note: explicitly set `OhNo = -32768` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow-2.rs:40:9
+ --> $DIR/discriminant-overflow.rs:44:9
|
LL | OhNo,
| ^^^^ overflowed on value after 65535
@@ -31,7 +31,7 @@ LL | OhNo,
= note: explicitly set `OhNo = 0` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow-2.rs:49:9
+ --> $DIR/discriminant-overflow.rs:56:9
|
LL | OhNo,
| ^^^^ overflowed on value after 2147483647
@@ -39,7 +39,7 @@ LL | OhNo,
= note: explicitly set `OhNo = -2147483648` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow-2.rs:58:9
+ --> $DIR/discriminant-overflow.rs:68:9
|
LL | OhNo,
| ^^^^ overflowed on value after 4294967295
@@ -47,7 +47,7 @@ LL | OhNo,
= note: explicitly set `OhNo = 0` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow-2.rs:67:9
+ --> $DIR/discriminant-overflow.rs:80:9
|
LL | OhNo,
| ^^^^ overflowed on value after 9223372036854775807
@@ -55,7 +55,7 @@ LL | OhNo,
= note: explicitly set `OhNo = -9223372036854775808` if that is desired outcome
error[E0370]: enum discriminant overflowed
- --> $DIR/discrim-overflow-2.rs:76:9
+ --> $DIR/discriminant-overflow.rs:92:9
|
LL | OhNo,
| ^^^^ overflowed on value after 18446744073709551615
diff --git a/tests/ui/issues/issue-50689.rs b/tests/ui/enum-discriminant/issue-50689.rs
index b49f29500..b49f29500 100644
--- a/tests/ui/issues/issue-50689.rs
+++ b/tests/ui/enum-discriminant/issue-50689.rs
diff --git a/tests/ui/enum/suggest-default-attribute.stderr b/tests/ui/enum/suggest-default-attribute.stderr
index fb830d3f7..b56d599a7 100644
--- a/tests/ui/enum/suggest-default-attribute.stderr
+++ b/tests/ui/enum/suggest-default-attribute.stderr
@@ -7,7 +7,7 @@ LL | #[default]
help: consider adding a derive
|
LL + #[derive(Default)]
-LL ~ pub enum Test {
+LL | pub enum Test {
|
error: aborting due to previous error
diff --git a/tests/ui/error-codes/E0283.stderr b/tests/ui/error-codes/E0283.stderr
index 90316c6e9..89e634a70 100644
--- a/tests/ui/error-codes/E0283.stderr
+++ b/tests/ui/error-codes/E0283.stderr
@@ -9,8 +9,8 @@ LL | let cont: u32 = Generator::create();
|
help: use a fully-qualified path to a specific available implementation (2 found)
|
-LL | let cont: u32 = <Impl as Generator>::create();
- | ++++++++ +
+LL | let cont: u32 = </* self type */ as Generator>::create();
+ | +++++++++++++++++++ +
error[E0283]: type annotations needed
--> $DIR/E0283.rs:35:24
diff --git a/tests/ui/error-codes/E0445.rs b/tests/ui/error-codes/E0445.rs
index a9a3aee25..9f29c8167 100644
--- a/tests/ui/error-codes/E0445.rs
+++ b/tests/ui/error-codes/E0445.rs
@@ -1,12 +1,23 @@
+#![feature(type_privacy_lints)]
+#[warn(private_bounds)]
+#[warn(private_interfaces)]
+
+// In this test both old and new private-in-public diagnostic were emitted.
+// Old diagnostic will be deleted soon.
+// See https://rust-lang.github.io/rfcs/2145-type-privacy.html.
+
trait Foo {
fn dummy(&self) { }
}
pub trait Bar : Foo {}
//~^ ERROR private trait `Foo` in public interface [E0445]
+//~| WARNING trait `Foo` is more private than the item `Bar`
pub struct Bar2<T: Foo>(pub T);
//~^ ERROR private trait `Foo` in public interface [E0445]
+//~| WARNING trait `Foo` is more private than the item `Bar2`
pub fn foo<T: Foo> (t: T) {}
//~^ ERROR private trait `Foo` in public interface [E0445]
+//~| WARNING trait `Foo` is more private than the item `foo`
fn main() {}
diff --git a/tests/ui/error-codes/E0445.stderr b/tests/ui/error-codes/E0445.stderr
index 23b7a3350..4f940868f 100644
--- a/tests/ui/error-codes/E0445.stderr
+++ b/tests/ui/error-codes/E0445.stderr
@@ -1,5 +1,5 @@
error[E0445]: private trait `Foo` in public interface
- --> $DIR/E0445.rs:5:1
+ --> $DIR/E0445.rs:13:1
|
LL | trait Foo {
| --------- `Foo` declared as private
@@ -7,8 +7,25 @@ LL | trait Foo {
LL | pub trait Bar : Foo {}
| ^^^^^^^^^^^^^^^^^^^ can't leak private trait
+warning: trait `Foo` is more private than the item `Bar`
+ --> $DIR/E0445.rs:13:1
+ |
+LL | pub trait Bar : Foo {}
+ | ^^^^^^^^^^^^^^^^^^^ trait `Bar` is reachable at visibility `pub`
+ |
+note: but trait `Foo` is only usable at visibility `pub(crate)`
+ --> $DIR/E0445.rs:9:1
+ |
+LL | trait Foo {
+ | ^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/E0445.rs:2:8
+ |
+LL | #[warn(private_bounds)]
+ | ^^^^^^^^^^^^^^
+
error[E0445]: private trait `Foo` in public interface
- --> $DIR/E0445.rs:7:1
+ --> $DIR/E0445.rs:16:1
|
LL | trait Foo {
| --------- `Foo` declared as private
@@ -16,15 +33,39 @@ LL | trait Foo {
LL | pub struct Bar2<T: Foo>(pub T);
| ^^^^^^^^^^^^^^^^^^^^^^^ can't leak private trait
-error[E0445]: private trait `Foo` in public interface
+warning: trait `Foo` is more private than the item `Bar2`
+ --> $DIR/E0445.rs:16:1
+ |
+LL | pub struct Bar2<T: Foo>(pub T);
+ | ^^^^^^^^^^^^^^^^^^^^^^^ struct `Bar2` is reachable at visibility `pub`
+ |
+note: but trait `Foo` is only usable at visibility `pub(crate)`
--> $DIR/E0445.rs:9:1
|
LL | trait Foo {
+ | ^^^^^^^^^
+
+error[E0445]: private trait `Foo` in public interface
+ --> $DIR/E0445.rs:19:1
+ |
+LL | trait Foo {
| --------- `Foo` declared as private
...
LL | pub fn foo<T: Foo> (t: T) {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^ can't leak private trait
-error: aborting due to 3 previous errors
+warning: trait `Foo` is more private than the item `foo`
+ --> $DIR/E0445.rs:19:1
+ |
+LL | pub fn foo<T: Foo> (t: T) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ function `foo` is reachable at visibility `pub`
+ |
+note: but trait `Foo` is only usable at visibility `pub(crate)`
+ --> $DIR/E0445.rs:9:1
+ |
+LL | trait Foo {
+ | ^^^^^^^^^
+
+error: aborting due to 3 previous errors; 3 warnings emitted
For more information about this error, try `rustc --explain E0445`.
diff --git a/tests/ui/error-codes/E0560.stderr b/tests/ui/error-codes/E0560.stderr
index 6b634f185..bb5ce478a 100644
--- a/tests/ui/error-codes/E0560.stderr
+++ b/tests/ui/error-codes/E0560.stderr
@@ -4,7 +4,7 @@ error[E0560]: struct `Simba` has no field named `father`
LL | let s = Simba { mother: 1, father: 0 };
| ^^^^^^ `Simba` does not have this field
|
- = note: available fields are: `mother`
+ = note: all struct fields are already assigned
error: aborting due to previous error
diff --git a/tests/ui/error-codes/E0637.stderr b/tests/ui/error-codes/E0637.stderr
index 78341735e..d9db89ddb 100644
--- a/tests/ui/error-codes/E0637.stderr
+++ b/tests/ui/error-codes/E0637.stderr
@@ -22,11 +22,10 @@ error[E0637]: `&` without an explicit lifetime name cannot be used here
LL | T: Into<&u32>,
| ^ explicit lifetime name needed here
|
-help: consider introducing a higher-ranked lifetime here with `for<'a>`
- --> $DIR/E0637.rs:13:8
+help: consider introducing a higher-ranked lifetime here
|
-LL | T: Into<&u32>,
- | ^
+LL | T: for<'a> Into<&'a u32>,
+ | +++++++ ++
error: aborting due to 3 previous errors
diff --git a/tests/ui/error-codes/E0790.stderr b/tests/ui/error-codes/E0790.stderr
index fc025a3fc..724876628 100644
--- a/tests/ui/error-codes/E0790.stderr
+++ b/tests/ui/error-codes/E0790.stderr
@@ -65,8 +65,8 @@ LL | MyTrait2::my_fn();
|
help: use a fully-qualified path to a specific available implementation (2 found)
|
-LL | <Impl1 as MyTrait2>::my_fn();
- | +++++++++ +
+LL | </* self type */ as MyTrait2>::my_fn();
+ | +++++++++++++++++++ +
error: aborting due to 5 previous errors
diff --git a/tests/ui/explicit-tail-calls/become-outside.array.stderr b/tests/ui/explicit-tail-calls/become-outside.array.stderr
new file mode 100644
index 000000000..839c20509
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/become-outside.array.stderr
@@ -0,0 +1,9 @@
+error[E0572]: become statement outside of function body
+ --> $DIR/become-outside.rs:11:17
+ |
+LL | struct Bad([(); become f()]);
+ | ^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0572`.
diff --git a/tests/ui/explicit-tail-calls/become-outside.constant.stderr b/tests/ui/explicit-tail-calls/become-outside.constant.stderr
new file mode 100644
index 000000000..9b67f08af
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/become-outside.constant.stderr
@@ -0,0 +1,9 @@
+error[E0572]: become statement outside of function body
+ --> $DIR/become-outside.rs:7:5
+ |
+LL | become f();
+ | ^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0572`.
diff --git a/tests/ui/explicit-tail-calls/become-outside.rs b/tests/ui/explicit-tail-calls/become-outside.rs
new file mode 100644
index 000000000..51b4389c8
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/become-outside.rs
@@ -0,0 +1,15 @@
+// revisions: constant array
+#![allow(incomplete_features)]
+#![feature(explicit_tail_calls)]
+
+#[cfg(constant)]
+const _: () = {
+ become f(); //[constant]~ error: become statement outside of function body
+};
+
+#[cfg(array)]
+struct Bad([(); become f()]); //[array]~ error: become statement outside of function body
+
+fn f() {}
+
+fn main() {}
diff --git a/tests/ui/explicit-tail-calls/return-lifetime-sub.rs b/tests/ui/explicit-tail-calls/return-lifetime-sub.rs
new file mode 100644
index 000000000..8a3f43d4b
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/return-lifetime-sub.rs
@@ -0,0 +1,13 @@
+// check-pass
+#![allow(incomplete_features)]
+#![feature(explicit_tail_calls)]
+
+fn _f<'a>() -> &'a [u8] {
+ become _g();
+}
+
+fn _g() -> &'static [u8] {
+ &[0, 1, 2, 3]
+}
+
+fn main() {}
diff --git a/tests/ui/explicit-tail-calls/return-mismatches.rs b/tests/ui/explicit-tail-calls/return-mismatches.rs
new file mode 100644
index 000000000..935a1a1d2
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/return-mismatches.rs
@@ -0,0 +1,28 @@
+#![allow(incomplete_features)]
+#![feature(explicit_tail_calls)]
+
+fn _f0<'a>() -> &'static [u8] {
+ become _g0(); //~ error: mismatched types
+}
+
+fn _g0() -> &'static [u8; 1] {
+ &[0]
+}
+
+fn _f1() {
+ become _g1(); //~ error: mismatched types
+}
+
+fn _g1() -> ! {
+ become _g1();
+}
+
+fn _f2() -> u32 {
+ become _g2(); //~ error: mismatched types
+}
+
+fn _g2() -> u16 {
+ 0
+}
+
+fn main() {}
diff --git a/tests/ui/explicit-tail-calls/return-mismatches.stderr b/tests/ui/explicit-tail-calls/return-mismatches.stderr
new file mode 100644
index 000000000..1dcc35797
--- /dev/null
+++ b/tests/ui/explicit-tail-calls/return-mismatches.stderr
@@ -0,0 +1,27 @@
+error[E0308]: mismatched types
+ --> $DIR/return-mismatches.rs:5:5
+ |
+LL | become _g0();
+ | ^^^^^^^^^^^^ expected `&[u8]`, found `&[u8; 1]`
+ |
+ = note: expected reference `&'static [u8]`
+ found reference `&'static [u8; 1]`
+
+error[E0308]: mismatched types
+ --> $DIR/return-mismatches.rs:13:5
+ |
+LL | become _g1();
+ | ^^^^^^^^^^^^ expected `()`, found `!`
+ |
+ = note: expected unit type `()`
+ found type `!`
+
+error[E0308]: mismatched types
+ --> $DIR/return-mismatches.rs:21:5
+ |
+LL | become _g2();
+ | ^^^^^^^^^^^^ expected `u32`, found `u16`
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/extern/extern-crate-visibility.stderr b/tests/ui/extern/extern-crate-visibility.stderr
index 9eeb83ae1..b23972709 100644
--- a/tests/ui/extern/extern-crate-visibility.stderr
+++ b/tests/ui/extern/extern-crate-visibility.stderr
@@ -9,6 +9,10 @@ note: the crate import `core` is defined here
|
LL | extern crate core;
| ^^^^^^^^^^^^^^^^^^
+help: consider importing this module instead
+ |
+LL | use std::cell;
+ | ~~~~~~~~~
error[E0603]: crate import `core` is private
--> $DIR/extern-crate-visibility.rs:9:10
@@ -21,6 +25,10 @@ note: the crate import `core` is defined here
|
LL | extern crate core;
| ^^^^^^^^^^^^^^^^^^
+help: consider importing this struct instead
+ |
+LL | std::cell::Cell::new(0);
+ | ~~~~~~~~~~~~~~~
error: aborting due to 2 previous errors
diff --git a/tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.rs b/tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.rs
new file mode 100644
index 000000000..17e08f511
--- /dev/null
+++ b/tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.rs
@@ -0,0 +1,10 @@
+extern "C" {
+ type Item = [T] where [T]: Sized;
+ //~^ incorrect `type` inside `extern` block
+ //~| `type`s inside `extern` blocks cannot have `where` clauses
+ //~| cannot find type `T` in this scope
+ //~| cannot find type `T` in this scope
+ //~| extern types are experimental
+}
+
+fn main() {}
diff --git a/tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.stderr b/tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.stderr
new file mode 100644
index 000000000..bdc675503
--- /dev/null
+++ b/tests/ui/extern/issue-112363-extern-item-where-clauses-debug-ice.stderr
@@ -0,0 +1,47 @@
+error: incorrect `type` inside `extern` block
+ --> $DIR/issue-112363-extern-item-where-clauses-debug-ice.rs:2:10
+ |
+LL | extern "C" {
+ | ---------- `extern` blocks define existing foreign types and types inside of them cannot have a body
+LL | type Item = [T] where [T]: Sized;
+ | ^^^^ --- the invalid body
+ | |
+ | cannot have a body
+ |
+ = note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
+
+error: `type`s inside `extern` blocks cannot have `where` clauses
+ --> $DIR/issue-112363-extern-item-where-clauses-debug-ice.rs:2:21
+ |
+LL | extern "C" {
+ | ---------- `extern` block begins here
+LL | type Item = [T] where [T]: Sized;
+ | ^^^^^^^^^^^^^^^^ help: remove the `where` clause
+ |
+ = note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
+
+error[E0412]: cannot find type `T` in this scope
+ --> $DIR/issue-112363-extern-item-where-clauses-debug-ice.rs:2:28
+ |
+LL | type Item = [T] where [T]: Sized;
+ | ^ not found in this scope
+
+error[E0412]: cannot find type `T` in this scope
+ --> $DIR/issue-112363-extern-item-where-clauses-debug-ice.rs:2:18
+ |
+LL | type Item = [T] where [T]: Sized;
+ | ^ not found in this scope
+
+error[E0658]: extern types are experimental
+ --> $DIR/issue-112363-extern-item-where-clauses-debug-ice.rs:2:5
+ |
+LL | type Item = [T] where [T]: Sized;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #43467 <https://github.com/rust-lang/rust/issues/43467> for more information
+ = help: add `#![feature(extern_types)]` to the crate attributes to enable
+
+error: aborting due to 5 previous errors
+
+Some errors have detailed explanations: E0412, E0658.
+For more information about an error, try `rustc --explain E0412`.
diff --git a/tests/ui/issues/issue-1251.rs b/tests/ui/extern/issue-1251.rs
index c2c047c79..c2c047c79 100644
--- a/tests/ui/issues/issue-1251.rs
+++ b/tests/ui/extern/issue-1251.rs
diff --git a/tests/ui/feature-gates/feature-gate-explicit_tail_calls.rs b/tests/ui/feature-gates/feature-gate-explicit_tail_calls.rs
new file mode 100644
index 000000000..856a7f393
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-explicit_tail_calls.rs
@@ -0,0 +1,9 @@
+pub fn you<T>() -> T {
+ become bottom(); //~ error: `become` expression is experimental
+}
+
+pub fn bottom<T>() -> T {
+ become you(); //~ error: `become` expression is experimental
+}
+
+fn main() {}
diff --git a/tests/ui/feature-gates/feature-gate-explicit_tail_calls.stderr b/tests/ui/feature-gates/feature-gate-explicit_tail_calls.stderr
new file mode 100644
index 000000000..b58da19c1
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-explicit_tail_calls.stderr
@@ -0,0 +1,21 @@
+error[E0658]: `become` expression is experimental
+ --> $DIR/feature-gate-explicit_tail_calls.rs:2:5
+ |
+LL | become bottom();
+ | ^^^^^^^^^^^^^^^
+ |
+ = note: see issue #112788 <https://github.com/rust-lang/rust/issues/112788> for more information
+ = help: add `#![feature(explicit_tail_calls)]` to the crate attributes to enable
+
+error[E0658]: `become` expression is experimental
+ --> $DIR/feature-gate-explicit_tail_calls.rs:6:5
+ |
+LL | become you();
+ | ^^^^^^^^^^^^
+ |
+ = note: see issue #112788 <https://github.com/rust-lang/rust/issues/112788> for more information
+ = help: add `#![feature(explicit_tail_calls)]` to the crate attributes to enable
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/feature-gates/feature-gate-generic_arg_infer.rs b/tests/ui/feature-gates/feature-gate-generic_arg_infer.rs
index afd14b784..be66560fd 100644
--- a/tests/ui/feature-gates/feature-gate-generic_arg_infer.rs
+++ b/tests/ui/feature-gates/feature-gate-generic_arg_infer.rs
@@ -19,5 +19,5 @@ fn bar() {
fn main() {
let _x = foo::<_>([1,2]);
//[normal]~^ ERROR: type provided when a constant was expected
- let _y = bar();
+ bar();
}
diff --git a/tests/ui/feature-gates/feature-gate-return_type_notation.cfg_current.stderr b/tests/ui/feature-gates/feature-gate-return_type_notation.cfg_current.stderr
new file mode 100644
index 000000000..ce39f6b29
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-return_type_notation.cfg_current.stderr
@@ -0,0 +1,27 @@
+error[E0658]: return type notation is experimental
+ --> $DIR/feature-gate-return_type_notation.rs:17:17
+ |
+LL | fn foo<T: Trait<m(): Send>>() {}
+ | ^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = help: add `#![feature(return_type_notation)]` to the crate attributes to enable
+
+error: parenthesized generic arguments cannot be used in associated type constraints
+ --> $DIR/feature-gate-return_type_notation.rs:17:17
+ |
+LL | fn foo<T: Trait<m(): Send>>() {}
+ | ^--
+ | |
+ | help: remove these parentheses
+
+error[E0220]: associated type `m` not found for `Trait`
+ --> $DIR/feature-gate-return_type_notation.rs:17:17
+ |
+LL | fn foo<T: Trait<m(): Send>>() {}
+ | ^ associated type `m` not found
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0220, E0658.
+For more information about an error, try `rustc --explain E0220`.
diff --git a/tests/ui/feature-gates/feature-gate-return_type_notation.cfg_next.stderr b/tests/ui/feature-gates/feature-gate-return_type_notation.cfg_next.stderr
new file mode 100644
index 000000000..ce39f6b29
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-return_type_notation.cfg_next.stderr
@@ -0,0 +1,27 @@
+error[E0658]: return type notation is experimental
+ --> $DIR/feature-gate-return_type_notation.rs:17:17
+ |
+LL | fn foo<T: Trait<m(): Send>>() {}
+ | ^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = help: add `#![feature(return_type_notation)]` to the crate attributes to enable
+
+error: parenthesized generic arguments cannot be used in associated type constraints
+ --> $DIR/feature-gate-return_type_notation.rs:17:17
+ |
+LL | fn foo<T: Trait<m(): Send>>() {}
+ | ^--
+ | |
+ | help: remove these parentheses
+
+error[E0220]: associated type `m` not found for `Trait`
+ --> $DIR/feature-gate-return_type_notation.rs:17:17
+ |
+LL | fn foo<T: Trait<m(): Send>>() {}
+ | ^ associated type `m` not found
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0220, E0658.
+For more information about an error, try `rustc --explain E0220`.
diff --git a/tests/ui/feature-gates/feature-gate-return_type_notation.no_current.stderr b/tests/ui/feature-gates/feature-gate-return_type_notation.no_current.stderr
new file mode 100644
index 000000000..d11359e7f
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-return_type_notation.no_current.stderr
@@ -0,0 +1,13 @@
+warning: return type notation is experimental
+ --> $DIR/feature-gate-return_type_notation.rs:17:17
+ |
+LL | fn foo<T: Trait<m(): Send>>() {}
+ | ^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = help: add `#![feature(return_type_notation)]` to the crate attributes to enable
+ = warning: unstable syntax can change at any point in the future, causing a hard error!
+ = note: for more information, see issue #65860 <https://github.com/rust-lang/rust/issues/65860>
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/feature-gates/feature-gate-return_type_notation.no_next.stderr b/tests/ui/feature-gates/feature-gate-return_type_notation.no_next.stderr
new file mode 100644
index 000000000..d11359e7f
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-return_type_notation.no_next.stderr
@@ -0,0 +1,13 @@
+warning: return type notation is experimental
+ --> $DIR/feature-gate-return_type_notation.rs:17:17
+ |
+LL | fn foo<T: Trait<m(): Send>>() {}
+ | ^^^^^^^^^
+ |
+ = note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
+ = help: add `#![feature(return_type_notation)]` to the crate attributes to enable
+ = warning: unstable syntax can change at any point in the future, causing a hard error!
+ = note: for more information, see issue #65860 <https://github.com/rust-lang/rust/issues/65860>
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/feature-gates/feature-gate-return_type_notation.rs b/tests/ui/feature-gates/feature-gate-return_type_notation.rs
index d9bcb65fe..7e8c1eb95 100644
--- a/tests/ui/feature-gates/feature-gate-return_type_notation.rs
+++ b/tests/ui/feature-gates/feature-gate-return_type_notation.rs
@@ -1,7 +1,10 @@
// edition: 2021
-// revisions: cfg no
+// revisions: cfg_current cfg_next no_current no_next
+// [cfg_next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// [no_next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
-//[no] check-pass
+// [no_current] check-pass
+// [no_next] check-pass
// Since we're not adding new syntax, `cfg`'d out RTN must pass.
#![feature(async_fn_in_trait)]
@@ -10,12 +13,17 @@ trait Trait {
async fn m();
}
-#[cfg(cfg)]
+#[cfg(any(cfg_current, cfg_next))]
fn foo<T: Trait<m(): Send>>() {}
-//[cfg]~^ ERROR return type notation is experimental
-//[cfg]~| ERROR parenthesized generic arguments cannot be used in associated type constraints
-//[cfg]~| ERROR associated type `m` not found for `Trait`
-//[no]~^^^^ WARN return type notation is experimental
-//[no]~| WARN unstable syntax can change at any point in the future, causing a hard error!
+//[cfg_current]~^ ERROR return type notation is experimental
+//[cfg_current]~| ERROR parenthesized generic arguments cannot be used in associated type constraints
+//[cfg_current]~| ERROR associated type `m` not found for `Trait`
+//[cfg_next]~^^^^ ERROR return type notation is experimental
+//[cfg_next]~| ERROR parenthesized generic arguments cannot be used in associated type constraints
+//[cfg_next]~| ERROR associated type `m` not found for `Trait`
+//[no_current]~^^^^^^^ WARN return type notation is experimental
+//[no_current]~| WARN unstable syntax can change at any point in the future, causing a hard error!
+//[no_next]~^^^^^^^^^ WARN return type notation is experimental
+//[no_next]~| WARN unstable syntax can change at any point in the future, causing a hard error!
fn main() {}
diff --git a/tests/ui/feature-gates/feature-gate-type_alias_impl_trait.rs b/tests/ui/feature-gates/feature-gate-type_alias_impl_trait.rs
index 6dfd7f684..3f49020bb 100644
--- a/tests/ui/feature-gates/feature-gate-type_alias_impl_trait.rs
+++ b/tests/ui/feature-gates/feature-gate-type_alias_impl_trait.rs
@@ -1,4 +1,3 @@
-// ignore-compare-mode-chalk
// check-pass
#![feature(type_alias_impl_trait)]
use std::fmt::Debug;
@@ -12,7 +11,7 @@ fn define() -> Bar {
type Foo2 = impl Debug;
-fn define2() {
+fn define2(_: Foo2) {
let x = || -> Foo2 { 42 };
}
@@ -21,13 +20,13 @@ type Foo3 = impl Debug;
fn define3(x: Foo3) {
let y: i32 = x;
}
-fn define3_1() {
+fn define3_1(_: Foo3) {
define3(42)
}
type Foo4 = impl Debug;
-fn define4() {
+fn define4(_: Foo4) {
let y: Foo4 = 42;
}
diff --git a/tests/ui/feature-gates/feature-gate-type_privacy_lints.rs b/tests/ui/feature-gates/feature-gate-type_privacy_lints.rs
new file mode 100644
index 000000000..aad64c9d0
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-type_privacy_lints.rs
@@ -0,0 +1,12 @@
+// check-pass
+
+#![warn(private_interfaces)] //~ WARN unknown lint
+ //~| WARN unknown lint
+ //~| WARN unknown lint
+#![warn(private_bounds)] //~ WARN unknown lint
+ //~| WARN unknown lint
+ //~| WARN unknown lint
+#![warn(unnameable_types)] //~ WARN unknown lint
+ //~| WARN unknown lint
+ //~| WARN unknown lint
+fn main() {}
diff --git a/tests/ui/feature-gates/feature-gate-type_privacy_lints.stderr b/tests/ui/feature-gates/feature-gate-type_privacy_lints.stderr
new file mode 100644
index 000000000..79cc974cc
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-type_privacy_lints.stderr
@@ -0,0 +1,93 @@
+warning: unknown lint: `private_interfaces`
+ --> $DIR/feature-gate-type_privacy_lints.rs:3:1
+ |
+LL | #![warn(private_interfaces)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `private_interfaces` lint is unstable
+ = note: see issue #48054 <https://github.com/rust-lang/rust/issues/48054> for more information
+ = help: add `#![feature(type_privacy_lints)]` to the crate attributes to enable
+ = note: `#[warn(unknown_lints)]` on by default
+
+warning: unknown lint: `private_bounds`
+ --> $DIR/feature-gate-type_privacy_lints.rs:6:1
+ |
+LL | #![warn(private_bounds)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `private_bounds` lint is unstable
+ = note: see issue #48054 <https://github.com/rust-lang/rust/issues/48054> for more information
+ = help: add `#![feature(type_privacy_lints)]` to the crate attributes to enable
+
+warning: unknown lint: `unnameable_types`
+ --> $DIR/feature-gate-type_privacy_lints.rs:9:1
+ |
+LL | #![warn(unnameable_types)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `unnameable_types` lint is unstable
+ = note: see issue #48054 <https://github.com/rust-lang/rust/issues/48054> for more information
+ = help: add `#![feature(type_privacy_lints)]` to the crate attributes to enable
+
+warning: unknown lint: `private_interfaces`
+ --> $DIR/feature-gate-type_privacy_lints.rs:3:1
+ |
+LL | #![warn(private_interfaces)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `private_interfaces` lint is unstable
+ = note: see issue #48054 <https://github.com/rust-lang/rust/issues/48054> for more information
+ = help: add `#![feature(type_privacy_lints)]` to the crate attributes to enable
+
+warning: unknown lint: `private_bounds`
+ --> $DIR/feature-gate-type_privacy_lints.rs:6:1
+ |
+LL | #![warn(private_bounds)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `private_bounds` lint is unstable
+ = note: see issue #48054 <https://github.com/rust-lang/rust/issues/48054> for more information
+ = help: add `#![feature(type_privacy_lints)]` to the crate attributes to enable
+
+warning: unknown lint: `unnameable_types`
+ --> $DIR/feature-gate-type_privacy_lints.rs:9:1
+ |
+LL | #![warn(unnameable_types)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `unnameable_types` lint is unstable
+ = note: see issue #48054 <https://github.com/rust-lang/rust/issues/48054> for more information
+ = help: add `#![feature(type_privacy_lints)]` to the crate attributes to enable
+
+warning: unknown lint: `private_interfaces`
+ --> $DIR/feature-gate-type_privacy_lints.rs:3:1
+ |
+LL | #![warn(private_interfaces)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `private_interfaces` lint is unstable
+ = note: see issue #48054 <https://github.com/rust-lang/rust/issues/48054> for more information
+ = help: add `#![feature(type_privacy_lints)]` to the crate attributes to enable
+
+warning: unknown lint: `private_bounds`
+ --> $DIR/feature-gate-type_privacy_lints.rs:6:1
+ |
+LL | #![warn(private_bounds)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `private_bounds` lint is unstable
+ = note: see issue #48054 <https://github.com/rust-lang/rust/issues/48054> for more information
+ = help: add `#![feature(type_privacy_lints)]` to the crate attributes to enable
+
+warning: unknown lint: `unnameable_types`
+ --> $DIR/feature-gate-type_privacy_lints.rs:9:1
+ |
+LL | #![warn(unnameable_types)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `unnameable_types` lint is unstable
+ = note: see issue #48054 <https://github.com/rust-lang/rust/issues/48054> for more information
+ = help: add `#![feature(type_privacy_lints)]` to the crate attributes to enable
+
+warning: 9 warnings emitted
+
diff --git a/tests/ui/fmt/ifmt-unimpl.stderr b/tests/ui/fmt/ifmt-unimpl.stderr
index b0dddd3b1..4c0ac5286 100644
--- a/tests/ui/fmt/ifmt-unimpl.stderr
+++ b/tests/ui/fmt/ifmt-unimpl.stderr
@@ -7,14 +7,14 @@ LL | format!("{:X}", "3");
| required by a bound introduced by this call
|
= help: the following other types implement trait `UpperHex`:
- &T
- &mut T
- NonZeroI128
- NonZeroI16
- NonZeroI32
- NonZeroI64
- NonZeroI8
- NonZeroIsize
+ isize
+ i8
+ i16
+ i32
+ i64
+ i128
+ usize
+ u8
and 20 others
= note: required for `&str` to implement `UpperHex`
note: required by a bound in `core::fmt::rt::Argument::<'a>::new_upper_hex`
diff --git a/tests/ui/issues/issue-1257.rs b/tests/ui/for-loop-while/issue-1257.rs
index de5a6d359..de5a6d359 100644
--- a/tests/ui/issues/issue-1257.rs
+++ b/tests/ui/for-loop-while/issue-1257.rs
diff --git a/tests/ui/for-loop-while/loop-break-value.rs b/tests/ui/for-loop-while/loop-break-value.rs
index d7209fc4d..65207fb7f 100644
--- a/tests/ui/for-loop-while/loop-break-value.rs
+++ b/tests/ui/for-loop-while/loop-break-value.rs
@@ -64,7 +64,7 @@ pub fn main() {
};
assert_eq!(trait_unified_3, ["Yes"]);
- let regular_break = loop {
+ let regular_break: () = loop {
if true {
break;
} else {
@@ -73,7 +73,7 @@ pub fn main() {
};
assert_eq!(regular_break, ());
- let regular_break_2 = loop {
+ let regular_break_2: () = loop {
if true {
break Default::default();
} else {
@@ -82,7 +82,7 @@ pub fn main() {
};
assert_eq!(regular_break_2, ());
- let regular_break_3 = loop {
+ let regular_break_3: () = loop {
break if true {
Default::default()
} else {
@@ -91,13 +91,13 @@ pub fn main() {
};
assert_eq!(regular_break_3, ());
- let regular_break_4 = loop {
+ let regular_break_4: () = loop {
break ();
break;
};
assert_eq!(regular_break_4, ());
- let regular_break_5 = loop {
+ let regular_break_5: () = loop {
break;
break ();
};
diff --git a/tests/ui/issues/issue-20605.stderr b/tests/ui/for/issue-20605.current.stderr
index e1858b639..b9a53cbd4 100644
--- a/tests/ui/issues/issue-20605.stderr
+++ b/tests/ui/for/issue-20605.current.stderr
@@ -1,5 +1,5 @@
error[E0277]: the size for values of type `dyn Iterator<Item = &'a mut u8>` cannot be known at compilation time
- --> $DIR/issue-20605.rs:2:17
+ --> $DIR/issue-20605.rs:5:17
|
LL | for item in *things { *item = 0 }
| ^^^^^^^ the trait `IntoIterator` is not implemented for `dyn Iterator<Item = &'a mut u8>`
diff --git a/tests/ui/for/issue-20605.next.stderr b/tests/ui/for/issue-20605.next.stderr
new file mode 100644
index 000000000..d55efedfc
--- /dev/null
+++ b/tests/ui/for/issue-20605.next.stderr
@@ -0,0 +1,72 @@
+error[E0277]: the trait bound `dyn Iterator<Item = &'a mut u8>: IntoIterator` is not satisfied
+ --> $DIR/issue-20605.rs:5:17
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^^^^ the trait `IntoIterator` is not implemented for `dyn Iterator<Item = &'a mut u8>`
+
+error[E0277]: the size for values of type `<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter` cannot be known at compilation time
+ --> $DIR/issue-20605.rs:5:17
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter`
+ = note: all local variables must have a statically known size
+ = help: unsized locals are gated as an unstable feature
+
+error: the type `<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter` is not well-formed
+ --> $DIR/issue-20605.rs:5:17
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^^^^
+
+error[E0277]: `<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter` is not an iterator
+ --> $DIR/issue-20605.rs:5:17
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^^^^ `<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter` is not an iterator
+ |
+ = help: the trait `Iterator` is not implemented for `<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter`
+
+error: the type `&mut <dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter` is not well-formed
+ --> $DIR/issue-20605.rs:5:17
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^^^^
+
+error[E0614]: type `<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item` cannot be dereferenced
+ --> $DIR/issue-20605.rs:5:27
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^^
+
+error[E0277]: the size for values of type `<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item` cannot be known at compilation time
+ --> $DIR/issue-20605.rs:5:9
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item`
+ = note: all local variables must have a statically known size
+ = help: unsized locals are gated as an unstable feature
+
+error: the type `Option<<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item>` is not well-formed
+ --> $DIR/issue-20605.rs:5:17
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^^^^
+
+error[E0277]: the size for values of type `<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item` cannot be known at compilation time
+ --> $DIR/issue-20605.rs:5:5
+ |
+LL | for item in *things { *item = 0 }
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item`
+note: required by a bound in `None`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+
+error: aborting due to 9 previous errors
+
+Some errors have detailed explanations: E0277, E0614.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/for/issue-20605.rs b/tests/ui/for/issue-20605.rs
new file mode 100644
index 000000000..50d4c3fdd
--- /dev/null
+++ b/tests/ui/for/issue-20605.rs
@@ -0,0 +1,20 @@
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
+
+fn changer<'a>(mut things: Box<dyn Iterator<Item=&'a mut u8>>) {
+ for item in *things { *item = 0 }
+ //[current]~^ ERROR the size for values of type
+ //[next]~^^ ERROR the trait bound `dyn Iterator<Item = &'a mut u8>: IntoIterator` is not satisfied
+ //[next]~| ERROR the size for values of type `<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter` cannot be known at compilation time
+ //[next]~| ERROR the type `<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter` is not well-formed
+ //[next]~| ERROR `<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter` is not an iterator
+ //[next]~| ERROR the type `&mut <dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter` is not well-formed
+ //[next]~| ERROR the size for values of type `<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item` cannot be known at compilation time
+ //[next]~| ERROR the type `Option<<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item>` is not well-formed
+ //[next]~| ERROR the size for values of type `<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item` cannot be known at compilation time
+ //[next]~| ERROR type `<<dyn Iterator<Item = &'a mut u8> as IntoIterator>::IntoIter as Iterator>::Item` cannot be dereferenced
+ // FIXME(-Ztrait-solver=next): these error messages are horrible and have to be
+ // improved before we stabilize the new solver.
+}
+
+fn main() {}
diff --git a/tests/ui/generator/layout-error.rs b/tests/ui/generator/layout-error.rs
index 7c3d18740..44cfc1d70 100644
--- a/tests/ui/generator/layout-error.rs
+++ b/tests/ui/generator/layout-error.rs
@@ -24,5 +24,6 @@ fn main() {
type F = impl Future;
// Check that statics are inhabited computes they layout.
static POOL: Task<F> = Task::new();
+ //~^ ERROR: cannot check whether the hidden type of `layout_error[b009]::main::F::{opaque#0}` satisfies auto traits
Task::spawn(&POOL, || cb());
}
diff --git a/tests/ui/generator/layout-error.stderr b/tests/ui/generator/layout-error.stderr
index b1a258f4f..ea3b25551 100644
--- a/tests/ui/generator/layout-error.stderr
+++ b/tests/ui/generator/layout-error.stderr
@@ -4,6 +4,24 @@ error[E0425]: cannot find value `Foo` in this scope
LL | let a = Foo;
| ^^^ not found in this scope
-error: aborting due to previous error
+error: cannot check whether the hidden type of `layout_error[b009]::main::F::{opaque#0}` satisfies auto traits
+ --> $DIR/layout-error.rs:26:18
+ |
+LL | static POOL: Task<F> = Task::new();
+ | ^^^^^^^
+ |
+note: opaque type is declared here
+ --> $DIR/layout-error.rs:24:14
+ |
+LL | type F = impl Future;
+ | ^^^^^^^^^^^
+note: required because it appears within the type `Task<F>`
+ --> $DIR/layout-error.rs:9:12
+ |
+LL | pub struct Task<F: Future>(F);
+ | ^^^^
+ = note: shared static variables must have a type that implements `Sync`
+
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.rs b/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.rs
new file mode 100644
index 000000000..05d205266
--- /dev/null
+++ b/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.rs
@@ -0,0 +1,29 @@
+// This test checks that we correctly reject the following unsound code.
+
+trait Lengthen<T> {
+ fn lengthen(self) -> T;
+}
+
+impl<'a> Lengthen<&'a str> for &'a str {
+ fn lengthen(self) -> &'a str { self }
+}
+
+trait Gat {
+ type Gat<'a>: for<'b> Lengthen<Self::Gat<'b>>;
+
+ fn lengthen(s: Self::Gat<'_>) -> Self::Gat<'static> {
+ s.lengthen()
+ }
+}
+
+impl Gat for () {
+ type Gat<'a> = &'a str; //~ ERROR: implementation of `Lengthen` is not general enough
+}
+
+fn main() {
+ let s = "hello, garbage".to_string();
+ let borrow: &'static str = <() as Gat>::lengthen(&s);
+ drop(s);
+
+ println!("{borrow}");
+}
diff --git a/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.stderr b/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.stderr
new file mode 100644
index 000000000..7ea7a7b2d
--- /dev/null
+++ b/tests/ui/generic-associated-types/gat-bounds-not-checked-with-right-substitutions.stderr
@@ -0,0 +1,11 @@
+error: implementation of `Lengthen` is not general enough
+ --> $DIR/gat-bounds-not-checked-with-right-substitutions.rs:20:20
+ |
+LL | type Gat<'a> = &'a str;
+ | ^^^^^^^ implementation of `Lengthen` is not general enough
+ |
+ = note: `Lengthen<&'0 str>` would have to be implemented for the type `&'a str`, for any lifetime `'0`...
+ = note: ...but `Lengthen<&'1 str>` is actually implemented for the type `&'1 str`, for some specific lifetime `'1`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/generic-associated-types/issue-88287.stderr b/tests/ui/generic-associated-types/issue-88287.stderr
index 1b84cce62..d77076a28 100644
--- a/tests/ui/generic-associated-types/issue-88287.stderr
+++ b/tests/ui/generic-associated-types/issue-88287.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `A` cannot be known at compilation tim
--> $DIR/issue-88287.rs:34:9
|
LL | type SearchFutureTy<'f, A, B: 'f>
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | async move { todo!() }
| ^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
diff --git a/tests/ui/generic-associated-types/issue-88595.rs b/tests/ui/generic-associated-types/issue-88595.rs
index 7de906e7e..5a40a6129 100644
--- a/tests/ui/generic-associated-types/issue-88595.rs
+++ b/tests/ui/generic-associated-types/issue-88595.rs
@@ -19,5 +19,4 @@ impl<'a> A<'a> for C {
type B<'b> = impl Clone;
fn a(&'a self) -> Self::B<'a> {} //~ ERROR: non-defining opaque type use in defining scope
- //~^ ERROR: mismatched types
}
diff --git a/tests/ui/generic-associated-types/issue-88595.stderr b/tests/ui/generic-associated-types/issue-88595.stderr
index d6caed854..2b1a25acf 100644
--- a/tests/ui/generic-associated-types/issue-88595.stderr
+++ b/tests/ui/generic-associated-types/issue-88595.stderr
@@ -1,8 +1,8 @@
error: non-defining opaque type use in defining scope
- --> $DIR/issue-88595.rs:21:5
+ --> $DIR/issue-88595.rs:21:23
|
LL | fn a(&'a self) -> Self::B<'a> {}
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ generic argument `'a` used twice
+ | ^^^^^^^^^^^ generic argument `'a` used twice
|
note: for this opaque type
--> $DIR/issue-88595.rs:19:18
@@ -10,25 +10,5 @@ note: for this opaque type
LL | type B<'b> = impl Clone;
| ^^^^^^^^^^
-error[E0308]: mismatched types
- --> $DIR/issue-88595.rs:21:23
- |
-LL | type B<'b> = impl Clone;
- | ---------- the expected opaque type
-LL |
-LL | fn a(&'a self) -> Self::B<'a> {}
- | - ^^^^^^^^^^^ expected opaque type, found `()`
- | |
- | implicitly returns `()` as its body has no tail or `return` expression
- |
- = note: expected opaque type `<C as A<'a>>::B<'a>`
- found unit type `()`
-note: this item must have the opaque type in its signature in order to be able to register hidden types
- --> $DIR/issue-88595.rs:21:5
- |
-LL | fn a(&'a self) -> Self::B<'a> {}
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
-For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/generic-associated-types/issue-90014-tait.rs b/tests/ui/generic-associated-types/issue-90014-tait.rs
new file mode 100644
index 000000000..bc3a4e129
--- /dev/null
+++ b/tests/ui/generic-associated-types/issue-90014-tait.rs
@@ -0,0 +1,23 @@
+//! This test is reporting the wrong error. We need
+//! more inherent associated type tests that use opaque types
+//! in general. Some variant of this test should compile successfully.
+// known-bug: unknown
+// edition:2018
+
+#![feature(impl_trait_in_assoc_type, inherent_associated_types)]
+#![allow(incomplete_features)]
+
+use std::future::Future;
+
+struct Foo<'a>(&'a mut ());
+
+impl Foo<'_> {
+ type Fut<'a> = impl Future<Output = ()>;
+ //^ ERROR: the type `&mut ()` does not fulfill the required lifetime
+
+ fn make_fut<'a>(&'a self) -> Self::Fut<'a> {
+ async { () }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/generic-associated-types/issue-90014-tait.stderr b/tests/ui/generic-associated-types/issue-90014-tait.stderr
new file mode 100644
index 000000000..8330a387e
--- /dev/null
+++ b/tests/ui/generic-associated-types/issue-90014-tait.stderr
@@ -0,0 +1,22 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-90014-tait.rs:19:9
+ |
+LL | type Fut<'a> = impl Future<Output = ()>;
+ | ------------------------ the expected future
+...
+LL | fn make_fut<'a>(&'a self) -> Self::Fut<'a> {
+ | ------------- expected `Foo<'_>::Fut<'a>` because of return type
+LL | async { () }
+ | ^^^^^^^^^^^^ expected future, found `async` block
+ |
+ = note: expected opaque type `Foo<'_>::Fut<'a>`
+ found `async` block `[async block@$DIR/issue-90014-tait.rs:19:9: 19:21]`
+note: this item must have the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/issue-90014-tait.rs:18:8
+ |
+LL | fn make_fut<'a>(&'a self) -> Self::Fut<'a> {
+ | ^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/chalkify/bugs/async.rs b/tests/ui/generic-associated-types/issue-90014-tait2.rs
index a1ef4732b..dacbc93de 100644
--- a/tests/ui/chalkify/bugs/async.rs
+++ b/tests/ui/generic-associated-types/issue-90014-tait2.rs
@@ -1,9 +1,10 @@
-// edition:2021
-// known-bug: unknown
-// unset-rustc-env:RUST_BACKTRACE
-// compile-flags:-Z trait-solver=chalk
+//! This test checks that opaque type collection doesn't try to normalize the projection
+//! without respecting its binders (which would ICE).
+//! Unfortunately we don't even reach opaque type collection, as we ICE in typeck before that.
+// known-bug: #109281
+// failure-status: 101
// error-pattern:internal compiler error
-// failure-status:101
+// normalize-stderr-test "internal compiler error.*" -> ""
// normalize-stderr-test "DefId\([^)]*\)" -> "..."
// normalize-stderr-test "\nerror: internal compiler error.*\n\n" -> ""
// normalize-stderr-test "note:.*unexpectedly panicked.*\n\n" -> ""
@@ -17,9 +18,29 @@
// normalize-stderr-test ".*note: Some details.*\n" -> ""
// normalize-stderr-test "\n\n[ ]*\n" -> ""
// normalize-stderr-test "compiler/.*: projection" -> "projection"
+// edition:2018
-fn main() -> () {}
+#![feature(type_alias_impl_trait)]
+#![allow(incomplete_features)]
-async fn foo(x: u32) -> u32 {
- x
+use std::future::Future;
+
+struct Foo<'a>(&'a mut ());
+
+type Fut<'a> = impl Future<Output = ()>;
+
+trait Trait<'x> {
+ type Thing;
+}
+
+impl<'x, T: 'x> Trait<'x> for (T,) {
+ type Thing = T;
+}
+
+impl Foo<'_> {
+ fn make_fut(&self) -> Box<dyn for<'a> Trait<'a, Thing = Fut<'a>>> {
+ Box::new((async { () },))
+ }
}
+
+fn main() {}
diff --git a/tests/ui/generic-associated-types/issue-90014-tait2.stderr b/tests/ui/generic-associated-types/issue-90014-tait2.stderr
new file mode 100644
index 000000000..3187be333
--- /dev/null
+++ b/tests/ui/generic-associated-types/issue-90014-tait2.stderr
@@ -0,0 +1,12 @@
+error:
+ --> $DIR/issue-90014-tait2.rs:41:27
+ |
+LL | fn make_fut(&self) -> Box<dyn for<'a> Trait<'a, Thing = Fut<'a>>> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^query stack during panic:
+#0 [typeck] type-checking `<impl at $DIR/issue-90014-tait2.rs:40:1: 40:13>::make_fut`
+#1 [type_of] computing type of `Fut::{opaque#0}`
+#2 [check_mod_item_types] checking item types in top-level module
+#3 [analysis] running analysis passes on this crate
+end of query stack
+error: aborting due to previous error
+
diff --git a/tests/ui/generics/issue-65285-incorrect-explicit-lifetime-name-needed.stderr b/tests/ui/generics/issue-65285-incorrect-explicit-lifetime-name-needed.stderr
index faf4c9eb8..bcd1fbc55 100644
--- a/tests/ui/generics/issue-65285-incorrect-explicit-lifetime-name-needed.stderr
+++ b/tests/ui/generics/issue-65285-incorrect-explicit-lifetime-name-needed.stderr
@@ -4,11 +4,10 @@ error[E0637]: `&` without an explicit lifetime name cannot be used here
LL | fn should_error<T>() where T : Into<&u32> {}
| ^ explicit lifetime name needed here
|
-help: consider introducing a higher-ranked lifetime here with `for<'a>`
- --> $DIR/issue-65285-incorrect-explicit-lifetime-name-needed.rs:5:32
+help: consider introducing a higher-ranked lifetime here
|
-LL | fn should_error<T>() where T : Into<&u32> {}
- | ^
+LL | fn should_error<T>() where T : for<'a> Into<&'a u32> {}
+ | +++++++ ++
error[E0106]: missing lifetime specifier
--> $DIR/issue-65285-incorrect-explicit-lifetime-name-needed.rs:9:20
diff --git a/tests/ui/generics/post_monomorphization_error_backtrace.rs b/tests/ui/generics/post_monomorphization_error_backtrace.rs
index 1fd9b6b3b..a13166880 100644
--- a/tests/ui/generics/post_monomorphization_error_backtrace.rs
+++ b/tests/ui/generics/post_monomorphization_error_backtrace.rs
@@ -11,7 +11,7 @@ fn assert_zst<T>() {
//~| NOTE: in this expansion of assert!
//~| NOTE: the evaluated program panicked
}
- let _ = F::<T>::V;
+ F::<T>::V;
}
fn foo<U>() {
diff --git a/tests/ui/hashmap/hashmap-memory.rs b/tests/ui/hashmap/hashmap-memory.rs
index 87f8b6ad5..bd364b349 100644
--- a/tests/ui/hashmap/hashmap-memory.rs
+++ b/tests/ui/hashmap/hashmap-memory.rs
@@ -1,5 +1,6 @@
// run-pass
+#![allow(improper_ctypes_definitions)]
#![allow(non_camel_case_types)]
#![allow(dead_code)]
#![allow(unused_mut)]
diff --git a/tests/ui/higher-rank-trait-bounds/issue-95230.rs b/tests/ui/higher-rank-trait-bounds/issue-95230.rs
deleted file mode 100644
index 769b6a925..000000000
--- a/tests/ui/higher-rank-trait-bounds/issue-95230.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-// revisions: old new
-//[new] compile-flags: -Ztrait-solver=next
-//[old] check-pass
-//[new] known-bug: #109764
-
-
-pub struct Bar
-where
- for<'a> &'a mut Self:;
-
-fn main() {}
diff --git a/tests/ui/higher-lifetime-bounds.rs b/tests/ui/higher-ranked/higher-lifetime-bounds.rs
index f3393347d..f3393347d 100644
--- a/tests/ui/higher-lifetime-bounds.rs
+++ b/tests/ui/higher-ranked/higher-lifetime-bounds.rs
diff --git a/tests/ui/higher-lifetime-bounds.stderr b/tests/ui/higher-ranked/higher-lifetime-bounds.stderr
index bc6d2288c..bc6d2288c 100644
--- a/tests/ui/higher-lifetime-bounds.stderr
+++ b/tests/ui/higher-ranked/higher-lifetime-bounds.stderr
diff --git a/tests/ui/higher-ranked/leak-check-in-selection.rs b/tests/ui/higher-ranked/leak-check-in-selection.rs
new file mode 100644
index 000000000..e8d6cff85
--- /dev/null
+++ b/tests/ui/higher-ranked/leak-check-in-selection.rs
@@ -0,0 +1,24 @@
+// run-pass
+// revisions: old next
+//[next] compile-flags: -Ztrait-solver=next
+#![allow(coherence_leak_check)]
+
+trait Trait: Sized {
+ fn is_higher_ranked(self) -> bool;
+}
+
+impl Trait for for<'a> fn(&'a ()) {
+ fn is_higher_ranked(self) -> bool {
+ true
+ }
+}
+impl<'a> Trait for fn(&'a ()) {
+ fn is_higher_ranked(self) -> bool {
+ false
+ }
+}
+
+fn main() {
+ let x: for<'a> fn(&'a ()) = |&()| ();
+ assert!(x.is_higher_ranked());
+}
diff --git a/tests/ui/hr-subtype/hr-subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr b/tests/ui/higher-ranked/subtype/hr-subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr
index b7264c7e9..b7264c7e9 100644
--- a/tests/ui/hr-subtype/hr-subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr
+++ b/tests/ui/higher-ranked/subtype/hr-subtype.bound_a_b_ret_a_vs_bound_a_ret_a.stderr
diff --git a/tests/ui/hr-subtype/hr-subtype.bound_a_vs_free_x.stderr b/tests/ui/higher-ranked/subtype/hr-subtype.bound_a_vs_free_x.stderr
index 2355979b0..2355979b0 100644
--- a/tests/ui/hr-subtype/hr-subtype.bound_a_vs_free_x.stderr
+++ b/tests/ui/higher-ranked/subtype/hr-subtype.bound_a_vs_free_x.stderr
diff --git a/tests/ui/hr-subtype/hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr b/tests/ui/higher-ranked/subtype/hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr
index a73c03feb..a73c03feb 100644
--- a/tests/ui/hr-subtype/hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr
+++ b/tests/ui/higher-ranked/subtype/hr-subtype.bound_inv_a_b_vs_bound_inv_a.stderr
diff --git a/tests/ui/hr-subtype/hr-subtype.free_inv_x_vs_free_inv_y.stderr b/tests/ui/higher-ranked/subtype/hr-subtype.free_inv_x_vs_free_inv_y.stderr
index 31d36d716..31d36d716 100644
--- a/tests/ui/hr-subtype/hr-subtype.free_inv_x_vs_free_inv_y.stderr
+++ b/tests/ui/higher-ranked/subtype/hr-subtype.free_inv_x_vs_free_inv_y.stderr
diff --git a/tests/ui/hr-subtype/hr-subtype.free_x_vs_free_y.stderr b/tests/ui/higher-ranked/subtype/hr-subtype.free_x_vs_free_y.stderr
index 269cde54c..269cde54c 100644
--- a/tests/ui/hr-subtype/hr-subtype.free_x_vs_free_y.stderr
+++ b/tests/ui/higher-ranked/subtype/hr-subtype.free_x_vs_free_y.stderr
diff --git a/tests/ui/hr-subtype/hr-subtype.rs b/tests/ui/higher-ranked/subtype/hr-subtype.rs
index c770e0de8..c770e0de8 100644
--- a/tests/ui/hr-subtype/hr-subtype.rs
+++ b/tests/ui/higher-ranked/subtype/hr-subtype.rs
diff --git a/tests/ui/hr-subtype/placeholder-pattern-fail.rs b/tests/ui/higher-ranked/subtype/placeholder-pattern-fail.rs
index bd4533e04..bd4533e04 100644
--- a/tests/ui/hr-subtype/placeholder-pattern-fail.rs
+++ b/tests/ui/higher-ranked/subtype/placeholder-pattern-fail.rs
diff --git a/tests/ui/hr-subtype/placeholder-pattern-fail.stderr b/tests/ui/higher-ranked/subtype/placeholder-pattern-fail.stderr
index 73b0a3173..73b0a3173 100644
--- a/tests/ui/hr-subtype/placeholder-pattern-fail.stderr
+++ b/tests/ui/higher-ranked/subtype/placeholder-pattern-fail.stderr
diff --git a/tests/ui/hr-subtype/placeholder-pattern.rs b/tests/ui/higher-ranked/subtype/placeholder-pattern.rs
index 061e66e54..061e66e54 100644
--- a/tests/ui/hr-subtype/placeholder-pattern.rs
+++ b/tests/ui/higher-ranked/subtype/placeholder-pattern.rs
diff --git a/tests/ui/hr-subtype/return-static.rs b/tests/ui/higher-ranked/subtype/return-static.rs
index 6455854f3..6455854f3 100644
--- a/tests/ui/hr-subtype/return-static.rs
+++ b/tests/ui/higher-ranked/subtype/return-static.rs
diff --git a/tests/ui/higher-rank-trait-bounds/complex.rs b/tests/ui/higher-ranked/trait-bounds/complex.rs
index 8cdfe247e..8cdfe247e 100644
--- a/tests/ui/higher-rank-trait-bounds/complex.rs
+++ b/tests/ui/higher-ranked/trait-bounds/complex.rs
diff --git a/tests/ui/higher-rank-trait-bounds/due-to-where-clause.rs b/tests/ui/higher-ranked/trait-bounds/due-to-where-clause.rs
index 1afd15613..1afd15613 100644
--- a/tests/ui/higher-rank-trait-bounds/due-to-where-clause.rs
+++ b/tests/ui/higher-ranked/trait-bounds/due-to-where-clause.rs
diff --git a/tests/ui/higher-rank-trait-bounds/due-to-where-clause.stderr b/tests/ui/higher-ranked/trait-bounds/due-to-where-clause.stderr
index 520938a63..520938a63 100644
--- a/tests/ui/higher-rank-trait-bounds/due-to-where-clause.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/due-to-where-clause.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/fn-ptr.classic.stderr b/tests/ui/higher-ranked/trait-bounds/fn-ptr.classic.stderr
index 9af6bc45c..9af6bc45c 100644
--- a/tests/ui/higher-rank-trait-bounds/fn-ptr.classic.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/fn-ptr.classic.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/fn-ptr.rs b/tests/ui/higher-ranked/trait-bounds/fn-ptr.rs
index 853160f96..853160f96 100644
--- a/tests/ui/higher-rank-trait-bounds/fn-ptr.rs
+++ b/tests/ui/higher-ranked/trait-bounds/fn-ptr.rs
diff --git a/tests/ui/higher-ranked/trait-bounds/future.classic.stderr b/tests/ui/higher-ranked/trait-bounds/future.classic.stderr
new file mode 100644
index 000000000..33c0f7173
--- /dev/null
+++ b/tests/ui/higher-ranked/trait-bounds/future.classic.stderr
@@ -0,0 +1,6 @@
+error: the compiler unexpectedly panicked. this is a bug.
+
+query stack during panic:
+#0 [evaluate_obligation] evaluating trait selection obligation `for<'a> [async fn body@$DIR/future.rs:32:35: 34:2]: core::future::future::Future`
+#1 [codegen_select_candidate] computing candidate for `<strlen as Trait>`
+end of query stack
diff --git a/tests/ui/higher-ranked/trait-bounds/future.rs b/tests/ui/higher-ranked/trait-bounds/future.rs
new file mode 100644
index 000000000..da7ee0343
--- /dev/null
+++ b/tests/ui/higher-ranked/trait-bounds/future.rs
@@ -0,0 +1,38 @@
+// ignore-tidy-linelength
+// edition:2021
+// revisions: classic next
+//[next] compile-flags: -Ztrait-solver=next
+//[next] check-pass
+//[classic] known-bug: #112347
+//[classic] build-fail
+//[classic] failure-status: 101
+//[classic] normalize-stderr-test "note: .*\n\n" -> ""
+//[classic] normalize-stderr-test "thread 'rustc' panicked.*\n" -> ""
+//[classic] normalize-stderr-test "(error: internal compiler error: [^:]+):\d+:\d+: " -> "$1:LL:CC: "
+//[classic] rustc-env:RUST_BACKTRACE=0
+
+#![feature(unboxed_closures)]
+
+use std::future::Future;
+
+trait Trait {
+ fn func(&self, _: &str);
+}
+
+impl<T> Trait for T
+where
+ for<'a> T: Fn<(&'a str,)> + Send + Sync,
+ for<'a> <T as FnOnce<(&'a str,)>>::Output: Future<Output = usize> + Send,
+{
+ fn func(&self, _: &str) {
+ println!("hello!");
+ }
+}
+
+async fn strlen(x: &str) -> usize {
+ x.len()
+}
+
+fn main() {
+ strlen.func("hi");
+}
diff --git a/tests/ui/higher-rank-trait-bounds/hang-on-deeply-nested-dyn.rs b/tests/ui/higher-ranked/trait-bounds/hang-on-deeply-nested-dyn.rs
index d34b7a296..d34b7a296 100644
--- a/tests/ui/higher-rank-trait-bounds/hang-on-deeply-nested-dyn.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hang-on-deeply-nested-dyn.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hang-on-deeply-nested-dyn.stderr b/tests/ui/higher-ranked/trait-bounds/hang-on-deeply-nested-dyn.stderr
index 3662cbfb9..a9d649b82 100644
--- a/tests/ui/higher-rank-trait-bounds/hang-on-deeply-nested-dyn.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hang-on-deeply-nested-dyn.stderr
@@ -14,7 +14,7 @@ LL | f
| ^ expected `&dyn Fn(&dyn Fn(&dyn Fn(&...)))`, found `&dyn Fn(u32)`
|
= note: expected reference `&dyn Fn(&dyn Fn(&dyn Fn(&dyn Fn(&dyn Fn(&dyn Fn(&dyn Fn(&dyn Fn(&dyn Fn(&dyn Fn(&dyn Fn(&...)))))))))))`
- the full type name has been written to '$TEST_BUILD_DIR/higher-rank-trait-bounds/hang-on-deeply-nested-dyn/hang-on-deeply-nested-dyn.long-type-hash.txt'
+ the full type name has been written to '$TEST_BUILD_DIR/higher-ranked/trait-bounds/hang-on-deeply-nested-dyn/hang-on-deeply-nested-dyn.long-type-hash.txt'
found reference `&dyn Fn(u32)`
error: aborting due to previous error
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-binder-levels-in-object-types.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-binder-levels-in-object-types.rs
index cc766c060..cc766c060 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-binder-levels-in-object-types.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-binder-levels-in-object-types.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-cache-issue-54302.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-cache-issue-54302.rs
index a20d03c77..a20d03c77 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-cache-issue-54302.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-cache-issue-54302.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-cache-issue-54302.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-cache-issue-54302.stderr
index f014eab86..f014eab86 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-cache-issue-54302.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-cache-issue-54302.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-conflate-regions.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-conflate-regions.rs
index e83686404..e83686404 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-conflate-regions.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-conflate-regions.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-conflate-regions.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-conflate-regions.stderr
index 46f5308dd..46f5308dd 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-conflate-regions.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-conflate-regions.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-debruijn-in-receiver.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-in-receiver.rs
index 05d3e1a43..05d3e1a43 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-debruijn-in-receiver.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-in-receiver.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-debruijn-in-receiver.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-in-receiver.stderr
index fa391ecba..fa391ecba 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-debruijn-in-receiver.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-in-receiver.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-debruijn-object-types-in-closures.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-object-types-in-closures.rs
index 8431226a3..8431226a3 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-debruijn-object-types-in-closures.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-debruijn-object-types-in-closures.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-fn.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-fn.rs
index 567802376..567802376 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-fn.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-fn.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-fn.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-fn.stderr
index 9914783d9..9914783d9 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-fn.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-fn.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-contravariant.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-contravariant.rs
index 921061916..921061916 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-contravariant.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-contravariant.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-contravariant.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-contravariant.stderr
index 364b613fc..364b613fc 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-contravariant.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-contravariant.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-covariant.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-covariant.rs
index f95496a6c..f95496a6c 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-covariant.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-covariant.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-invariant.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-invariant.rs
index 9b9e4496a..9b9e4496a 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-invariant.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-invariant.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-invariant.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-invariant.stderr
index cb2ce8a41..cb2ce8a41 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-exists-forall-trait-invariant.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-exists-forall-trait-invariant.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-fn-like-trait-object.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-fn-like-trait-object.rs
index ff84ad9d2..ff84ad9d2 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-fn-like-trait-object.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-fn-like-trait-object.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-fn-like-trait.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-fn-like-trait.rs
index afab9986c..afab9986c 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-fn-like-trait.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-fn-like-trait.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits-transitive.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits-transitive.rs
index f9ae1429e..f9ae1429e 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits-transitive.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits-transitive.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits-transitive.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits-transitive.stderr
index b1b8ffa8c..b1b8ffa8c 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits-transitive.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits-transitive.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits.rs
index 48ebe5017..48ebe5017 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits.stderr
index 7f96909b6..7f96909b6 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-higher-ranker-supertraits.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-higher-ranker-supertraits.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-identity-fn-borrows.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-identity-fn-borrows.rs
index 89fc4705a..89fc4705a 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-identity-fn-borrows.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-identity-fn-borrows.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-identity-fn-borrows.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-identity-fn-borrows.stderr
index 25af011e3..25af011e3 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-identity-fn-borrows.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-identity-fn-borrows.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-just-for-static.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-just-for-static.rs
index 8fb4218f8..8fb4218f8 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-just-for-static.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-just-for-static.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-just-for-static.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-just-for-static.stderr
index 31e11e128..31e11e128 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-just-for-static.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-just-for-static.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-malformed-lifetime-generics.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-malformed-lifetime-generics.rs
index 4b096be59..4b096be59 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-malformed-lifetime-generics.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-malformed-lifetime-generics.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-malformed-lifetime-generics.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-malformed-lifetime-generics.stderr
index e8f6d63b5..e8f6d63b5 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-malformed-lifetime-generics.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-malformed-lifetime-generics.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-opt-in-copy.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-opt-in-copy.rs
index 04519f116..04519f116 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-opt-in-copy.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-opt-in-copy.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-parse.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-parse.rs
index 1fab9758c..1fab9758c 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-parse.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-parse.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.polonius.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.polonius.stderr
index a94c80eb3..a94c80eb3 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.polonius.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.polonius.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.rs
index d45fa183c..d45fa183c 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.stderr
index 727b9e6be..727b9e6be 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-perfect-forwarding.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-perfect-forwarding.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-precedence-of-plus-where-clause.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-precedence-of-plus-where-clause.rs
index 42247798f..42247798f 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-precedence-of-plus-where-clause.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-precedence-of-plus-where-clause.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-precedence-of-plus.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-precedence-of-plus.rs
index 6834c392d..6834c392d 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-precedence-of-plus.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-precedence-of-plus.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-resolve-lifetime.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-resolve-lifetime.rs
index b97fdf4df..b97fdf4df 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-resolve-lifetime.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-resolve-lifetime.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-trait-object-paren-notation.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-trait-object-paren-notation.rs
index d8c726cdd..d8c726cdd 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-trait-object-paren-notation.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-trait-object-paren-notation.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-trait-object-passed-to-closure.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-trait-object-passed-to-closure.rs
index 41ebb3f5a..41ebb3f5a 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-trait-object-passed-to-closure.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-trait-object-passed-to-closure.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-type-outlives.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-type-outlives.rs
index 88d396101..88d396101 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-type-outlives.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-type-outlives.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-unboxed-closure-trait.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-unboxed-closure-trait.rs
index a4a8a5ac6..a4a8a5ac6 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-unboxed-closure-trait.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-unboxed-closure-trait.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-wrong-kind.rs b/tests/ui/higher-ranked/trait-bounds/hrtb-wrong-kind.rs
index 1a9bb2523..1a9bb2523 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-wrong-kind.rs
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-wrong-kind.rs
diff --git a/tests/ui/higher-rank-trait-bounds/hrtb-wrong-kind.stderr b/tests/ui/higher-ranked/trait-bounds/hrtb-wrong-kind.stderr
index 765ea9f78..765ea9f78 100644
--- a/tests/ui/higher-rank-trait-bounds/hrtb-wrong-kind.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/hrtb-wrong-kind.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/issue-100689.rs b/tests/ui/higher-ranked/trait-bounds/issue-100689.rs
index 2db7f8a35..2db7f8a35 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-100689.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-100689.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-102899.rs b/tests/ui/higher-ranked/trait-bounds/issue-102899.rs
index 952b81584..952b81584 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-102899.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-102899.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-30786.rs b/tests/ui/higher-ranked/trait-bounds/issue-30786.rs
index 4a6399c8f..4a6399c8f 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-30786.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-30786.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-30786.stderr b/tests/ui/higher-ranked/trait-bounds/issue-30786.stderr
index 6ec34d11a..f32ba5720 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-30786.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/issue-30786.stderr
@@ -31,7 +31,7 @@ LL | pub struct Filter<S, F> {
LL | let count = filter.countx();
| ^^^^^^ method cannot be called due to unsatisfied trait bounds
|
- = note: the full type name has been written to '$TEST_BUILD_DIR/higher-rank-trait-bounds/issue-30786/issue-30786.long-type-hash.txt'
+ = note: the full type name has been written to '$TEST_BUILD_DIR/higher-ranked/trait-bounds/issue-30786/issue-30786.long-type-hash.txt'
note: the following trait bounds were not satisfied:
`&'a mut &Filter<Map<Repeat, for<'a> fn(&'a u64) -> &'a u64 {identity::<u64>}>, [closure@$DIR/issue-30786.rs:131:30: 131:37]>: Stream`
`&'a mut &mut Filter<Map<Repeat, for<'a> fn(&'a u64) -> &'a u64 {identity::<u64>}>, [closure@$DIR/issue-30786.rs:131:30: 131:37]>: Stream`
diff --git a/tests/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs b/tests/ui/higher-ranked/trait-bounds/issue-36139-normalize-closure-sig.rs
index 2d49151ff..2d49151ff 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-36139-normalize-closure-sig.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-36139-normalize-closure-sig.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-39292.rs b/tests/ui/higher-ranked/trait-bounds/issue-39292.rs
index 968cf0891..968cf0891 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-39292.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-39292.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-42114.rs b/tests/ui/higher-ranked/trait-bounds/issue-42114.rs
index 01515fdc9..01515fdc9 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-42114.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-42114.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-43623.rs b/tests/ui/higher-ranked/trait-bounds/issue-43623.rs
index cedcf7c36..cedcf7c36 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-43623.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-43623.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-46989.rs b/tests/ui/higher-ranked/trait-bounds/issue-46989.rs
index 4a09f4be1..4a09f4be1 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-46989.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-46989.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-46989.stderr b/tests/ui/higher-ranked/trait-bounds/issue-46989.stderr
index 3f874220a..3f874220a 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-46989.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/issue-46989.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/issue-57639.rs b/tests/ui/higher-ranked/trait-bounds/issue-57639.rs
index 392e7233b..392e7233b 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-57639.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-57639.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-58451.rs b/tests/ui/higher-ranked/trait-bounds/issue-58451.rs
index 6006a108c..6006a108c 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-58451.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-58451.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-58451.stderr b/tests/ui/higher-ranked/trait-bounds/issue-58451.stderr
index 0f051be21..0f051be21 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-58451.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/issue-58451.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/issue-59311.rs b/tests/ui/higher-ranked/trait-bounds/issue-59311.rs
index 3ad548450..3ad548450 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-59311.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-59311.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-59311.stderr b/tests/ui/higher-ranked/trait-bounds/issue-59311.stderr
index c01ab8e34..c01ab8e34 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-59311.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/issue-59311.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/issue-60283.rs b/tests/ui/higher-ranked/trait-bounds/issue-60283.rs
index 05315b3f9..05315b3f9 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-60283.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-60283.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-62203-hrtb-ice.rs b/tests/ui/higher-ranked/trait-bounds/issue-62203-hrtb-ice.rs
index e70f6fc34..e70f6fc34 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-62203-hrtb-ice.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-62203-hrtb-ice.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-62203-hrtb-ice.stderr b/tests/ui/higher-ranked/trait-bounds/issue-62203-hrtb-ice.stderr
index 4d470ae70..4d470ae70 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-62203-hrtb-ice.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/issue-62203-hrtb-ice.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/issue-88446.rs b/tests/ui/higher-ranked/trait-bounds/issue-88446.rs
index 571b85317..571b85317 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-88446.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-88446.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-88586-hr-self-outlives-in-trait-def.rs b/tests/ui/higher-ranked/trait-bounds/issue-88586-hr-self-outlives-in-trait-def.rs
index 92b7c5deb..92b7c5deb 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-88586-hr-self-outlives-in-trait-def.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-88586-hr-self-outlives-in-trait-def.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-90177.rs b/tests/ui/higher-ranked/trait-bounds/issue-90177.rs
index b151a9d3a..b151a9d3a 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-90177.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-90177.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-95034.rs b/tests/ui/higher-ranked/trait-bounds/issue-95034.rs
index af4946a18..af4946a18 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-95034.rs
+++ b/tests/ui/higher-ranked/trait-bounds/issue-95034.rs
diff --git a/tests/ui/higher-rank-trait-bounds/issue-95230.new.stderr b/tests/ui/higher-ranked/trait-bounds/issue-95230.next.stderr
index d4bc5b672..d4bc5b672 100644
--- a/tests/ui/higher-rank-trait-bounds/issue-95230.new.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/issue-95230.next.stderr
diff --git a/tests/ui/higher-ranked/trait-bounds/issue-95230.rs b/tests/ui/higher-ranked/trait-bounds/issue-95230.rs
new file mode 100644
index 000000000..49a1584d5
--- /dev/null
+++ b/tests/ui/higher-ranked/trait-bounds/issue-95230.rs
@@ -0,0 +1,11 @@
+// revisions: old next
+//[next] compile-flags: -Ztrait-solver=next
+//[old] check-pass
+//[next] known-bug: #109764
+
+
+pub struct Bar
+where
+ for<'a> &'a mut Self:;
+
+fn main() {}
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-44005.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-44005.rs
index f255eac0c..f255eac0c 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-44005.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-44005.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-56556.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-56556.rs
index 4d38cb19e..4d38cb19e 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-56556.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-56556.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-1.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-1.rs
index c6f29fa59..c6f29fa59 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-1.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-1.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-2.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-2.rs
index 002054732..002054732 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-2.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-2.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-3.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-3.rs
index d84e30f49..d84e30f49 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-3.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-3.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-3.stderr b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-3.stderr
index b30dd36d2..b30dd36d2 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-3.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-3.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-4.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-4.rs
index 8c2a59868..8c2a59868 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-4.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-4.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-5.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-5.rs
index 03f257a02..03f257a02 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-5.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-5.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-6.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-6.rs
index 74a4785e4..0ea736dee 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-62529-6.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-62529-6.rs
@@ -71,7 +71,7 @@ impl<'a, 'b, U: Unpack<'b>> Backed<'a, U> {
where
F: for<'f> FnOnce(<U as Unpack<'f>>::Unpacked) -> (),
{
- let result = f(self.1.unpack());
+ let result: () = f(self.1.unpack());
Backed(self.0, result)
}
}
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-70120.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-70120.rs
index 3ced40230..3ced40230 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-70120.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-70120.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.migrate.stderr b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.migrate.stderr
index 0f38f8e32..0f38f8e32 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.migrate.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.migrate.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.rs
index 1d90226a3..1d90226a3 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.stderr b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.stderr
index 4ef96cd95..4ef96cd95 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-71955.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-71955.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-74261.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-74261.rs
index 93ccb4268..93ccb4268 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-74261.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-74261.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-76956.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-76956.rs
index 583470080..583470080 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-76956.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-76956.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-80706.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-80706.rs
index 00a866f22..00a866f22 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-80706.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-80706.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-80956.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-80956.rs
index 6316ceea1..6316ceea1 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-80956.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-80956.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-81809.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-81809.rs
index f6ab9c203..f6ab9c203 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-81809.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-81809.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-85455.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-85455.rs
index 8aa29926d..8aa29926d 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-85455.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-85455.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-85455.stderr b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-85455.stderr
index 3240518fb..3240518fb 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-85455.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-85455.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89118.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89118.rs
index fffb54f86..fffb54f86 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89118.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89118.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89118.stderr b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89118.stderr
index edef6ccd3..edef6ccd3 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89118.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89118.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89436.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89436.rs
index f7e467b37..f7e467b37 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-89436.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-89436.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90612.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90612.rs
index effc32945..effc32945 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90612.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90612.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90638.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90638.rs
index 628b5cba1..628b5cba1 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90638.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90638.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90875.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90875.rs
index ffd6857d8..ffd6857d8 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90875.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90875.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90950.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90950.rs
index ab9d9a7ce..ab9d9a7ce 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90950.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90950.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90950.stderr b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90950.stderr
index 5be33bccd..5be33bccd 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/issue-90950.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/issue-90950.stderr
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/norm-before-method-resolution.rs b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.rs
index 7693b1182..7693b1182 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/norm-before-method-resolution.rs
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.rs
diff --git a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/norm-before-method-resolution.stderr b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.stderr
index 73388a725..73388a725 100644
--- a/tests/ui/higher-rank-trait-bounds/normalize-under-binder/norm-before-method-resolution.stderr
+++ b/tests/ui/higher-ranked/trait-bounds/normalize-under-binder/norm-before-method-resolution.stderr
diff --git a/tests/ui/hygiene/no_implicit_prelude-2018.stderr b/tests/ui/hygiene/no_implicit_prelude-2018.stderr
index 3f31b041b..b22f3e75b 100644
--- a/tests/ui/hygiene/no_implicit_prelude-2018.stderr
+++ b/tests/ui/hygiene/no_implicit_prelude-2018.stderr
@@ -4,8 +4,10 @@ error: cannot find macro `print` in this scope
LL | print!();
| ^^^^^
|
- = help: consider importing this macro:
- std::print
+help: consider importing this macro
+ |
+LL + use std::print;
+ |
error: aborting due to previous error
diff --git a/tests/ui/impl-trait/auto-trait-leak.rs b/tests/ui/impl-trait/auto-trait-leak.rs
index c2fbbf94f..d71c09879 100644
--- a/tests/ui/impl-trait/auto-trait-leak.rs
+++ b/tests/ui/impl-trait/auto-trait-leak.rs
@@ -3,21 +3,23 @@ use std::rc::Rc;
fn send<T: Send>(_: T) {}
-fn main() {
-}
+fn main() {}
// Cycles should work as the deferred obligations are
// independently resolved and only require the concrete
// return type, which can't depend on the obligation.
fn cycle1() -> impl Clone {
//~^ ERROR cycle detected
+ //~| ERROR cycle detected
send(cycle2().clone());
+ //~^ ERROR: cannot check whether the hidden type of opaque type satisfies auto traits
Rc::new(Cell::new(5))
}
fn cycle2() -> impl Clone {
send(cycle1().clone());
+ //~^ ERROR: cannot check whether the hidden type of opaque type satisfies auto traits
Rc::new(String::from("foo"))
}
diff --git a/tests/ui/impl-trait/auto-trait-leak.stderr b/tests/ui/impl-trait/auto-trait-leak.stderr
index aa4ee75bb..92a9763bc 100644
--- a/tests/ui/impl-trait/auto-trait-leak.stderr
+++ b/tests/ui/impl-trait/auto-trait-leak.stderr
@@ -1,44 +1,9 @@
error[E0391]: cycle detected when computing type of `cycle1::{opaque#0}`
- --> $DIR/auto-trait-leak.rs:12:16
+ --> $DIR/auto-trait-leak.rs:11:16
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^
|
-note: ...which requires borrow-checking `cycle1`...
- --> $DIR/auto-trait-leak.rs:12:1
- |
-LL | fn cycle1() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires promoting constants in MIR for `cycle1`...
- --> $DIR/auto-trait-leak.rs:12:1
- |
-LL | fn cycle1() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires preparing `cycle1` for borrow checking...
- --> $DIR/auto-trait-leak.rs:12:1
- |
-LL | fn cycle1() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires unsafety-checking `cycle1`...
- --> $DIR/auto-trait-leak.rs:12:1
- |
-LL | fn cycle1() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires building MIR for `cycle1`...
- --> $DIR/auto-trait-leak.rs:12:1
- |
-LL | fn cycle1() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires match-checking `cycle1`...
- --> $DIR/auto-trait-leak.rs:12:1
- |
-LL | fn cycle1() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires building THIR for `cycle1`...
- --> $DIR/auto-trait-leak.rs:12:1
- |
-LL | fn cycle1() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires type-checking `cycle1`...
--> $DIR/auto-trait-leak.rs:14:5
|
@@ -46,51 +11,51 @@ LL | send(cycle2().clone());
| ^^^^
= note: ...which requires evaluating trait selection obligation `cycle2::{opaque#0}: core::marker::Send`...
note: ...which requires computing type of `cycle2::{opaque#0}`...
- --> $DIR/auto-trait-leak.rs:19:16
+ --> $DIR/auto-trait-leak.rs:20:16
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^
-note: ...which requires borrow-checking `cycle2`...
- --> $DIR/auto-trait-leak.rs:19:1
+note: ...which requires type-checking `cycle2`...
+ --> $DIR/auto-trait-leak.rs:21:5
|
-LL | fn cycle2() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires promoting constants in MIR for `cycle2`...
- --> $DIR/auto-trait-leak.rs:19:1
+LL | send(cycle1().clone());
+ | ^^^^
+ = note: ...which requires evaluating trait selection obligation `cycle1::{opaque#0}: core::marker::Send`...
+ = note: ...which again requires computing type of `cycle1::{opaque#0}`, completing the cycle
+note: cycle used when checking item types in top-level module
+ --> $DIR/auto-trait-leak.rs:1:1
|
-LL | fn cycle2() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires preparing `cycle2` for borrow checking...
- --> $DIR/auto-trait-leak.rs:19: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 computing type of `cycle1::{opaque#0}`
+ --> $DIR/auto-trait-leak.rs:11:16
|
-LL | fn cycle2() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires unsafety-checking `cycle2`...
- --> $DIR/auto-trait-leak.rs:19:1
+LL | fn cycle1() -> impl Clone {
+ | ^^^^^^^^^^
|
-LL | fn cycle2() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires building MIR for `cycle2`...
- --> $DIR/auto-trait-leak.rs:19:1
+note: ...which requires type-checking `cycle1`...
+ --> $DIR/auto-trait-leak.rs:14:5
|
-LL | fn cycle2() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires match-checking `cycle2`...
- --> $DIR/auto-trait-leak.rs:19:1
+LL | send(cycle2().clone());
+ | ^^^^
+ = note: ...which requires evaluating trait selection obligation `cycle2::{opaque#0}: core::marker::Send`...
+note: ...which requires computing type of `cycle2::{opaque#0}`...
+ --> $DIR/auto-trait-leak.rs:20:16
|
LL | fn cycle2() -> impl Clone {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires building THIR for `cycle2`...
- --> $DIR/auto-trait-leak.rs:19:1
+ | ^^^^^^^^^^
+note: ...which requires type-checking `cycle2`...
+ --> $DIR/auto-trait-leak.rs:20:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
-note: ...which requires type-checking `cycle2`...
- --> $DIR/auto-trait-leak.rs:20:5
- |
-LL | send(cycle1().clone());
- | ^^^^
- = note: ...which requires evaluating trait selection obligation `cycle1::{opaque#0}: core::marker::Send`...
= note: ...which again requires computing type of `cycle1::{opaque#0}`, completing the cycle
note: cycle used when checking item types in top-level module
--> $DIR/auto-trait-leak.rs:1:1
@@ -104,6 +69,54 @@ LL | | Rc::new(String::from("foo"))
LL | | }
| |_^
-error: aborting due to previous error
+error: cannot check whether the hidden type of opaque type satisfies auto traits
+ --> $DIR/auto-trait-leak.rs:21:10
+ |
+LL | send(cycle1().clone());
+ | ---- ^^^^^^^^^^^^^^^^
+ | |
+ | required by a bound introduced by this call
+ |
+note: opaque type is declared here
+ --> $DIR/auto-trait-leak.rs:11:16
+ |
+LL | fn cycle1() -> impl Clone {
+ | ^^^^^^^^^^
+note: this item depends on auto traits of the hidden type, but may also be registering the hidden type. This is not supported right now. You can try moving the opaque type and the item that actually registers a hidden type into a new submodule
+ --> $DIR/auto-trait-leak.rs:20:4
+ |
+LL | fn cycle2() -> impl Clone {
+ | ^^^^^^
+note: required by a bound in `send`
+ --> $DIR/auto-trait-leak.rs:4:12
+ |
+LL | fn send<T: Send>(_: T) {}
+ | ^^^^ required by this bound in `send`
+
+error: cannot check whether the hidden type of opaque type satisfies auto traits
+ --> $DIR/auto-trait-leak.rs:14:10
+ |
+LL | send(cycle2().clone());
+ | ---- ^^^^^^^^^^^^^^^^
+ | |
+ | required by a bound introduced by this call
+ |
+note: opaque type is declared here
+ --> $DIR/auto-trait-leak.rs:20:16
+ |
+LL | fn cycle2() -> impl Clone {
+ | ^^^^^^^^^^
+note: this item depends on auto traits of the hidden type, but may also be registering the hidden type. This is not supported right now. You can try moving the opaque type and the item that actually registers a hidden type into a new submodule
+ --> $DIR/auto-trait-leak.rs:11:4
+ |
+LL | fn cycle1() -> impl Clone {
+ | ^^^^^^
+note: required by a bound in `send`
+ --> $DIR/auto-trait-leak.rs:4:12
+ |
+LL | fn send<T: Send>(_: T) {}
+ | ^^^^ required by this bound in `send`
+
+error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/impl-trait/autoderef.rs b/tests/ui/impl-trait/autoderef.rs
index 5e4f49954..0d07a5496 100644
--- a/tests/ui/impl-trait/autoderef.rs
+++ b/tests/ui/impl-trait/autoderef.rs
@@ -1,3 +1,5 @@
+// revisions: current next
+//[next] compile-flag: -Ztrait-solver=next
// check-pass
use std::path::Path;
diff --git a/tests/ui/impl-trait/coherence-treats-tait-ambig.current.stderr b/tests/ui/impl-trait/coherence-treats-tait-ambig.current.stderr
new file mode 100644
index 000000000..61fed1629
--- /dev/null
+++ b/tests/ui/impl-trait/coherence-treats-tait-ambig.current.stderr
@@ -0,0 +1,13 @@
+error[E0119]: conflicting implementations of trait `Into<T>` for type `Foo`
+ --> $DIR/coherence-treats-tait-ambig.rs:10:1
+ |
+LL | impl Into<T> for Foo {
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: conflicting implementation in crate `core`:
+ - impl<T, U> Into<U> for T
+ where U: From<T>;
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/impl-trait/coherence-treats-tait-ambig.next.stderr b/tests/ui/impl-trait/coherence-treats-tait-ambig.next.stderr
new file mode 100644
index 000000000..61fed1629
--- /dev/null
+++ b/tests/ui/impl-trait/coherence-treats-tait-ambig.next.stderr
@@ -0,0 +1,13 @@
+error[E0119]: conflicting implementations of trait `Into<T>` for type `Foo`
+ --> $DIR/coherence-treats-tait-ambig.rs:10:1
+ |
+LL | impl Into<T> for Foo {
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: conflicting implementation in crate `core`:
+ - impl<T, U> Into<U> for T
+ where U: From<T>;
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/impl-trait/coherence-treats-tait-ambig.rs b/tests/ui/impl-trait/coherence-treats-tait-ambig.rs
new file mode 100644
index 000000000..156a7eb0e
--- /dev/null
+++ b/tests/ui/impl-trait/coherence-treats-tait-ambig.rs
@@ -0,0 +1,19 @@
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
+
+#![feature(type_alias_impl_trait)]
+
+type T = impl Sized;
+
+struct Foo;
+
+impl Into<T> for Foo {
+//~^ ERROR conflicting implementations of trait `Into<T>` for type `Foo`
+ fn into(self) -> T {
+ Foo
+ }
+}
+
+fn main() {
+ let _: T = Foo.into();
+}
diff --git a/tests/ui/impl-trait/deduce-signature-from-supertrait.rs b/tests/ui/impl-trait/deduce-signature-from-supertrait.rs
index d2c347920..7a51aac44 100644
--- a/tests/ui/impl-trait/deduce-signature-from-supertrait.rs
+++ b/tests/ui/impl-trait/deduce-signature-from-supertrait.rs
@@ -8,8 +8,10 @@ impl<T: Fn(i32)> SuperExpectation for T {}
type Foo = impl SuperExpectation;
-fn main() {
+fn bop(_: Foo) {
let _: Foo = |x| {
let _ = x.to_string();
};
}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/defined-by-trait-resolution.rs b/tests/ui/impl-trait/defined-by-trait-resolution.rs
new file mode 100644
index 000000000..1744046dd
--- /dev/null
+++ b/tests/ui/impl-trait/defined-by-trait-resolution.rs
@@ -0,0 +1,12 @@
+//! The trait query `foo: Fn() -> u8` is a valid defining use of RPIT.
+
+// build-pass
+
+fn returns_u8(_: impl Fn() -> u8) {}
+
+pub fn foo() -> impl Sized {
+ returns_u8(foo);
+ 0u8
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.rs b/tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.rs
new file mode 100644
index 000000000..befd768b1
--- /dev/null
+++ b/tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.rs
@@ -0,0 +1,9 @@
+fn test() -> impl std::fmt::Debug {
+ if true {
+ "boo2"
+ } else {
+ //~^ ERROR `if` and `else` have incompatible types
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.stderr b/tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.stderr
new file mode 100644
index 000000000..9b63911da
--- /dev/null
+++ b/tests/ui/impl-trait/dont-suggest-box-on-empty-else-arm.stderr
@@ -0,0 +1,16 @@
+error[E0308]: `if` and `else` have incompatible types
+ --> $DIR/dont-suggest-box-on-empty-else-arm.rs:4:12
+ |
+LL | if true {
+ | ------- `if` and `else` have incompatible types
+LL | "boo2"
+ | ------ expected because of this
+LL | } else {
+ | ____________^
+LL | |
+LL | | }
+ | |_____^ expected `&str`, found `()`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/impl-trait/equality.stderr b/tests/ui/impl-trait/equality.stderr
index 69f4cbbbf..9b8bff215 100644
--- a/tests/ui/impl-trait/equality.stderr
+++ b/tests/ui/impl-trait/equality.stderr
@@ -30,10 +30,10 @@ LL | n + sum_to(n - 1)
|
= help: the trait `Add<impl Foo>` is not implemented for `u32`
= help: the following other types implement trait `Add<Rhs>`:
+ <u32 as Add>
+ <u32 as Add<&u32>>
<&'a u32 as Add<u32>>
<&u32 as Add<&u32>>
- <u32 as Add<&u32>>
- <u32 as Add>
error: aborting due to 2 previous errors; 1 warning emitted
diff --git a/tests/ui/impl-trait/in-assoc-type-unconstrained.stderr b/tests/ui/impl-trait/in-assoc-type-unconstrained.stderr
index 1097cd0f4..8e61a65ab 100644
--- a/tests/ui/impl-trait/in-assoc-type-unconstrained.stderr
+++ b/tests/ui/impl-trait/in-assoc-type-unconstrained.stderr
@@ -40,10 +40,10 @@ LL | fn method() -> Self::Ty;
= note: expected signature `fn() -> <() as compare_method::Trait>::Ty`
found signature `fn()`
note: this item must have the opaque type in its signature in order to be able to register hidden types
- --> $DIR/in-assoc-type-unconstrained.rs:22:9
+ --> $DIR/in-assoc-type-unconstrained.rs:22:12
|
LL | fn method() -> () {}
- | ^^^^^^^^^^^^^^^^^
+ | ^^^^^^
error: unconstrained opaque type
--> $DIR/in-assoc-type-unconstrained.rs:20:19
diff --git a/tests/ui/impl-trait/in-assoc-type.rs b/tests/ui/impl-trait/in-assoc-type.rs
index 36c54bdd6..38ad2fa6f 100644
--- a/tests/ui/impl-trait/in-assoc-type.rs
+++ b/tests/ui/impl-trait/in-assoc-type.rs
@@ -1,3 +1,6 @@
+//! This test checks that we don't allow registering hidden types for
+//! opaque types from other impls.
+
#![feature(impl_trait_in_assoc_type)]
trait Foo<T> {
diff --git a/tests/ui/impl-trait/in-assoc-type.stderr b/tests/ui/impl-trait/in-assoc-type.stderr
index f0a272dc2..af60da07c 100644
--- a/tests/ui/impl-trait/in-assoc-type.stderr
+++ b/tests/ui/impl-trait/in-assoc-type.stderr
@@ -1,5 +1,5 @@
error[E0308]: mismatched types
- --> $DIR/in-assoc-type.rs:17:22
+ --> $DIR/in-assoc-type.rs:20:22
|
LL | type Bar = impl std::fmt::Debug;
| -------------------- the expected opaque type
@@ -12,10 +12,10 @@ LL | fn foo(&self) -> <Self as Foo<()>>::Bar {}
= note: expected opaque type `<() as Foo<()>>::Bar`
found unit type `()`
note: this item must have the opaque type in its signature in order to be able to register hidden types
- --> $DIR/in-assoc-type.rs:17:5
+ --> $DIR/in-assoc-type.rs:20:8
|
LL | fn foo(&self) -> <Self as Foo<()>>::Bar {}
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^
error: aborting due to previous error
diff --git a/tests/ui/impl-trait/in-trait/foreign.rs b/tests/ui/impl-trait/in-trait/foreign.rs
index 98417b343..b0fbe3a3d 100644
--- a/tests/ui/impl-trait/in-trait/foreign.rs
+++ b/tests/ui/impl-trait/in-trait/foreign.rs
@@ -14,6 +14,10 @@ impl Foo for Local {
fn bar(self) -> Arc<String> { Arc::new(String::new()) }
}
+fn generic(f: impl Foo) {
+ let x = &*f.bar();
+}
+
fn main() {
// Witness an RPITIT from another crate.
let &() = Foreign.bar();
diff --git a/tests/ui/impl-trait/in-trait/issue-102140.next.stderr b/tests/ui/impl-trait/in-trait/issue-102140.next.stderr
index 7aa7880e2..94893c9e7 100644
--- a/tests/ui/impl-trait/in-trait/issue-102140.next.stderr
+++ b/tests/ui/impl-trait/in-trait/issue-102140.next.stderr
@@ -6,11 +6,7 @@ LL | MyTrait::foo(&self)
| |
| required by a bound introduced by this call
|
-help: consider removing the leading `&`-reference
- |
-LL - MyTrait::foo(&self)
-LL + MyTrait::foo(self)
- |
+ = help: the trait `MyTrait` is implemented for `Outer`
error[E0277]: the trait bound `&dyn MyTrait: MyTrait` is not satisfied
--> $DIR/issue-102140.rs:26:9
diff --git a/tests/ui/impl-trait/in-trait/method-signature-matches.lt.stderr b/tests/ui/impl-trait/in-trait/method-signature-matches.lt.stderr
new file mode 100644
index 000000000..239c4b35c
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/method-signature-matches.lt.stderr
@@ -0,0 +1,21 @@
+error[E0053]: method `early` has an incompatible type for trait
+ --> $DIR/method-signature-matches.rs:58:27
+ |
+LL | fn early<'late, T>(_: &'late ()) {}
+ | - ^^^^^^^^^
+ | | |
+ | | expected type parameter `T`, found `()`
+ | | help: change the parameter type to match the trait: `&T`
+ | this type parameter
+ |
+note: type in trait
+ --> $DIR/method-signature-matches.rs:53:28
+ |
+LL | fn early<'early, T>(x: &'early T) -> impl Sized;
+ | ^^^^^^^^^
+ = note: expected signature `fn(&T)`
+ found signature `fn(&'late ())`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0053`.
diff --git a/tests/ui/impl-trait/in-trait/method-signature-matches.mismatch.stderr b/tests/ui/impl-trait/in-trait/method-signature-matches.mismatch.stderr
new file mode 100644
index 000000000..d3183b92e
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/method-signature-matches.mismatch.stderr
@@ -0,0 +1,20 @@
+error[E0053]: method `owo` has an incompatible type for trait
+ --> $DIR/method-signature-matches.rs:14:15
+ |
+LL | fn owo(_: u8) {}
+ | ^^
+ | |
+ | expected `()`, found `u8`
+ | help: change the parameter type to match the trait: `()`
+ |
+note: type in trait
+ --> $DIR/method-signature-matches.rs:9:15
+ |
+LL | fn owo(x: ()) -> impl Sized;
+ | ^^
+ = note: expected signature `fn(())`
+ found signature `fn(u8)`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0053`.
diff --git a/tests/ui/impl-trait/in-trait/method-signature-matches.mismatch_async.stderr b/tests/ui/impl-trait/in-trait/method-signature-matches.mismatch_async.stderr
new file mode 100644
index 000000000..80fda1c9f
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/method-signature-matches.mismatch_async.stderr
@@ -0,0 +1,20 @@
+error[E0053]: method `owo` has an incompatible type for trait
+ --> $DIR/method-signature-matches.rs:25:21
+ |
+LL | async fn owo(_: u8) {}
+ | ^^
+ | |
+ | expected `()`, found `u8`
+ | help: change the parameter type to match the trait: `()`
+ |
+note: type in trait
+ --> $DIR/method-signature-matches.rs:20:21
+ |
+LL | async fn owo(x: ()) {}
+ | ^^
+ = note: expected signature `fn(()) -> _`
+ found signature `fn(u8) -> _`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0053`.
diff --git a/tests/ui/impl-trait/in-trait/method-signature-matches.rs b/tests/ui/impl-trait/in-trait/method-signature-matches.rs
index c848ee3f6..294f93b30 100644
--- a/tests/ui/impl-trait/in-trait/method-signature-matches.rs
+++ b/tests/ui/impl-trait/in-trait/method-signature-matches.rs
@@ -1,51 +1,62 @@
// edition: 2021
+// revisions: mismatch mismatch_async too_many too_few lt
#![feature(return_position_impl_trait_in_trait, async_fn_in_trait)]
#![allow(incomplete_features)]
+#[cfg(mismatch)]
trait Uwu {
fn owo(x: ()) -> impl Sized;
}
+#[cfg(mismatch)]
impl Uwu for () {
fn owo(_: u8) {}
- //~^ ERROR method `owo` has an incompatible type for trait
+ //[mismatch]~^ ERROR method `owo` has an incompatible type for trait
}
+#[cfg(mismatch_async)]
trait AsyncUwu {
async fn owo(x: ()) {}
}
+#[cfg(mismatch_async)]
impl AsyncUwu for () {
async fn owo(_: u8) {}
- //~^ ERROR method `owo` has an incompatible type for trait
+ //[mismatch_async]~^ ERROR method `owo` has an incompatible type for trait
}
+#[cfg(too_many)]
trait TooMuch {
fn calm_down_please() -> impl Sized;
}
+#[cfg(too_many)]
impl TooMuch for () {
fn calm_down_please(_: (), _: (), _: ()) {}
- //~^ ERROR method `calm_down_please` has 3 parameters but the declaration in trait `TooMuch::calm_down_please` has 0
+ //[too_many]~^ ERROR method `calm_down_please` has 3 parameters but the declaration in trait `TooMuch::calm_down_please` has 0
}
+#[cfg(too_few)]
trait TooLittle {
fn come_on_a_little_more_effort(_: (), _: (), _: ()) -> impl Sized;
}
+#[cfg(too_few)]
impl TooLittle for () {
fn come_on_a_little_more_effort() {}
- //~^ ERROR method `come_on_a_little_more_effort` has 0 parameters but the declaration in trait `TooLittle::come_on_a_little_more_effort` has 3
+ //[too_few]~^ ERROR method `come_on_a_little_more_effort` has 0 parameters but the declaration in trait `TooLittle::come_on_a_little_more_effort` has 3
}
+#[cfg(lt)]
trait Lifetimes {
fn early<'early, T>(x: &'early T) -> impl Sized;
}
+#[cfg(lt)]
impl Lifetimes for () {
fn early<'late, T>(_: &'late ()) {}
- //~^ ERROR method `early` has an incompatible type for trait
+ //[lt]~^ ERROR method `early` has an incompatible type for trait
}
fn main() {}
diff --git a/tests/ui/impl-trait/in-trait/method-signature-matches.stderr b/tests/ui/impl-trait/in-trait/method-signature-matches.stderr
deleted file mode 100644
index 3ec62020e..000000000
--- a/tests/ui/impl-trait/in-trait/method-signature-matches.stderr
+++ /dev/null
@@ -1,74 +0,0 @@
-error[E0053]: method `owo` has an incompatible type for trait
- --> $DIR/method-signature-matches.rs:11:15
- |
-LL | fn owo(_: u8) {}
- | ^^
- | |
- | expected `()`, found `u8`
- | help: change the parameter type to match the trait: `()`
- |
-note: type in trait
- --> $DIR/method-signature-matches.rs:7:15
- |
-LL | fn owo(x: ()) -> impl Sized;
- | ^^
- = note: expected signature `fn(())`
- found signature `fn(u8)`
-
-error[E0053]: method `owo` has an incompatible type for trait
- --> $DIR/method-signature-matches.rs:20:21
- |
-LL | async fn owo(_: u8) {}
- | ^^
- | |
- | expected `()`, found `u8`
- | help: change the parameter type to match the trait: `()`
- |
-note: type in trait
- --> $DIR/method-signature-matches.rs:16:21
- |
-LL | async fn owo(x: ()) {}
- | ^^
- = note: expected signature `fn(()) -> _`
- found signature `fn(u8) -> _`
-
-error[E0050]: method `calm_down_please` has 3 parameters but the declaration in trait `TooMuch::calm_down_please` has 0
- --> $DIR/method-signature-matches.rs:29:28
- |
-LL | fn calm_down_please() -> impl Sized;
- | ------------------------------------ trait requires 0 parameters
-...
-LL | fn calm_down_please(_: (), _: (), _: ()) {}
- | ^^^^^^^^^^^^^^^^ expected 0 parameters, found 3
-
-error[E0050]: method `come_on_a_little_more_effort` has 0 parameters but the declaration in trait `TooLittle::come_on_a_little_more_effort` has 3
- --> $DIR/method-signature-matches.rs:38:5
- |
-LL | fn come_on_a_little_more_effort(_: (), _: (), _: ()) -> impl Sized;
- | ---------------- trait requires 3 parameters
-...
-LL | fn come_on_a_little_more_effort() {}
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 3 parameters, found 0
-
-error[E0053]: method `early` has an incompatible type for trait
- --> $DIR/method-signature-matches.rs:47:27
- |
-LL | fn early<'late, T>(_: &'late ()) {}
- | - ^^^^^^^^^
- | | |
- | | expected type parameter `T`, found `()`
- | | help: change the parameter type to match the trait: `&'early T`
- | this type parameter
- |
-note: type in trait
- --> $DIR/method-signature-matches.rs:43:28
- |
-LL | fn early<'early, T>(x: &'early T) -> impl Sized;
- | ^^^^^^^^^
- = note: expected signature `fn(&'early T)`
- found signature `fn(&())`
-
-error: aborting due to 5 previous errors
-
-Some errors have detailed explanations: E0050, E0053.
-For more information about an error, try `rustc --explain E0050`.
diff --git a/tests/ui/impl-trait/in-trait/method-signature-matches.too_few.stderr b/tests/ui/impl-trait/in-trait/method-signature-matches.too_few.stderr
new file mode 100644
index 000000000..24bcfeb74
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/method-signature-matches.too_few.stderr
@@ -0,0 +1,12 @@
+error[E0050]: method `come_on_a_little_more_effort` has 0 parameters but the declaration in trait `TooLittle::come_on_a_little_more_effort` has 3
+ --> $DIR/method-signature-matches.rs:47:5
+ |
+LL | fn come_on_a_little_more_effort(_: (), _: (), _: ()) -> impl Sized;
+ | ---------------- trait requires 3 parameters
+...
+LL | fn come_on_a_little_more_effort() {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 3 parameters, found 0
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0050`.
diff --git a/tests/ui/impl-trait/in-trait/method-signature-matches.too_many.stderr b/tests/ui/impl-trait/in-trait/method-signature-matches.too_many.stderr
new file mode 100644
index 000000000..616cbd290
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/method-signature-matches.too_many.stderr
@@ -0,0 +1,12 @@
+error[E0050]: method `calm_down_please` has 3 parameters but the declaration in trait `TooMuch::calm_down_please` has 0
+ --> $DIR/method-signature-matches.rs:36:28
+ |
+LL | fn calm_down_please() -> impl Sized;
+ | ------------------------------------ trait requires 0 parameters
+...
+LL | fn calm_down_please(_: (), _: (), _: ()) {}
+ | ^^^^^^^^^^^^^^^^ expected 0 parameters, found 3
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0050`.
diff --git a/tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.current.stderr b/tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.current.stderr
new file mode 100644
index 000000000..ff30103b7
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.current.stderr
@@ -0,0 +1,16 @@
+error[E0277]: the trait bound `impl Foo<u8>: Foo<char>` is not satisfied
+ --> $DIR/return-dont-satisfy-bounds.rs:13:34
+ |
+LL | fn foo<F2: Foo<u8>>(self) -> impl Foo<u8> {
+ | ^^^^^^^^^^^^ the trait `Foo<char>` is not implemented for `impl Foo<u8>`
+ |
+ = help: the trait `Foo<char>` is implemented for `Bar`
+note: required by a bound in `Foo::foo::{opaque#0}`
+ --> $DIR/return-dont-satisfy-bounds.rs:7:30
+ |
+LL | fn foo<F2>(self) -> impl Foo<T>;
+ | ^^^^^^ required by this bound in `Foo::foo::{opaque#0}`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.next.stderr b/tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.next.stderr
new file mode 100644
index 000000000..7c7f7feaa
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.next.stderr
@@ -0,0 +1,16 @@
+error[E0277]: the trait bound `impl Foo<u8>: Foo<char>` is not satisfied
+ --> $DIR/return-dont-satisfy-bounds.rs:13:34
+ |
+LL | fn foo<F2: Foo<u8>>(self) -> impl Foo<u8> {
+ | ^^^^^^^^^^^^ the trait `Foo<char>` is not implemented for `impl Foo<u8>`
+ |
+ = help: the trait `Foo<char>` is implemented for `Bar`
+note: required by a bound in `Foo::{opaque#0}`
+ --> $DIR/return-dont-satisfy-bounds.rs:7:30
+ |
+LL | fn foo<F2>(self) -> impl Foo<T>;
+ | ^^^^^^ required by this bound in `Foo::{opaque#0}`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.rs b/tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.rs
new file mode 100644
index 000000000..65528f212
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/return-dont-satisfy-bounds.rs
@@ -0,0 +1,19 @@
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
+
+#![feature(return_position_impl_trait_in_trait)]
+
+trait Foo<T> {
+ fn foo<F2>(self) -> impl Foo<T>;
+}
+
+struct Bar;
+
+impl Foo<char> for Bar {
+ fn foo<F2: Foo<u8>>(self) -> impl Foo<u8> {
+ //~^ ERROR: the trait bound `impl Foo<u8>: Foo<char>` is not satisfied [E0277]
+ self
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/in-trait/signature-mismatch.current.stderr b/tests/ui/impl-trait/in-trait/signature-mismatch.current.stderr
index eba270af7..8c9dd4031 100644
--- a/tests/ui/impl-trait/in-trait/signature-mismatch.current.stderr
+++ b/tests/ui/impl-trait/in-trait/signature-mismatch.current.stderr
@@ -1,16 +1,61 @@
-error: `impl` item signature doesn't match `trait` item signature
- --> $DIR/signature-mismatch.rs:17:5
+error: return type captures more lifetimes than trait definition
+ --> $DIR/signature-mismatch.rs:36:47
+ |
+LL | fn async_fn<'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>> + 'a {
+ | -- this lifetime was captured ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: hidden type must only reference lifetimes captured by this impl trait
+ --> $DIR/signature-mismatch.rs:17:40
|
LL | fn async_fn(&self, buff: &[u8]) -> impl Future<Output = Vec<u8>>;
- | ----------------------------------------------------------------- expected `fn(&'1 Struct, &'2 [u8]) -> impl Future<Output = Vec<u8>> + '3`
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: hidden type inferred to be `impl Future<Output = Vec<u8>> + 'a`
+
+error: return type captures more lifetimes than trait definition
+ --> $DIR/signature-mismatch.rs:41:57
+ |
+LL | fn async_fn_early<'a: 'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>> + 'a {
+ | -- this lifetime was captured ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: hidden type must only reference lifetimes captured by this impl trait
+ --> $DIR/signature-mismatch.rs:18:57
+ |
+LL | fn async_fn_early<'a: 'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: hidden type inferred to be `impl Future<Output = Vec<u8>> + 'a`
+
+error: return type captures more lifetimes than trait definition
+ --> $DIR/signature-mismatch.rs:49:10
+ |
+LL | fn async_fn_multiple<'a, 'b>(
+ | -- this lifetime was captured
...
-LL | fn async_fn<'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>> + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ found `fn(&'1 Struct, &'2 [u8]) -> impl Future<Output = Vec<u8>> + '2`
+LL | ) -> impl Future<Output = Vec<u8>> + Captures2<'a, 'b> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: hidden type must only reference lifetimes captured by this impl trait
+ --> $DIR/signature-mismatch.rs:20:12
+ |
+LL | -> impl Future<Output = Vec<u8>> + Captures<'a>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: hidden type inferred to be `impl Future<Output = Vec<u8>> + Captures2<'a, 'b>`
+
+error[E0309]: the parameter type `T` may not live long enough
+ --> $DIR/signature-mismatch.rs:58:10
+ |
+LL | ) -> impl Future<Output = Vec<u8>> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `impl Future<Output = Vec<u8>>` will meet its required lifetime bounds...
+ |
+note: ...that is required by this bound
+ --> $DIR/signature-mismatch.rs:25:42
+ |
+LL | ) -> impl Future<Output = Vec<u8>> + 'a;
+ | ^^
+help: consider adding an explicit lifetime bound...
|
- = note: expected signature `fn(&'1 Struct, &'2 [u8]) -> impl Future<Output = Vec<u8>> + '3`
- found signature `fn(&'1 Struct, &'2 [u8]) -> impl Future<Output = Vec<u8>> + '2`
- = help: the lifetime requirements from the `impl` do not correspond to the requirements in the `trait`
- = help: verify the lifetime relationships in the `trait` and `impl` between the `self` argument, the other inputs and its output
+LL | fn async_fn_reduce_outlive<'a, 'b, T: 'a>(
+ | ++++
-error: aborting due to previous error
+error: aborting due to 4 previous errors
+For more information about this error, try `rustc --explain E0309`.
diff --git a/tests/ui/impl-trait/in-trait/signature-mismatch.next.stderr b/tests/ui/impl-trait/in-trait/signature-mismatch.next.stderr
index eba270af7..8c9dd4031 100644
--- a/tests/ui/impl-trait/in-trait/signature-mismatch.next.stderr
+++ b/tests/ui/impl-trait/in-trait/signature-mismatch.next.stderr
@@ -1,16 +1,61 @@
-error: `impl` item signature doesn't match `trait` item signature
- --> $DIR/signature-mismatch.rs:17:5
+error: return type captures more lifetimes than trait definition
+ --> $DIR/signature-mismatch.rs:36:47
+ |
+LL | fn async_fn<'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>> + 'a {
+ | -- this lifetime was captured ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: hidden type must only reference lifetimes captured by this impl trait
+ --> $DIR/signature-mismatch.rs:17:40
|
LL | fn async_fn(&self, buff: &[u8]) -> impl Future<Output = Vec<u8>>;
- | ----------------------------------------------------------------- expected `fn(&'1 Struct, &'2 [u8]) -> impl Future<Output = Vec<u8>> + '3`
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: hidden type inferred to be `impl Future<Output = Vec<u8>> + 'a`
+
+error: return type captures more lifetimes than trait definition
+ --> $DIR/signature-mismatch.rs:41:57
+ |
+LL | fn async_fn_early<'a: 'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>> + 'a {
+ | -- this lifetime was captured ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: hidden type must only reference lifetimes captured by this impl trait
+ --> $DIR/signature-mismatch.rs:18:57
+ |
+LL | fn async_fn_early<'a: 'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: hidden type inferred to be `impl Future<Output = Vec<u8>> + 'a`
+
+error: return type captures more lifetimes than trait definition
+ --> $DIR/signature-mismatch.rs:49:10
+ |
+LL | fn async_fn_multiple<'a, 'b>(
+ | -- this lifetime was captured
...
-LL | fn async_fn<'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>> + 'a {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ found `fn(&'1 Struct, &'2 [u8]) -> impl Future<Output = Vec<u8>> + '2`
+LL | ) -> impl Future<Output = Vec<u8>> + Captures2<'a, 'b> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: hidden type must only reference lifetimes captured by this impl trait
+ --> $DIR/signature-mismatch.rs:20:12
+ |
+LL | -> impl Future<Output = Vec<u8>> + Captures<'a>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: hidden type inferred to be `impl Future<Output = Vec<u8>> + Captures2<'a, 'b>`
+
+error[E0309]: the parameter type `T` may not live long enough
+ --> $DIR/signature-mismatch.rs:58:10
+ |
+LL | ) -> impl Future<Output = Vec<u8>> {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `impl Future<Output = Vec<u8>>` will meet its required lifetime bounds...
+ |
+note: ...that is required by this bound
+ --> $DIR/signature-mismatch.rs:25:42
+ |
+LL | ) -> impl Future<Output = Vec<u8>> + 'a;
+ | ^^
+help: consider adding an explicit lifetime bound...
|
- = note: expected signature `fn(&'1 Struct, &'2 [u8]) -> impl Future<Output = Vec<u8>> + '3`
- found signature `fn(&'1 Struct, &'2 [u8]) -> impl Future<Output = Vec<u8>> + '2`
- = help: the lifetime requirements from the `impl` do not correspond to the requirements in the `trait`
- = help: verify the lifetime relationships in the `trait` and `impl` between the `self` argument, the other inputs and its output
+LL | fn async_fn_reduce_outlive<'a, 'b, T: 'a>(
+ | ++++
-error: aborting due to previous error
+error: aborting due to 4 previous errors
+For more information about this error, try `rustc --explain E0309`.
diff --git a/tests/ui/impl-trait/in-trait/signature-mismatch.rs b/tests/ui/impl-trait/in-trait/signature-mismatch.rs
index 38c902a97..23dd71ace 100644
--- a/tests/ui/impl-trait/in-trait/signature-mismatch.rs
+++ b/tests/ui/impl-trait/in-trait/signature-mismatch.rs
@@ -7,17 +7,70 @@
use std::future::Future;
+trait Captures<'a> {}
+impl<T> Captures<'_> for T {}
+
+trait Captures2<'a, 'b> {}
+impl<T> Captures2<'_, '_> for T {}
+
pub trait AsyncTrait {
fn async_fn(&self, buff: &[u8]) -> impl Future<Output = Vec<u8>>;
+ fn async_fn_early<'a: 'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>>;
+ fn async_fn_multiple<'a>(&'a self, buff: &[u8])
+ -> impl Future<Output = Vec<u8>> + Captures<'a>;
+ fn async_fn_reduce_outlive<'a, T>(
+ &'a self,
+ buff: &[u8],
+ t: T,
+ ) -> impl Future<Output = Vec<u8>> + 'a;
+ fn async_fn_reduce<'a, T>(
+ &'a self,
+ buff: &[u8],
+ t: T,
+ ) -> impl Future<Output = Vec<u8>> + Captures<'a>;
}
pub struct Struct;
impl AsyncTrait for Struct {
fn async_fn<'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>> + 'a {
- //~^ ERROR `impl` item signature doesn't match `trait` item signature
+ //~^ ERROR return type captures more lifetimes than trait definition
+ async move { buff.to_vec() }
+ }
+
+ fn async_fn_early<'a: 'a>(&self, buff: &'a [u8]) -> impl Future<Output = Vec<u8>> + 'a {
+ //~^ ERROR return type captures more lifetimes than trait definition
+ async move { buff.to_vec() }
+ }
+
+ fn async_fn_multiple<'a, 'b>(
+ &'a self,
+ buff: &'b [u8],
+ ) -> impl Future<Output = Vec<u8>> + Captures2<'a, 'b> {
+ //~^ ERROR return type captures more lifetimes than trait definition
async move { buff.to_vec() }
}
+
+ fn async_fn_reduce_outlive<'a, 'b, T>(
+ &'a self,
+ buff: &'b [u8],
+ t: T,
+ ) -> impl Future<Output = Vec<u8>> {
+ //~^ ERROR the parameter type `T` may not live long enough
+ async move {
+ let _t = t;
+ vec![]
+ }
+ }
+
+ // OK: We remove the `Captures<'a>`, providing a guarantee that we don't capture `'a`,
+ // but we still fulfill the `Captures<'a>` trait bound.
+ fn async_fn_reduce<'a, 'b, T>(&'a self, buff: &'b [u8], t: T) -> impl Future<Output = Vec<u8>> {
+ async move {
+ let _t = t;
+ vec![]
+ }
+ }
}
fn main() {}
diff --git a/tests/ui/impl-trait/in-trait/suggest-missing-item.fixed b/tests/ui/impl-trait/in-trait/suggest-missing-item.fixed
new file mode 100644
index 000000000..d9f775a6c
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/suggest-missing-item.fixed
@@ -0,0 +1,25 @@
+// edition:2021
+// run-rustfix
+
+#![feature(async_fn_in_trait, return_position_impl_trait_in_trait)]
+
+trait Trait {
+ async fn foo();
+
+ async fn bar() -> i32;
+
+ fn test(&self) -> impl Sized + '_;
+
+ async fn baz(&self) -> &i32;
+}
+
+struct S;
+
+impl Trait for S {async fn baz(&self) -> &i32 { todo!() }
+fn test(&self) -> impl Sized + '_ { todo!() }
+async fn bar() -> i32 { todo!() }
+async fn foo() { todo!() }
+}
+//~^ ERROR not all trait items implemented
+
+fn main() {}
diff --git a/tests/ui/impl-trait/in-trait/suggest-missing-item.rs b/tests/ui/impl-trait/in-trait/suggest-missing-item.rs
new file mode 100644
index 000000000..26979b514
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/suggest-missing-item.rs
@@ -0,0 +1,21 @@
+// edition:2021
+// run-rustfix
+
+#![feature(async_fn_in_trait, return_position_impl_trait_in_trait)]
+
+trait Trait {
+ async fn foo();
+
+ async fn bar() -> i32;
+
+ fn test(&self) -> impl Sized + '_;
+
+ async fn baz(&self) -> &i32;
+}
+
+struct S;
+
+impl Trait for S {}
+//~^ ERROR not all trait items implemented
+
+fn main() {}
diff --git a/tests/ui/impl-trait/in-trait/suggest-missing-item.stderr b/tests/ui/impl-trait/in-trait/suggest-missing-item.stderr
new file mode 100644
index 000000000..44f98896e
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/suggest-missing-item.stderr
@@ -0,0 +1,21 @@
+error[E0046]: not all trait items implemented, missing: `foo`, `bar`, `test`, `baz`
+ --> $DIR/suggest-missing-item.rs:18:1
+ |
+LL | async fn foo();
+ | --------------- `foo` from trait
+LL |
+LL | async fn bar() -> i32;
+ | ---------------------- `bar` from trait
+LL |
+LL | fn test(&self) -> impl Sized + '_;
+ | ---------------------------------- `test` from trait
+LL |
+LL | async fn baz(&self) -> &i32;
+ | ---------------------------- `baz` from trait
+...
+LL | impl Trait for S {}
+ | ^^^^^^^^^^^^^^^^ missing `foo`, `bar`, `test`, `baz` in implementation
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0046`.
diff --git a/tests/ui/impl-trait/in-trait/unconstrained-lt.current.stderr b/tests/ui/impl-trait/in-trait/unconstrained-lt.current.stderr
new file mode 100644
index 000000000..bf088ae8b
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/unconstrained-lt.current.stderr
@@ -0,0 +1,9 @@
+error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates
+ --> $DIR/unconstrained-lt.rs:10:6
+ |
+LL | impl<'a, T> Foo for T {
+ | ^^ unconstrained lifetime parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/impl-trait/in-trait/unconstrained-lt.next.stderr b/tests/ui/impl-trait/in-trait/unconstrained-lt.next.stderr
new file mode 100644
index 000000000..bf088ae8b
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/unconstrained-lt.next.stderr
@@ -0,0 +1,9 @@
+error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates
+ --> $DIR/unconstrained-lt.rs:10:6
+ |
+LL | impl<'a, T> Foo for T {
+ | ^^ unconstrained lifetime parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0207`.
diff --git a/tests/ui/impl-trait/in-trait/unconstrained-lt.rs b/tests/ui/impl-trait/in-trait/unconstrained-lt.rs
new file mode 100644
index 000000000..f966be43a
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/unconstrained-lt.rs
@@ -0,0 +1,16 @@
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
+
+#![feature(return_position_impl_trait_in_trait)]
+
+trait Foo {
+ fn test() -> impl Sized;
+}
+
+impl<'a, T> Foo for T {
+ //~^ ERROR the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates
+
+ fn test() -> &'a () { &() }
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/in-trait/variances-of-gat.rs b/tests/ui/impl-trait/in-trait/variances-of-gat.rs
new file mode 100644
index 000000000..4008ece94
--- /dev/null
+++ b/tests/ui/impl-trait/in-trait/variances-of-gat.rs
@@ -0,0 +1,19 @@
+// check-pass
+// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
+// revisions: current next
+
+#![feature(return_position_impl_trait_in_trait)]
+
+trait Foo {}
+
+impl Foo for () {}
+
+trait ThreeCellFragment {
+ fn ext_cells<'a>(&'a self) -> impl Foo + 'a {
+ self.ext_adjacent_cells()
+ }
+
+ fn ext_adjacent_cells<'a>(&'a self) -> impl Foo + 'a;
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/in-trait/wf-bounds.current.stderr b/tests/ui/impl-trait/in-trait/wf-bounds.current.stderr
index 1a7071612..74c84c012 100644
--- a/tests/ui/impl-trait/in-trait/wf-bounds.current.stderr
+++ b/tests/ui/impl-trait/in-trait/wf-bounds.current.stderr
@@ -1,5 +1,5 @@
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
- --> $DIR/wf-bounds.rs:13:22
+ --> $DIR/wf-bounds.rs:17:22
|
LL | fn nya() -> impl Wf<Vec<[u8]>>;
| ^^^^^^^^^^^^^ doesn't have a size known at compile-time
@@ -9,14 +9,14 @@ note: required by a bound in `Vec`
--> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
- --> $DIR/wf-bounds.rs:16:23
+ --> $DIR/wf-bounds.rs:20:23
|
LL | fn nya2() -> impl Wf<[u8]>;
| ^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `Sized` is not implemented for `[u8]`
note: required by a bound in `Wf`
- --> $DIR/wf-bounds.rs:8:10
+ --> $DIR/wf-bounds.rs:10:10
|
LL | trait Wf<T> {
| ^ required by this bound in `Wf`
@@ -26,7 +26,7 @@ LL | trait Wf<T: ?Sized> {
| ++++++++
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
- --> $DIR/wf-bounds.rs:19:44
+ --> $DIR/wf-bounds.rs:23:44
|
LL | fn nya3() -> impl Wf<(), Output = impl Wf<Vec<[u8]>>>;
| ^^^^^^^^^^^^^ doesn't have a size known at compile-time
@@ -35,6 +35,23 @@ LL | fn nya3() -> impl Wf<(), Output = impl Wf<Vec<[u8]>>>;
note: required by a bound in `Vec`
--> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
-error: aborting due to 3 previous errors
+error[E0277]: `T` doesn't implement `std::fmt::Display`
+ --> $DIR/wf-bounds.rs:26:26
+ |
+LL | fn nya4<T>() -> impl Wf<NeedsDisplay<T>>;
+ | ^^^^^^^^^^^^^^^^^^^ `T` cannot be formatted with the default formatter
+ |
+ = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
+note: required by a bound in `NeedsDisplay`
+ --> $DIR/wf-bounds.rs:14:24
+ |
+LL | struct NeedsDisplay<T: Display>(T);
+ | ^^^^^^^ required by this bound in `NeedsDisplay`
+help: consider restricting type parameter `T`
+ |
+LL | fn nya4<T: std::fmt::Display>() -> impl Wf<NeedsDisplay<T>>;
+ | +++++++++++++++++++
+
+error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/impl-trait/in-trait/wf-bounds.next.stderr b/tests/ui/impl-trait/in-trait/wf-bounds.next.stderr
index 1a7071612..74c84c012 100644
--- a/tests/ui/impl-trait/in-trait/wf-bounds.next.stderr
+++ b/tests/ui/impl-trait/in-trait/wf-bounds.next.stderr
@@ -1,5 +1,5 @@
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
- --> $DIR/wf-bounds.rs:13:22
+ --> $DIR/wf-bounds.rs:17:22
|
LL | fn nya() -> impl Wf<Vec<[u8]>>;
| ^^^^^^^^^^^^^ doesn't have a size known at compile-time
@@ -9,14 +9,14 @@ note: required by a bound in `Vec`
--> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
- --> $DIR/wf-bounds.rs:16:23
+ --> $DIR/wf-bounds.rs:20:23
|
LL | fn nya2() -> impl Wf<[u8]>;
| ^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `Sized` is not implemented for `[u8]`
note: required by a bound in `Wf`
- --> $DIR/wf-bounds.rs:8:10
+ --> $DIR/wf-bounds.rs:10:10
|
LL | trait Wf<T> {
| ^ required by this bound in `Wf`
@@ -26,7 +26,7 @@ LL | trait Wf<T: ?Sized> {
| ++++++++
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
- --> $DIR/wf-bounds.rs:19:44
+ --> $DIR/wf-bounds.rs:23:44
|
LL | fn nya3() -> impl Wf<(), Output = impl Wf<Vec<[u8]>>>;
| ^^^^^^^^^^^^^ doesn't have a size known at compile-time
@@ -35,6 +35,23 @@ LL | fn nya3() -> impl Wf<(), Output = impl Wf<Vec<[u8]>>>;
note: required by a bound in `Vec`
--> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
-error: aborting due to 3 previous errors
+error[E0277]: `T` doesn't implement `std::fmt::Display`
+ --> $DIR/wf-bounds.rs:26:26
+ |
+LL | fn nya4<T>() -> impl Wf<NeedsDisplay<T>>;
+ | ^^^^^^^^^^^^^^^^^^^ `T` cannot be formatted with the default formatter
+ |
+ = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
+note: required by a bound in `NeedsDisplay`
+ --> $DIR/wf-bounds.rs:14:24
+ |
+LL | struct NeedsDisplay<T: Display>(T);
+ | ^^^^^^^ required by this bound in `NeedsDisplay`
+help: consider restricting type parameter `T`
+ |
+LL | fn nya4<T: std::fmt::Display>() -> impl Wf<NeedsDisplay<T>>;
+ | +++++++++++++++++++
+
+error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/impl-trait/in-trait/wf-bounds.rs b/tests/ui/impl-trait/in-trait/wf-bounds.rs
index 1c9590bd8..f8c1e561d 100644
--- a/tests/ui/impl-trait/in-trait/wf-bounds.rs
+++ b/tests/ui/impl-trait/in-trait/wf-bounds.rs
@@ -5,10 +5,14 @@
#![feature(return_position_impl_trait_in_trait)]
#![allow(incomplete_features)]
+use std::fmt::Display;
+
trait Wf<T> {
type Output;
}
+struct NeedsDisplay<T: Display>(T);
+
trait Uwu {
fn nya() -> impl Wf<Vec<[u8]>>;
//~^ ERROR the size for values of type `[u8]` cannot be known at compilation time
@@ -18,6 +22,9 @@ trait Uwu {
fn nya3() -> impl Wf<(), Output = impl Wf<Vec<[u8]>>>;
//~^ ERROR the size for values of type `[u8]` cannot be known at compilation time
+
+ fn nya4<T>() -> impl Wf<NeedsDisplay<T>>;
+ //~^ ERROR `T` doesn't implement `std::fmt::Display`
}
fn main() {}
diff --git a/tests/ui/impl-trait/issue-103181-2.rs b/tests/ui/impl-trait/issue-103181-2.rs
index b43ac4507..34deb98be 100644
--- a/tests/ui/impl-trait/issue-103181-2.rs
+++ b/tests/ui/impl-trait/issue-103181-2.rs
@@ -24,6 +24,8 @@ where
B: Send, // <- a second bound
{
normalize(broken_fut(), ());
+ //~^ ERROR: cannot check whether the hidden type of opaque type satisfies auto traits
+ //~| ERROR: cannot check whether the hidden type of opaque type satisfies auto traits
}
fn main() {}
diff --git a/tests/ui/impl-trait/issue-103181-2.stderr b/tests/ui/impl-trait/issue-103181-2.stderr
index 5eb2dd918..cb5253ea6 100644
--- a/tests/ui/impl-trait/issue-103181-2.stderr
+++ b/tests/ui/impl-trait/issue-103181-2.stderr
@@ -4,6 +4,61 @@ error[E0425]: cannot find value `ident_error` in this scope
LL | ident_error;
| ^^^^^^^^^^^ not found in this scope
-error: aborting due to previous error
+error: cannot check whether the hidden type of opaque type satisfies auto traits
+ --> $DIR/issue-103181-2.rs:26:15
+ |
+LL | normalize(broken_fut(), ());
+ | --------- ^^^^^^^^^^^^
+ | |
+ | required by a bound introduced by this call
+ |
+note: opaque type is declared here
+ --> $DIR/issue-103181-2.rs:11:23
+ |
+LL | async fn broken_fut() {
+ | ^
+note: this item depends on auto traits of the hidden type, but may also be registering the hidden type. This is not supported right now. You can try moving the opaque type and the item that actually registers a hidden type into a new submodule
+ --> $DIR/issue-103181-2.rs:20:10
+ |
+LL | async fn iceice<A, B>()
+ | ^^^^^^
+note: required for `impl Future<Output = ()>` to implement `SendFuture`
+ --> $DIR/issue-103181-2.rs:7:17
+ |
+LL | impl<Fut: Send> SendFuture for Fut {
+ | ---- ^^^^^^^^^^ ^^^
+ | |
+ | unsatisfied trait bound introduced here
+note: required by a bound in `normalize`
+ --> $DIR/issue-103181-2.rs:18:19
+ |
+LL | fn normalize<Fut: SendFuture>(_: Fut, _: Fut::Output) {}
+ | ^^^^^^^^^^ required by this bound in `normalize`
+
+error: cannot check whether the hidden type of opaque type satisfies auto traits
+ --> $DIR/issue-103181-2.rs:26:5
+ |
+LL | normalize(broken_fut(), ());
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: opaque type is declared here
+ --> $DIR/issue-103181-2.rs:11:23
+ |
+LL | async fn broken_fut() {
+ | ^
+note: this item depends on auto traits of the hidden type, but may also be registering the hidden type. This is not supported right now. You can try moving the opaque type and the item that actually registers a hidden type into a new submodule
+ --> $DIR/issue-103181-2.rs:20:10
+ |
+LL | async fn iceice<A, B>()
+ | ^^^^^^
+note: required for `impl Future<Output = ()>` to implement `SendFuture`
+ --> $DIR/issue-103181-2.rs:7:17
+ |
+LL | impl<Fut: Send> SendFuture for Fut {
+ | ---- ^^^^^^^^^^ ^^^
+ | |
+ | unsatisfied trait bound introduced here
+
+error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/impl-trait/issue-55872-3.rs b/tests/ui/impl-trait/issue-55872-3.rs
index d031271ac..7490a1308 100644
--- a/tests/ui/impl-trait/issue-55872-3.rs
+++ b/tests/ui/impl-trait/issue-55872-3.rs
@@ -1,5 +1,4 @@
// edition:2018
-// ignore-compare-mode-chalk
#![feature(impl_trait_in_assoc_type)]
diff --git a/tests/ui/impl-trait/issue-55872-3.stderr b/tests/ui/impl-trait/issue-55872-3.stderr
index c6e10f0f3..827988974 100644
--- a/tests/ui/impl-trait/issue-55872-3.stderr
+++ b/tests/ui/impl-trait/issue-55872-3.stderr
@@ -1,8 +1,8 @@
-error[E0277]: the trait bound `[async block@$DIR/issue-55872-3.rs:16:9: 16:17]: Copy` is not satisfied
- --> $DIR/issue-55872-3.rs:14:20
+error[E0277]: the trait bound `[async block@$DIR/issue-55872-3.rs:15:9: 15:17]: Copy` is not satisfied
+ --> $DIR/issue-55872-3.rs:13:20
|
LL | fn foo<T>() -> Self::E {
- | ^^^^^^^ the trait `Copy` is not implemented for `[async block@$DIR/issue-55872-3.rs:16:9: 16:17]`
+ | ^^^^^^^ the trait `Copy` is not implemented for `[async block@$DIR/issue-55872-3.rs:15:9: 15:17]`
error: aborting due to previous error
diff --git a/tests/ui/impl-trait/issues/issue-65581.rs b/tests/ui/impl-trait/issues/issue-65581.rs
index b947fc1d2..af65b79d3 100644
--- a/tests/ui/impl-trait/issues/issue-65581.rs
+++ b/tests/ui/impl-trait/issues/issue-65581.rs
@@ -1,5 +1,4 @@
// check-pass
-// ignore-compare-mode-chalk
#![allow(dead_code)]
diff --git a/tests/ui/impl-trait/issues/issue-70877.rs b/tests/ui/impl-trait/issues/issue-70877.rs
index 8169cfafa..df7722986 100644
--- a/tests/ui/impl-trait/issues/issue-70877.rs
+++ b/tests/ui/impl-trait/issues/issue-70877.rs
@@ -25,12 +25,12 @@ fn ham() -> Foo {
Bar(1)
}
-fn oof() -> impl std::fmt::Debug {
+fn oof(_: Foo) -> impl std::fmt::Debug {
let mut bar = ham();
let func = bar.next().unwrap();
return func(&"oof"); //~ ERROR opaque type's hidden type cannot be another opaque type
}
fn main() {
- let _ = oof();
+ let _ = oof(ham());
}
diff --git a/tests/ui/impl-trait/issues/issue-70877.stderr b/tests/ui/impl-trait/issues/issue-70877.stderr
index 8813bff3c..ee140e6f6 100644
--- a/tests/ui/impl-trait/issues/issue-70877.stderr
+++ b/tests/ui/impl-trait/issues/issue-70877.stderr
@@ -5,10 +5,10 @@ LL | return func(&"oof");
| ^^^^^^^^^^^^ one of the two opaque types used here has to be outside its defining scope
|
note: opaque type whose hidden type is being assigned
- --> $DIR/issue-70877.rs:28:13
+ --> $DIR/issue-70877.rs:28:19
|
-LL | fn oof() -> impl std::fmt::Debug {
- | ^^^^^^^^^^^^^^^^^^^^
+LL | fn oof(_: Foo) -> impl std::fmt::Debug {
+ | ^^^^^^^^^^^^^^^^^^^^
note: opaque type being used as hidden type
--> $DIR/issue-70877.rs:4:15
|
diff --git a/tests/ui/impl-trait/issues/issue-74282.rs b/tests/ui/impl-trait/issues/issue-74282.rs
index 654de0cd0..51bd5f67e 100644
--- a/tests/ui/impl-trait/issues/issue-74282.rs
+++ b/tests/ui/impl-trait/issues/issue-74282.rs
@@ -3,9 +3,12 @@
type Closure = impl Fn() -> u64;
struct Anonymous(Closure);
-fn main() {
+fn bop(_: Closure) {
let y = || -> Closure { || 3 };
- Anonymous(|| { //~ ERROR mismatched types
- 3 //~^ ERROR mismatched types
+ Anonymous(|| {
+ //~^ ERROR mismatched types
+ 3 //~^^ ERROR mismatched types
})
}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/issues/issue-74282.stderr b/tests/ui/impl-trait/issues/issue-74282.stderr
index 724f3c5d6..d43e9fee0 100644
--- a/tests/ui/impl-trait/issues/issue-74282.stderr
+++ b/tests/ui/impl-trait/issues/issue-74282.stderr
@@ -8,6 +8,7 @@ LL | Anonymous(|| {
| _____---------_^
| | |
| | arguments to this struct are incorrect
+LL | |
LL | | 3
LL | | })
| |_____^ expected opaque type, found closure
@@ -25,15 +26,20 @@ LL | struct Anonymous(Closure);
error[E0308]: mismatched types
--> $DIR/issue-74282.rs:8:5
|
-LL | fn main() {
- | - expected `()` because of default return type
-LL | let y = || -> Closure { || 3 };
LL | / Anonymous(|| {
+LL | |
LL | | 3
LL | | })
- | | ^- help: consider using a semicolon here: `;`
- | |______|
- | expected `()`, found `Anonymous`
+ | |______^ expected `()`, found `Anonymous`
+ |
+help: consider using a semicolon here
+ |
+LL | });
+ | +
+help: try adding a return type
+ |
+LL | fn bop(_: Closure) -> Anonymous {
+ | ++++++++++++
error: aborting due to 2 previous errors
diff --git a/tests/ui/impl-trait/issues/issue-78722-2.rs b/tests/ui/impl-trait/issues/issue-78722-2.rs
new file mode 100644
index 000000000..cf5361e1e
--- /dev/null
+++ b/tests/ui/impl-trait/issues/issue-78722-2.rs
@@ -0,0 +1,22 @@
+//! test that we cannot register hidden types for opaque types
+//! declared outside an anonymous constant.
+// edition:2018
+
+#![feature(type_alias_impl_trait)]
+
+type F = impl core::future::Future<Output = u8>;
+
+struct Bug {
+ V1: [(); {
+ fn concrete_use() -> F {
+ //~^ ERROR future that resolves to `u8`, but it resolves to `()`
+ async {}
+ }
+ let f: F = async { 1 };
+ //~^ ERROR item constrains opaque type that is not in its signature
+ //~| ERROR `async` blocks are not allowed in constants
+ 1
+ }],
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/issues/issue-78722-2.stderr b/tests/ui/impl-trait/issues/issue-78722-2.stderr
new file mode 100644
index 000000000..6db603e77
--- /dev/null
+++ b/tests/ui/impl-trait/issues/issue-78722-2.stderr
@@ -0,0 +1,32 @@
+error[E0658]: `async` blocks are not allowed in constants
+ --> $DIR/issue-78722-2.rs:15:20
+ |
+LL | let f: F = async { 1 };
+ | ^^^^^^^^^^^
+ |
+ = note: see issue #85368 <https://github.com/rust-lang/rust/issues/85368> for more information
+ = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable
+
+error[E0271]: expected `[async block@$DIR/issue-78722-2.rs:13:13: 13:21]` to be a future that resolves to `u8`, but it resolves to `()`
+ --> $DIR/issue-78722-2.rs:11:30
+ |
+LL | fn concrete_use() -> F {
+ | ^ expected `()`, found `u8`
+
+error: item constrains opaque type that is not in its signature
+ --> $DIR/issue-78722-2.rs:15:20
+ |
+LL | let f: F = async { 1 };
+ | ^^^^^^^^^^^
+ |
+ = note: this item must mention the opaque type in its signature in order to be able to register hidden types
+note: this item must mention the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/issue-78722-2.rs:15:20
+ |
+LL | let f: F = async { 1 };
+ | ^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0271, E0658.
+For more information about an error, try `rustc --explain E0271`.
diff --git a/tests/ui/impl-trait/issues/issue-78722.rs b/tests/ui/impl-trait/issues/issue-78722.rs
index 7b5ab5f22..75ccc8d8e 100644
--- a/tests/ui/impl-trait/issues/issue-78722.rs
+++ b/tests/ui/impl-trait/issues/issue-78722.rs
@@ -2,10 +2,9 @@
#![feature(type_alias_impl_trait)]
-type F = impl core::future::Future<Output = u8>;
-
struct Bug {
V1: [(); {
+ type F = impl core::future::Future<Output = u8>;
fn concrete_use() -> F {
//~^ ERROR to be a future that resolves to `u8`, but it resolves to `()`
async {}
diff --git a/tests/ui/impl-trait/issues/issue-78722.stderr b/tests/ui/impl-trait/issues/issue-78722.stderr
index 05a2c135c..36340a0ba 100644
--- a/tests/ui/impl-trait/issues/issue-78722.stderr
+++ b/tests/ui/impl-trait/issues/issue-78722.stderr
@@ -1,5 +1,5 @@
error[E0658]: `async` blocks are not allowed in constants
- --> $DIR/issue-78722.rs:13:20
+ --> $DIR/issue-78722.rs:12:20
|
LL | let f: F = async { 1 };
| ^^^^^^^^^^^
@@ -7,8 +7,8 @@ LL | let f: F = async { 1 };
= note: see issue #85368 <https://github.com/rust-lang/rust/issues/85368> for more information
= help: add `#![feature(const_async_blocks)]` to the crate attributes to enable
-error[E0271]: expected `[async block@$DIR/issue-78722.rs:11:13: 11:21]` to be a future that resolves to `u8`, but it resolves to `()`
- --> $DIR/issue-78722.rs:9:30
+error[E0271]: expected `[async block@$DIR/issue-78722.rs:10:13: 10:21]` to be a future that resolves to `u8`, but it resolves to `()`
+ --> $DIR/issue-78722.rs:8:30
|
LL | fn concrete_use() -> F {
| ^ expected `()`, found `u8`
diff --git a/tests/ui/impl-trait/multiple-defining-usages-in-body.rs b/tests/ui/impl-trait/multiple-defining-usages-in-body.rs
index c3a6f09f8..86661153a 100644
--- a/tests/ui/impl-trait/multiple-defining-usages-in-body.rs
+++ b/tests/ui/impl-trait/multiple-defining-usages-in-body.rs
@@ -4,9 +4,9 @@ impl Trait for () {}
fn foo<T: Trait, U: Trait>() -> impl Trait {
//~^ WARN function cannot return without recursing [unconditional_recursion]
let a: T = foo::<T, U>();
- //~^ ERROR concrete type differs from previous defining opaque type use
loop {}
let _: T = foo::<U, T>();
+ //~^ ERROR concrete type differs from previous defining opaque type use
}
fn main() {}
diff --git a/tests/ui/impl-trait/multiple-defining-usages-in-body.stderr b/tests/ui/impl-trait/multiple-defining-usages-in-body.stderr
index 06991749b..f3c090408 100644
--- a/tests/ui/impl-trait/multiple-defining-usages-in-body.stderr
+++ b/tests/ui/impl-trait/multiple-defining-usages-in-body.stderr
@@ -11,15 +11,15 @@ LL | let a: T = foo::<T, U>();
= note: `#[warn(unconditional_recursion)]` on by default
error: concrete type differs from previous defining opaque type use
- --> $DIR/multiple-defining-usages-in-body.rs:6:16
+ --> $DIR/multiple-defining-usages-in-body.rs:8:16
|
-LL | let a: T = foo::<T, U>();
- | ^^^^^^^^^^^^^ expected `U`, got `T`
+LL | let _: T = foo::<U, T>();
+ | ^^^^^^^^^^^^^ expected `T`, got `U`
|
note: previous use here
- --> $DIR/multiple-defining-usages-in-body.rs:9:16
+ --> $DIR/multiple-defining-usages-in-body.rs:6:16
|
-LL | let _: T = foo::<U, T>();
+LL | let a: T = foo::<T, U>();
| ^^^^^^^^^^^^^
error: aborting due to previous error; 1 warning emitted
diff --git a/tests/ui/impl-trait/nested-return-type2-tait.stderr b/tests/ui/impl-trait/nested-return-type2-tait.stderr
index a8eb69cfc..4383e8ab3 100644
--- a/tests/ui/impl-trait/nested-return-type2-tait.stderr
+++ b/tests/ui/impl-trait/nested-return-type2-tait.stderr
@@ -8,10 +8,6 @@ LL | fn foo() -> impl Trait<Assoc = Sendable> {
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(opaque_hidden_inferred_bound)]` on by default
-help: add this bound
- |
-LL | type Sendable = impl Send + Duh;
- | +++++
warning: 1 warning emitted
diff --git a/tests/ui/impl-trait/nested-return-type3-tait.stderr b/tests/ui/impl-trait/nested-return-type3-tait.stderr
index 5f58c8dca..d32944a0d 100644
--- a/tests/ui/impl-trait/nested-return-type3-tait.stderr
+++ b/tests/ui/impl-trait/nested-return-type3-tait.stderr
@@ -8,10 +8,6 @@ LL | fn foo() -> impl Trait<Assoc = Sendable> {
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(opaque_hidden_inferred_bound)]` on by default
-help: add this bound
- |
-LL | type Sendable = impl Send + Duh;
- | +++++
warning: 1 warning emitted
diff --git a/tests/ui/impl-trait/nested-return-type3-tait2.stderr b/tests/ui/impl-trait/nested-return-type3-tait2.stderr
index c07f6ead7..a2eddd116 100644
--- a/tests/ui/impl-trait/nested-return-type3-tait2.stderr
+++ b/tests/ui/impl-trait/nested-return-type3-tait2.stderr
@@ -8,10 +8,6 @@ LL | type Traitable = impl Trait<Assoc = Sendable>;
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(opaque_hidden_inferred_bound)]` on by default
-help: add this bound
- |
-LL | type Sendable = impl Send + Duh;
- | +++++
warning: 1 warning emitted
diff --git a/tests/ui/impl-trait/normalize-opaque-with-bound-vars.rs b/tests/ui/impl-trait/normalize-opaque-with-bound-vars.rs
new file mode 100644
index 000000000..1025c2c7e
--- /dev/null
+++ b/tests/ui/impl-trait/normalize-opaque-with-bound-vars.rs
@@ -0,0 +1,27 @@
+// build-pass
+// edition:2021
+// compile-flags: -Cdebuginfo=2
+
+// We were not normalizing opaques with escaping bound vars during codegen,
+// leading to later linker errors because of differences in mangled symbol name.
+
+fn func<T>() -> impl Sized {}
+
+trait Trait<'a> {
+ type Assoc;
+
+ fn call() {
+ let _ = async {
+ let _value = func::<Self::Assoc>();
+ std::future::ready(()).await
+ };
+ }
+}
+
+impl Trait<'static> for () {
+ type Assoc = ();
+}
+
+fn main() {
+ <()>::call();
+}
diff --git a/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.rs b/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.rs
index af9dfe25b..01c933473 100644
--- a/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.rs
+++ b/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.rs
@@ -1,5 +1,7 @@
#![feature(type_alias_impl_trait)]
+// check-pass
+
type Foo = impl PartialEq<(Foo, i32)>;
struct Bar;
@@ -11,7 +13,6 @@ impl PartialEq<(Foo, i32)> for Bar {
}
fn foo() -> Foo {
- //~^ ERROR can't compare `Bar` with `(Bar, i32)`
Bar
}
diff --git a/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.stderr b/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.stderr
deleted file mode 100644
index 7b63a3d0b..000000000
--- a/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle-2.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0277]: can't compare `Bar` with `(Bar, i32)`
- --> $DIR/recursive-type-alias-impl-trait-declaration-too-subtle-2.rs:13:13
- |
-LL | fn foo() -> Foo {
- | ^^^ no implementation for `Bar == (Bar, i32)`
-LL |
-LL | Bar
- | --- return type was inferred to be `Bar` here
- |
- = help: the trait `PartialEq<(Bar, i32)>` is not implemented for `Bar`
- = help: the trait `PartialEq<(Foo, i32)>` is implemented for `Bar`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle.stderr b/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle.stderr
index fe62a8f32..fe765271b 100644
--- a/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle.stderr
+++ b/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration-too-subtle.stderr
@@ -44,10 +44,10 @@ LL | fn eq(&self, _other: &(Bar, i32)) -> bool {
= note: expected signature `fn(&b::Bar, &(b::Foo, i32)) -> _`
found signature `fn(&b::Bar, &(b::Bar, i32)) -> _`
note: this item must have the opaque type in its signature in order to be able to register hidden types
- --> $DIR/recursive-type-alias-impl-trait-declaration-too-subtle.rs:24:9
+ --> $DIR/recursive-type-alias-impl-trait-declaration-too-subtle.rs:24:12
|
LL | fn eq(&self, _other: &(Bar, i32)) -> bool {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^
error: aborting due to 4 previous errors
diff --git a/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.rs b/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.rs
index ad0a003e8..aab10be2d 100644
--- a/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.rs
+++ b/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.rs
@@ -1,5 +1,3 @@
-// check-pass
-
#![feature(type_alias_impl_trait)]
type Foo = impl PartialEq<(Foo, i32)>;
@@ -13,6 +11,7 @@ impl PartialEq<(Bar, i32)> for Bar {
}
fn foo() -> Foo {
+ //~^ ERROR can't compare `Bar` with `(Foo, i32)`
Bar
}
diff --git a/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.stderr b/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.stderr
new file mode 100644
index 000000000..b98b859a9
--- /dev/null
+++ b/tests/ui/impl-trait/recursive-type-alias-impl-trait-declaration.stderr
@@ -0,0 +1,15 @@
+error[E0277]: can't compare `Bar` with `(Foo, i32)`
+ --> $DIR/recursive-type-alias-impl-trait-declaration.rs:13:13
+ |
+LL | fn foo() -> Foo {
+ | ^^^ no implementation for `Bar == (Foo, i32)`
+LL |
+LL | Bar
+ | --- return type was inferred to be `Bar` here
+ |
+ = help: the trait `PartialEq<(Foo, i32)>` is not implemented for `Bar`
+ = help: the trait `PartialEq<(Bar, i32)>` is implemented for `Bar`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/impl-trait/reveal-during-codegen.rs b/tests/ui/impl-trait/reveal-during-codegen.rs
new file mode 100644
index 000000000..11463772e
--- /dev/null
+++ b/tests/ui/impl-trait/reveal-during-codegen.rs
@@ -0,0 +1,11 @@
+// build-pass
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
+
+fn test() -> Option<impl Sized> {
+ Some("")
+}
+
+fn main() {
+ test();
+}
diff --git a/tests/ui/impl-trait/static-lifetime-return-position-impl-trait.rs b/tests/ui/impl-trait/static-lifetime-return-position-impl-trait.rs
new file mode 100644
index 000000000..98dbaf036
--- /dev/null
+++ b/tests/ui/impl-trait/static-lifetime-return-position-impl-trait.rs
@@ -0,0 +1,12 @@
+// check-pass
+
+#![allow(incomplete_features)]
+#![feature(adt_const_params, return_position_impl_trait_in_trait)]
+
+pub struct Element;
+
+pub trait Node {
+ fn elements<const T: &'static str>(&self) -> impl Iterator<Item = Element>;
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/universal_wrong_hrtb.rs b/tests/ui/impl-trait/universal_wrong_hrtb.rs
index b9551c2ce..485617101 100644
--- a/tests/ui/impl-trait/universal_wrong_hrtb.rs
+++ b/tests/ui/impl-trait/universal_wrong_hrtb.rs
@@ -3,6 +3,6 @@ trait Trait<'a> {
}
fn test_argument_position(x: impl for<'a> Trait<'a, Assoc = impl Copy + 'a>) {}
-//~^ ERROR `impl Trait` can only mention lifetimes bound at the fn or impl level
+//~^ ERROR `impl Trait` can only mention lifetimes from an fn or impl
fn main() {}
diff --git a/tests/ui/impl-trait/universal_wrong_hrtb.stderr b/tests/ui/impl-trait/universal_wrong_hrtb.stderr
index 37eb8dfa1..b5a091b61 100644
--- a/tests/ui/impl-trait/universal_wrong_hrtb.stderr
+++ b/tests/ui/impl-trait/universal_wrong_hrtb.stderr
@@ -1,14 +1,8 @@
-error: `impl Trait` can only mention lifetimes bound at the fn or impl level
+error: `impl Trait` can only mention lifetimes from an fn or impl
--> $DIR/universal_wrong_hrtb.rs:5:73
|
LL | fn test_argument_position(x: impl for<'a> Trait<'a, Assoc = impl Copy + 'a>) {}
- | ^^
- |
-note: lifetime declared here
- --> $DIR/universal_wrong_hrtb.rs:5:39
- |
-LL | fn test_argument_position(x: impl for<'a> Trait<'a, Assoc = impl Copy + 'a>) {}
- | ^^
+ | -- lifetime declared here ^^
error: aborting due to previous error
diff --git a/tests/ui/implied-bounds/implied-bounds-unconstrained-1.rs b/tests/ui/implied-bounds/implied-bounds-unconstrained-1.rs
new file mode 100644
index 000000000..025e5176f
--- /dev/null
+++ b/tests/ui/implied-bounds/implied-bounds-unconstrained-1.rs
@@ -0,0 +1,28 @@
+// check-pass
+
+// Regression test for #112832.
+pub trait QueryDb {
+ type Db;
+}
+
+pub struct QueryTable<Q, DB> {
+ db: DB,
+ storage: Q,
+}
+
+// We normalize `<Q as QueryDb>::Db` to `<Q as AsyncQueryFunction<'d>>::SendDb`
+// using the where-bound. 'd is an unconstrained region variable which previously
+// triggered an assert.
+impl<Q> QueryTable<Q, <Q as QueryDb>::Db> where Q: for<'d> AsyncQueryFunction<'d> {}
+
+pub trait AsyncQueryFunction<'d>: QueryDb<Db = <Self as AsyncQueryFunction<'d>>::SendDb> {
+ type SendDb: 'd;
+}
+
+pub trait QueryStorageOpsAsync<Q>
+where
+ Q: for<'d> AsyncQueryFunction<'d>,
+{
+}
+
+fn main() {}
diff --git a/tests/ui/implied-bounds/implied-bounds-unconstrained-2.rs b/tests/ui/implied-bounds/implied-bounds-unconstrained-2.rs
new file mode 100644
index 000000000..976054fac
--- /dev/null
+++ b/tests/ui/implied-bounds/implied-bounds-unconstrained-2.rs
@@ -0,0 +1,20 @@
+// check-pass
+
+// Another minimized regression test for #112832.
+trait Trait {
+ type Assoc;
+}
+
+trait Sub<'a>: Trait<Assoc = <Self as Sub<'a>>::SubAssoc> {
+ type SubAssoc;
+}
+
+// By using the where-clause we normalize `<T as Trait>::Assoc` to
+// `<T as Sub<'a>>::SubAssoc` where `'a` is an unconstrained region
+// variable.
+fn foo<T>(x: <T as Trait>::Assoc)
+where
+ for<'a> T: Sub<'a>,
+{}
+
+fn main() {}
diff --git a/tests/ui/implied-bounds/references-err.rs b/tests/ui/implied-bounds/references-err.rs
new file mode 100644
index 000000000..203d512e3
--- /dev/null
+++ b/tests/ui/implied-bounds/references-err.rs
@@ -0,0 +1,22 @@
+trait Identity {
+ type Identity;
+}
+impl<T> Identity for T {
+ type Identity = T;
+}
+
+trait Trait {
+ type Assoc: Identity;
+ fn tokenize(&self) -> <Self::Assoc as Identity>::Identity;
+}
+
+impl Trait for () {
+ type Assoc = DoesNotExist;
+ //~^ ERROR cannot find type `DoesNotExist` in this scope
+
+ fn tokenize(&self) -> <Self::Assoc as Identity>::Identity {
+ unimplemented!()
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/implied-bounds/references-err.stderr b/tests/ui/implied-bounds/references-err.stderr
new file mode 100644
index 000000000..6076eea3c
--- /dev/null
+++ b/tests/ui/implied-bounds/references-err.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `DoesNotExist` in this scope
+ --> $DIR/references-err.rs:14:18
+ |
+LL | type Assoc = DoesNotExist;
+ | ^^^^^^^^^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/tests/ui/imports/auxiliary/issue-85992-extern-1.rs b/tests/ui/imports/auxiliary/issue-85992-extern-1.rs
new file mode 100644
index 000000000..a2d0e2060
--- /dev/null
+++ b/tests/ui/imports/auxiliary/issue-85992-extern-1.rs
@@ -0,0 +1,6 @@
+#[macro_export]
+macro_rules! m {
+ () => {
+ use issue_85992_extern_2::Outcome;
+ }
+}
diff --git a/tests/ui/imports/auxiliary/issue-85992-extern-2.rs b/tests/ui/imports/auxiliary/issue-85992-extern-2.rs
new file mode 100644
index 000000000..e9b6a44cf
--- /dev/null
+++ b/tests/ui/imports/auxiliary/issue-85992-extern-2.rs
@@ -0,0 +1 @@
+// nothing
diff --git a/tests/ui/imports/issue-55884-2.rs b/tests/ui/imports/issue-55884-2.rs
index 75bb4206f..6f8d0cf8a 100644
--- a/tests/ui/imports/issue-55884-2.rs
+++ b/tests/ui/imports/issue-55884-2.rs
@@ -6,6 +6,7 @@ mod parser {
pub use options::*;
// Private single import shadows public glob import, but arrives too late for initial
// resolution of `use parser::ParseOptions` because it depends on that resolution itself.
+ #[allow(hidden_glob_reexports)]
use ParseOptions;
}
diff --git a/tests/ui/imports/issue-55884-2.stderr b/tests/ui/imports/issue-55884-2.stderr
index 5adbc4b66..67d411414 100644
--- a/tests/ui/imports/issue-55884-2.stderr
+++ b/tests/ui/imports/issue-55884-2.stderr
@@ -1,16 +1,16 @@
error[E0603]: struct import `ParseOptions` is private
- --> $DIR/issue-55884-2.rs:12:17
+ --> $DIR/issue-55884-2.rs:13:17
|
LL | pub use parser::ParseOptions;
| ^^^^^^^^^^^^ private struct import
|
note: the struct import `ParseOptions` is defined here...
- --> $DIR/issue-55884-2.rs:9:9
+ --> $DIR/issue-55884-2.rs:10:9
|
LL | use ParseOptions;
| ^^^^^^^^^^^^
note: ...and refers to the struct import `ParseOptions` which is defined here...
- --> $DIR/issue-55884-2.rs:12:9
+ --> $DIR/issue-55884-2.rs:13:9
|
LL | pub use parser::ParseOptions;
| ^^^^^^^^^^^^^^^^^^^^ consider importing it directly
diff --git a/tests/ui/imports/issue-56125.stderr b/tests/ui/imports/issue-56125.stderr
index 3448f3119..15477fb6f 100644
--- a/tests/ui/imports/issue-56125.stderr
+++ b/tests/ui/imports/issue-56125.stderr
@@ -22,7 +22,7 @@ error[E0659]: `issue_56125` is ambiguous
LL | use issue_56125::last_segment::*;
| ^^^^^^^^^^^ ambiguous name
|
- = note: ambiguous because of multiple potential import sources
+ = note: ambiguous because of a conflict between a name from a glob import and an outer scope during import or macro resolution
= note: `issue_56125` could refer to a crate passed with `--extern`
= help: use `::issue_56125` to refer to this crate unambiguously
note: `issue_56125` could also refer to the module imported here
@@ -30,7 +30,8 @@ note: `issue_56125` could also refer to the module imported here
|
LL | use issue_56125::last_segment::*;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- = help: use `self::issue_56125` to refer to this module unambiguously
+ = help: consider adding an explicit import of `issue_56125` to disambiguate
+ = help: or use `self::issue_56125` to refer to this module unambiguously
error[E0659]: `issue_56125` is ambiguous
--> $DIR/issue-56125.rs:11:9
@@ -38,7 +39,7 @@ error[E0659]: `issue_56125` is ambiguous
LL | use issue_56125::non_last_segment::non_last_segment::*;
| ^^^^^^^^^^^ ambiguous name
|
- = note: ambiguous because of multiple potential import sources
+ = note: ambiguous because of a conflict between a name from a glob import and an outer scope during import or macro resolution
= note: `issue_56125` could refer to a crate passed with `--extern`
= help: use `::issue_56125` to refer to this crate unambiguously
note: `issue_56125` could also refer to the module imported here
@@ -46,7 +47,8 @@ note: `issue_56125` could also refer to the module imported here
|
LL | use issue_56125::non_last_segment::non_last_segment::*;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- = help: use `self::issue_56125` to refer to this module unambiguously
+ = help: consider adding an explicit import of `issue_56125` to disambiguate
+ = help: or use `self::issue_56125` to refer to this module unambiguously
error[E0659]: `issue_56125` is ambiguous
--> $DIR/issue-56125.rs:18:9
@@ -54,7 +56,7 @@ error[E0659]: `issue_56125` is ambiguous
LL | use issue_56125::*;
| ^^^^^^^^^^^ ambiguous name
|
- = note: ambiguous because of multiple potential import sources
+ = note: ambiguous because of a conflict between a name from a glob import and an outer scope during import or macro resolution
= note: `issue_56125` could refer to a crate passed with `--extern`
= help: use `::issue_56125` to refer to this crate unambiguously
note: `issue_56125` could also refer to the module imported here
@@ -62,7 +64,8 @@ note: `issue_56125` could also refer to the module imported here
|
LL | use issue_56125::*;
| ^^^^^^^^^^^^^^
- = help: use `self::issue_56125` to refer to this module unambiguously
+ = help: consider adding an explicit import of `issue_56125` to disambiguate
+ = help: or use `self::issue_56125` to refer to this module unambiguously
error: aborting due to 4 previous errors
diff --git a/tests/ui/imports/issue-57539.stderr b/tests/ui/imports/issue-57539.stderr
index 1a3ca4eda..88cc42ccf 100644
--- a/tests/ui/imports/issue-57539.stderr
+++ b/tests/ui/imports/issue-57539.stderr
@@ -4,7 +4,7 @@ error[E0659]: `core` is ambiguous
LL | use core;
| ^^^^ ambiguous name
|
- = note: ambiguous because of multiple potential import sources
+ = note: ambiguous because of a conflict between a name from a glob import and an outer scope during import or macro resolution
= note: `core` could refer to a built-in crate
= help: use `::core` to refer to this crate unambiguously
note: `core` could also refer to the module imported here
@@ -12,7 +12,8 @@ note: `core` could also refer to the module imported here
|
LL | use crate::*;
| ^^^^^^^^
- = help: use `self::core` to refer to this module unambiguously
+ = help: consider adding an explicit import of `core` to disambiguate
+ = help: or use `self::core` to refer to this module unambiguously
error: aborting due to previous error
diff --git a/tests/ui/imports/issue-85992.rs b/tests/ui/imports/issue-85992.rs
new file mode 100644
index 000000000..d55241091
--- /dev/null
+++ b/tests/ui/imports/issue-85992.rs
@@ -0,0 +1,11 @@
+// edition: 2021
+// compile-flags: --extern issue_85992_extern_1 --extern issue_85992_extern_2
+// aux-build: issue-85992-extern-1.rs
+// aux-build: issue-85992-extern-2.rs
+
+issue_85992_extern_1::m!();
+
+use crate::issue_85992_extern_2;
+//~^ ERROR unresolved import `crate::issue_85992_extern_2`
+
+fn main() {}
diff --git a/tests/ui/imports/issue-85992.stderr b/tests/ui/imports/issue-85992.stderr
new file mode 100644
index 000000000..810d41009
--- /dev/null
+++ b/tests/ui/imports/issue-85992.stderr
@@ -0,0 +1,9 @@
+error[E0432]: unresolved import `crate::issue_85992_extern_2`
+ --> $DIR/issue-85992.rs:8:5
+ |
+LL | use crate::issue_85992_extern_2;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `issue_85992_extern_2` in the root
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0432`.
diff --git a/tests/ui/inference/deref-suggestion.stderr b/tests/ui/inference/deref-suggestion.stderr
index c58aab422..096989db0 100644
--- a/tests/ui/inference/deref-suggestion.stderr
+++ b/tests/ui/inference/deref-suggestion.stderr
@@ -84,15 +84,16 @@ LL | fn foo3(_: u32) {}
| ^^^^ ------
error[E0308]: mismatched types
- --> $DIR/deref-suggestion.rs:37:5
+ --> $DIR/deref-suggestion.rs:37:22
|
LL | assert_eq!(3i32, &3i32);
- | ^^^^^^^^^^^^^^^^^^^^^^^
- | |
- | expected `i32`, found `&i32`
- | expected because this is `i32`
+ | ^^^^^ expected `i32`, found `&i32`
+ |
+help: consider removing the borrow
+ |
+LL - assert_eq!(3i32, &3i32);
+LL + assert_eq!(3i32, 3i32);
|
- = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0308]: mismatched types
--> $DIR/deref-suggestion.rs:40:17
diff --git a/tests/ui/inline-const/elided-lifetime-being-infer-vars.rs b/tests/ui/inline-const/elided-lifetime-being-infer-vars.rs
new file mode 100644
index 000000000..5661db4a2
--- /dev/null
+++ b/tests/ui/inline-const/elided-lifetime-being-infer-vars.rs
@@ -0,0 +1,11 @@
+// check-pass
+
+#![feature(inline_const)]
+
+fn main() {
+ let _my_usize = const {
+ let a = 10_usize;
+ let b: &'_ usize = &a;
+ *b
+ };
+}
diff --git a/tests/ui/intrinsics/panic-uninitialized-zeroed.rs b/tests/ui/intrinsics/panic-uninitialized-zeroed.rs
index 1a0104b85..6db2ebb97 100644
--- a/tests/ui/intrinsics/panic-uninitialized-zeroed.rs
+++ b/tests/ui/intrinsics/panic-uninitialized-zeroed.rs
@@ -391,7 +391,7 @@ fn main() {
let _val = mem::zeroed::<ZeroIsValid>();
let _val = mem::uninitialized::<MaybeUninit<bool>>();
let _val = mem::uninitialized::<[!; 0]>();
- let _val = mem::uninitialized::<()>();
+ let _val: () = mem::uninitialized::<()>();
let _val = mem::uninitialized::<ZeroSized>();
}
}
diff --git a/tests/ui/issues/issue-100605.stderr b/tests/ui/issues/issue-100605.stderr
index be30eef2a..6f11f4475 100644
--- a/tests/ui/issues/issue-100605.stderr
+++ b/tests/ui/issues/issue-100605.stderr
@@ -13,10 +13,6 @@ note: function defined here
|
LL | fn takes_option(_arg: Option<&String>) {}
| ^^^^^^^^^^^^ ---------------------
-help: you can convert from `&Option<T>` to `Option<&T>` using `.as_ref()`
- |
-LL | takes_option(None.as_ref());
- | ~~~~~~~~~~~~~
help: consider removing the borrow
|
LL - takes_option(&None);
@@ -27,10 +23,8 @@ error[E0308]: mismatched types
--> $DIR/issue-100605.rs:8:18
|
LL | takes_option(&res);
- | ------------ ^^^^
- | | |
- | | expected `Option<&String>`, found `&Option<String>`
- | | help: you can convert from `&Option<T>` to `Option<&T>` using `.as_ref()`: `res.as_ref()`
+ | ------------ ^^^^ expected `Option<&String>`, found `&Option<String>`
+ | |
| arguments to this function are incorrect
|
= note: expected enum `Option<&String>`
@@ -40,6 +34,11 @@ note: function defined here
|
LL | fn takes_option(_arg: Option<&String>) {}
| ^^^^^^^^^^^^ ---------------------
+help: try using `.as_ref()` to convert `&Option<String>` to `Option<&String>`
+ |
+LL - takes_option(&res);
+LL + takes_option(res.as_ref());
+ |
error: aborting due to 2 previous errors
diff --git a/tests/ui/issues/issue-11047.rs b/tests/ui/issues/issue-11047.rs
index 1fb2b5bb3..7a4acea45 100644
--- a/tests/ui/issues/issue-11047.rs
+++ b/tests/ui/issues/issue-11047.rs
@@ -18,8 +18,8 @@ pub mod foo {
fn main() {
type Ham = foo::bar::baz::Qux;
- let foo = foo::bar::baz::Qux::new(); // invoke directly
- let bar = Ham::new(); // invoke via type alias
+ let foo: () = foo::bar::baz::Qux::new(); // invoke directly
+ let bar: () = Ham::new(); // invoke via type alias
type StringVec = Vec<String>;
let sv = StringVec::new();
diff --git a/tests/ui/issues/issue-11680.stderr b/tests/ui/issues/issue-11680.stderr
index ea224af8e..5bcf93de8 100644
--- a/tests/ui/issues/issue-11680.stderr
+++ b/tests/ui/issues/issue-11680.stderr
@@ -2,7 +2,9 @@ error[E0603]: enum `Foo` is private
--> $DIR/issue-11680.rs:6:21
|
LL | let _b = other::Foo::Bar(1);
- | ^^^ private enum
+ | ^^^ --- tuple variant `Bar` is not publicly re-exported
+ | |
+ | private enum
|
note: the enum `Foo` is defined here
--> $DIR/auxiliary/issue-11680.rs:1:1
@@ -14,7 +16,9 @@ error[E0603]: enum `Foo` is private
--> $DIR/issue-11680.rs:9:27
|
LL | let _b = other::test::Foo::Bar(1);
- | ^^^ private enum
+ | ^^^ --- tuple variant `Bar` is not publicly re-exported
+ | |
+ | private enum
|
note: the enum `Foo` is defined here
--> $DIR/auxiliary/issue-11680.rs:6:5
diff --git a/tests/ui/issues/issue-11709.rs b/tests/ui/issues/issue-11709.rs
index 58424f9e4..2d6956649 100644
--- a/tests/ui/issues/issue-11709.rs
+++ b/tests/ui/issues/issue-11709.rs
@@ -10,7 +10,7 @@ struct S {x:()}
fn test(slot: &mut Option<Box<dyn FnMut() -> Box<dyn FnMut()>>>) -> () {
let a = slot.take();
- let _a = match a {
+ let _a: () = match a {
// `{let .. a(); }` would break
Some(mut a) => { let _a = a(); },
None => (),
@@ -28,7 +28,7 @@ fn not(b: bool) -> bool {
pub fn main() {
// {} would break
- let _r = {};
+ let _r: () = {};
let mut slot = None;
// `{ test(...); }` would break
let _s : S = S{ x: { test(&mut slot); } };
diff --git a/tests/ui/issues/issue-11740.rs b/tests/ui/issues/issue-11740.rs
index 9faeb7770..fa80f509b 100644
--- a/tests/ui/issues/issue-11740.rs
+++ b/tests/ui/issues/issue-11740.rs
@@ -24,5 +24,5 @@ impl Element {
fn main() {
let element = Element { attrs: Vec::new() };
- let _ = unsafe { element.get_attr("foo") };
+ unsafe { let () = element.get_attr("foo"); };
}
diff --git a/tests/ui/issues/issue-11771.stderr b/tests/ui/issues/issue-11771.stderr
index 161fce4b0..b37140f60 100644
--- a/tests/ui/issues/issue-11771.stderr
+++ b/tests/ui/issues/issue-11771.stderr
@@ -6,14 +6,14 @@ LL | 1 +
|
= help: the trait `Add<()>` is not implemented for `{integer}`
= help: the following other types implement trait `Add<Rhs>`:
- <&'a f32 as Add<f32>>
- <&'a f64 as Add<f64>>
- <&'a i128 as Add<i128>>
- <&'a i16 as Add<i16>>
- <&'a i32 as Add<i32>>
- <&'a i64 as Add<i64>>
- <&'a i8 as Add<i8>>
- <&'a isize as Add<isize>>
+ <isize as Add>
+ <isize as Add<&isize>>
+ <i8 as Add>
+ <i8 as Add<&i8>>
+ <i16 as Add>
+ <i16 as Add<&i16>>
+ <i32 as Add>
+ <i32 as Add<&i32>>
and 48 others
error[E0277]: cannot add `()` to `{integer}`
@@ -24,14 +24,14 @@ LL | 1 +
|
= help: the trait `Add<()>` is not implemented for `{integer}`
= help: the following other types implement trait `Add<Rhs>`:
- <&'a f32 as Add<f32>>
- <&'a f64 as Add<f64>>
- <&'a i128 as Add<i128>>
- <&'a i16 as Add<i16>>
- <&'a i32 as Add<i32>>
- <&'a i64 as Add<i64>>
- <&'a i8 as Add<i8>>
- <&'a isize as Add<isize>>
+ <isize as Add>
+ <isize as Add<&isize>>
+ <i8 as Add>
+ <i8 as Add<&i8>>
+ <i16 as Add>
+ <i16 as Add<&i16>>
+ <i32 as Add>
+ <i32 as Add<&i32>>
and 48 others
error: aborting due to 2 previous errors
diff --git a/tests/ui/issues/issue-12133-3.rs b/tests/ui/issues/issue-12133-3.rs
index e6b16e2da..988b61e3b 100644
--- a/tests/ui/issues/issue-12133-3.rs
+++ b/tests/ui/issues/issue-12133-3.rs
@@ -4,7 +4,7 @@
// aux-build:issue-12133-dylib2.rs
// ignore-emscripten no dylib support
// ignore-musl
-// ignore-sgx no dylib support
+// needs-dynamic-linking
// pretty-expanded FIXME #23616
diff --git a/tests/ui/issues/issue-13167.rs b/tests/ui/issues/issue-13167.rs
index 8584c98de..9a9f129ec 100644
--- a/tests/ui/issues/issue-13167.rs
+++ b/tests/ui/issues/issue-13167.rs
@@ -1,5 +1,7 @@
// check-pass
// pretty-expanded FIXME #23616
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
use std::slice;
diff --git a/tests/ui/issues/issue-1460.stderr b/tests/ui/issues/issue-1460.stderr
index eb7661fad..d4a8c8955 100644
--- a/tests/ui/issues/issue-1460.stderr
+++ b/tests/ui/issues/issue-1460.stderr
@@ -1,8 +1,8 @@
warning: unused closure that must be used
- --> $DIR/issue-1460.rs:6:5
+ --> $DIR/issue-1460.rs:6:6
|
LL | {|i: u32| if 1 == i { }};
- | ^^^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^^^^^^^^^^^^^^^^^^^^
|
= note: closures are lazy and do nothing unless called
= note: `#[warn(unused_must_use)]` on by default
diff --git a/tests/ui/issues/issue-15734.rs b/tests/ui/issues/issue-15734.rs
index be5820606..27410d4c3 100644
--- a/tests/ui/issues/issue-15734.rs
+++ b/tests/ui/issues/issue-15734.rs
@@ -1,6 +1,6 @@
// run-pass
-// If `Index` used an associated type for its output, this test would
-// work more smoothly.
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
use std::ops::Index;
diff --git a/tests/ui/issues/issue-17954.stderr b/tests/ui/issues/issue-17954.stderr
index e08375fee..3e3706bcb 100644
--- a/tests/ui/issues/issue-17954.stderr
+++ b/tests/ui/issues/issue-17954.stderr
@@ -5,7 +5,7 @@ LL | let a = &FOO;
| ^^^^ thread-local variables cannot be borrowed beyond the end of the function
...
LL | }
- | - end of enclosing function is here
+ | - end of enclosing function is here
error: aborting due to previous error
diff --git a/tests/ui/issues/issue-18389.rs b/tests/ui/issues/issue-18389.rs
index 654dfb63b..05a5decf4 100644
--- a/tests/ui/issues/issue-18389.rs
+++ b/tests/ui/issues/issue-18389.rs
@@ -1,3 +1,10 @@
+#![feature(type_privacy_lints)]
+#![warn(private_bounds)]
+
+// In this test both old and new private-in-public diagnostic were emitted.
+// Old diagnostic will be deleted soon.
+// See https://rust-lang.github.io/rfcs/2145-type-privacy.html.
+
use std::any::Any;
use std::any::TypeId;
@@ -6,6 +13,7 @@ trait Private<P, R> {
}
pub trait Public: Private<
//~^ ERROR private trait `Private<<Self as Public>::P, <Self as Public>::R>` in public interface
+//~| WARNING trait `Private<<Self as Public>::P, <Self as Public>::R>` is more private than the item `Public`
<Self as Public>::P,
<Self as Public>::R
> {
diff --git a/tests/ui/issues/issue-18389.stderr b/tests/ui/issues/issue-18389.stderr
index 6ce78c45d..18ffc4177 100644
--- a/tests/ui/issues/issue-18389.stderr
+++ b/tests/ui/issues/issue-18389.stderr
@@ -1,16 +1,39 @@
error[E0445]: private trait `Private<<Self as Public>::P, <Self as Public>::R>` in public interface
- --> $DIR/issue-18389.rs:7:1
+ --> $DIR/issue-18389.rs:14:1
|
LL | trait Private<P, R> {
| ------------------- `Private<<Self as Public>::P, <Self as Public>::R>` declared as private
...
LL | / pub trait Public: Private<
LL | |
+LL | |
LL | | <Self as Public>::P,
LL | | <Self as Public>::R
LL | | > {
| |_^ can't leak private trait
-error: aborting due to previous error
+warning: trait `Private<<Self as Public>::P, <Self as Public>::R>` is more private than the item `Public`
+ --> $DIR/issue-18389.rs:14:1
+ |
+LL | / pub trait Public: Private<
+LL | |
+LL | |
+LL | | <Self as Public>::P,
+LL | | <Self as Public>::R
+LL | | > {
+ | |_^ trait `Public` is reachable at visibility `pub`
+ |
+note: but trait `Private<<Self as Public>::P, <Self as Public>::R>` is only usable at visibility `pub(crate)`
+ --> $DIR/issue-18389.rs:11:1
+ |
+LL | trait Private<P, R> {
+ | ^^^^^^^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/issue-18389.rs:2:9
+ |
+LL | #![warn(private_bounds)]
+ | ^^^^^^^^^^^^^^
+
+error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0445`.
diff --git a/tests/ui/issues/issue-20605.rs b/tests/ui/issues/issue-20605.rs
deleted file mode 100644
index 17b7d32eb..000000000
--- a/tests/ui/issues/issue-20605.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-fn changer<'a>(mut things: Box<dyn Iterator<Item=&'a mut u8>>) {
- for item in *things { *item = 0 }
-//~^ ERROR the size for values of type
-}
-
-fn main() {}
diff --git a/tests/ui/issues/issue-20644.rs b/tests/ui/issues/issue-20644.rs
index 1b90727fb..a3a9ea740 100644
--- a/tests/ui/issues/issue-20644.rs
+++ b/tests/ui/issues/issue-20644.rs
@@ -26,7 +26,7 @@ fn foo() {
let cwd = env::current_dir().unwrap();
let src = cwd.clone();
let summary = File::open(&src.join("SUMMARY.md")).unwrap();
- let _ = parse_summary(summary, &src);
+ parse_summary(summary, &src);
}
fn main() {}
diff --git a/tests/ui/issues/issue-23808.rs b/tests/ui/issues/issue-23808.rs
index 0988b09fc..b10682521 100644
--- a/tests/ui/issues/issue-23808.rs
+++ b/tests/ui/issues/issue-23808.rs
@@ -45,14 +45,14 @@ impl_Const!(ConstStruct, ConstEnum, AliasedConstStruct, AliasedConstEnum);
impl_StaticFn!(StaticFnStruct, StaticFnEnum, AliasedStaticFnStruct, AliasedStaticFnEnum);
fn main() {
- let _ = ConstStruct::C;
- let _ = ConstEnum::C;
+ let () = ConstStruct::C;
+ let () = ConstEnum::C;
StaticFnStruct::sfn();
StaticFnEnum::sfn();
- let _ = AliasConstStruct::C;
- let _ = AliasConstEnum::C;
+ let () = AliasConstStruct::C;
+ let () = AliasConstEnum::C;
AliasStaticFnStruct::sfn();
AliasStaticFnEnum::sfn();
diff --git a/tests/ui/issues/issue-24352.stderr b/tests/ui/issues/issue-24352.stderr
index 1f51b6e29..f1c3891b8 100644
--- a/tests/ui/issues/issue-24352.stderr
+++ b/tests/ui/issues/issue-24352.stderr
@@ -6,10 +6,10 @@ LL | 1.0f64 - 1
|
= help: the trait `Sub<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Sub<Rhs>`:
+ <f64 as Sub>
+ <f64 as Sub<&f64>>
<&'a f64 as Sub<f64>>
<&f64 as Sub<&f64>>
- <f64 as Sub<&f64>>
- <f64 as Sub>
help: consider using a floating-point literal by writing it with `.0`
|
LL | 1.0f64 - 1.0
diff --git a/tests/ui/issues/issue-32709.stderr b/tests/ui/issues/issue-32709.stderr
index a4ba5da4d..94e8f9295 100644
--- a/tests/ui/issues/issue-32709.stderr
+++ b/tests/ui/issues/issue-32709.stderr
@@ -8,6 +8,7 @@ LL | Err(5)?;
|
= note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
= help: the following other types implement trait `From<T>`:
+ <(T,) as From<[T; 1]>>
<(T, T) as From<[T; 2]>>
<(T, T, T) as From<[T; 3]>>
<(T, T, T, T) as From<[T; 4]>>
@@ -15,7 +16,6 @@ LL | Err(5)?;
<(T, T, T, T, T, T) as From<[T; 6]>>
<(T, T, T, T, T, T, T) as From<[T; 7]>>
<(T, T, T, T, T, T, T, T) as From<[T; 8]>>
- <(T, T, T, T, T, T, T, T, T) as From<[T; 9]>>
and 4 others
= note: required for `Result<i32, ()>` to implement `FromResidual<Result<Infallible, {integer}>>`
diff --git a/tests/ui/issues/issue-35570.rs b/tests/ui/issues/issue-35570.rs
index a2b0222d4..42bdb423f 100644
--- a/tests/ui/issues/issue-35570.rs
+++ b/tests/ui/issues/issue-35570.rs
@@ -7,7 +7,6 @@ trait Trait2<'a> {
fn _ice(param: Box<dyn for <'a> Trait1<<() as Trait2<'a>>::Ty>>) {
//~^ ERROR the trait bound `for<'a> (): Trait2<'a>` is not satisfied
- //~| ERROR the trait bound `for<'a> (): Trait2<'a>` is not satisfied
let _e: (usize, usize) = unsafe{mem::transmute(param)};
}
diff --git a/tests/ui/issues/issue-35570.stderr b/tests/ui/issues/issue-35570.stderr
index 3dc33729d..2697d46bd 100644
--- a/tests/ui/issues/issue-35570.stderr
+++ b/tests/ui/issues/issue-35570.stderr
@@ -4,16 +4,6 @@ error[E0277]: the trait bound `for<'a> (): Trait2<'a>` is not satisfied
LL | fn _ice(param: Box<dyn for <'a> Trait1<<() as Trait2<'a>>::Ty>>) {
| ^^^^^^^^^^^^^^^^^^^^^^ the trait `for<'a> Trait2<'a>` is not implemented for `()`
-error[E0277]: the trait bound `for<'a> (): Trait2<'a>` is not satisfied
- --> $DIR/issue-35570.rs:8:1
- |
-LL | / fn _ice(param: Box<dyn for <'a> Trait1<<() as Trait2<'a>>::Ty>>) {
-LL | |
-LL | |
-LL | | let _e: (usize, usize) = unsafe{mem::transmute(param)};
-LL | | }
- | |_^ the trait `for<'a> Trait2<'a>` is not implemented for `()`
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-37311-type-length-limit/issue-37311.rs b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.rs
index 50d1f166c..c109be005 100644
--- a/tests/ui/issues/issue-37311-type-length-limit/issue-37311.rs
+++ b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.rs
@@ -1,5 +1,6 @@
// build-fail
// normalize-stderr-test: ".nll/" -> "/"
+// ignore-compare-mode-next-solver (hangs)
trait Mirror {
type Image;
diff --git a/tests/ui/issues/issue-37311-type-length-limit/issue-37311.stderr b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.stderr
index 5b8299fe8..87832dd29 100644
--- a/tests/ui/issues/issue-37311-type-length-limit/issue-37311.stderr
+++ b/tests/ui/issues/issue-37311-type-length-limit/issue-37311.stderr
@@ -1,11 +1,11 @@
error: reached the recursion limit while instantiating `<(&(&(..., ...), ...), ...) as Foo>::recurse`
- --> $DIR/issue-37311.rs:17:9
+ --> $DIR/issue-37311.rs:18:9
|
LL | (self, self).recurse();
| ^^^^^^^^^^^^^^^^^^^^^^
|
note: `<T as Foo>::recurse` defined here
- --> $DIR/issue-37311.rs:16:5
+ --> $DIR/issue-37311.rs:17:5
|
LL | fn recurse(&self) {
| ^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/issues/issue-50582.stderr b/tests/ui/issues/issue-50582.stderr
index 3d527eb6b..9eafd7ab4 100644
--- a/tests/ui/issues/issue-50582.stderr
+++ b/tests/ui/issues/issue-50582.stderr
@@ -15,14 +15,14 @@ LL | Vec::<[(); 1 + for x in 0..1 {}]>::new();
|
= help: the trait `Add<()>` is not implemented for `{integer}`
= help: the following other types implement trait `Add<Rhs>`:
- <&'a f32 as Add<f32>>
- <&'a f64 as Add<f64>>
- <&'a i128 as Add<i128>>
- <&'a i16 as Add<i16>>
- <&'a i32 as Add<i32>>
- <&'a i64 as Add<i64>>
- <&'a i8 as Add<i8>>
- <&'a isize as Add<isize>>
+ <isize as Add>
+ <isize as Add<&isize>>
+ <i8 as Add>
+ <i8 as Add<&i8>>
+ <i16 as Add>
+ <i16 as Add<&i16>>
+ <i32 as Add>
+ <i32 as Add<&i32>>
and 48 others
error: aborting due to 2 previous errors
diff --git a/tests/ui/issues/issue-50811.rs b/tests/ui/issues/issue-50811.rs
index 683c85604..2a20e50fa 100644
--- a/tests/ui/issues/issue-50811.rs
+++ b/tests/ui/issues/issue-50811.rs
@@ -1,5 +1,6 @@
// run-pass
#![feature(test)]
+#![allow(invalid_nan_comparisons)]
extern crate test;
diff --git a/tests/ui/issues/issue-51714.rs b/tests/ui/issues/issue-51714.rs
index 8716524d6..03b50b796 100644
--- a/tests/ui/issues/issue-51714.rs
+++ b/tests/ui/issues/issue-51714.rs
@@ -1,9 +1,9 @@
fn main() {
-//~^ NOTE: not the enclosing function body
-//~| NOTE: not the enclosing function body
-//~| NOTE: not the enclosing function body
-//~| NOTE: not the enclosing function body
- |_: [_; return || {}] | {};
+ //~^ NOTE: not the enclosing function body
+ //~| NOTE: not the enclosing function body
+ //~| NOTE: not the enclosing function body
+ //~| NOTE: not the enclosing function body
+ |_: [_; return || {}]| {};
//~^ ERROR: return statement outside of function body [E0572]
//~| NOTE: the return is part of this body...
diff --git a/tests/ui/issues/issue-51714.stderr b/tests/ui/issues/issue-51714.stderr
index 514d69c1c..e53e10afc 100644
--- a/tests/ui/issues/issue-51714.stderr
+++ b/tests/ui/issues/issue-51714.stderr
@@ -1,13 +1,13 @@
error[E0572]: return statement outside of function body
- --> $DIR/issue-51714.rs:6:14
+ --> $DIR/issue-51714.rs:6:13
|
LL | / fn main() {
LL | |
LL | |
LL | |
LL | |
-LL | | |_: [_; return || {}] | {};
- | | ^^^^^^^^^^^^ the return is part of this body...
+LL | | |_: [_; return || {}]| {};
+ | | ^^^^^^^^^^^^ the return is part of this body...
... |
LL | |
LL | | }
diff --git a/tests/ui/issues/issue-52049.stderr b/tests/ui/issues/issue-52049.stderr
index b25dbd1cb..0812976cf 100644
--- a/tests/ui/issues/issue-52049.stderr
+++ b/tests/ui/issues/issue-52049.stderr
@@ -2,12 +2,10 @@ error[E0716]: temporary value dropped while borrowed
--> $DIR/issue-52049.rs:6:10
|
LL | foo(&unpromotable(5u32));
- | -----^^^^^^^^^^^^^^^^^^-
+ | -----^^^^^^^^^^^^^^^^^^-- temporary value is freed at the end of this statement
| | |
| | creates a temporary value which is freed while still in use
| argument requires that borrow lasts for `'static`
-LL | }
- | - temporary value is freed at the end of this statement
error: aborting due to previous error
diff --git a/tests/ui/issues/issue-5439.stderr b/tests/ui/issues/issue-5439.stderr
index dc8f8b878..a91e4b31f 100644
--- a/tests/ui/issues/issue-5439.stderr
+++ b/tests/ui/issues/issue-5439.stderr
@@ -4,7 +4,7 @@ error[E0560]: struct `Foo` has no field named `nonexistent`
LL | return Box::new(Foo { nonexistent: self, foo: i });
| ^^^^^^^^^^^ `Foo` does not have this field
|
- = note: available fields are: `foo`
+ = note: all struct fields are already assigned
error: aborting due to previous error
diff --git a/tests/ui/issues/issue-5883.rs b/tests/ui/issues/issue-5883.rs
index 82866b355..f9dd2c54d 100644
--- a/tests/ui/issues/issue-5883.rs
+++ b/tests/ui/issues/issue-5883.rs
@@ -6,7 +6,7 @@ struct Struct {
fn new_struct(
r: dyn A + 'static //~ ERROR the size for values of type
-) -> Struct { //~ ERROR the size for values of type
+) -> Struct {
Struct { r: r }
}
diff --git a/tests/ui/issues/issue-5883.stderr b/tests/ui/issues/issue-5883.stderr
index ffff403e0..a3e2531b5 100644
--- a/tests/ui/issues/issue-5883.stderr
+++ b/tests/ui/issues/issue-5883.stderr
@@ -15,22 +15,6 @@ help: function arguments must have a statically known size, borrowed types alway
LL | r: &dyn A + 'static
| +
-error[E0277]: the size for values of type `(dyn A + 'static)` cannot be known at compilation time
- --> $DIR/issue-5883.rs:9:6
- |
-LL | ) -> Struct {
- | ^^^^^^ doesn't have a size known at compile-time
-LL | Struct { r: r }
- | --------------- this returned value is of type `Struct`
- |
- = help: within `Struct`, the trait `Sized` is not implemented for `(dyn A + 'static)`
-note: required because it appears within the type `Struct`
- --> $DIR/issue-5883.rs:3:8
- |
-LL | struct Struct {
- | ^^^^^^
- = note: the return type of a function must have a statically known size
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-67552.rs b/tests/ui/issues/issue-67552.rs
index ec1997ccd..7336b873d 100644
--- a/tests/ui/issues/issue-67552.rs
+++ b/tests/ui/issues/issue-67552.rs
@@ -1,6 +1,7 @@
// build-fail
// compile-flags: -Copt-level=0
// normalize-stderr-test: ".nll/" -> "/"
+// ignore-compare-mode-next-solver (hangs)
fn main() {
rec(Empty);
diff --git a/tests/ui/issues/issue-67552.stderr b/tests/ui/issues/issue-67552.stderr
index 4746f918b..f93ed67da 100644
--- a/tests/ui/issues/issue-67552.stderr
+++ b/tests/ui/issues/issue-67552.stderr
@@ -1,11 +1,11 @@
error: reached the recursion limit while instantiating `rec::<&mut &mut &mut &mut &mut ...>`
- --> $DIR/issue-67552.rs:29:9
+ --> $DIR/issue-67552.rs:30:9
|
LL | rec(identity(&mut it))
| ^^^^^^^^^^^^^^^^^^^^^^
|
note: `rec` defined here
- --> $DIR/issue-67552.rs:22:1
+ --> $DIR/issue-67552.rs:23:1
|
LL | / fn rec<T>(mut it: T)
LL | | where
diff --git a/tests/ui/issues/issue-85461.rs b/tests/ui/issues/issue-85461.rs
index 965510887..092105df2 100644
--- a/tests/ui/issues/issue-85461.rs
+++ b/tests/ui/issues/issue-85461.rs
@@ -1,6 +1,7 @@
// compile-flags: -Cinstrument-coverage -Ccodegen-units=4 --crate-type dylib -Copt-level=0
// build-pass
// needs-profiler-support
+// needs-dynamic-linking
// Regression test for #85461 where MSVC sometimes fails to link instrument-coverage binaries
// with dead code and #[inline(always)].
diff --git a/tests/ui/iterators/invalid-iterator-chain-with-int-infer.stderr b/tests/ui/iterators/invalid-iterator-chain-with-int-infer.stderr
index 3cb5e44c7..7f1b9c38e 100644
--- a/tests/ui/iterators/invalid-iterator-chain-with-int-infer.stderr
+++ b/tests/ui/iterators/invalid-iterator-chain-with-int-infer.stderr
@@ -6,8 +6,8 @@ LL | let x = Some(()).iter().map(|()| 1).sum::<f32>();
|
= help: the trait `Sum<{integer}>` is not implemented for `f32`
= help: the following other types implement trait `Sum<A>`:
- <f32 as Sum<&'a f32>>
<f32 as Sum>
+ <f32 as Sum<&'a f32>>
note: the method call chain might not have had the expected associated types
--> $DIR/invalid-iterator-chain-with-int-infer.rs:2:29
|
diff --git a/tests/ui/iterators/invalid-iterator-chain.stderr b/tests/ui/iterators/invalid-iterator-chain.stderr
index f3dceca7e..a2688107d 100644
--- a/tests/ui/iterators/invalid-iterator-chain.stderr
+++ b/tests/ui/iterators/invalid-iterator-chain.stderr
@@ -24,8 +24,8 @@ LL | println!("{}", scores.sum::<i32>());
|
= help: the trait `Sum<()>` is not implemented for `i32`
= help: the following other types implement trait `Sum<A>`:
- <i32 as Sum<&'a i32>>
<i32 as Sum>
+ <i32 as Sum<&'a i32>>
note: the method call chain might not have had the expected associated types
--> $DIR/invalid-iterator-chain.rs:12:10
|
@@ -49,8 +49,8 @@ LL | .sum::<i32>(),
|
= help: the trait `Sum<()>` is not implemented for `i32`
= help: the following other types implement trait `Sum<A>`:
- <i32 as Sum<&'a i32>>
<i32 as Sum>
+ <i32 as Sum<&'a i32>>
note: the method call chain might not have had the expected associated types
--> $DIR/invalid-iterator-chain.rs:25:14
|
@@ -81,8 +81,8 @@ LL | .sum::<i32>(),
|
= help: the trait `Sum<f64>` is not implemented for `i32`
= help: the following other types implement trait `Sum<A>`:
- <i32 as Sum<&'a i32>>
<i32 as Sum>
+ <i32 as Sum<&'a i32>>
note: the method call chain might not have had the expected associated types
--> $DIR/invalid-iterator-chain.rs:33:14
|
@@ -109,8 +109,8 @@ LL | println!("{}", vec![0, 1].iter().map(|x| { x; }).sum::<i32>());
|
= help: the trait `Sum<()>` is not implemented for `i32`
= help: the following other types implement trait `Sum<A>`:
- <i32 as Sum<&'a i32>>
<i32 as Sum>
+ <i32 as Sum<&'a i32>>
note: the method call chain might not have had the expected associated types
--> $DIR/invalid-iterator-chain.rs:38:38
|
@@ -130,8 +130,8 @@ LL | println!("{}", vec![(), ()].iter().sum::<i32>());
|
= help: the trait `Sum<&()>` is not implemented for `i32`
= help: the following other types implement trait `Sum<A>`:
- <i32 as Sum<&'a i32>>
<i32 as Sum>
+ <i32 as Sum<&'a i32>>
note: the method call chain might not have had the expected associated types
--> $DIR/invalid-iterator-chain.rs:39:33
|
diff --git a/tests/ui/iterators/issue-58952-filter-type-length.rs b/tests/ui/iterators/issue-58952-filter-type-length.rs
index 6d12db8d1..8e9cc84ec 100644
--- a/tests/ui/iterators/issue-58952-filter-type-length.rs
+++ b/tests/ui/iterators/issue-58952-filter-type-length.rs
@@ -1,4 +1,6 @@
// run-pass
+// ignore-compare-mode-next-solver (hangs)
+
//! This snippet causes the type length to blowup exponentially,
//! so check that we don't accidentally exceed the type length limit.
// FIXME: Once the size of iterator adaptors is further reduced,
diff --git a/tests/ui/layout/cannot-transmute-unnormalizable-type.rs b/tests/ui/layout/cannot-transmute-unnormalizable-type.rs
new file mode 100644
index 000000000..d2b6e1d8e
--- /dev/null
+++ b/tests/ui/layout/cannot-transmute-unnormalizable-type.rs
@@ -0,0 +1,22 @@
+trait Trait {
+ type RefTarget;
+}
+
+impl Trait for ()
+where
+ Missing: Trait,
+ //~^ ERROR cannot find type `Missing` in this scope
+{
+ type RefTarget = ();
+}
+
+struct Other {
+ data: <() as Trait>::RefTarget,
+}
+
+fn main() {
+ unsafe {
+ std::mem::transmute::<Option<()>, Option<&Other>>(None);
+ //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
+ }
+}
diff --git a/tests/ui/layout/cannot-transmute-unnormalizable-type.stderr b/tests/ui/layout/cannot-transmute-unnormalizable-type.stderr
new file mode 100644
index 000000000..dd5119318
--- /dev/null
+++ b/tests/ui/layout/cannot-transmute-unnormalizable-type.stderr
@@ -0,0 +1,19 @@
+error[E0412]: cannot find type `Missing` in this scope
+ --> $DIR/cannot-transmute-unnormalizable-type.rs:7:5
+ |
+LL | Missing: Trait,
+ | ^^^^^^^ not found in this scope
+
+error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
+ --> $DIR/cannot-transmute-unnormalizable-type.rs:19:9
+ |
+LL | std::mem::transmute::<Option<()>, Option<&Other>>(None);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: source type: `Option<()>` (8 bits)
+ = note: target type: `Option<&Other>` (unable to determine layout for `Other` because `<() as Trait>::RefTarget` cannot be normalized)
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0412, E0512.
+For more information about an error, try `rustc --explain E0412`.
diff --git a/tests/ui/let-else/let-else-ref-bindings.stderr b/tests/ui/let-else/let-else-ref-bindings.stderr
index ada1805e7..0886d7f17 100644
--- a/tests/ui/let-else/let-else-ref-bindings.stderr
+++ b/tests/ui/let-else/let-else-ref-bindings.stderr
@@ -6,6 +6,10 @@ LL | let Some(ref a): Option<&[u8]> = some else { return };
|
= note: expected enum `Option<&[u8]>`
found enum `Option<Vec<u8>>`
+help: try using `.as_deref()` to convert `Option<Vec<u8>>` to `Option<&[u8]>`
+ |
+LL | let Some(ref a): Option<&[u8]> = some.as_deref() else { return };
+ | +++++++++++
error[E0308]: mismatched types
--> $DIR/let-else-ref-bindings.rs:20:38
@@ -15,6 +19,11 @@ LL | let Some(ref a): Option<&[u8]> = &some else { return };
|
= note: expected enum `Option<&[u8]>`
found reference `&Option<Vec<u8>>`
+help: try using `.as_deref()` to convert `&Option<Vec<u8>>` to `Option<&[u8]>`
+ |
+LL - let Some(ref a): Option<&[u8]> = &some else { return };
+LL + let Some(ref a): Option<&[u8]> = some.as_deref() else { return };
+ |
error[E0308]: mismatched types
--> $DIR/let-else-ref-bindings.rs:24:34
@@ -26,6 +35,10 @@ LL | let Some(a): Option<&[u8]> = some else { return };
|
= note: expected enum `Option<&[u8]>`
found enum `Option<Vec<u8>>`
+help: try using `.as_deref()` to convert `Option<Vec<u8>>` to `Option<&[u8]>`
+ |
+LL | let Some(a): Option<&[u8]> = some.as_deref() else { return };
+ | +++++++++++
error[E0308]: mismatched types
--> $DIR/let-else-ref-bindings.rs:27:34
@@ -37,6 +50,11 @@ LL | let Some(a): Option<&[u8]> = &some else { return };
|
= note: expected enum `Option<&[u8]>`
found reference `&Option<Vec<u8>>`
+help: try using `.as_deref()` to convert `&Option<Vec<u8>>` to `Option<&[u8]>`
+ |
+LL - let Some(a): Option<&[u8]> = &some else { return };
+LL + let Some(a): Option<&[u8]> = some.as_deref() else { return };
+ |
error[E0308]: mismatched types
--> $DIR/let-else-ref-bindings.rs:44:46
diff --git a/tests/ui/lexer/lex-bad-char-literals-1.stderr b/tests/ui/lexer/lex-bad-char-literals-1.stderr
index e6ff1f662..9dc0a3380 100644
--- a/tests/ui/lexer/lex-bad-char-literals-1.stderr
+++ b/tests/ui/lexer/lex-bad-char-literals-1.stderr
@@ -16,7 +16,7 @@ error: unknown character escape: `\u{25cf}`
LL | '\●'
| ^ unknown character escape
|
- = help: for more information, visit <https://static.rust-lang.org/doc/master/reference.html#literals>
+ = help: for more information, visit <https://doc.rust-lang.org/reference/tokens.html#literals>
help: if you meant to write a literal backslash (perhaps escaping in a regular expression), consider a raw string literal
|
LL | r"\●"
@@ -28,7 +28,7 @@ error: unknown character escape: `\u{25cf}`
LL | "\●"
| ^ unknown character escape
|
- = help: for more information, visit <https://static.rust-lang.org/doc/master/reference.html#literals>
+ = help: for more information, visit <https://doc.rust-lang.org/reference/tokens.html#literals>
help: if you meant to write a literal backslash (perhaps escaping in a regular expression), consider a raw string literal
|
LL | r"\●"
diff --git a/tests/ui/lifetimes/issue-90600-expected-return-static-indirect.stderr b/tests/ui/lifetimes/issue-90600-expected-return-static-indirect.stderr
index 3602de8dd..598f14241 100644
--- a/tests/ui/lifetimes/issue-90600-expected-return-static-indirect.stderr
+++ b/tests/ui/lifetimes/issue-90600-expected-return-static-indirect.stderr
@@ -10,7 +10,7 @@ LL | let read = &refcell as &RefCell<dyn Read>;
| -------- cast requires that `foo` is borrowed for `'static`
...
LL | }
- | - `foo` dropped here while still borrowed
+ | - `foo` dropped here while still borrowed
error: lifetime may not live long enough
--> $DIR/issue-90600-expected-return-static-indirect.rs:9:16
diff --git a/tests/ui/limits/huge-array-simple-32.rs b/tests/ui/limits/huge-array-simple-32.rs
index 2290e3d5e..f25b88874 100644
--- a/tests/ui/limits/huge-array-simple-32.rs
+++ b/tests/ui/limits/huge-array-simple-32.rs
@@ -1,9 +1,6 @@
// ignore-64bit
// build-fail
-// FIXME https://github.com/rust-lang/rust/issues/59774
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
#![allow(arithmetic_overflow)]
fn main() {
diff --git a/tests/ui/limits/huge-array-simple-32.stderr b/tests/ui/limits/huge-array-simple-32.stderr
index 31e120df6..d1e4e6295 100644
--- a/tests/ui/limits/huge-array-simple-32.stderr
+++ b/tests/ui/limits/huge-array-simple-32.stderr
@@ -1,5 +1,5 @@
error: values of the type `[u8; 2147516416]` are too big for the current architecture
- --> $DIR/huge-array-simple-32.rs:10:9
+ --> $DIR/huge-array-simple-32.rs:7:9
|
LL | let _fat: [u8; (1<<31)+(1<<15)] =
| ^^^^
diff --git a/tests/ui/limits/huge-array-simple-64.rs b/tests/ui/limits/huge-array-simple-64.rs
index 02c961fc5..c5778c428 100644
--- a/tests/ui/limits/huge-array-simple-64.rs
+++ b/tests/ui/limits/huge-array-simple-64.rs
@@ -1,9 +1,6 @@
// build-fail
// ignore-32bit
-// FIXME https://github.com/rust-lang/rust/issues/59774
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
#![allow(arithmetic_overflow)]
fn main() {
diff --git a/tests/ui/limits/huge-array-simple-64.stderr b/tests/ui/limits/huge-array-simple-64.stderr
index c5d3fe85d..5791b6439 100644
--- a/tests/ui/limits/huge-array-simple-64.stderr
+++ b/tests/ui/limits/huge-array-simple-64.stderr
@@ -1,5 +1,5 @@
error: values of the type `[u8; 2305843011361177600]` are too big for the current architecture
- --> $DIR/huge-array-simple-64.rs:10:9
+ --> $DIR/huge-array-simple-64.rs:7:9
|
LL | let _fat: [u8; (1<<61)+(1<<31)] =
| ^^^^
diff --git a/tests/ui/limits/huge-array.rs b/tests/ui/limits/huge-array.rs
index 3070801f8..811cf25dd 100644
--- a/tests/ui/limits/huge-array.rs
+++ b/tests/ui/limits/huge-array.rs
@@ -1,8 +1,4 @@
-// FIXME https://github.com/rust-lang/rust/issues/59774
-
// build-fail
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
fn generic<T: Copy>(t: T) {
let s: [T; 1518600000] = [t; 1518600000];
diff --git a/tests/ui/limits/huge-array.stderr b/tests/ui/limits/huge-array.stderr
index 817458b73..24adb33b0 100644
--- a/tests/ui/limits/huge-array.stderr
+++ b/tests/ui/limits/huge-array.stderr
@@ -1,5 +1,5 @@
error: values of the type `[[u8; 1518599999]; 1518600000]` are too big for the current architecture
- --> $DIR/huge-array.rs:8:9
+ --> $DIR/huge-array.rs:4:9
|
LL | let s: [T; 1518600000] = [t; 1518600000];
| ^
diff --git a/tests/ui/limits/huge-enum.rs b/tests/ui/limits/huge-enum.rs
index 39ea6e11b..dd4bae60d 100644
--- a/tests/ui/limits/huge-enum.rs
+++ b/tests/ui/limits/huge-enum.rs
@@ -2,10 +2,6 @@
// normalize-stderr-test "std::option::Option<\[u32; \d+\]>" -> "TYPE"
// normalize-stderr-test "\[u32; \d+\]" -> "TYPE"
-// FIXME https://github.com/rust-lang/rust/issues/59774
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
-
#[cfg(target_pointer_width = "32")]
type BIG = Option<[u32; (1<<29)-1]>;
diff --git a/tests/ui/limits/huge-enum.stderr b/tests/ui/limits/huge-enum.stderr
index a1456e1a8..5e2bda9be 100644
--- a/tests/ui/limits/huge-enum.stderr
+++ b/tests/ui/limits/huge-enum.stderr
@@ -1,5 +1,5 @@
error: values of the type `Option<TYPE>` are too big for the current architecture
- --> $DIR/huge-enum.rs:16:9
+ --> $DIR/huge-enum.rs:12:9
|
LL | let big: BIG = None;
| ^^^
diff --git a/tests/ui/limits/huge-struct.rs b/tests/ui/limits/huge-struct.rs
index 02f38d860..904e2774b 100644
--- a/tests/ui/limits/huge-struct.rs
+++ b/tests/ui/limits/huge-struct.rs
@@ -3,10 +3,6 @@
// normalize-stderr-test "S1M" -> "SXX"
// error-pattern: too big for the current
-// FIXME https://github.com/rust-lang/rust/issues/59774
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
-
struct S32<T> {
v0: T,
v1: T,
diff --git a/tests/ui/limits/huge-struct.stderr b/tests/ui/limits/huge-struct.stderr
index f0ee88e59..ce14bc5b8 100644
--- a/tests/ui/limits/huge-struct.stderr
+++ b/tests/ui/limits/huge-struct.stderr
@@ -1,5 +1,5 @@
error: values of the type `SXX<SXX<SXX<u32>>>` are too big for the current architecture
- --> $DIR/huge-struct.rs:50:9
+ --> $DIR/huge-struct.rs:46:9
|
LL | let fat: Option<SXX<SXX<SXX<u32>>>> = None;
| ^^^
diff --git a/tests/ui/limits/issue-15919-32.rs b/tests/ui/limits/issue-15919-32.rs
index 3c93f14cc..3254cb2c5 100644
--- a/tests/ui/limits/issue-15919-32.rs
+++ b/tests/ui/limits/issue-15919-32.rs
@@ -1,10 +1,6 @@
// ignore-64bit
// build-fail
-// FIXME https://github.com/rust-lang/rust/issues/59774
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
-
fn main() {
let x = [0usize; 0xffff_ffff]; //~ ERROR too big
}
diff --git a/tests/ui/limits/issue-15919-32.stderr b/tests/ui/limits/issue-15919-32.stderr
index 0d79fc0c7..f9e48a52c 100644
--- a/tests/ui/limits/issue-15919-32.stderr
+++ b/tests/ui/limits/issue-15919-32.stderr
@@ -1,5 +1,5 @@
error: values of the type `[usize; usize::MAX]` are too big for the current architecture
- --> $DIR/issue-15919-32.rs:9:9
+ --> $DIR/issue-15919-32.rs:5:9
|
LL | let x = [0usize; 0xffff_ffff];
| ^
diff --git a/tests/ui/limits/issue-15919-64.rs b/tests/ui/limits/issue-15919-64.rs
index 3ecbd34ea..272e8800d 100644
--- a/tests/ui/limits/issue-15919-64.rs
+++ b/tests/ui/limits/issue-15919-64.rs
@@ -1,10 +1,6 @@
// build-fail
// ignore-32bit
-// FIXME https://github.com/rust-lang/rust/issues/59774
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
-
fn main() {
let x = [0usize; 0xffff_ffff_ffff_ffff]; //~ ERROR too big
}
diff --git a/tests/ui/limits/issue-15919-64.stderr b/tests/ui/limits/issue-15919-64.stderr
index 3399d644e..167272890 100644
--- a/tests/ui/limits/issue-15919-64.stderr
+++ b/tests/ui/limits/issue-15919-64.stderr
@@ -1,5 +1,5 @@
error: values of the type `[usize; usize::MAX]` are too big for the current architecture
- --> $DIR/issue-15919-64.rs:9:9
+ --> $DIR/issue-15919-64.rs:5:9
|
LL | let x = [0usize; 0xffff_ffff_ffff_ffff];
| ^
diff --git a/tests/ui/limits/issue-17913.rs b/tests/ui/limits/issue-17913.rs
index 56cf5d831..6b37d6f05 100644
--- a/tests/ui/limits/issue-17913.rs
+++ b/tests/ui/limits/issue-17913.rs
@@ -2,10 +2,6 @@
// normalize-stderr-test "\[&usize; \d+\]" -> "[&usize; usize::MAX]"
// error-pattern: too big for the current architecture
-// FIXME https://github.com/rust-lang/rust/issues/59774
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
-
#[cfg(target_pointer_width = "64")]
fn main() {
let n = 0_usize;
diff --git a/tests/ui/limits/issue-56762.rs b/tests/ui/limits/issue-56762.rs
index fb0a270f1..ed7ee4da8 100644
--- a/tests/ui/limits/issue-56762.rs
+++ b/tests/ui/limits/issue-56762.rs
@@ -1,8 +1,5 @@
// only-x86_64
-// FIXME https://github.com/rust-lang/rust/issues/59774
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
const HUGE_SIZE: usize = !0usize / 8;
diff --git a/tests/ui/limits/issue-56762.stderr b/tests/ui/limits/issue-56762.stderr
index e6b9c6762..29f2a8859 100644
--- a/tests/ui/limits/issue-56762.stderr
+++ b/tests/ui/limits/issue-56762.stderr
@@ -1,11 +1,11 @@
error[E0080]: values of the type `[u8; 2305843009213693951]` are too big for the current architecture
- --> $DIR/issue-56762.rs:19:1
+ --> $DIR/issue-56762.rs:16:1
|
LL | static MY_TOO_BIG_ARRAY_1: TooBigArray = TooBigArray::new();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0080]: values of the type `[u8; 2305843009213693951]` are too big for the current architecture
- --> $DIR/issue-56762.rs:21:1
+ --> $DIR/issue-56762.rs:18:1
|
LL | static MY_TOO_BIG_ARRAY_2: [u8; HUGE_SIZE] = [0x00; HUGE_SIZE];
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/linkage-attr/incompatible-flavor.rs b/tests/ui/linkage-attr/incompatible-flavor.rs
new file mode 100644
index 000000000..90c2b612f
--- /dev/null
+++ b/tests/ui/linkage-attr/incompatible-flavor.rs
@@ -0,0 +1,6 @@
+// compile-flags: --target=x86_64-unknown-linux-gnu -C linker-flavor=msvc --crate-type=rlib
+// error-pattern: linker flavor `msvc` is incompatible with the current target
+// needs-llvm-components:
+
+#![feature(no_core)]
+#![no_core]
diff --git a/tests/ui/linkage-attr/incompatible-flavor.stderr b/tests/ui/linkage-attr/incompatible-flavor.stderr
new file mode 100644
index 000000000..aabdd14b6
--- /dev/null
+++ b/tests/ui/linkage-attr/incompatible-flavor.stderr
@@ -0,0 +1,6 @@
+error: linker flavor `msvc` is incompatible with the current target
+ |
+ = note: compatible flavors are: gnu, gnu-lld, gnu-cc, gnu-lld-cc, gcc, ld, ld.lld
+
+error: aborting due to previous error
+
diff --git a/tests/ui/linkage-attr/issue-10755.rs b/tests/ui/linkage-attr/issue-10755.rs
index afd2dc46c..0df5d842c 100644
--- a/tests/ui/linkage-attr/issue-10755.rs
+++ b/tests/ui/linkage-attr/issue-10755.rs
@@ -1,6 +1,6 @@
// build-fail
// dont-check-compiler-stderr
-// compile-flags: -C linker=llllll -C linker-flavor=ld
+// compile-flags: -C linker=llllll
// error-pattern: `llllll`
// Before, the error-pattern checked for "not found". On WSL with appendWindowsPath=true, running
diff --git a/tests/ui/linkage-attr/linkage3.rs b/tests/ui/linkage-attr/linkage3.rs
index 112eb1d3b..cac10af63 100644
--- a/tests/ui/linkage-attr/linkage3.rs
+++ b/tests/ui/linkage-attr/linkage3.rs
@@ -1,8 +1,4 @@
-// FIXME https://github.com/rust-lang/rust/issues/59774
-
// check-fail
-// normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> ""
-// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> ""
#![feature(linkage)]
diff --git a/tests/ui/linkage-attr/linkage3.stderr b/tests/ui/linkage-attr/linkage3.stderr
index f2579c6e8..dbb5880ab 100644
--- a/tests/ui/linkage-attr/linkage3.stderr
+++ b/tests/ui/linkage-attr/linkage3.stderr
@@ -1,5 +1,5 @@
error: invalid linkage specified
- --> $DIR/linkage3.rs:11:5
+ --> $DIR/linkage3.rs:7:5
|
LL | static foo: *const i32;
| ^^^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/linkage-attr/unstable-flavor.bpf.stderr b/tests/ui/linkage-attr/unstable-flavor.bpf.stderr
new file mode 100644
index 000000000..594a46176
--- /dev/null
+++ b/tests/ui/linkage-attr/unstable-flavor.bpf.stderr
@@ -0,0 +1,2 @@
+error: the linker flavor `bpf-linker` is unstable, the `-Z unstable-options` flag must also be passed to use the unstable values
+
diff --git a/tests/ui/linkage-attr/unstable-flavor.ptx.stderr b/tests/ui/linkage-attr/unstable-flavor.ptx.stderr
new file mode 100644
index 000000000..714c09df5
--- /dev/null
+++ b/tests/ui/linkage-attr/unstable-flavor.ptx.stderr
@@ -0,0 +1,2 @@
+error: the linker flavor `ptx-linker` is unstable, the `-Z unstable-options` flag must also be passed to use the unstable values
+
diff --git a/tests/ui/linkage-attr/unstable-flavor.rs b/tests/ui/linkage-attr/unstable-flavor.rs
new file mode 100644
index 000000000..b58fd055f
--- /dev/null
+++ b/tests/ui/linkage-attr/unstable-flavor.rs
@@ -0,0 +1,14 @@
+// Even though this test only checks 2 of the 10 or so unstable linker flavors, it exercizes the
+// unique codepath checking all unstable options (see `LinkerFlavorCli::is_unstable` and its
+// caller). If it passes, all the other unstable options are rejected as well.
+//
+// revisions: bpf ptx
+// [bpf] compile-flags: --target=bpfel-unknown-none -C linker-flavor=bpf-linker --crate-type=rlib
+// [bpf] error-pattern: linker flavor `bpf-linker` is unstable, the `-Z unstable-options` flag
+// [bpf] needs-llvm-components:
+// [ptx] compile-flags: --target=nvptx64-nvidia-cuda -C linker-flavor=ptx-linker --crate-type=rlib
+// [ptx] error-pattern: linker flavor `ptx-linker` is unstable, the `-Z unstable-options` flag
+// [ptx] needs-llvm-components:
+
+#![feature(no_core)]
+#![no_core]
diff --git a/tests/ui/lint/invalid-nan-comparison-suggestion.fixed b/tests/ui/lint/invalid-nan-comparison-suggestion.fixed
new file mode 100644
index 000000000..feafc6c1b
--- /dev/null
+++ b/tests/ui/lint/invalid-nan-comparison-suggestion.fixed
@@ -0,0 +1,36 @@
+// check-pass
+// run-rustfix
+
+fn main() {
+ let x = 5f32;
+ let _ = x.is_nan();
+ //~^ WARN incorrect NaN comparison
+ let _ = !x.is_nan();
+ //~^ WARN incorrect NaN comparison
+
+ let x = 5f64;
+ let _ = x.is_nan();
+ //~^ WARN incorrect NaN comparison
+ let _ = !x.is_nan();
+ //~^ WARN incorrect NaN comparison
+
+ let b = &2.3f32;
+ if !b.is_nan() {}
+ //~^ WARN incorrect NaN comparison
+
+ let b = &2.3f32;
+ if !b.is_nan() {}
+ //~^ WARN incorrect NaN comparison
+
+ let _ =
+ !b.is_nan();
+
+ #[allow(unused_macros)]
+ macro_rules! nan { () => { f32::NAN }; }
+ macro_rules! number { () => { 5f32 }; }
+
+ let _ = number!().is_nan();
+ //~^ WARN incorrect NaN comparison
+ let _ = !number!().is_nan();
+ //~^ WARN incorrect NaN comparison
+}
diff --git a/tests/ui/lint/invalid-nan-comparison-suggestion.rs b/tests/ui/lint/invalid-nan-comparison-suggestion.rs
new file mode 100644
index 000000000..ad5eb66e5
--- /dev/null
+++ b/tests/ui/lint/invalid-nan-comparison-suggestion.rs
@@ -0,0 +1,39 @@
+// check-pass
+// run-rustfix
+
+fn main() {
+ let x = 5f32;
+ let _ = x == f32::NAN;
+ //~^ WARN incorrect NaN comparison
+ let _ = x != f32::NAN;
+ //~^ WARN incorrect NaN comparison
+
+ let x = 5f64;
+ let _ = x == f64::NAN;
+ //~^ WARN incorrect NaN comparison
+ let _ = x != f64::NAN;
+ //~^ WARN incorrect NaN comparison
+
+ let b = &2.3f32;
+ if b != &f32::NAN {}
+ //~^ WARN incorrect NaN comparison
+
+ let b = &2.3f32;
+ if b != { &f32::NAN } {}
+ //~^ WARN incorrect NaN comparison
+
+ let _ =
+ b != {
+ //~^ WARN incorrect NaN comparison
+ &f32::NAN
+ };
+
+ #[allow(unused_macros)]
+ macro_rules! nan { () => { f32::NAN }; }
+ macro_rules! number { () => { 5f32 }; }
+
+ let _ = nan!() == number!();
+ //~^ WARN incorrect NaN comparison
+ let _ = number!() != nan!();
+ //~^ WARN incorrect NaN comparison
+}
diff --git a/tests/ui/lint/invalid-nan-comparison-suggestion.stderr b/tests/ui/lint/invalid-nan-comparison-suggestion.stderr
new file mode 100644
index 000000000..c310341de
--- /dev/null
+++ b/tests/ui/lint/invalid-nan-comparison-suggestion.stderr
@@ -0,0 +1,114 @@
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison-suggestion.rs:6:13
+ |
+LL | let _ = x == f32::NAN;
+ | ^^^^^^^^^^^^^
+ |
+ = note: `#[warn(invalid_nan_comparisons)]` on by default
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - let _ = x == f32::NAN;
+LL + let _ = x.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison-suggestion.rs:8:13
+ |
+LL | let _ = x != f32::NAN;
+ | ^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - let _ = x != f32::NAN;
+LL + let _ = !x.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison-suggestion.rs:12:13
+ |
+LL | let _ = x == f64::NAN;
+ | ^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - let _ = x == f64::NAN;
+LL + let _ = x.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison-suggestion.rs:14:13
+ |
+LL | let _ = x != f64::NAN;
+ | ^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - let _ = x != f64::NAN;
+LL + let _ = !x.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison-suggestion.rs:18:8
+ |
+LL | if b != &f32::NAN {}
+ | ^^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - if b != &f32::NAN {}
+LL + if !b.is_nan() {}
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison-suggestion.rs:22:8
+ |
+LL | if b != { &f32::NAN } {}
+ | ^^^^^^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - if b != { &f32::NAN } {}
+LL + if !b.is_nan() {}
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison-suggestion.rs:26:9
+ |
+LL | / b != {
+LL | |
+LL | | &f32::NAN
+LL | | };
+ | |_________^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - b != {
+LL + !b.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison-suggestion.rs:35:13
+ |
+LL | let _ = nan!() == number!();
+ | ^^^^^^^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - let _ = nan!() == number!();
+LL + let _ = number!().is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison-suggestion.rs:37:13
+ |
+LL | let _ = number!() != nan!();
+ | ^^^^^^^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - let _ = number!() != nan!();
+LL + let _ = !number!().is_nan();
+ |
+
+warning: 9 warnings emitted
+
diff --git a/tests/ui/lint/invalid-nan-comparison.rs b/tests/ui/lint/invalid-nan-comparison.rs
new file mode 100644
index 000000000..d7e793ca5
--- /dev/null
+++ b/tests/ui/lint/invalid-nan-comparison.rs
@@ -0,0 +1,51 @@
+// check-pass
+
+fn main() {
+ f32();
+ f64();
+}
+
+const TEST: bool = 5f32 == f32::NAN;
+//~^ WARN incorrect NaN comparison
+
+fn f32() {
+ macro_rules! number { () => { 5f32 }; }
+ let x = number!();
+ x == f32::NAN;
+ //~^ WARN incorrect NaN comparison
+ x != f32::NAN;
+ //~^ WARN incorrect NaN comparison
+ x < f32::NAN;
+ //~^ WARN incorrect NaN comparison
+ x > f32::NAN;
+ //~^ WARN incorrect NaN comparison
+ x <= f32::NAN;
+ //~^ WARN incorrect NaN comparison
+ x >= f32::NAN;
+ //~^ WARN incorrect NaN comparison
+ number!() == f32::NAN;
+ //~^ WARN incorrect NaN comparison
+ f32::NAN != number!();
+ //~^ WARN incorrect NaN comparison
+}
+
+fn f64() {
+ macro_rules! number { () => { 5f64 }; }
+ let x = number!();
+ x == f64::NAN;
+ //~^ WARN incorrect NaN comparison
+ x != f64::NAN;
+ //~^ WARN incorrect NaN comparison
+ x < f64::NAN;
+ //~^ WARN incorrect NaN comparison
+ x > f64::NAN;
+ //~^ WARN incorrect NaN comparison
+ x <= f64::NAN;
+ //~^ WARN incorrect NaN comparison
+ x >= f64::NAN;
+ //~^ WARN incorrect NaN comparison
+ number!() == f64::NAN;
+ //~^ WARN incorrect NaN comparison
+ f64::NAN != number!();
+ //~^ WARN incorrect NaN comparison
+}
diff --git a/tests/ui/lint/invalid-nan-comparison.stderr b/tests/ui/lint/invalid-nan-comparison.stderr
new file mode 100644
index 000000000..054c06d38
--- /dev/null
+++ b/tests/ui/lint/invalid-nan-comparison.stderr
@@ -0,0 +1,159 @@
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison.rs:8:20
+ |
+LL | const TEST: bool = 5f32 == f32::NAN;
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(invalid_nan_comparisons)]` on by default
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - const TEST: bool = 5f32 == f32::NAN;
+LL + const TEST: bool = 5f32.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison.rs:14:5
+ |
+LL | x == f32::NAN;
+ | ^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - x == f32::NAN;
+LL + x.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison.rs:16:5
+ |
+LL | x != f32::NAN;
+ | ^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - x != f32::NAN;
+LL + !x.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN is not orderable
+ --> $DIR/invalid-nan-comparison.rs:18:5
+ |
+LL | x < f32::NAN;
+ | ^^^^^^^^^^^^
+
+warning: incorrect NaN comparison, NaN is not orderable
+ --> $DIR/invalid-nan-comparison.rs:20:5
+ |
+LL | x > f32::NAN;
+ | ^^^^^^^^^^^^
+
+warning: incorrect NaN comparison, NaN is not orderable
+ --> $DIR/invalid-nan-comparison.rs:22:5
+ |
+LL | x <= f32::NAN;
+ | ^^^^^^^^^^^^^
+
+warning: incorrect NaN comparison, NaN is not orderable
+ --> $DIR/invalid-nan-comparison.rs:24:5
+ |
+LL | x >= f32::NAN;
+ | ^^^^^^^^^^^^^
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison.rs:26:5
+ |
+LL | number!() == f32::NAN;
+ | ^^^^^^^^^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - number!() == f32::NAN;
+LL + number!().is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison.rs:28:5
+ |
+LL | f32::NAN != number!();
+ | ^^^^^^^^^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - f32::NAN != number!();
+LL + !number!().is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison.rs:35:5
+ |
+LL | x == f64::NAN;
+ | ^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - x == f64::NAN;
+LL + x.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison.rs:37:5
+ |
+LL | x != f64::NAN;
+ | ^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - x != f64::NAN;
+LL + !x.is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN is not orderable
+ --> $DIR/invalid-nan-comparison.rs:39:5
+ |
+LL | x < f64::NAN;
+ | ^^^^^^^^^^^^
+
+warning: incorrect NaN comparison, NaN is not orderable
+ --> $DIR/invalid-nan-comparison.rs:41:5
+ |
+LL | x > f64::NAN;
+ | ^^^^^^^^^^^^
+
+warning: incorrect NaN comparison, NaN is not orderable
+ --> $DIR/invalid-nan-comparison.rs:43:5
+ |
+LL | x <= f64::NAN;
+ | ^^^^^^^^^^^^^
+
+warning: incorrect NaN comparison, NaN is not orderable
+ --> $DIR/invalid-nan-comparison.rs:45:5
+ |
+LL | x >= f64::NAN;
+ | ^^^^^^^^^^^^^
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison.rs:47:5
+ |
+LL | number!() == f64::NAN;
+ | ^^^^^^^^^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - number!() == f64::NAN;
+LL + number!().is_nan();
+ |
+
+warning: incorrect NaN comparison, NaN cannot be directly compared to itself
+ --> $DIR/invalid-nan-comparison.rs:49:5
+ |
+LL | f64::NAN != number!();
+ | ^^^^^^^^^^^^^^^^^^^^^
+ |
+help: use `f32::is_nan()` or `f64::is_nan()` instead
+ |
+LL - f64::NAN != number!();
+LL + !number!().is_nan();
+ |
+
+warning: 17 warnings emitted
+
diff --git a/tests/ui/lint/invalid_from_utf8.rs b/tests/ui/lint/invalid_from_utf8.rs
new file mode 100644
index 000000000..9c8c63681
--- /dev/null
+++ b/tests/ui/lint/invalid_from_utf8.rs
@@ -0,0 +1,93 @@
+// check-pass
+
+#![feature(concat_bytes)]
+#![warn(invalid_from_utf8_unchecked)]
+#![warn(invalid_from_utf8)]
+
+pub fn from_utf8_unchecked_mut() {
+ // Valid
+ unsafe {
+ std::str::from_utf8_unchecked_mut(&mut [99, 108, 105, 112, 112, 121]);
+ std::str::from_utf8_unchecked_mut(&mut [b'c', b'l', b'i', b'p', b'p', b'y']);
+
+ let x = 0xA0;
+ std::str::from_utf8_unchecked_mut(&mut [0xC0, x]);
+ }
+
+ // Invalid
+ unsafe {
+ std::str::from_utf8_unchecked_mut(&mut [99, 108, 130, 105, 112, 112, 121]);
+ //~^ WARN calls to `std::str::from_utf8_unchecked_mut`
+ std::str::from_utf8_unchecked_mut(&mut [b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
+ //~^ WARN calls to `std::str::from_utf8_unchecked_mut`
+ }
+}
+
+pub fn from_utf8_unchecked() {
+ // Valid
+ unsafe {
+ std::str::from_utf8_unchecked(&[99, 108, 105, 112, 112, 121]);
+ std::str::from_utf8_unchecked(&[b'c', b'l', b'i', b'p', b'p', b'y']);
+ std::str::from_utf8_unchecked(b"clippy");
+
+ let x = 0xA0;
+ std::str::from_utf8_unchecked(&[0xC0, x]);
+ }
+
+ // Invalid
+ unsafe {
+ std::str::from_utf8_unchecked(&[99, 108, 130, 105, 112, 112, 121]);
+ //~^ WARN calls to `std::str::from_utf8_unchecked`
+ std::str::from_utf8_unchecked(&[b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
+ //~^ WARN calls to `std::str::from_utf8_unchecked`
+ std::str::from_utf8_unchecked(b"cl\x82ippy");
+ //~^ WARN calls to `std::str::from_utf8_unchecked`
+ std::str::from_utf8_unchecked(concat_bytes!(b"cl", b"\x82ippy"));
+ //~^ WARN calls to `std::str::from_utf8_unchecked`
+ }
+}
+
+pub fn from_utf8_mut() {
+ // Valid
+ {
+ std::str::from_utf8_mut(&mut [99, 108, 105, 112, 112, 121]);
+ std::str::from_utf8_mut(&mut [b'c', b'l', b'i', b'p', b'p', b'y']);
+
+ let x = 0xa0;
+ std::str::from_utf8_mut(&mut [0xc0, x]);
+ }
+
+ // Invalid
+ {
+ std::str::from_utf8_mut(&mut [99, 108, 130, 105, 112, 112, 121]);
+ //~^ WARN calls to `std::str::from_utf8_mut`
+ std::str::from_utf8_mut(&mut [b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
+ //~^ WARN calls to `std::str::from_utf8_mut`
+ }
+}
+
+pub fn from_utf8() {
+ // Valid
+ {
+ std::str::from_utf8(&[99, 108, 105, 112, 112, 121]);
+ std::str::from_utf8(&[b'c', b'l', b'i', b'p', b'p', b'y']);
+ std::str::from_utf8(b"clippy");
+
+ let x = 0xA0;
+ std::str::from_utf8(&[0xC0, x]);
+ }
+
+ // Invalid
+ {
+ std::str::from_utf8(&[99, 108, 130, 105, 112, 112, 121]);
+ //~^ WARN calls to `std::str::from_utf8`
+ std::str::from_utf8(&[b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
+ //~^ WARN calls to `std::str::from_utf8`
+ std::str::from_utf8(b"cl\x82ippy");
+ //~^ WARN calls to `std::str::from_utf8`
+ std::str::from_utf8(concat_bytes!(b"cl", b"\x82ippy"));
+ //~^ WARN calls to `std::str::from_utf8`
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/lint/invalid_from_utf8.stderr b/tests/ui/lint/invalid_from_utf8.stderr
new file mode 100644
index 000000000..8e00d3bf8
--- /dev/null
+++ b/tests/ui/lint/invalid_from_utf8.stderr
@@ -0,0 +1,110 @@
+warning: calls to `std::str::from_utf8_unchecked_mut` with a invalid literal are undefined behavior
+ --> $DIR/invalid_from_utf8.rs:19:9
+ |
+LL | std::str::from_utf8_unchecked_mut(&mut [99, 108, 130, 105, 112, 112, 121]);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+ |
+note: the lint level is defined here
+ --> $DIR/invalid_from_utf8.rs:4:9
+ |
+LL | #![warn(invalid_from_utf8_unchecked)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: calls to `std::str::from_utf8_unchecked_mut` with a invalid literal are undefined behavior
+ --> $DIR/invalid_from_utf8.rs:21:9
+ |
+LL | std::str::from_utf8_unchecked_mut(&mut [b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--------------------------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: calls to `std::str::from_utf8_unchecked` with a invalid literal are undefined behavior
+ --> $DIR/invalid_from_utf8.rs:39:9
+ |
+LL | std::str::from_utf8_unchecked(&[99, 108, 130, 105, 112, 112, 121]);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-----------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: calls to `std::str::from_utf8_unchecked` with a invalid literal are undefined behavior
+ --> $DIR/invalid_from_utf8.rs:41:9
+ |
+LL | std::str::from_utf8_unchecked(&[b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^----------------------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: calls to `std::str::from_utf8_unchecked` with a invalid literal are undefined behavior
+ --> $DIR/invalid_from_utf8.rs:43:9
+ |
+LL | std::str::from_utf8_unchecked(b"cl\x82ippy");
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: calls to `std::str::from_utf8_unchecked` with a invalid literal are undefined behavior
+ --> $DIR/invalid_from_utf8.rs:45:9
+ |
+LL | std::str::from_utf8_unchecked(concat_bytes!(b"cl", b"\x82ippy"));
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: calls to `std::str::from_utf8_mut` with a invalid literal always return an error
+ --> $DIR/invalid_from_utf8.rs:62:9
+ |
+LL | std::str::from_utf8_mut(&mut [99, 108, 130, 105, 112, 112, 121]);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^---------------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+ |
+note: the lint level is defined here
+ --> $DIR/invalid_from_utf8.rs:5:9
+ |
+LL | #![warn(invalid_from_utf8)]
+ | ^^^^^^^^^^^^^^^^^
+
+warning: calls to `std::str::from_utf8_mut` with a invalid literal always return an error
+ --> $DIR/invalid_from_utf8.rs:64:9
+ |
+LL | std::str::from_utf8_mut(&mut [b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^--------------------------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: calls to `std::str::from_utf8` with a invalid literal always return an error
+ --> $DIR/invalid_from_utf8.rs:82:9
+ |
+LL | std::str::from_utf8(&[99, 108, 130, 105, 112, 112, 121]);
+ | ^^^^^^^^^^^^^^^^^^^^-----------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: calls to `std::str::from_utf8` with a invalid literal always return an error
+ --> $DIR/invalid_from_utf8.rs:84:9
+ |
+LL | std::str::from_utf8(&[b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
+ | ^^^^^^^^^^^^^^^^^^^^----------------------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: calls to `std::str::from_utf8` with a invalid literal always return an error
+ --> $DIR/invalid_from_utf8.rs:86:9
+ |
+LL | std::str::from_utf8(b"cl\x82ippy");
+ | ^^^^^^^^^^^^^^^^^^^^-------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: calls to `std::str::from_utf8` with a invalid literal always return an error
+ --> $DIR/invalid_from_utf8.rs:88:9
+ |
+LL | std::str::from_utf8(concat_bytes!(b"cl", b"\x82ippy"));
+ | ^^^^^^^^^^^^^^^^^^^^---------------------------------^
+ | |
+ | the literal was valid UTF-8 up to the 2 bytes
+
+warning: 12 warnings emitted
+
diff --git a/tests/ui/lint/issue-99387.rs b/tests/ui/lint/issue-99387.rs
index 616eb935e..ba5031167 100644
--- a/tests/ui/lint/issue-99387.rs
+++ b/tests/ui/lint/issue-99387.rs
@@ -1,4 +1,5 @@
-// check-pass
+//! Test that we don't follow through projections to find
+//! opaque types.
#![feature(type_alias_impl_trait)]
#![allow(private_in_public)]
@@ -18,6 +19,7 @@ impl<'a> Tr for &'a () {
}
pub fn ohno<'a>() -> <&'a () as Tr>::Item {
+ //~^ ERROR item constrains opaque type that is not in its signature
None.into_iter()
}
diff --git a/tests/ui/lint/issue-99387.stderr b/tests/ui/lint/issue-99387.stderr
new file mode 100644
index 000000000..3a46ce7e1
--- /dev/null
+++ b/tests/ui/lint/issue-99387.stderr
@@ -0,0 +1,15 @@
+error: item constrains opaque type that is not in its signature
+ --> $DIR/issue-99387.rs:21:22
+ |
+LL | pub fn ohno<'a>() -> <&'a () as Tr>::Item {
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: this item must mention the opaque type in its signature in order to be able to register hidden types
+note: this item must mention the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/issue-99387.rs:21:8
+ |
+LL | pub fn ohno<'a>() -> <&'a () as Tr>::Item {
+ | ^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/lint/lint-attr-everywhere-early.rs b/tests/ui/lint/lint-attr-everywhere-early.rs
index 0c820ef9a..ae32ec426 100644
--- a/tests/ui/lint/lint-attr-everywhere-early.rs
+++ b/tests/ui/lint/lint-attr-everywhere-early.rs
@@ -147,7 +147,7 @@ fn expressions() {
#![deny(unsafe_code)]
unsafe {} //~ ERROR usage of an `unsafe` block
}
- let block_tail = {
+ let block_tail: () = {
#[deny(unsafe_code)]
unsafe {} //~ ERROR usage of an `unsafe` block
};
diff --git a/tests/ui/lint/lint-attr-everywhere-late.rs b/tests/ui/lint/lint-attr-everywhere-late.rs
index a24355bab..c3acdeda4 100644
--- a/tests/ui/lint/lint-attr-everywhere-late.rs
+++ b/tests/ui/lint/lint-attr-everywhere-late.rs
@@ -172,7 +172,7 @@ fn expressions() {
#![deny(enum_intrinsics_non_enums)]
discriminant::<i32>(&123); //~ ERROR the return value of
}
- let block_tail = {
+ let block_tail: () = {
#[deny(enum_intrinsics_non_enums)]
discriminant::<i32>(&123); //~ ERROR the return value of
};
diff --git a/tests/ui/lint/lint-ctypes-113436-1.rs b/tests/ui/lint/lint-ctypes-113436-1.rs
new file mode 100644
index 000000000..1ca59c686
--- /dev/null
+++ b/tests/ui/lint/lint-ctypes-113436-1.rs
@@ -0,0 +1,28 @@
+#![deny(improper_ctypes_definitions)]
+
+#[repr(C)]
+pub struct Foo {
+ a: u8,
+ b: (),
+}
+
+extern "C" fn foo(x: Foo) -> Foo {
+ todo!()
+}
+
+struct NotSafe(u32);
+
+#[repr(C)]
+pub struct Bar {
+ a: u8,
+ b: (),
+ c: NotSafe,
+}
+
+extern "C" fn bar(x: Bar) -> Bar {
+ //~^ ERROR `extern` fn uses type `NotSafe`, which is not FFI-safe
+ //~^^ ERROR `extern` fn uses type `NotSafe`, which is not FFI-safe
+ todo!()
+}
+
+fn main() {}
diff --git a/tests/ui/lint/lint-ctypes-113436-1.stderr b/tests/ui/lint/lint-ctypes-113436-1.stderr
new file mode 100644
index 000000000..7b63043f0
--- /dev/null
+++ b/tests/ui/lint/lint-ctypes-113436-1.stderr
@@ -0,0 +1,35 @@
+error: `extern` fn uses type `NotSafe`, which is not FFI-safe
+ --> $DIR/lint-ctypes-113436-1.rs:22:22
+ |
+LL | extern "C" fn bar(x: Bar) -> Bar {
+ | ^^^ not FFI-safe
+ |
+ = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct
+ = note: this struct has unspecified layout
+note: the type is defined here
+ --> $DIR/lint-ctypes-113436-1.rs:13:1
+ |
+LL | struct NotSafe(u32);
+ | ^^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/lint-ctypes-113436-1.rs:1:9
+ |
+LL | #![deny(improper_ctypes_definitions)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: `extern` fn uses type `NotSafe`, which is not FFI-safe
+ --> $DIR/lint-ctypes-113436-1.rs:22:30
+ |
+LL | extern "C" fn bar(x: Bar) -> Bar {
+ | ^^^ not FFI-safe
+ |
+ = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct
+ = note: this struct has unspecified layout
+note: the type is defined here
+ --> $DIR/lint-ctypes-113436-1.rs:13:1
+ |
+LL | struct NotSafe(u32);
+ | ^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/tests/ui/lint/lint-ctypes-113436.rs b/tests/ui/lint/lint-ctypes-113436.rs
new file mode 100644
index 000000000..4f733b5bb
--- /dev/null
+++ b/tests/ui/lint/lint-ctypes-113436.rs
@@ -0,0 +1,34 @@
+// check-pass
+#![deny(improper_ctypes_definitions)]
+
+#[repr(C)]
+pub struct Wrap<T>(T);
+
+#[repr(transparent)]
+pub struct TransparentWrap<T>(T);
+
+pub extern "C" fn f() -> Wrap<()> {
+ todo!()
+}
+
+const _: extern "C" fn() -> Wrap<()> = f;
+
+pub extern "C" fn ff() -> Wrap<Wrap<()>> {
+ todo!()
+}
+
+const _: extern "C" fn() -> Wrap<Wrap<()>> = ff;
+
+pub extern "C" fn g() -> TransparentWrap<()> {
+ todo!()
+}
+
+const _: extern "C" fn() -> TransparentWrap<()> = g;
+
+pub extern "C" fn gg() -> TransparentWrap<TransparentWrap<()>> {
+ todo!()
+}
+
+const _: extern "C" fn() -> TransparentWrap<TransparentWrap<()>> = gg;
+
+fn main() {}
diff --git a/tests/ui/lint/lint-ctypes-113900.rs b/tests/ui/lint/lint-ctypes-113900.rs
new file mode 100644
index 000000000..ac4ff1ae2
--- /dev/null
+++ b/tests/ui/lint/lint-ctypes-113900.rs
@@ -0,0 +1,12 @@
+// check-pass
+
+// Extending `improper_ctypes` to check external-ABI fn-ptrs means that it can encounter
+// projections which cannot be normalized - unsurprisingly, this shouldn't crash the compiler.
+
+trait Bar {
+ type Assoc;
+}
+
+type Foo<T> = extern "C" fn() -> <T as Bar>::Assoc;
+
+fn main() {}
diff --git a/tests/ui/lint/lint-ctypes-73249-2.rs b/tests/ui/lint/lint-ctypes-73249-2.rs
index 691047c8a..f30377d6c 100644
--- a/tests/ui/lint/lint-ctypes-73249-2.rs
+++ b/tests/ui/lint/lint-ctypes-73249-2.rs
@@ -1,7 +1,7 @@
#![feature(type_alias_impl_trait)]
#![deny(improper_ctypes)]
-pub trait Baz {}
+trait Baz {}
impl Baz for () {}
@@ -9,7 +9,7 @@ type Qux = impl Baz;
fn assign() -> Qux {}
-pub trait Foo {
+trait Foo {
type Assoc: 'static;
}
@@ -18,12 +18,12 @@ impl Foo for () {
}
#[repr(transparent)]
-pub struct A<T: Foo> {
+struct A<T: Foo> {
x: &'static <T as Foo>::Assoc,
}
extern "C" {
- pub fn lint_me() -> A<()>; //~ ERROR: uses type `Qux`
+ fn lint_me() -> A<()>; //~ ERROR: uses type `Qux`
}
fn main() {}
diff --git a/tests/ui/lint/lint-ctypes-73249-2.stderr b/tests/ui/lint/lint-ctypes-73249-2.stderr
index 8073c33dd..49fa54114 100644
--- a/tests/ui/lint/lint-ctypes-73249-2.stderr
+++ b/tests/ui/lint/lint-ctypes-73249-2.stderr
@@ -1,8 +1,8 @@
error: `extern` block uses type `Qux`, which is not FFI-safe
- --> $DIR/lint-ctypes-73249-2.rs:26:25
+ --> $DIR/lint-ctypes-73249-2.rs:26:21
|
-LL | pub fn lint_me() -> A<()>;
- | ^^^^^ not FFI-safe
+LL | fn lint_me() -> A<()>;
+ | ^^^^^ not FFI-safe
|
= note: opaque types have no C equivalent
note: the lint level is defined here
diff --git a/tests/ui/lint/lint-ctypes-73251-1.rs b/tests/ui/lint/lint-ctypes-73251-1.rs
index 145ba784f..fc11f23a1 100644
--- a/tests/ui/lint/lint-ctypes-73251-1.rs
+++ b/tests/ui/lint/lint-ctypes-73251-1.rs
@@ -1,13 +1,13 @@
#![feature(type_alias_impl_trait)]
#![deny(improper_ctypes)]
-pub trait Baz {}
+trait Baz {}
impl Baz for u32 {}
type Qux = impl Baz;
-pub trait Foo {
+trait Foo {
type Assoc;
}
@@ -20,7 +20,7 @@ fn assign() -> Qux {
}
extern "C" {
- pub fn lint_me() -> <u32 as Foo>::Assoc; //~ ERROR: uses type `Qux`
+ fn lint_me() -> <u32 as Foo>::Assoc; //~ ERROR: uses type `Qux`
}
fn main() {}
diff --git a/tests/ui/lint/lint-ctypes-73251-1.stderr b/tests/ui/lint/lint-ctypes-73251-1.stderr
index 9f43576ad..b4eb921b9 100644
--- a/tests/ui/lint/lint-ctypes-73251-1.stderr
+++ b/tests/ui/lint/lint-ctypes-73251-1.stderr
@@ -1,8 +1,8 @@
error: `extern` block uses type `Qux`, which is not FFI-safe
- --> $DIR/lint-ctypes-73251-1.rs:23:25
+ --> $DIR/lint-ctypes-73251-1.rs:23:21
|
-LL | pub fn lint_me() -> <u32 as Foo>::Assoc;
- | ^^^^^^^^^^^^^^^^^^^ not FFI-safe
+LL | fn lint_me() -> <u32 as Foo>::Assoc;
+ | ^^^^^^^^^^^^^^^^^^^ not FFI-safe
|
= note: opaque types have no C equivalent
note: the lint level is defined here
diff --git a/tests/ui/lint/lint-ctypes-73251-2.rs b/tests/ui/lint/lint-ctypes-73251-2.rs
index df71a9457..fbe0a58f3 100644
--- a/tests/ui/lint/lint-ctypes-73251-2.rs
+++ b/tests/ui/lint/lint-ctypes-73251-2.rs
@@ -33,7 +33,7 @@ fn use_of_b() -> AliasB {
}
extern "C" {
- pub fn lint_me() -> <AliasB as TraitB>::Assoc; //~ ERROR: uses type `AliasA`
+ fn lint_me() -> <AliasB as TraitB>::Assoc; //~ ERROR: uses type `AliasA`
}
fn main() {}
diff --git a/tests/ui/lint/lint-ctypes-73251-2.stderr b/tests/ui/lint/lint-ctypes-73251-2.stderr
index 0b3de379c..e44cd45bd 100644
--- a/tests/ui/lint/lint-ctypes-73251-2.stderr
+++ b/tests/ui/lint/lint-ctypes-73251-2.stderr
@@ -1,8 +1,8 @@
error: `extern` block uses type `AliasA`, which is not FFI-safe
- --> $DIR/lint-ctypes-73251-2.rs:36:25
+ --> $DIR/lint-ctypes-73251-2.rs:36:21
|
-LL | pub fn lint_me() -> <AliasB as TraitB>::Assoc;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe
+LL | fn lint_me() -> <AliasB as TraitB>::Assoc;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe
|
= note: opaque types have no C equivalent
note: the lint level is defined here
diff --git a/tests/ui/lint/lint-ctypes-73251.rs b/tests/ui/lint/lint-ctypes-73251.rs
index ebc2ca77b..a00d1a75a 100644
--- a/tests/ui/lint/lint-ctypes-73251.rs
+++ b/tests/ui/lint/lint-ctypes-73251.rs
@@ -3,7 +3,7 @@
#![feature(type_alias_impl_trait)]
#![deny(improper_ctypes)]
-pub trait Foo {
+trait Foo {
type Assoc;
}
@@ -16,7 +16,7 @@ type Bar = impl Foo<Assoc = u32>;
fn assign() -> Bar {}
extern "C" {
- pub fn lint_me() -> <Bar as Foo>::Assoc;
+ fn lint_me() -> <Bar as Foo>::Assoc;
}
fn main() {}
diff --git a/tests/ui/lint/lint-ctypes-94223.rs b/tests/ui/lint/lint-ctypes-94223.rs
new file mode 100644
index 000000000..70dd2a71f
--- /dev/null
+++ b/tests/ui/lint/lint-ctypes-94223.rs
@@ -0,0 +1,42 @@
+#![crate_type = "lib"]
+#![deny(improper_ctypes_definitions)]
+
+pub fn bad(f: extern "C" fn([u8])) {}
+//~^ ERROR `extern` fn uses type `[u8]`, which is not FFI-safe
+
+pub fn bad_twice(f: Result<extern "C" fn([u8]), extern "C" fn([u8])>) {}
+//~^ ERROR `extern` fn uses type `[u8]`, which is not FFI-safe
+//~^^ ERROR `extern` fn uses type `[u8]`, which is not FFI-safe
+
+struct BadStruct(extern "C" fn([u8]));
+//~^ ERROR `extern` fn uses type `[u8]`, which is not FFI-safe
+
+enum BadEnum {
+ A(extern "C" fn([u8])),
+ //~^ ERROR `extern` fn uses type `[u8]`, which is not FFI-safe
+}
+
+enum BadUnion {
+ A(extern "C" fn([u8])),
+ //~^ ERROR `extern` fn uses type `[u8]`, which is not FFI-safe
+}
+
+type Foo = extern "C" fn([u8]);
+//~^ ERROR `extern` fn uses type `[u8]`, which is not FFI-safe
+
+pub struct FfiUnsafe;
+
+#[allow(improper_ctypes_definitions)]
+extern "C" fn f(_: FfiUnsafe) {
+ unimplemented!()
+}
+
+pub static BAD: extern "C" fn(FfiUnsafe) = f;
+//~^ ERROR `extern` fn uses type `FfiUnsafe`, which is not FFI-safe
+
+pub static BAD_TWICE: Result<extern "C" fn(FfiUnsafe), extern "C" fn(FfiUnsafe)> = Ok(f);
+//~^ ERROR `extern` fn uses type `FfiUnsafe`, which is not FFI-safe
+//~^^ ERROR `extern` fn uses type `FfiUnsafe`, which is not FFI-safe
+
+pub const BAD_CONST: extern "C" fn(FfiUnsafe) = f;
+//~^ ERROR `extern` fn uses type `FfiUnsafe`, which is not FFI-safe
diff --git a/tests/ui/lint/lint-ctypes-94223.stderr b/tests/ui/lint/lint-ctypes-94223.stderr
new file mode 100644
index 000000000..49e64ed51
--- /dev/null
+++ b/tests/ui/lint/lint-ctypes-94223.stderr
@@ -0,0 +1,126 @@
+error: `extern` fn uses type `[u8]`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:4:15
+ |
+LL | pub fn bad(f: extern "C" fn([u8])) {}
+ | ^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider using a raw pointer instead
+ = note: slices have no C equivalent
+note: the lint level is defined here
+ --> $DIR/lint-ctypes-94223.rs:2:9
+ |
+LL | #![deny(improper_ctypes_definitions)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: `extern` fn uses type `[u8]`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:7:28
+ |
+LL | pub fn bad_twice(f: Result<extern "C" fn([u8]), extern "C" fn([u8])>) {}
+ | ^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider using a raw pointer instead
+ = note: slices have no C equivalent
+
+error: `extern` fn uses type `[u8]`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:7:49
+ |
+LL | pub fn bad_twice(f: Result<extern "C" fn([u8]), extern "C" fn([u8])>) {}
+ | ^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider using a raw pointer instead
+ = note: slices have no C equivalent
+
+error: `extern` fn uses type `[u8]`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:11:18
+ |
+LL | struct BadStruct(extern "C" fn([u8]));
+ | ^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider using a raw pointer instead
+ = note: slices have no C equivalent
+
+error: `extern` fn uses type `[u8]`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:15:7
+ |
+LL | A(extern "C" fn([u8])),
+ | ^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider using a raw pointer instead
+ = note: slices have no C equivalent
+
+error: `extern` fn uses type `[u8]`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:20:7
+ |
+LL | A(extern "C" fn([u8])),
+ | ^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider using a raw pointer instead
+ = note: slices have no C equivalent
+
+error: `extern` fn uses type `[u8]`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:24:12
+ |
+LL | type Foo = extern "C" fn([u8]);
+ | ^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider using a raw pointer instead
+ = note: slices have no C equivalent
+
+error: `extern` fn uses type `FfiUnsafe`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:34:17
+ |
+LL | pub static BAD: extern "C" fn(FfiUnsafe) = f;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct
+ = note: this struct has unspecified layout
+note: the type is defined here
+ --> $DIR/lint-ctypes-94223.rs:27:1
+ |
+LL | pub struct FfiUnsafe;
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: `extern` fn uses type `FfiUnsafe`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:37:30
+ |
+LL | pub static BAD_TWICE: Result<extern "C" fn(FfiUnsafe), extern "C" fn(FfiUnsafe)> = Ok(f);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct
+ = note: this struct has unspecified layout
+note: the type is defined here
+ --> $DIR/lint-ctypes-94223.rs:27:1
+ |
+LL | pub struct FfiUnsafe;
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: `extern` fn uses type `FfiUnsafe`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:37:56
+ |
+LL | pub static BAD_TWICE: Result<extern "C" fn(FfiUnsafe), extern "C" fn(FfiUnsafe)> = Ok(f);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct
+ = note: this struct has unspecified layout
+note: the type is defined here
+ --> $DIR/lint-ctypes-94223.rs:27:1
+ |
+LL | pub struct FfiUnsafe;
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: `extern` fn uses type `FfiUnsafe`, which is not FFI-safe
+ --> $DIR/lint-ctypes-94223.rs:41:22
+ |
+LL | pub const BAD_CONST: extern "C" fn(FfiUnsafe) = f;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe
+ |
+ = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct
+ = note: this struct has unspecified layout
+note: the type is defined here
+ --> $DIR/lint-ctypes-94223.rs:27:1
+ |
+LL | pub struct FfiUnsafe;
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 11 previous errors
+
diff --git a/tests/ui/lint/lint-unnecessary-parens.fixed b/tests/ui/lint/lint-unnecessary-parens.fixed
index 9c144324f..bafac05d8 100644
--- a/tests/ui/lint/lint-unnecessary-parens.fixed
+++ b/tests/ui/lint/lint-unnecessary-parens.fixed
@@ -35,6 +35,14 @@ pub fn passes_unused_parens_lint() -> &'static (dyn Trait) {
panic!()
}
+pub fn parens_with_keyword(e: &[()]) -> i32 {
+ if true {} //~ ERROR unnecessary parentheses around `if`
+ while true {} //~ ERROR unnecessary parentheses around `while`
+ for _ in e {} //~ ERROR unnecessary parentheses around `for`
+ match 1 { _ => ()} //~ ERROR unnecessary parentheses around `match`
+ return 1; //~ ERROR unnecessary parentheses around `return` value
+}
+
macro_rules! baz {
($($foo:expr),+) => {
($($foo),*)
diff --git a/tests/ui/lint/lint-unnecessary-parens.rs b/tests/ui/lint/lint-unnecessary-parens.rs
index 4fd9cabb3..ce537a4dc 100644
--- a/tests/ui/lint/lint-unnecessary-parens.rs
+++ b/tests/ui/lint/lint-unnecessary-parens.rs
@@ -35,6 +35,14 @@ pub fn passes_unused_parens_lint() -> &'static (dyn Trait) {
panic!()
}
+pub fn parens_with_keyword(e: &[()]) -> i32 {
+ if(true) {} //~ ERROR unnecessary parentheses around `if`
+ while(true) {} //~ ERROR unnecessary parentheses around `while`
+ for _ in(e) {} //~ ERROR unnecessary parentheses around `for`
+ match(1) { _ => ()} //~ ERROR unnecessary parentheses around `match`
+ return(1); //~ ERROR unnecessary parentheses around `return` value
+}
+
macro_rules! baz {
($($foo:expr),+) => {
($($foo),*)
diff --git a/tests/ui/lint/lint-unnecessary-parens.stderr b/tests/ui/lint/lint-unnecessary-parens.stderr
index e13620f06..2ad07530f 100644
--- a/tests/ui/lint/lint-unnecessary-parens.stderr
+++ b/tests/ui/lint/lint-unnecessary-parens.stderr
@@ -63,8 +63,68 @@ LL - (5)
LL + 5
|
+error: unnecessary parentheses around `if` condition
+ --> $DIR/lint-unnecessary-parens.rs:39:7
+ |
+LL | if(true) {}
+ | ^ ^
+ |
+help: remove these parentheses
+ |
+LL - if(true) {}
+LL + if true {}
+ |
+
+error: unnecessary parentheses around `while` condition
+ --> $DIR/lint-unnecessary-parens.rs:40:10
+ |
+LL | while(true) {}
+ | ^ ^
+ |
+help: remove these parentheses
+ |
+LL - while(true) {}
+LL + while true {}
+ |
+
+error: unnecessary parentheses around `for` iterator expression
+ --> $DIR/lint-unnecessary-parens.rs:41:13
+ |
+LL | for _ in(e) {}
+ | ^ ^
+ |
+help: remove these parentheses
+ |
+LL - for _ in(e) {}
+LL + for _ in e {}
+ |
+
+error: unnecessary parentheses around `match` scrutinee expression
+ --> $DIR/lint-unnecessary-parens.rs:42:10
+ |
+LL | match(1) { _ => ()}
+ | ^ ^
+ |
+help: remove these parentheses
+ |
+LL - match(1) { _ => ()}
+LL + match 1 { _ => ()}
+ |
+
+error: unnecessary parentheses around `return` value
+ --> $DIR/lint-unnecessary-parens.rs:43:11
+ |
+LL | return(1);
+ | ^ ^
+ |
+help: remove these parentheses
+ |
+LL - return(1);
+LL + return 1;
+ |
+
error: unnecessary parentheses around assigned value
- --> $DIR/lint-unnecessary-parens.rs:44:31
+ --> $DIR/lint-unnecessary-parens.rs:52:31
|
LL | pub const CONST_ITEM: usize = (10);
| ^ ^
@@ -76,7 +136,7 @@ LL + pub const CONST_ITEM: usize = 10;
|
error: unnecessary parentheses around assigned value
- --> $DIR/lint-unnecessary-parens.rs:45:33
+ --> $DIR/lint-unnecessary-parens.rs:53:33
|
LL | pub static STATIC_ITEM: usize = (10);
| ^ ^
@@ -88,7 +148,7 @@ LL + pub static STATIC_ITEM: usize = 10;
|
error: unnecessary parentheses around function argument
- --> $DIR/lint-unnecessary-parens.rs:49:9
+ --> $DIR/lint-unnecessary-parens.rs:57:9
|
LL | bar((true));
| ^ ^
@@ -100,7 +160,7 @@ LL + bar(true);
|
error: unnecessary parentheses around `if` condition
- --> $DIR/lint-unnecessary-parens.rs:51:8
+ --> $DIR/lint-unnecessary-parens.rs:59:8
|
LL | if (true) {}
| ^ ^
@@ -112,7 +172,7 @@ LL + if true {}
|
error: unnecessary parentheses around `while` condition
- --> $DIR/lint-unnecessary-parens.rs:52:11
+ --> $DIR/lint-unnecessary-parens.rs:60:11
|
LL | while (true) {}
| ^ ^
@@ -124,7 +184,7 @@ LL + while true {}
|
error: unnecessary parentheses around `match` scrutinee expression
- --> $DIR/lint-unnecessary-parens.rs:53:11
+ --> $DIR/lint-unnecessary-parens.rs:61:11
|
LL | match (true) {
| ^ ^
@@ -136,7 +196,7 @@ LL + match true {
|
error: unnecessary parentheses around `let` scrutinee expression
- --> $DIR/lint-unnecessary-parens.rs:56:16
+ --> $DIR/lint-unnecessary-parens.rs:64:16
|
LL | if let 1 = (1) {}
| ^ ^
@@ -148,7 +208,7 @@ LL + if let 1 = 1 {}
|
error: unnecessary parentheses around `let` scrutinee expression
- --> $DIR/lint-unnecessary-parens.rs:57:19
+ --> $DIR/lint-unnecessary-parens.rs:65:19
|
LL | while let 1 = (2) {}
| ^ ^
@@ -160,7 +220,7 @@ LL + while let 1 = 2 {}
|
error: unnecessary parentheses around method argument
- --> $DIR/lint-unnecessary-parens.rs:73:24
+ --> $DIR/lint-unnecessary-parens.rs:81:24
|
LL | X { y: false }.foo((true));
| ^ ^
@@ -172,7 +232,7 @@ LL + X { y: false }.foo(true);
|
error: unnecessary parentheses around assigned value
- --> $DIR/lint-unnecessary-parens.rs:75:18
+ --> $DIR/lint-unnecessary-parens.rs:83:18
|
LL | let mut _a = (0);
| ^ ^
@@ -184,7 +244,7 @@ LL + let mut _a = 0;
|
error: unnecessary parentheses around assigned value
- --> $DIR/lint-unnecessary-parens.rs:76:10
+ --> $DIR/lint-unnecessary-parens.rs:84:10
|
LL | _a = (0);
| ^ ^
@@ -196,7 +256,7 @@ LL + _a = 0;
|
error: unnecessary parentheses around assigned value
- --> $DIR/lint-unnecessary-parens.rs:77:11
+ --> $DIR/lint-unnecessary-parens.rs:85:11
|
LL | _a += (1);
| ^ ^
@@ -207,5 +267,5 @@ LL - _a += (1);
LL + _a += 1;
|
-error: aborting due to 17 previous errors
+error: aborting due to 22 previous errors
diff --git a/tests/ui/lint/opaque-ty-ffi-unsafe.rs b/tests/ui/lint/opaque-ty-ffi-unsafe.rs
index b7cc38e99..5faeac9ed 100644
--- a/tests/ui/lint/opaque-ty-ffi-unsafe.rs
+++ b/tests/ui/lint/opaque-ty-ffi-unsafe.rs
@@ -3,12 +3,12 @@
type A = impl Fn();
-pub fn ret_closure() -> A {
+pub(crate) fn ret_closure() -> A {
|| {}
}
extern "C" {
- pub fn a(_: A);
+ pub(crate) fn a(_: A);
//~^ ERROR `extern` block uses type `A`, which is not FFI-safe [improper_ctypes]
}
diff --git a/tests/ui/lint/opaque-ty-ffi-unsafe.stderr b/tests/ui/lint/opaque-ty-ffi-unsafe.stderr
index 33aa95854..ba9e18bcc 100644
--- a/tests/ui/lint/opaque-ty-ffi-unsafe.stderr
+++ b/tests/ui/lint/opaque-ty-ffi-unsafe.stderr
@@ -1,8 +1,8 @@
error: `extern` block uses type `A`, which is not FFI-safe
- --> $DIR/opaque-ty-ffi-unsafe.rs:11:17
+ --> $DIR/opaque-ty-ffi-unsafe.rs:11:24
|
-LL | pub fn a(_: A);
- | ^ not FFI-safe
+LL | pub(crate) fn a(_: A);
+ | ^ not FFI-safe
|
= note: opaque types have no C equivalent
note: the lint level is defined here
diff --git a/tests/ui/lint/reference_casting.rs b/tests/ui/lint/reference_casting.rs
new file mode 100644
index 000000000..996382049
--- /dev/null
+++ b/tests/ui/lint/reference_casting.rs
@@ -0,0 +1,51 @@
+// check-fail
+
+#![feature(ptr_from_ref)]
+#![deny(invalid_reference_casting)]
+
+extern "C" {
+ // N.B., mutability can be easily incorrect in FFI calls -- as
+ // in C, the default is mutable pointers.
+ fn ffi(c: *mut u8);
+ fn int_ffi(c: *mut i32);
+}
+
+fn main() {
+ let s = String::from("Hello");
+ let a = &s;
+ unsafe {
+ let num = &3i32;
+ let mut_num = &mut 3i32;
+
+ (*(a as *const _ as *mut String)).push_str(" world");
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+ *(a as *const _ as *mut _) = String::from("Replaced");
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+ *(a as *const _ as *mut String) += " world";
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+ let _num = &mut *(num as *const i32 as *mut i32);
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+ let _num = &mut *(num as *const i32).cast_mut();
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+ let _num = *{ num as *const i32 }.cast_mut();
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+ *std::ptr::from_ref(num).cast_mut() += 1;
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+ *std::ptr::from_ref({ num }).cast_mut() += 1;
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+ *{ std::ptr::from_ref(num) }.cast_mut() += 1;
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+ *(std::ptr::from_ref({ num }) as *mut i32) += 1;
+ //~^ ERROR casting `&T` to `&mut T` is undefined behavior
+
+ // Shouldn't be warned against
+ println!("{}", *(num as *const _ as *const i16));
+ println!("{}", *(mut_num as *mut _ as *mut i16));
+ ffi(a.as_ptr() as *mut _);
+ int_ffi(num as *const _ as *mut _);
+ int_ffi(&3 as *const _ as *mut _);
+ let mut value = 3;
+ let value: *const i32 = &mut value;
+ *(value as *const i16 as *mut i16) = 42;
+ }
+}
diff --git a/tests/ui/lint/reference_casting.stderr b/tests/ui/lint/reference_casting.stderr
new file mode 100644
index 000000000..d5b9bbef6
--- /dev/null
+++ b/tests/ui/lint/reference_casting.stderr
@@ -0,0 +1,68 @@
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:20:9
+ |
+LL | (*(a as *const _ as *mut String)).push_str(" world");
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: the lint level is defined here
+ --> $DIR/reference_casting.rs:4:9
+ |
+LL | #![deny(invalid_reference_casting)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:22:9
+ |
+LL | *(a as *const _ as *mut _) = String::from("Replaced");
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:24:9
+ |
+LL | *(a as *const _ as *mut String) += " world";
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:26:25
+ |
+LL | let _num = &mut *(num as *const i32 as *mut i32);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:28:25
+ |
+LL | let _num = &mut *(num as *const i32).cast_mut();
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:30:20
+ |
+LL | let _num = *{ num as *const i32 }.cast_mut();
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:32:9
+ |
+LL | *std::ptr::from_ref(num).cast_mut() += 1;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:34:9
+ |
+LL | *std::ptr::from_ref({ num }).cast_mut() += 1;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:36:9
+ |
+LL | *{ std::ptr::from_ref(num) }.cast_mut() += 1;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
+ --> $DIR/reference_casting.rs:38:9
+ |
+LL | *(std::ptr::from_ref({ num }) as *mut i32) += 1;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 10 previous errors
+
diff --git a/tests/ui/lint/trivial-casts-featuring-type-ascription.stderr b/tests/ui/lint/trivial-casts-featuring-type-ascription.stderr
index 5087807b6..159a54873 100644
--- a/tests/ui/lint/trivial-casts-featuring-type-ascription.stderr
+++ b/tests/ui/lint/trivial-casts-featuring-type-ascription.stderr
@@ -4,7 +4,7 @@ error: trivial numeric cast: `i32` as `i32`
LL | let lugubrious = 12i32 as i32;
| ^^^^^^^^^^^^
|
- = help: cast can be replaced by coercion; this might require type ascription or a temporary variable
+ = help: cast can be replaced by coercion; this might require a temporary variable
note: the lint level is defined here
--> $DIR/trivial-casts-featuring-type-ascription.rs:1:24
|
@@ -17,7 +17,7 @@ error: trivial cast: `&u32` as `*const u32`
LL | let _ = haunted as *const u32;
| ^^^^^^^^^^^^^^^^^^^^^
|
- = help: cast can be replaced by coercion; this might require type ascription or a temporary variable
+ = help: cast can be replaced by coercion; this might require a temporary variable
note: the lint level is defined here
--> $DIR/trivial-casts-featuring-type-ascription.rs:1:9
|
diff --git a/tests/ui/lint/type-overflow.stderr b/tests/ui/lint/type-overflow.stderr
index 62cb1f7f4..e7c90dcc8 100644
--- a/tests/ui/lint/type-overflow.stderr
+++ b/tests/ui/lint/type-overflow.stderr
@@ -16,17 +16,33 @@ warning: literal out of range for `i8`
--> $DIR/type-overflow.rs:10:16
|
LL | let fail = 0b1000_0001i8;
- | ^^^^^^^^^^^^^ help: consider using the type `u8` instead: `0b1000_0001u8`
+ | ^^^^^^^^^^^^^
|
= note: the literal `0b1000_0001i8` (decimal `129`) does not fit into the type `i8` and will become `-127i8`
+help: consider using the type `u8` instead
+ |
+LL | let fail = 0b1000_0001u8;
+ | ~~~~~~~~~~~~~
+help: to use as a negative number (decimal `-127`), consider using the type `u8` for the literal and cast it to `i8`
+ |
+LL | let fail = 0b1000_0001u8 as i8;
+ | ~~~~~~~~~~~~~~~~~~~
warning: literal out of range for `i64`
--> $DIR/type-overflow.rs:12:16
|
LL | let fail = 0x8000_0000_0000_0000i64;
- | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using the type `u64` instead: `0x8000_0000_0000_0000u64`
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: the literal `0x8000_0000_0000_0000i64` (decimal `9223372036854775808`) does not fit into the type `i64` and will become `-9223372036854775808i64`
+help: consider using the type `u64` instead
+ |
+LL | let fail = 0x8000_0000_0000_0000u64;
+ | ~~~~~~~~~~~~~~~~~~~~~~~~
+help: to use as a negative number (decimal `-9223372036854775808`), consider using the type `u64` for the literal and cast it to `i64`
+ |
+LL | let fail = 0x8000_0000_0000_0000u64 as i64;
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: literal out of range for `u32`
--> $DIR/type-overflow.rs:14:16
@@ -44,6 +60,10 @@ LL | let fail: i128 = 0x8000_0000_0000_0000_0000_0000_0000_0000;
|
= note: the literal `0x8000_0000_0000_0000_0000_0000_0000_0000` (decimal `170141183460469231731687303715884105728`) does not fit into the type `i128` and will become `-170141183460469231731687303715884105728i128`
= help: consider using the type `u128` instead
+help: to use as a negative number (decimal `-170141183460469231731687303715884105728`), consider using the type `u128` for the literal and cast it to `i128`
+ |
+LL | let fail: i128 = 0x8000_0000_0000_0000_0000_0000_0000_0000u128 as i128;
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: literal out of range for `i32`
--> $DIR/type-overflow.rs:19:16
@@ -53,6 +73,10 @@ LL | let fail = 0x8FFF_FFFF_FFFF_FFFE;
|
= note: the literal `0x8FFF_FFFF_FFFF_FFFE` (decimal `10376293541461622782`) does not fit into the type `i32` and will become `-2i32`
= help: consider using the type `i128` instead
+help: to use as a negative number (decimal `-2`), consider using the type `u32` for the literal and cast it to `i32`
+ |
+LL | let fail = 0x8FFF_FFFF_FFFF_FFFEu32 as i32;
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: literal out of range for `i8`
--> $DIR/type-overflow.rs:21:17
diff --git a/tests/ui/lint/undropped_manually_drops.rs b/tests/ui/lint/undropped_manually_drops.rs
new file mode 100644
index 000000000..7286121a4
--- /dev/null
+++ b/tests/ui/lint/undropped_manually_drops.rs
@@ -0,0 +1,19 @@
+// check-fail
+
+struct S;
+
+fn main() {
+ let mut manual1 = std::mem::ManuallyDrop::new(S);
+ let mut manual2 = std::mem::ManuallyDrop::new(S);
+ let mut manual3 = std::mem::ManuallyDrop::new(S);
+
+ drop(std::mem::ManuallyDrop::new(S)); //~ ERROR calls to `std::mem::drop`
+ drop(manual1); //~ ERROR calls to `std::mem::drop`
+ drop({ manual3 }); //~ ERROR calls to `std::mem::drop`
+
+ // These lines will drop `S` and should be okay.
+ unsafe {
+ std::mem::ManuallyDrop::drop(&mut std::mem::ManuallyDrop::new(S));
+ std::mem::ManuallyDrop::drop(&mut manual2);
+ }
+}
diff --git a/tests/ui/lint/undropped_manually_drops.stderr b/tests/ui/lint/undropped_manually_drops.stderr
new file mode 100644
index 000000000..156b647eb
--- /dev/null
+++ b/tests/ui/lint/undropped_manually_drops.stderr
@@ -0,0 +1,42 @@
+error: calls to `std::mem::drop` with `std::mem::ManuallyDrop` instead of the inner value does nothing
+ --> $DIR/undropped_manually_drops.rs:10:5
+ |
+LL | drop(std::mem::ManuallyDrop::new(S));
+ | ^^^^^------------------------------^
+ | |
+ | argument has type `ManuallyDrop<S>`
+ |
+ = note: `#[deny(undropped_manually_drops)]` on by default
+help: use `std::mem::ManuallyDrop::into_inner` to get the inner value
+ |
+LL | drop(std::mem::ManuallyDrop::into_inner(std::mem::ManuallyDrop::new(S)));
+ | +++++++++++++++++++++++++++++++++++ +
+
+error: calls to `std::mem::drop` with `std::mem::ManuallyDrop` instead of the inner value does nothing
+ --> $DIR/undropped_manually_drops.rs:11:5
+ |
+LL | drop(manual1);
+ | ^^^^^-------^
+ | |
+ | argument has type `ManuallyDrop<S>`
+ |
+help: use `std::mem::ManuallyDrop::into_inner` to get the inner value
+ |
+LL | drop(std::mem::ManuallyDrop::into_inner(manual1));
+ | +++++++++++++++++++++++++++++++++++ +
+
+error: calls to `std::mem::drop` with `std::mem::ManuallyDrop` instead of the inner value does nothing
+ --> $DIR/undropped_manually_drops.rs:12:5
+ |
+LL | drop({ manual3 });
+ | ^^^^^-----------^
+ | |
+ | argument has type `ManuallyDrop<S>`
+ |
+help: use `std::mem::ManuallyDrop::into_inner` to get the inner value
+ |
+LL | drop(std::mem::ManuallyDrop::into_inner({ manual3 }));
+ | +++++++++++++++++++++++++++++++++++ +
+
+error: aborting due to 3 previous errors
+
diff --git a/tests/ui/lint/unused/lint-unused-extern-crate.rs b/tests/ui/lint/unused/lint-unused-extern-crate.rs
index d5e4da526..79df58b70 100644
--- a/tests/ui/lint/unused/lint-unused-extern-crate.rs
+++ b/tests/ui/lint/unused/lint-unused-extern-crate.rs
@@ -31,5 +31,5 @@ mod foo {
fn main() {
lint_unused_extern_crate3::foo();
- let y = foo();
+ foo();
}
diff --git a/tests/ui/lint/unused/lint-unused-imports.rs b/tests/ui/lint/unused/lint-unused-imports.rs
index 4754d8880..953992ecf 100644
--- a/tests/ui/lint/unused/lint-unused-imports.rs
+++ b/tests/ui/lint/unused/lint-unused-imports.rs
@@ -86,5 +86,5 @@ fn main() {
let mut b = 4;
swap(&mut a, &mut b);
test::C.b();
- let _a = foo();
+ foo();
}
diff --git a/tests/ui/lint/unused/lint-unused-variables.rs b/tests/ui/lint/unused/lint-unused-variables.rs
index 6850e9992..621c6ef84 100644
--- a/tests/ui/lint/unused/lint-unused-variables.rs
+++ b/tests/ui/lint/unused/lint-unused-variables.rs
@@ -74,6 +74,6 @@ fn main() {
b: i32,
//~^ ERROR unused variable: `b`
| {};
- let _ = a(1, 2);
- let _ = b(1, 2);
+ a(1, 2);
+ b(1, 2);
}
diff --git a/tests/ui/lint/unused/must-use-block-expr.fixed b/tests/ui/lint/unused/must-use-block-expr.fixed
new file mode 100644
index 000000000..642012812
--- /dev/null
+++ b/tests/ui/lint/unused/must-use-block-expr.fixed
@@ -0,0 +1,36 @@
+// run-rustfix
+// check-pass
+
+#![warn(unused_must_use)]
+
+#[must_use]
+fn foo() -> i32 {
+ 42
+}
+
+fn bar() {
+ {
+ let _ = foo();
+ //~^ WARN unused return value
+ }
+}
+
+fn baz() {
+ {
+ let _ = foo();
+ //~^ WARN unused return value
+ };
+}
+
+fn main() {
+ bar();
+ baz();
+ {
+ let _ = 1 + 2;
+ //~^ WARN unused arithmetic operation
+ }
+ {
+ let _ = 1 + 2;
+ //~^ WARN unused arithmetic operation
+ };
+}
diff --git a/tests/ui/lint/unused/must-use-block-expr.rs b/tests/ui/lint/unused/must-use-block-expr.rs
new file mode 100644
index 000000000..e0a680aa0
--- /dev/null
+++ b/tests/ui/lint/unused/must-use-block-expr.rs
@@ -0,0 +1,36 @@
+// run-rustfix
+// check-pass
+
+#![warn(unused_must_use)]
+
+#[must_use]
+fn foo() -> i32 {
+ 42
+}
+
+fn bar() {
+ {
+ foo();
+ //~^ WARN unused return value
+ }
+}
+
+fn baz() {
+ {
+ foo()
+ //~^ WARN unused return value
+ };
+}
+
+fn main() {
+ bar();
+ baz();
+ {
+ 1 + 2;
+ //~^ WARN unused arithmetic operation
+ }
+ {
+ 1 + 2
+ //~^ WARN unused arithmetic operation
+ };
+}
diff --git a/tests/ui/lint/unused/must-use-block-expr.stderr b/tests/ui/lint/unused/must-use-block-expr.stderr
new file mode 100644
index 000000000..d821beb1d
--- /dev/null
+++ b/tests/ui/lint/unused/must-use-block-expr.stderr
@@ -0,0 +1,51 @@
+warning: unused return value of `foo` that must be used
+ --> $DIR/must-use-block-expr.rs:13:9
+ |
+LL | foo();
+ | ^^^^^
+ |
+note: the lint level is defined here
+ --> $DIR/must-use-block-expr.rs:4:9
+ |
+LL | #![warn(unused_must_use)]
+ | ^^^^^^^^^^^^^^^
+help: use `let _ = ...` to ignore the resulting value
+ |
+LL | let _ = foo();
+ | +++++++
+
+warning: unused return value of `foo` that must be used
+ --> $DIR/must-use-block-expr.rs:20:9
+ |
+LL | foo()
+ | ^^^^^
+ |
+help: use `let _ = ...` to ignore the resulting value
+ |
+LL | let _ = foo();
+ | +++++++ +
+
+warning: unused arithmetic operation that must be used
+ --> $DIR/must-use-block-expr.rs:29:9
+ |
+LL | 1 + 2;
+ | ^^^^^ the arithmetic operation produces a value
+ |
+help: use `let _ = ...` to ignore the resulting value
+ |
+LL | let _ = 1 + 2;
+ | +++++++
+
+warning: unused arithmetic operation that must be used
+ --> $DIR/must-use-block-expr.rs:33:9
+ |
+LL | 1 + 2
+ | ^^^^^ the arithmetic operation produces a value
+ |
+help: use `let _ = ...` to ignore the resulting value
+ |
+LL | let _ = 1 + 2;
+ | +++++++ +
+
+warning: 4 warnings emitted
+
diff --git a/tests/ui/lint/unused_import_warning_issue_45268.rs b/tests/ui/lint/unused_import_warning_issue_45268.rs
index 5ae482863..7aa4d4959 100644
--- a/tests/ui/lint/unused_import_warning_issue_45268.rs
+++ b/tests/ui/lint/unused_import_warning_issue_45268.rs
@@ -31,15 +31,15 @@ use test::B; // This is used by the test2::func() through import of super
mod test2 {
use super::*;
pub fn func() {
- let _ = <()>::a();
- let _ = ().b();
+ <()>::a();
+ ().b();
test3::inner_func();
}
mod test3 {
use super::*;
pub fn inner_func() {
- let _ = <()>::a();
- let _ = ().b();
+ <()>::a();
+ ().b();
}
}
}
diff --git a/tests/ui/loops/dont-suggest-break-thru-item.rs b/tests/ui/loops/dont-suggest-break-thru-item.rs
new file mode 100644
index 000000000..b46ba89e8
--- /dev/null
+++ b/tests/ui/loops/dont-suggest-break-thru-item.rs
@@ -0,0 +1,55 @@
+// edition:2021
+
+#![feature(inline_const)]
+
+fn closure() {
+ loop {
+ let closure = || {
+ if true {
+ Err(1)
+ //~^ ERROR mismatched types
+ }
+
+ Ok(())
+ };
+ }
+}
+
+fn async_block() {
+ loop {
+ let fut = async {
+ if true {
+ Err(1)
+ //~^ ERROR mismatched types
+ }
+
+ Ok(())
+ };
+ }
+}
+
+fn fn_item() {
+ let _ = loop {
+ fn foo() -> Result<(), ()> {
+ if true {
+ Err(1)
+ //~^ ERROR mismatched types
+ }
+ Err(())
+ }
+ };
+}
+
+fn const_block() {
+ let _ = loop {
+ const {
+ if true {
+ Err(1)
+ //~^ ERROR mismatched types
+ }
+ Err(())
+ };
+ };
+}
+
+fn main() {}
diff --git a/tests/ui/loops/dont-suggest-break-thru-item.stderr b/tests/ui/loops/dont-suggest-break-thru-item.stderr
new file mode 100644
index 000000000..4fce47151
--- /dev/null
+++ b/tests/ui/loops/dont-suggest-break-thru-item.stderr
@@ -0,0 +1,55 @@
+error[E0308]: mismatched types
+ --> $DIR/dont-suggest-break-thru-item.rs:9:17
+ |
+LL | / if true {
+LL | | Err(1)
+ | | ^^^^^^ expected `()`, found `Result<_, {integer}>`
+LL | |
+LL | | }
+ | |_____________- expected this to be `()`
+ |
+ = note: expected unit type `()`
+ found enum `Result<_, {integer}>`
+
+error[E0308]: mismatched types
+ --> $DIR/dont-suggest-break-thru-item.rs:22:17
+ |
+LL | / if true {
+LL | | Err(1)
+ | | ^^^^^^ expected `()`, found `Result<_, {integer}>`
+LL | |
+LL | | }
+ | |_____________- expected this to be `()`
+ |
+ = note: expected unit type `()`
+ found enum `Result<_, {integer}>`
+
+error[E0308]: mismatched types
+ --> $DIR/dont-suggest-break-thru-item.rs:35:17
+ |
+LL | / if true {
+LL | | Err(1)
+ | | ^^^^^^ expected `()`, found `Result<_, {integer}>`
+LL | |
+LL | | }
+ | |_____________- expected this to be `()`
+ |
+ = note: expected unit type `()`
+ found enum `Result<_, {integer}>`
+
+error[E0308]: mismatched types
+ --> $DIR/dont-suggest-break-thru-item.rs:47:17
+ |
+LL | / if true {
+LL | | Err(1)
+ | | ^^^^^^ expected `()`, found `Result<_, {integer}>`
+LL | |
+LL | | }
+ | |_____________- expected this to be `()`
+ |
+ = note: expected unit type `()`
+ found enum `Result<_, {integer}>`
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/macros/auxiliary/proc_macro_sequence.rs b/tests/ui/macros/auxiliary/proc_macro_sequence.rs
index 1331480d8..2f69cbc94 100644
--- a/tests/ui/macros/auxiliary/proc_macro_sequence.rs
+++ b/tests/ui/macros/auxiliary/proc_macro_sequence.rs
@@ -8,11 +8,6 @@ extern crate proc_macro;
use proc_macro::{quote, Span, TokenStream, TokenTree};
-fn assert_same_span(a: Span, b: Span) {
- assert_eq!(a.start(), b.start());
- assert_eq!(a.end(), b.end());
-}
-
// This macro generates a macro with the same macro definition as `manual_foo` in
// `same-sequence-span.rs` but with the same span for all sequences.
#[proc_macro]
diff --git a/tests/ui/macros/builtin-prelude-no-accidents.stderr b/tests/ui/macros/builtin-prelude-no-accidents.stderr
index 8cd9a63b8..b726e1862 100644
--- a/tests/ui/macros/builtin-prelude-no-accidents.stderr
+++ b/tests/ui/macros/builtin-prelude-no-accidents.stderr
@@ -3,21 +3,37 @@ error[E0433]: failed to resolve: use of undeclared crate or module `env`
|
LL | env::current_dir;
| ^^^ use of undeclared crate or module `env`
-
-error[E0433]: failed to resolve: use of undeclared crate or module `vec`
- --> $DIR/builtin-prelude-no-accidents.rs:7:14
|
-LL | type B = vec::Vec<u8>;
- | ^^^
- | |
- | use of undeclared crate or module `vec`
- | help: a struct with a similar name exists (notice the capitalization): `Vec`
+help: consider importing this module
+ |
+LL + use std::env;
+ |
error[E0433]: failed to resolve: use of undeclared crate or module `panic`
--> $DIR/builtin-prelude-no-accidents.rs:6:14
|
LL | type A = panic::PanicInfo;
| ^^^^^ use of undeclared crate or module `panic`
+ |
+help: consider importing this module
+ |
+LL + use std::panic;
+ |
+
+error[E0433]: failed to resolve: use of undeclared crate or module `vec`
+ --> $DIR/builtin-prelude-no-accidents.rs:7:14
+ |
+LL | type B = vec::Vec<u8>;
+ | ^^^ use of undeclared crate or module `vec`
+ |
+help: a struct with a similar name exists
+ |
+LL | type B = Vec::Vec<u8>;
+ | ~~~
+help: consider importing this module
+ |
+LL + use std::vec;
+ |
error: aborting due to 3 previous errors
diff --git a/tests/ui/macros/builtin-std-paths-fail.stderr b/tests/ui/macros/builtin-std-paths-fail.stderr
index ba6261011..004a39043 100644
--- a/tests/ui/macros/builtin-std-paths-fail.stderr
+++ b/tests/ui/macros/builtin-std-paths-fail.stderr
@@ -93,6 +93,9 @@ error[E0433]: failed to resolve: could not find `test` in `std`
|
LL | #[std::test]
| ^^^^ could not find `test` in `std`
+ |
+note: found an item that was configured out
+ --> $SRC_DIR/std/src/lib.rs:LL:COL
error: aborting due to 16 previous errors
diff --git a/tests/ui/macros/format-args-temporaries.rs b/tests/ui/macros/format-args-temporaries.rs
index 59323828b..1ff6e3f80 100644
--- a/tests/ui/macros/format-args-temporaries.rs
+++ b/tests/ui/macros/format-args-temporaries.rs
@@ -27,27 +27,27 @@ impl<'a> Display for MutexGuard<'a> {
}
fn main() {
- let _print = {
+ let _print: () = {
let mutex = Mutex;
print!("{}", mutex.lock()) /* no semicolon */
};
- let _println = {
+ let _println: () = {
let mutex = Mutex;
println!("{}", mutex.lock()) /* no semicolon */
};
- let _eprint = {
+ let _eprint: () = {
let mutex = Mutex;
eprint!("{}", mutex.lock()) /* no semicolon */
};
- let _eprintln = {
+ let _eprintln: () = {
let mutex = Mutex;
eprintln!("{}", mutex.lock()) /* no semicolon */
};
- let _panic = {
+ let _panic: () = {
let mutex = Mutex;
panic!("{}", mutex.lock()) /* no semicolon */
};
diff --git a/tests/ui/macros/issue-112342-1.rs b/tests/ui/macros/issue-112342-1.rs
new file mode 100644
index 000000000..bd2abe7f6
--- /dev/null
+++ b/tests/ui/macros/issue-112342-1.rs
@@ -0,0 +1,49 @@
+// same as #95267, ignore doc comment although it's a bug.
+
+macro_rules! m1 {
+ (
+ $(
+ ///
+ )*
+ //~^^^ERROR repetition matches empty token tree
+ ) => {};
+}
+
+m1! {}
+
+macro_rules! m2 {
+ (
+ $(
+ ///
+ )+
+ //~^^^ERROR repetition matches empty token tree
+ ) => {};
+}
+
+m2! {}
+
+macro_rules! m3 {
+ (
+ $(
+ ///
+ )?
+ //~^^^ERROR repetition matches empty token tree
+ ) => {};
+}
+
+m3! {}
+
+
+macro_rules! m4 {
+ (
+ $(
+ ///
+ ///
+ )*
+ //~^^^^ERROR repetition matches empty token tree
+ ) => {};
+}
+
+m4! {}
+
+fn main() {}
diff --git a/tests/ui/macros/issue-112342-1.stderr b/tests/ui/macros/issue-112342-1.stderr
new file mode 100644
index 000000000..f2d82bf59
--- /dev/null
+++ b/tests/ui/macros/issue-112342-1.stderr
@@ -0,0 +1,64 @@
+note: doc comments are ignored in matcher position
+ --> $DIR/issue-112342-1.rs:6:13
+ |
+LL | ///
+ | ^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-112342-1.rs:5:10
+ |
+LL | $(
+ | __________^
+LL | | ///
+LL | | )*
+ | |_________^
+
+note: doc comments are ignored in matcher position
+ --> $DIR/issue-112342-1.rs:17:13
+ |
+LL | ///
+ | ^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-112342-1.rs:16:10
+ |
+LL | $(
+ | __________^
+LL | | ///
+LL | | )+
+ | |_________^
+
+note: doc comments are ignored in matcher position
+ --> $DIR/issue-112342-1.rs:28:13
+ |
+LL | ///
+ | ^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-112342-1.rs:27:10
+ |
+LL | $(
+ | __________^
+LL | | ///
+LL | | )?
+ | |_________^
+
+note: doc comments are ignored in matcher position
+ --> $DIR/issue-112342-1.rs:40:13
+ |
+LL | / ///
+LL | | ///
+ | |_______________^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-112342-1.rs:39:10
+ |
+LL | $(
+ | __________^
+LL | | ///
+LL | | ///
+LL | | )*
+ | |_________^
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/macros/issue-112342-2.rs b/tests/ui/macros/issue-112342-2.rs
new file mode 100644
index 000000000..e797aff94
--- /dev/null
+++ b/tests/ui/macros/issue-112342-2.rs
@@ -0,0 +1,39 @@
+// check-pass
+
+// same as #95267, ignore doc comment although it's a bug.
+
+macro_rules! m1 {
+ (
+ $(
+ ///
+ $expr: expr,
+ )*
+ ) => {};
+}
+
+m1! {}
+
+macro_rules! m2 {
+ (
+ $(
+ ///
+ $expr: expr,
+ ///
+ )*
+ ) => {};
+}
+
+m2! {}
+
+macro_rules! m3 {
+ (
+ $(
+ ///
+ $tt: tt,
+ )*
+ ) => {};
+}
+
+m3! {}
+
+fn main() {}
diff --git a/tests/ui/macros/issue-112342-2.stderr b/tests/ui/macros/issue-112342-2.stderr
new file mode 100644
index 000000000..8c1b6f947
--- /dev/null
+++ b/tests/ui/macros/issue-112342-2.stderr
@@ -0,0 +1,24 @@
+note: doc comments are ignored in matcher position
+ --> $DIR/issue-112342-2.rs:8:13
+ |
+LL | ///
+ | ^^^
+
+note: doc comments are ignored in matcher position
+ --> $DIR/issue-112342-2.rs:19:13
+ |
+LL | ///
+ | ^^^
+
+note: doc comments are ignored in matcher position
+ --> $DIR/issue-112342-2.rs:21:13
+ |
+LL | ///
+ | ^^^
+
+note: doc comments are ignored in matcher position
+ --> $DIR/issue-112342-2.rs:31:13
+ |
+LL | ///
+ | ^^^
+
diff --git a/tests/ui/macros/issue-88228.rs b/tests/ui/macros/issue-88228.rs
index 60ba2eab7..ec55a2625 100644
--- a/tests/ui/macros/issue-88228.rs
+++ b/tests/ui/macros/issue-88228.rs
@@ -1,14 +1,14 @@
// compile-flags: -Z deduplicate-diagnostics=yes
// edition:2018
-mod hey {
+mod hey { //~ HELP consider importing this derive macro
+ //~^ HELP consider importing this macro
pub use Copy as Bla;
pub use std::println as bla;
}
#[derive(Bla)]
//~^ ERROR cannot find derive macro `Bla`
-//~| HELP consider importing this derive macro
struct A;
#[derive(println)]
@@ -19,5 +19,4 @@ struct B;
fn main() {
bla!();
//~^ ERROR cannot find macro `bla`
- //~| HELP consider importing this macro
}
diff --git a/tests/ui/macros/issue-88228.stderr b/tests/ui/macros/issue-88228.stderr
index fe8a1deae..f9d0ac95d 100644
--- a/tests/ui/macros/issue-88228.stderr
+++ b/tests/ui/macros/issue-88228.stderr
@@ -4,8 +4,10 @@ error: cannot find macro `bla` in this scope
LL | bla!();
| ^^^
|
- = help: consider importing this macro:
- crate::hey::bla
+help: consider importing this macro through its public re-export
+ |
+LL + use crate::hey::bla;
+ |
error: cannot find derive macro `println` in this scope
--> $DIR/issue-88228.rs:14:10
@@ -16,13 +18,15 @@ LL | #[derive(println)]
= note: `println` is in scope, but it is a function-like macro
error: cannot find derive macro `Bla` in this scope
- --> $DIR/issue-88228.rs:9:10
+ --> $DIR/issue-88228.rs:10:10
|
LL | #[derive(Bla)]
| ^^^
|
- = help: consider importing this derive macro:
- crate::hey::Bla
+help: consider importing this derive macro through its public re-export
+ |
+LL + use crate::hey::Bla;
+ |
error: aborting due to 3 previous errors
diff --git a/tests/ui/macros/macro-comma-support-rpass.rs b/tests/ui/macros/macro-comma-support-rpass.rs
index cb019792e..2f08ad3c3 100644
--- a/tests/ui/macros/macro-comma-support-rpass.rs
+++ b/tests/ui/macros/macro-comma-support-rpass.rs
@@ -170,8 +170,8 @@ fn format_args() {
#[test]
fn include() {
- let _ = include!("auxiliary/macro-comma-support.rs");
- let _ = include!("auxiliary/macro-comma-support.rs",);
+ include!("auxiliary/macro-comma-support.rs");
+ include!("auxiliary/macro-comma-support.rs",);
}
#[test]
diff --git a/tests/ui/macros/macro-outer-attributes.stderr b/tests/ui/macros/macro-outer-attributes.stderr
index 0bdc3416f..0418e6116 100644
--- a/tests/ui/macros/macro-outer-attributes.stderr
+++ b/tests/ui/macros/macro-outer-attributes.stderr
@@ -4,6 +4,11 @@ error[E0425]: cannot find function `bar` in module `a`
LL | a::bar();
| ^^^ not found in `a`
|
+note: found an item that was configured out
+ --> $DIR/macro-outer-attributes.rs:9:14
+ |
+LL | pub fn bar() { });
+ | ^^^
help: consider importing this function
|
LL + use b::bar;
diff --git a/tests/ui/macros/macro-use-wrong-name.stderr b/tests/ui/macros/macro-use-wrong-name.stderr
index ca5f0f190..36339542a 100644
--- a/tests/ui/macros/macro-use-wrong-name.stderr
+++ b/tests/ui/macros/macro-use-wrong-name.stderr
@@ -2,15 +2,21 @@ error: cannot find macro `macro_two` in this scope
--> $DIR/macro-use-wrong-name.rs:7:5
|
LL | macro_two!();
- | ^^^^^^^^^ help: a macro with a similar name exists: `macro_one`
+ | ^^^^^^^^^
|
::: $DIR/auxiliary/two_macros.rs:2:1
|
LL | macro_rules! macro_one { () => ("one") }
| ---------------------- similarly named macro `macro_one` defined here
|
- = help: consider importing this macro:
- two_macros::macro_two
+help: a macro with a similar name exists
+ |
+LL | macro_one!();
+ | ~~~~~~~~~
+help: consider importing this macro
+ |
+LL + use two_macros::macro_two;
+ |
error: aborting due to previous error
diff --git a/tests/ui/macros/same-sequence-span.stderr b/tests/ui/macros/same-sequence-span.stderr
index bdd191e8e..3242a32e2 100644
--- a/tests/ui/macros/same-sequence-span.stderr
+++ b/tests/ui/macros/same-sequence-span.stderr
@@ -17,15 +17,14 @@ LL | $(= $z:tt)*
error: `$x:expr` may be followed by `$y:tt`, which is not allowed for `expr` fragments
--> $DIR/same-sequence-span.rs:19:1
|
+LL | | }
+ | |_________________________________^ not allowed after `expr` fragments
+LL |
LL | proc_macro_sequence::make_foo!();
| ^-------------------------------
| |
| _in this macro invocation
| |
-LL | |
-LL | |
-LL | | fn main() {}
- | |_________________________________^ not allowed after `expr` fragments
|
= note: allowed there are: `=>`, `,` or `;`
= note: this error originates in the macro `proc_macro_sequence::make_foo` (in Nightly builds, run with -Z macro-backtrace for more info)
diff --git a/tests/ui/match/issue-112438.rs b/tests/ui/match/issue-112438.rs
new file mode 100644
index 000000000..15f380f7f
--- /dev/null
+++ b/tests/ui/match/issue-112438.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![feature(inline_const_pat)]
+#![allow(dead_code)]
+#![allow(incomplete_features)]
+fn foo<const V: usize>() {
+ match 0 {
+ const { 1 << 5 } | _ => {}
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/match/issue-113012.rs b/tests/ui/match/issue-113012.rs
new file mode 100644
index 000000000..da7a8b65b
--- /dev/null
+++ b/tests/ui/match/issue-113012.rs
@@ -0,0 +1,12 @@
+// run-pass
+
+#![allow(dead_code)]
+struct Foo(());
+
+const FOO: Foo = Foo(match 0 {
+ 0.. => (),
+ _ => (),
+});
+
+fn main() {
+}
diff --git a/tests/ui/match/issue-70972-dyn-trait.rs b/tests/ui/match/issue-70972-dyn-trait.rs
index 97d161c59..df28c474a 100644
--- a/tests/ui/match/issue-70972-dyn-trait.rs
+++ b/tests/ui/match/issue-70972-dyn-trait.rs
@@ -4,7 +4,7 @@ fn main() {
let a: &dyn Send = &7u32;
match a {
F => panic!(),
- //~^ ERROR `&dyn Send` cannot be used in patterns
+ //~^ ERROR `dyn Send` cannot be used in patterns
_ => {}
}
}
diff --git a/tests/ui/match/issue-70972-dyn-trait.stderr b/tests/ui/match/issue-70972-dyn-trait.stderr
index 7581070eb..f4dc910c3 100644
--- a/tests/ui/match/issue-70972-dyn-trait.stderr
+++ b/tests/ui/match/issue-70972-dyn-trait.stderr
@@ -1,4 +1,4 @@
-error: `&dyn Send` cannot be used in patterns
+error: `dyn Send` cannot be used in patterns
--> $DIR/issue-70972-dyn-trait.rs:6:9
|
LL | F => panic!(),
diff --git a/tests/ui/mir/issue-101844.rs b/tests/ui/mir/issue-101844.rs
index da8a25f5f..72ceefa4f 100644
--- a/tests/ui/mir/issue-101844.rs
+++ b/tests/ui/mir/issue-101844.rs
@@ -67,7 +67,7 @@ where
MS::Item: Into<()>,
{
// Error: Apparently Balance::new doesn't exist during MIR validation
- let _ = ImplShoulExist::<MS, ()>::access_fn(ms);
+ ImplShoulExist::<MS, ()>::access_fn(ms);
}
fn main() {}
diff --git a/tests/ui/mir/issue-112269.rs b/tests/ui/mir/issue-112269.rs
new file mode 100644
index 000000000..8b9b16647
--- /dev/null
+++ b/tests/ui/mir/issue-112269.rs
@@ -0,0 +1,9 @@
+pub fn main() {
+ const x: i32 = 4;
+ let x: i32 = 3;
+ //~^ ERROR refutable pattern in local binding
+
+ const y: i32 = 3;
+ let y = 4;
+ //~^ ERROR refutable pattern in local binding
+}
diff --git a/tests/ui/mir/issue-112269.stderr b/tests/ui/mir/issue-112269.stderr
new file mode 100644
index 000000000..f5b796027
--- /dev/null
+++ b/tests/ui/mir/issue-112269.stderr
@@ -0,0 +1,31 @@
+error[E0005]: refutable pattern in local binding
+ --> $DIR/issue-112269.rs:3:9
+ |
+LL | let x: i32 = 3;
+ | ^
+ | |
+ | patterns `i32::MIN..=3_i32` and `5_i32..=i32::MAX` not covered
+ | missing patterns are not covered because `x` is interpreted as a constant pattern, not a new variable
+ | help: introduce a variable instead: `x_var`
+ |
+ = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
+ = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
+ = note: the matched value is of type `i32`
+
+error[E0005]: refutable pattern in local binding
+ --> $DIR/issue-112269.rs:7:9
+ |
+LL | let y = 4;
+ | ^
+ | |
+ | patterns `i32::MIN..=2_i32` and `4_i32..=i32::MAX` not covered
+ | missing patterns are not covered because `y` is interpreted as a constant pattern, not a new variable
+ | help: introduce a variable instead: `y_var`
+ |
+ = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
+ = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
+ = note: the matched value is of type `i32`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0005`.
diff --git a/tests/ui/mir/issue-80949.rs b/tests/ui/mir/issue-80949.rs
index 7e34a4f5c..96b63e93a 100644
--- a/tests/ui/mir/issue-80949.rs
+++ b/tests/ui/mir/issue-80949.rs
@@ -28,7 +28,7 @@ fn may_panic<X>(_: X) { }
fn main() {
let dyn_trait = make_dyn_trait(&());
let storage = vec![()];
- let _x = may_panic(());
+ may_panic(());
let storage_ref = &storage;
diff(dyn_trait, storage_ref);
}
diff --git a/tests/ui/mir/issue66339.rs b/tests/ui/mir/issue66339.rs
index 2507af38c..f25afd560 100644
--- a/tests/ui/mir/issue66339.rs
+++ b/tests/ui/mir/issue66339.rs
@@ -5,7 +5,7 @@
fn foo() {
let bar = |_| { };
- let _ = bar("a");
+ bar("a");
}
fn main() {
diff --git a/tests/ui/mir/ssa-analysis-regression-50041.rs b/tests/ui/mir/ssa-analysis-regression-50041.rs
index ebc3e2f8c..534f1c465 100644
--- a/tests/ui/mir/ssa-analysis-regression-50041.rs
+++ b/tests/ui/mir/ssa-analysis-regression-50041.rs
@@ -13,13 +13,10 @@ struct Unique<T: ?Sized>(NonNull<T>);
pub struct Box<T: ?Sized>(Unique<T>);
impl<T: ?Sized> Drop for Box<T> {
- fn drop(&mut self) {}
-}
-
-#[lang = "box_free"]
-#[inline(always)]
-unsafe fn box_free<T: ?Sized>(ptr: Unique<T>) {
- dealloc(ptr.0.0)
+ #[inline(always)]
+ fn drop(&mut self) {
+ dealloc(self.0.0.0)
+ }
}
#[inline(never)]
diff --git a/tests/ui/mir/thir-constparam-temp.rs b/tests/ui/mir/thir-constparam-temp.rs
index cdc5910b3..7eedc325d 100644
--- a/tests/ui/mir/thir-constparam-temp.rs
+++ b/tests/ui/mir/thir-constparam-temp.rs
@@ -3,7 +3,9 @@
#![feature(adt_const_params)]
#![allow(incomplete_features)]
-#[derive(PartialEq, Eq)]
+use std::marker::ConstParamTy;
+
+#[derive(PartialEq, Eq, ConstParamTy)]
struct Yikes;
impl Yikes {
diff --git a/tests/ui/mir/thir-constparam-temp.stderr b/tests/ui/mir/thir-constparam-temp.stderr
index b77d67e08..d50747e54 100644
--- a/tests/ui/mir/thir-constparam-temp.stderr
+++ b/tests/ui/mir/thir-constparam-temp.stderr
@@ -1,5 +1,5 @@
warning: taking a mutable reference to a `const` item
- --> $DIR/thir-constparam-temp.rs:14:5
+ --> $DIR/thir-constparam-temp.rs:16:5
|
LL | YIKES.mut_self()
| ^^^^^^^^^^^^^^^^
@@ -7,12 +7,12 @@ LL | YIKES.mut_self()
= note: each usage of a `const` item creates a new temporary
= note: the mutable reference will refer to this temporary, not the original `const` item
note: mutable reference created due to call to this method
- --> $DIR/thir-constparam-temp.rs:10:5
+ --> $DIR/thir-constparam-temp.rs:12:5
|
LL | fn mut_self(&mut self) {}
| ^^^^^^^^^^^^^^^^^^^^^^
note: `const` item defined here
- --> $DIR/thir-constparam-temp.rs:13:8
+ --> $DIR/thir-constparam-temp.rs:15:8
|
LL | fn foo<const YIKES: Yikes>() {
| ^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/mismatched_types/E0053.stderr b/tests/ui/mismatched_types/E0053.stderr
index 154f2fcbe..d0bd5b46c 100644
--- a/tests/ui/mismatched_types/E0053.stderr
+++ b/tests/ui/mismatched_types/E0053.stderr
@@ -22,7 +22,7 @@ LL | fn bar(&mut self) { }
| ^^^^^^^^^
| |
| types differ in mutability
- | help: change the self-receiver type to match the trait: `self: &Bar`
+ | help: change the self-receiver type to match the trait: `&self`
|
note: type in trait
--> $DIR/E0053.rs:3:12
diff --git a/tests/ui/mismatched_types/binops.stderr b/tests/ui/mismatched_types/binops.stderr
index 3585587ed..b18ab7f76 100644
--- a/tests/ui/mismatched_types/binops.stderr
+++ b/tests/ui/mismatched_types/binops.stderr
@@ -6,14 +6,14 @@ LL | 1 + Some(1);
|
= help: the trait `Add<Option<{integer}>>` is not implemented for `{integer}`
= help: the following other types implement trait `Add<Rhs>`:
- <&'a f32 as Add<f32>>
- <&'a f64 as Add<f64>>
- <&'a i128 as Add<i128>>
- <&'a i16 as Add<i16>>
- <&'a i32 as Add<i32>>
- <&'a i64 as Add<i64>>
- <&'a i8 as Add<i8>>
- <&'a isize as Add<isize>>
+ <isize as Add>
+ <isize as Add<&isize>>
+ <i8 as Add>
+ <i8 as Add<&i8>>
+ <i16 as Add>
+ <i16 as Add<&i16>>
+ <i32 as Add>
+ <i32 as Add<&i32>>
and 48 others
error[E0277]: cannot subtract `Option<{integer}>` from `usize`
@@ -24,10 +24,10 @@ LL | 2 as usize - Some(1);
|
= help: the trait `Sub<Option<{integer}>>` is not implemented for `usize`
= help: the following other types implement trait `Sub<Rhs>`:
+ <usize as Sub>
+ <usize as Sub<&usize>>
<&'a usize as Sub<usize>>
<&usize as Sub<&usize>>
- <usize as Sub<&usize>>
- <usize as Sub>
error[E0277]: cannot multiply `{integer}` by `()`
--> $DIR/binops.rs:4:7
@@ -37,14 +37,14 @@ LL | 3 * ();
|
= help: the trait `Mul<()>` is not implemented for `{integer}`
= help: the following other types implement trait `Mul<Rhs>`:
- <&'a f32 as Mul<f32>>
- <&'a f64 as Mul<f64>>
- <&'a i128 as Mul<i128>>
- <&'a i16 as Mul<i16>>
- <&'a i32 as Mul<i32>>
- <&'a i64 as Mul<i64>>
- <&'a i8 as Mul<i8>>
- <&'a isize as Mul<isize>>
+ <isize as Mul>
+ <isize as Mul<&isize>>
+ <i8 as Mul>
+ <i8 as Mul<&i8>>
+ <i16 as Mul>
+ <i16 as Mul<&i16>>
+ <i32 as Mul>
+ <i32 as Mul<&i32>>
and 49 others
error[E0277]: cannot divide `{integer}` by `&str`
@@ -55,14 +55,14 @@ LL | 4 / "";
|
= help: the trait `Div<&str>` is not implemented for `{integer}`
= help: the following other types implement trait `Div<Rhs>`:
- <&'a f32 as Div<f32>>
- <&'a f64 as Div<f64>>
- <&'a i128 as Div<i128>>
- <&'a i16 as Div<i16>>
- <&'a i32 as Div<i32>>
- <&'a i64 as Div<i64>>
- <&'a i8 as Div<i8>>
- <&'a isize as Div<isize>>
+ <isize as Div>
+ <isize as Div<&isize>>
+ <i8 as Div>
+ <i8 as Div<&i8>>
+ <i16 as Div>
+ <i16 as Div<&i16>>
+ <i32 as Div>
+ <i32 as Div<&i32>>
and 54 others
error[E0277]: can't compare `{integer}` with `String`
@@ -73,14 +73,14 @@ LL | 5 < String::new();
|
= help: the trait `PartialOrd<String>` is not implemented for `{integer}`
= help: the following other types implement trait `PartialOrd<Rhs>`:
- f32
- f64
- i128
+ isize
+ i8
i16
i32
i64
- i8
- isize
+ i128
+ usize
+ u8
and 6 others
error[E0277]: can't compare `{integer}` with `Result<{integer}, _>`
@@ -91,14 +91,14 @@ LL | 6 == Ok(1);
|
= help: the trait `PartialEq<Result<{integer}, _>>` is not implemented for `{integer}`
= help: the following other types implement trait `PartialEq<Rhs>`:
- f32
- f64
- i128
+ isize
+ i8
i16
i32
i64
- i8
- isize
+ i128
+ usize
+ u8
and 6 others
error: aborting due to 6 previous errors
diff --git a/tests/ui/mismatched_types/issue-112036.rs b/tests/ui/mismatched_types/issue-112036.rs
new file mode 100644
index 000000000..e63471e97
--- /dev/null
+++ b/tests/ui/mismatched_types/issue-112036.rs
@@ -0,0 +1,7 @@
+struct Foo;
+
+impl Drop for Foo {
+ fn drop(self) {} //~ ERROR method `drop` has an incompatible type for trait
+}
+
+fn main() {}
diff --git a/tests/ui/mismatched_types/issue-112036.stderr b/tests/ui/mismatched_types/issue-112036.stderr
new file mode 100644
index 000000000..a883aba35
--- /dev/null
+++ b/tests/ui/mismatched_types/issue-112036.stderr
@@ -0,0 +1,15 @@
+error[E0053]: method `drop` has an incompatible type for trait
+ --> $DIR/issue-112036.rs:4:13
+ |
+LL | fn drop(self) {}
+ | ^^^^
+ | |
+ | expected `&mut Foo`, found `Foo`
+ | help: change the self-receiver type to match the trait: `&mut self`
+ |
+ = note: expected signature `fn(&mut Foo)`
+ found signature `fn(Foo)`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0053`.
diff --git a/tests/ui/mismatched_types/suggest-option-asderef-inference-var.rs b/tests/ui/mismatched_types/suggest-option-asderef-inference-var.rs
new file mode 100644
index 000000000..5febbbe39
--- /dev/null
+++ b/tests/ui/mismatched_types/suggest-option-asderef-inference-var.rs
@@ -0,0 +1,9 @@
+fn deref_int(a: &i32) -> i32 {
+ *a
+}
+
+fn main() {
+ // https://github.com/rust-lang/rust/issues/112293
+ let _has_inference_vars: Option<i32> = Some(0).map(deref_int);
+ //~^ ERROR type mismatch in function arguments
+}
diff --git a/tests/ui/mismatched_types/suggest-option-asderef-inference-var.stderr b/tests/ui/mismatched_types/suggest-option-asderef-inference-var.stderr
new file mode 100644
index 000000000..71c4729e3
--- /dev/null
+++ b/tests/ui/mismatched_types/suggest-option-asderef-inference-var.stderr
@@ -0,0 +1,24 @@
+error[E0631]: type mismatch in function arguments
+ --> $DIR/suggest-option-asderef-inference-var.rs:7:56
+ |
+LL | fn deref_int(a: &i32) -> i32 {
+ | ---------------------------- found signature defined here
+...
+LL | let _has_inference_vars: Option<i32> = Some(0).map(deref_int);
+ | --- ^^^^^^^^^ expected due to this
+ | |
+ | required by a bound introduced by this call
+ |
+ = note: expected function signature `fn({integer}) -> _`
+ found function signature `for<'a> fn(&'a i32) -> _`
+note: required by a bound in `Option::<T>::map`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+help: do not borrow the argument
+ |
+LL - fn deref_int(a: &i32) -> i32 {
+LL + fn deref_int(a: i32) -> i32 {
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0631`.
diff --git a/tests/ui/mismatched_types/suggest-option-asderef-unfixable.rs b/tests/ui/mismatched_types/suggest-option-asderef-unfixable.rs
new file mode 100644
index 000000000..ac0831ce6
--- /dev/null
+++ b/tests/ui/mismatched_types/suggest-option-asderef-unfixable.rs
@@ -0,0 +1,34 @@
+fn produces_string() -> Option<String> {
+ Some("my cool string".to_owned())
+}
+
+fn takes_str_but_too_many_refs(_: &&str) -> Option<()> {
+ Some(())
+}
+
+fn no_args() -> Option<()> {
+ Some(())
+}
+
+extern "C" fn takes_str_but_wrong_abi(_: &str) -> Option<()> {
+ Some(())
+}
+
+unsafe fn takes_str_but_unsafe(_: &str) -> Option<()> {
+ Some(())
+}
+
+struct TypeWithoutDeref;
+
+fn main() {
+ let _ = produces_string().and_then(takes_str_but_too_many_refs);
+ //~^ ERROR type mismatch in function arguments
+ let _ = produces_string().and_then(takes_str_but_wrong_abi);
+ //~^ ERROR expected a `FnOnce<(String,)>` closure, found `for<'a> extern "C" fn(&'a str) -> Option<()> {takes_str_but_wrong_abi}`
+ let _ = produces_string().and_then(takes_str_but_unsafe);
+ //~^ ERROR expected a `FnOnce<(String,)>` closure, found `for<'a> unsafe fn(&'a str) -> Option<()> {takes_str_but_unsafe}`
+ let _ = produces_string().and_then(no_args);
+ //~^ ERROR function is expected to take 1 argument, but it takes 0 arguments
+ let _ = Some(TypeWithoutDeref).and_then(takes_str_but_too_many_refs);
+ //~^ ERROR type mismatch in function arguments
+}
diff --git a/tests/ui/mismatched_types/suggest-option-asderef-unfixable.stderr b/tests/ui/mismatched_types/suggest-option-asderef-unfixable.stderr
new file mode 100644
index 000000000..ecfbd27b1
--- /dev/null
+++ b/tests/ui/mismatched_types/suggest-option-asderef-unfixable.stderr
@@ -0,0 +1,75 @@
+error[E0631]: type mismatch in function arguments
+ --> $DIR/suggest-option-asderef-unfixable.rs:24:40
+ |
+LL | fn takes_str_but_too_many_refs(_: &&str) -> Option<()> {
+ | ------------------------------------------------------ found signature defined here
+...
+LL | let _ = produces_string().and_then(takes_str_but_too_many_refs);
+ | -------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected due to this
+ | |
+ | required by a bound introduced by this call
+ |
+ = note: expected function signature `fn(String) -> _`
+ found function signature `for<'a, 'b> fn(&'a &'b str) -> _`
+note: required by a bound in `Option::<T>::and_then`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+
+error[E0277]: expected a `FnOnce<(String,)>` closure, found `for<'a> extern "C" fn(&'a str) -> Option<()> {takes_str_but_wrong_abi}`
+ --> $DIR/suggest-option-asderef-unfixable.rs:26:40
+ |
+LL | let _ = produces_string().and_then(takes_str_but_wrong_abi);
+ | -------- ^^^^^^^^^^^^^^^^^^^^^^^ expected an `FnOnce<(String,)>` closure, found `for<'a> extern "C" fn(&'a str) -> Option<()> {takes_str_but_wrong_abi}`
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `FnOnce<(String,)>` is not implemented for fn item `for<'a> extern "C" fn(&'a str) -> Option<()> {takes_str_but_wrong_abi}`
+note: required by a bound in `Option::<T>::and_then`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+
+error[E0277]: expected a `FnOnce<(String,)>` closure, found `for<'a> unsafe fn(&'a str) -> Option<()> {takes_str_but_unsafe}`
+ --> $DIR/suggest-option-asderef-unfixable.rs:28:40
+ |
+LL | let _ = produces_string().and_then(takes_str_but_unsafe);
+ | -------- ^^^^^^^^^^^^^^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
+ | |
+ | required by a bound introduced by this call
+ |
+ = help: the trait `FnOnce<(String,)>` is not implemented for fn item `for<'a> unsafe fn(&'a str) -> Option<()> {takes_str_but_unsafe}`
+ = note: unsafe function cannot be called generically without an unsafe block
+note: required by a bound in `Option::<T>::and_then`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+
+error[E0593]: function is expected to take 1 argument, but it takes 0 arguments
+ --> $DIR/suggest-option-asderef-unfixable.rs:30:40
+ |
+LL | fn no_args() -> Option<()> {
+ | -------------------------- takes 0 arguments
+...
+LL | let _ = produces_string().and_then(no_args);
+ | -------- ^^^^^^^ expected function that takes 1 argument
+ | |
+ | required by a bound introduced by this call
+ |
+note: required by a bound in `Option::<T>::and_then`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+
+error[E0631]: type mismatch in function arguments
+ --> $DIR/suggest-option-asderef-unfixable.rs:32:45
+ |
+LL | fn takes_str_but_too_many_refs(_: &&str) -> Option<()> {
+ | ------------------------------------------------------ found signature defined here
+...
+LL | let _ = Some(TypeWithoutDeref).and_then(takes_str_but_too_many_refs);
+ | -------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected due to this
+ | |
+ | required by a bound introduced by this call
+ |
+ = note: expected function signature `fn(TypeWithoutDeref) -> _`
+ found function signature `for<'a, 'b> fn(&'a &'b str) -> _`
+note: required by a bound in `Option::<T>::and_then`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+
+error: aborting due to 5 previous errors
+
+Some errors have detailed explanations: E0277, E0593, E0631.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/mismatched_types/suggest-option-asderef.fixed b/tests/ui/mismatched_types/suggest-option-asderef.fixed
new file mode 100644
index 000000000..5c42ece3c
--- /dev/null
+++ b/tests/ui/mismatched_types/suggest-option-asderef.fixed
@@ -0,0 +1,39 @@
+// run-rustfix
+
+fn produces_string() -> Option<String> {
+ Some("my cool string".to_owned())
+}
+
+fn takes_str(_: &str) -> Option<()> {
+ Some(())
+}
+
+fn takes_str_mut(_: &mut str) -> Option<()> {
+ Some(())
+}
+
+fn generic<T>(_: T) -> Option<()> {
+ Some(())
+}
+
+fn generic_ref<T>(_: T) -> Option<()> {
+ //~^ HELP do not borrow the argument
+ Some(())
+}
+
+fn main() {
+ let _: Option<()> = produces_string().as_deref().and_then(takes_str);
+ //~^ ERROR type mismatch in function arguments
+ //~| HELP call `Option::as_deref()` first
+ let _: Option<Option<()>> = produces_string().as_deref().map(takes_str);
+ //~^ ERROR type mismatch in function arguments
+ //~| HELP call `Option::as_deref()` first
+ let _: Option<Option<()>> = produces_string().as_deref_mut().map(takes_str_mut);
+ //~^ ERROR type mismatch in function arguments
+ //~| HELP call `Option::as_deref_mut()` first
+ let _ = produces_string().and_then(generic);
+
+ let _ = produces_string().as_deref().and_then(generic_ref);
+ //~^ ERROR type mismatch in function arguments
+ //~| HELP call `Option::as_deref()` first
+}
diff --git a/tests/ui/mismatched_types/suggest-option-asderef.rs b/tests/ui/mismatched_types/suggest-option-asderef.rs
new file mode 100644
index 000000000..a5278b8fb
--- /dev/null
+++ b/tests/ui/mismatched_types/suggest-option-asderef.rs
@@ -0,0 +1,39 @@
+// run-rustfix
+
+fn produces_string() -> Option<String> {
+ Some("my cool string".to_owned())
+}
+
+fn takes_str(_: &str) -> Option<()> {
+ Some(())
+}
+
+fn takes_str_mut(_: &mut str) -> Option<()> {
+ Some(())
+}
+
+fn generic<T>(_: T) -> Option<()> {
+ Some(())
+}
+
+fn generic_ref<T>(_: &T) -> Option<()> {
+ //~^ HELP do not borrow the argument
+ Some(())
+}
+
+fn main() {
+ let _: Option<()> = produces_string().and_then(takes_str);
+ //~^ ERROR type mismatch in function arguments
+ //~| HELP call `Option::as_deref()` first
+ let _: Option<Option<()>> = produces_string().map(takes_str);
+ //~^ ERROR type mismatch in function arguments
+ //~| HELP call `Option::as_deref()` first
+ let _: Option<Option<()>> = produces_string().map(takes_str_mut);
+ //~^ ERROR type mismatch in function arguments
+ //~| HELP call `Option::as_deref_mut()` first
+ let _ = produces_string().and_then(generic);
+
+ let _ = produces_string().and_then(generic_ref);
+ //~^ ERROR type mismatch in function arguments
+ //~| HELP call `Option::as_deref()` first
+}
diff --git a/tests/ui/mismatched_types/suggest-option-asderef.stderr b/tests/ui/mismatched_types/suggest-option-asderef.stderr
new file mode 100644
index 000000000..01341603d
--- /dev/null
+++ b/tests/ui/mismatched_types/suggest-option-asderef.stderr
@@ -0,0 +1,88 @@
+error[E0631]: type mismatch in function arguments
+ --> $DIR/suggest-option-asderef.rs:25:52
+ |
+LL | fn takes_str(_: &str) -> Option<()> {
+ | ----------------------------------- found signature defined here
+...
+LL | let _: Option<()> = produces_string().and_then(takes_str);
+ | -------- ^^^^^^^^^ expected due to this
+ | |
+ | required by a bound introduced by this call
+ |
+ = note: expected function signature `fn(String) -> _`
+ found function signature `for<'a> fn(&'a str) -> _`
+note: required by a bound in `Option::<T>::and_then`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+help: call `Option::as_deref()` first
+ |
+LL | let _: Option<()> = produces_string().as_deref().and_then(takes_str);
+ | +++++++++++
+
+error[E0631]: type mismatch in function arguments
+ --> $DIR/suggest-option-asderef.rs:28:55
+ |
+LL | fn takes_str(_: &str) -> Option<()> {
+ | ----------------------------------- found signature defined here
+...
+LL | let _: Option<Option<()>> = produces_string().map(takes_str);
+ | --- ^^^^^^^^^ expected due to this
+ | |
+ | required by a bound introduced by this call
+ |
+ = note: expected function signature `fn(String) -> _`
+ found function signature `for<'a> fn(&'a str) -> _`
+note: required by a bound in `Option::<T>::map`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+help: call `Option::as_deref()` first
+ |
+LL | let _: Option<Option<()>> = produces_string().as_deref().map(takes_str);
+ | +++++++++++
+
+error[E0631]: type mismatch in function arguments
+ --> $DIR/suggest-option-asderef.rs:31:55
+ |
+LL | fn takes_str_mut(_: &mut str) -> Option<()> {
+ | ------------------------------------------- found signature defined here
+...
+LL | let _: Option<Option<()>> = produces_string().map(takes_str_mut);
+ | --- ^^^^^^^^^^^^^ expected due to this
+ | |
+ | required by a bound introduced by this call
+ |
+ = note: expected function signature `fn(String) -> _`
+ found function signature `for<'a> fn(&'a mut str) -> _`
+note: required by a bound in `Option::<T>::map`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+help: call `Option::as_deref_mut()` first
+ |
+LL | let _: Option<Option<()>> = produces_string().as_deref_mut().map(takes_str_mut);
+ | +++++++++++++++
+
+error[E0631]: type mismatch in function arguments
+ --> $DIR/suggest-option-asderef.rs:36:40
+ |
+LL | fn generic_ref<T>(_: &T) -> Option<()> {
+ | -------------------------------------- found signature defined here
+...
+LL | let _ = produces_string().and_then(generic_ref);
+ | -------- ^^^^^^^^^^^ expected due to this
+ | |
+ | required by a bound introduced by this call
+ |
+ = note: expected function signature `fn(String) -> _`
+ found function signature `for<'a> fn(&'a _) -> _`
+note: required by a bound in `Option::<T>::and_then`
+ --> $SRC_DIR/core/src/option.rs:LL:COL
+help: do not borrow the argument
+ |
+LL - fn generic_ref<T>(_: &T) -> Option<()> {
+LL + fn generic_ref<T>(_: T) -> Option<()> {
+ |
+help: call `Option::as_deref()` first
+ |
+LL | let _ = produces_string().as_deref().and_then(generic_ref);
+ | +++++++++++
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0631`.
diff --git a/tests/ui/missing/missing-macro-use.stderr b/tests/ui/missing/missing-macro-use.stderr
index 99e291cda..e1d80f52d 100644
--- a/tests/ui/missing/missing-macro-use.stderr
+++ b/tests/ui/missing/missing-macro-use.stderr
@@ -4,8 +4,10 @@ error: cannot find macro `macro_two` in this scope
LL | macro_two!();
| ^^^^^^^^^
|
- = help: consider importing this macro:
- two_macros::macro_two
+help: consider importing this macro
+ |
+LL + use two_macros::macro_two;
+ |
error: aborting due to previous error
diff --git a/tests/ui/never_type/diverging-fallback-control-flow.rs b/tests/ui/never_type/diverging-fallback-control-flow.rs
index 45a3362fa..9f6cfc799 100644
--- a/tests/ui/never_type/diverging-fallback-control-flow.rs
+++ b/tests/ui/never_type/diverging-fallback-control-flow.rs
@@ -48,7 +48,7 @@ fn assignment_rev() {
}
fn if_then_else() {
- let _x = if true {
+ let _x: () = if true {
UnitDefault::default()
} else {
return;
@@ -56,7 +56,7 @@ fn if_then_else() {
}
fn if_then_else_rev() {
- let _x = if true {
+ let _x: () = if true {
return;
} else {
UnitDefault::default()
@@ -64,21 +64,21 @@ fn if_then_else_rev() {
}
fn match_arm() {
- let _x = match Ok(UnitDefault::default()) {
+ let _x: () = match Ok(UnitDefault::default()) {
Ok(v) => v,
Err(()) => return,
};
}
fn match_arm_rev() {
- let _x = match Ok(UnitDefault::default()) {
+ let _x: () = match Ok(UnitDefault::default()) {
Err(()) => return,
Ok(v) => v,
};
}
fn loop_break() {
- let _x = loop {
+ let _x: () = loop {
if false {
break return;
} else {
@@ -88,7 +88,7 @@ fn loop_break() {
}
fn loop_break_rev() {
- let _x = loop {
+ let _x: () = loop {
if false {
break return;
} else {
diff --git a/tests/ui/never_type/diverging-fallback-no-leak.fallback.stderr b/tests/ui/never_type/diverging-fallback-no-leak.fallback.stderr
index 3215c4669..df29fe227 100644
--- a/tests/ui/never_type/diverging-fallback-no-leak.fallback.stderr
+++ b/tests/ui/never_type/diverging-fallback-no-leak.fallback.stderr
@@ -7,8 +7,8 @@ LL | unconstrained_arg(return);
| required by a bound introduced by this call
|
= help: the following other types implement trait `Test`:
- ()
i32
+ ()
= note: this error might have been caused by changes to Rust's type-inference algorithm (see issue #48950 <https://github.com/rust-lang/rust/issues/48950> for more information)
= help: did you intend to use the type `()` here instead?
note: required by a bound in `unconstrained_arg`
diff --git a/tests/ui/never_type/issue-13352.stderr b/tests/ui/never_type/issue-13352.stderr
index 2d22da0b4..406785bfe 100644
--- a/tests/ui/never_type/issue-13352.stderr
+++ b/tests/ui/never_type/issue-13352.stderr
@@ -6,10 +6,10 @@ LL | 2_usize + (loop {});
|
= help: the trait `Add<()>` is not implemented for `usize`
= help: the following other types implement trait `Add<Rhs>`:
+ <usize as Add>
+ <usize as Add<&usize>>
<&'a usize as Add<usize>>
<&usize as Add<&usize>>
- <usize as Add<&usize>>
- <usize as Add>
error: aborting due to previous error
diff --git a/tests/ui/nll/assign-while-to-immutable.rs b/tests/ui/nll/assign-while-to-immutable.rs
index c803321b5..24eaa8a23 100644
--- a/tests/ui/nll/assign-while-to-immutable.rs
+++ b/tests/ui/nll/assign-while-to-immutable.rs
@@ -4,8 +4,8 @@
// check-pass
fn main() {
- let x = while false {
+ let x: () = while false {
break;
};
- let y = 'l: while break 'l {};
+ let y: () = 'l: while break 'l {};
}
diff --git a/tests/ui/nll/issue-112604-closure-output-normalize.rs b/tests/ui/nll/issue-112604-closure-output-normalize.rs
new file mode 100644
index 000000000..e4c954eeb
--- /dev/null
+++ b/tests/ui/nll/issue-112604-closure-output-normalize.rs
@@ -0,0 +1,49 @@
+//check-pass
+
+use higher_kinded_types::*;
+mod higher_kinded_types {
+ pub(crate) trait HKT {
+ type Of<'lt>;
+ }
+
+ pub(crate) trait WithLifetime<'lt> {
+ type T;
+ }
+
+ impl<T: ?Sized + for<'any> WithLifetime<'any>> HKT for T {
+ type Of<'lt> = <T as WithLifetime<'lt>>::T;
+ }
+}
+
+trait Trait {
+ type Gat<'lt>;
+}
+
+impl Trait for () {
+ type Gat<'lt> = ();
+}
+
+/// Same as `Trait`, but using HKTs rather than GATs
+trait HTrait {
+ type Hat: ?Sized + HKT;
+}
+
+impl<T: Trait> HTrait for T {
+ type Hat = dyn for<'lt> WithLifetime<'lt, T = T::Gat<'lt>>;
+}
+
+impl<Hat: ?Sized + HKT> Trait for Box<dyn '_ + HTrait<Hat = Hat>> {
+ type Gat<'lt> = Hat::Of<'lt>;
+}
+
+fn existential() -> impl for<'a> Trait<Gat<'a> = ()> {}
+
+fn dyn_hoops<T: Trait>(
+ _: T,
+) -> Box<dyn HTrait<Hat = dyn for<'a> WithLifetime<'a, T = T::Gat<'a>>>> {
+ loop {}
+}
+
+fn main() {
+ let _ = || -> _ { dyn_hoops(existential()) };
+}
diff --git a/tests/ui/nll/issue-53119.rs b/tests/ui/nll/issue-53119.rs
index 03c9c071c..015b72367 100644
--- a/tests/ui/nll/issue-53119.rs
+++ b/tests/ui/nll/issue-53119.rs
@@ -1,4 +1,6 @@
// check-pass
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
use std::ops::Deref;
diff --git a/tests/ui/nll/issue-54943-3.rs b/tests/ui/nll/issue-54943-3.rs
index 077eb1563..348b48dba 100644
--- a/tests/ui/nll/issue-54943-3.rs
+++ b/tests/ui/nll/issue-54943-3.rs
@@ -13,7 +13,7 @@ fn foo<T: 'static + Debug>(_: T) { }
fn bar<'a>() {
return;
- let _x = foo::<Vec<_>>(Vec::<&'a u32>::new());
+ foo::<Vec<_>>(Vec::<&'a u32>::new());
}
fn main() {}
diff --git a/tests/ui/nll/ty-outlives/impl-trait-captures.stderr b/tests/ui/nll/ty-outlives/impl-trait-captures.stderr
index da4b9595c..ba885d1b9 100644
--- a/tests/ui/nll/ty-outlives/impl-trait-captures.stderr
+++ b/tests/ui/nll/ty-outlives/impl-trait-captures.stderr
@@ -1,4 +1,4 @@
-error[E0700]: hidden type for `Opaque(DefId(0:13 ~ impl_trait_captures[aeb9]::foo::{opaque#0}), [ReEarlyBound(0, 'a), T, ReEarlyBound(0, 'a)])` captures lifetime that does not appear in bounds
+error[E0700]: hidden type for `Opaque(DefId(0:13 ~ impl_trait_captures[aeb9]::foo::{opaque#0}), [ReEarlyBound(DefId(0:9 ~ impl_trait_captures[aeb9]::foo::'a), 0, 'a), T, ReEarlyBound(DefId(0:9 ~ impl_trait_captures[aeb9]::foo::'a), 0, 'a)])` captures lifetime that does not appear in bounds
--> $DIR/impl-trait-captures.rs:11:5
|
LL | fn foo<'a, T>(x: &T) -> impl Foo<'a> {
@@ -8,7 +8,7 @@ LL | fn foo<'a, T>(x: &T) -> impl Foo<'a> {
LL | x
| ^
|
-help: to declare that `Opaque(DefId(0:13 ~ impl_trait_captures[aeb9]::foo::{opaque#0}), [ReEarlyBound(0, 'a), T, ReEarlyBound(2, 'a)])` captures `ReFree(DefId(0:8 ~ impl_trait_captures[aeb9]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[aeb9]::foo::'_), '_))`, you can add an explicit `ReFree(DefId(0:8 ~ impl_trait_captures[aeb9]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[aeb9]::foo::'_), '_))` lifetime bound
+help: to declare that `Opaque(DefId(0:13 ~ impl_trait_captures[aeb9]::foo::{opaque#0}), [ReEarlyBound(DefId(0:9 ~ impl_trait_captures[aeb9]::foo::'a), 0, 'a), T, ReEarlyBound(DefId(0:14 ~ impl_trait_captures[aeb9]::foo::{opaque#0}::'a), 2, 'a)])` captures `ReFree(DefId(0:8 ~ impl_trait_captures[aeb9]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[aeb9]::foo::'_), '_))`, you can add an explicit `ReFree(DefId(0:8 ~ impl_trait_captures[aeb9]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[aeb9]::foo::'_), '_))` lifetime bound
|
LL | fn foo<'a, T>(x: &T) -> impl Foo<'a> + ReFree(DefId(0:8 ~ impl_trait_captures[aeb9]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[aeb9]::foo::'_), '_)) {
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/tests/ui/nll/user-annotations/normalization-2.stderr b/tests/ui/nll/user-annotations/normalization-2.stderr
index 5299282ea..6b0dcb414 100644
--- a/tests/ui/nll/user-annotations/normalization-2.stderr
+++ b/tests/ui/nll/user-annotations/normalization-2.stderr
@@ -147,7 +147,7 @@ LL | fn test_variants<'a, 'b, 'c>() {
| -- lifetime `'b` defined here
...
LL | <Ty<'b>>::Tuple();
- | ^^^^^^^^^^^^^^^ requires that `'b` must outlive `'static`
+ | ^^^^^^^^^^^^^^^^^ requires that `'b` must outlive `'static`
error: lifetime may not live long enough
--> $DIR/normalization-2.rs:93:5
diff --git a/tests/ui/numbers-arithmetic/issue-8460-const.noopt.stderr b/tests/ui/numbers-arithmetic/issue-8460-const.noopt.stderr
index c4abcb784..2fba94d07 100644
--- a/tests/ui/numbers-arithmetic/issue-8460-const.noopt.stderr
+++ b/tests/ui/numbers-arithmetic/issue-8460-const.noopt.stderr
@@ -76,37 +76,37 @@ error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:35:36
|
LL | assert!(thread::spawn(move|| { isize::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^^^ attempt to compute the remainder of `isize::MIN % -1_isize`, which would overflow
+ | ^^^^^^^^^^^^^^^ attempt to compute `isize::MIN % -1_isize`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:37:36
|
LL | assert!(thread::spawn(move|| { i8::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^ attempt to compute the remainder of `i8::MIN % -1_i8`, which would overflow
+ | ^^^^^^^^^^^^ attempt to compute `i8::MIN % -1_i8`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:39:36
|
LL | assert!(thread::spawn(move|| { i16::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^ attempt to compute the remainder of `i16::MIN % -1_i16`, which would overflow
+ | ^^^^^^^^^^^^^ attempt to compute `i16::MIN % -1_i16`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:41:36
|
LL | assert!(thread::spawn(move|| { i32::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^ attempt to compute the remainder of `i32::MIN % -1_i32`, which would overflow
+ | ^^^^^^^^^^^^^ attempt to compute `i32::MIN % -1_i32`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:43:36
|
LL | assert!(thread::spawn(move|| { i64::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^ attempt to compute the remainder of `i64::MIN % -1_i64`, which would overflow
+ | ^^^^^^^^^^^^^ attempt to compute `i64::MIN % -1_i64`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:45:36
|
LL | assert!(thread::spawn(move|| { i128::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^^ attempt to compute the remainder of `i128::MIN % -1_i128`, which would overflow
+ | ^^^^^^^^^^^^^^ attempt to compute `i128::MIN % -1_i128`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:47:36
diff --git a/tests/ui/numbers-arithmetic/issue-8460-const.opt.stderr b/tests/ui/numbers-arithmetic/issue-8460-const.opt.stderr
index c4abcb784..2fba94d07 100644
--- a/tests/ui/numbers-arithmetic/issue-8460-const.opt.stderr
+++ b/tests/ui/numbers-arithmetic/issue-8460-const.opt.stderr
@@ -76,37 +76,37 @@ error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:35:36
|
LL | assert!(thread::spawn(move|| { isize::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^^^ attempt to compute the remainder of `isize::MIN % -1_isize`, which would overflow
+ | ^^^^^^^^^^^^^^^ attempt to compute `isize::MIN % -1_isize`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:37:36
|
LL | assert!(thread::spawn(move|| { i8::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^ attempt to compute the remainder of `i8::MIN % -1_i8`, which would overflow
+ | ^^^^^^^^^^^^ attempt to compute `i8::MIN % -1_i8`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:39:36
|
LL | assert!(thread::spawn(move|| { i16::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^ attempt to compute the remainder of `i16::MIN % -1_i16`, which would overflow
+ | ^^^^^^^^^^^^^ attempt to compute `i16::MIN % -1_i16`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:41:36
|
LL | assert!(thread::spawn(move|| { i32::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^ attempt to compute the remainder of `i32::MIN % -1_i32`, which would overflow
+ | ^^^^^^^^^^^^^ attempt to compute `i32::MIN % -1_i32`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:43:36
|
LL | assert!(thread::spawn(move|| { i64::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^ attempt to compute the remainder of `i64::MIN % -1_i64`, which would overflow
+ | ^^^^^^^^^^^^^ attempt to compute `i64::MIN % -1_i64`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:45:36
|
LL | assert!(thread::spawn(move|| { i128::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^^ attempt to compute the remainder of `i128::MIN % -1_i128`, which would overflow
+ | ^^^^^^^^^^^^^^ attempt to compute `i128::MIN % -1_i128`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:47:36
diff --git a/tests/ui/numbers-arithmetic/issue-8460-const.opt_with_overflow_checks.stderr b/tests/ui/numbers-arithmetic/issue-8460-const.opt_with_overflow_checks.stderr
index c4abcb784..2fba94d07 100644
--- a/tests/ui/numbers-arithmetic/issue-8460-const.opt_with_overflow_checks.stderr
+++ b/tests/ui/numbers-arithmetic/issue-8460-const.opt_with_overflow_checks.stderr
@@ -76,37 +76,37 @@ error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:35:36
|
LL | assert!(thread::spawn(move|| { isize::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^^^ attempt to compute the remainder of `isize::MIN % -1_isize`, which would overflow
+ | ^^^^^^^^^^^^^^^ attempt to compute `isize::MIN % -1_isize`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:37:36
|
LL | assert!(thread::spawn(move|| { i8::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^ attempt to compute the remainder of `i8::MIN % -1_i8`, which would overflow
+ | ^^^^^^^^^^^^ attempt to compute `i8::MIN % -1_i8`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:39:36
|
LL | assert!(thread::spawn(move|| { i16::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^ attempt to compute the remainder of `i16::MIN % -1_i16`, which would overflow
+ | ^^^^^^^^^^^^^ attempt to compute `i16::MIN % -1_i16`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:41:36
|
LL | assert!(thread::spawn(move|| { i32::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^ attempt to compute the remainder of `i32::MIN % -1_i32`, which would overflow
+ | ^^^^^^^^^^^^^ attempt to compute `i32::MIN % -1_i32`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:43:36
|
LL | assert!(thread::spawn(move|| { i64::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^ attempt to compute the remainder of `i64::MIN % -1_i64`, which would overflow
+ | ^^^^^^^^^^^^^ attempt to compute `i64::MIN % -1_i64`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:45:36
|
LL | assert!(thread::spawn(move|| { i128::MIN % -1; }).join().is_err());
- | ^^^^^^^^^^^^^^ attempt to compute the remainder of `i128::MIN % -1_i128`, which would overflow
+ | ^^^^^^^^^^^^^^ attempt to compute `i128::MIN % -1_i128`, which would overflow
error: this operation will panic at runtime
--> $DIR/issue-8460-const.rs:47:36
diff --git a/tests/ui/numbers-arithmetic/not-suggest-float-literal.stderr b/tests/ui/numbers-arithmetic/not-suggest-float-literal.stderr
index 8f0eef237..e1825eb5b 100644
--- a/tests/ui/numbers-arithmetic/not-suggest-float-literal.stderr
+++ b/tests/ui/numbers-arithmetic/not-suggest-float-literal.stderr
@@ -6,10 +6,10 @@ LL | x + 100.0
|
= help: the trait `Add<{float}>` is not implemented for `u8`
= help: the following other types implement trait `Add<Rhs>`:
+ <u8 as Add>
+ <u8 as Add<&u8>>
<&'a u8 as Add<u8>>
<&u8 as Add<&u8>>
- <u8 as Add<&u8>>
- <u8 as Add>
error[E0277]: cannot add `&str` to `f64`
--> $DIR/not-suggest-float-literal.rs:6:7
@@ -19,10 +19,10 @@ LL | x + "foo"
|
= help: the trait `Add<&str>` is not implemented for `f64`
= help: the following other types implement trait `Add<Rhs>`:
+ <f64 as Add>
+ <f64 as Add<&f64>>
<&'a f64 as Add<f64>>
<&f64 as Add<&f64>>
- <f64 as Add<&f64>>
- <f64 as Add>
error[E0277]: cannot add `{integer}` to `f64`
--> $DIR/not-suggest-float-literal.rs:11:7
@@ -32,10 +32,10 @@ LL | x + y
|
= help: the trait `Add<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Add<Rhs>`:
+ <f64 as Add>
+ <f64 as Add<&f64>>
<&'a f64 as Add<f64>>
<&f64 as Add<&f64>>
- <f64 as Add<&f64>>
- <f64 as Add>
error[E0277]: cannot subtract `{float}` from `u8`
--> $DIR/not-suggest-float-literal.rs:15:7
@@ -45,10 +45,10 @@ LL | x - 100.0
|
= help: the trait `Sub<{float}>` is not implemented for `u8`
= help: the following other types implement trait `Sub<Rhs>`:
+ <u8 as Sub>
+ <u8 as Sub<&u8>>
<&'a u8 as Sub<u8>>
<&u8 as Sub<&u8>>
- <u8 as Sub<&u8>>
- <u8 as Sub>
error[E0277]: cannot subtract `&str` from `f64`
--> $DIR/not-suggest-float-literal.rs:19:7
@@ -58,10 +58,10 @@ LL | x - "foo"
|
= help: the trait `Sub<&str>` is not implemented for `f64`
= help: the following other types implement trait `Sub<Rhs>`:
+ <f64 as Sub>
+ <f64 as Sub<&f64>>
<&'a f64 as Sub<f64>>
<&f64 as Sub<&f64>>
- <f64 as Sub<&f64>>
- <f64 as Sub>
error[E0277]: cannot subtract `{integer}` from `f64`
--> $DIR/not-suggest-float-literal.rs:24:7
@@ -71,10 +71,10 @@ LL | x - y
|
= help: the trait `Sub<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Sub<Rhs>`:
+ <f64 as Sub>
+ <f64 as Sub<&f64>>
<&'a f64 as Sub<f64>>
<&f64 as Sub<&f64>>
- <f64 as Sub<&f64>>
- <f64 as Sub>
error[E0277]: cannot multiply `u8` by `{float}`
--> $DIR/not-suggest-float-literal.rs:28:7
@@ -84,10 +84,10 @@ LL | x * 100.0
|
= help: the trait `Mul<{float}>` is not implemented for `u8`
= help: the following other types implement trait `Mul<Rhs>`:
+ <u8 as Mul>
+ <u8 as Mul<&u8>>
<&'a u8 as Mul<u8>>
<&u8 as Mul<&u8>>
- <u8 as Mul<&u8>>
- <u8 as Mul>
error[E0277]: cannot multiply `f64` by `&str`
--> $DIR/not-suggest-float-literal.rs:32:7
@@ -97,10 +97,10 @@ LL | x * "foo"
|
= help: the trait `Mul<&str>` is not implemented for `f64`
= help: the following other types implement trait `Mul<Rhs>`:
+ <f64 as Mul>
+ <f64 as Mul<&f64>>
<&'a f64 as Mul<f64>>
<&f64 as Mul<&f64>>
- <f64 as Mul<&f64>>
- <f64 as Mul>
error[E0277]: cannot multiply `f64` by `{integer}`
--> $DIR/not-suggest-float-literal.rs:37:7
@@ -110,10 +110,10 @@ LL | x * y
|
= help: the trait `Mul<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Mul<Rhs>`:
+ <f64 as Mul>
+ <f64 as Mul<&f64>>
<&'a f64 as Mul<f64>>
<&f64 as Mul<&f64>>
- <f64 as Mul<&f64>>
- <f64 as Mul>
error[E0277]: cannot divide `u8` by `{float}`
--> $DIR/not-suggest-float-literal.rs:41:7
@@ -123,11 +123,11 @@ LL | x / 100.0
|
= help: the trait `Div<{float}>` is not implemented for `u8`
= help: the following other types implement trait `Div<Rhs>`:
+ <u8 as Div>
+ <u8 as Div<NonZeroU8>>
+ <u8 as Div<&u8>>
<&'a u8 as Div<u8>>
<&u8 as Div<&u8>>
- <u8 as Div<&u8>>
- <u8 as Div<NonZeroU8>>
- <u8 as Div>
error[E0277]: cannot divide `f64` by `&str`
--> $DIR/not-suggest-float-literal.rs:45:7
@@ -137,10 +137,10 @@ LL | x / "foo"
|
= help: the trait `Div<&str>` is not implemented for `f64`
= help: the following other types implement trait `Div<Rhs>`:
+ <f64 as Div>
+ <f64 as Div<&f64>>
<&'a f64 as Div<f64>>
<&f64 as Div<&f64>>
- <f64 as Div<&f64>>
- <f64 as Div>
error[E0277]: cannot divide `f64` by `{integer}`
--> $DIR/not-suggest-float-literal.rs:50:7
@@ -150,10 +150,10 @@ LL | x / y
|
= help: the trait `Div<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Div<Rhs>`:
+ <f64 as Div>
+ <f64 as Div<&f64>>
<&'a f64 as Div<f64>>
<&f64 as Div<&f64>>
- <f64 as Div<&f64>>
- <f64 as Div>
error: aborting due to 12 previous errors
diff --git a/tests/ui/numbers-arithmetic/suggest-float-literal.stderr b/tests/ui/numbers-arithmetic/suggest-float-literal.stderr
index 03779d356..929a9e3b5 100644
--- a/tests/ui/numbers-arithmetic/suggest-float-literal.stderr
+++ b/tests/ui/numbers-arithmetic/suggest-float-literal.stderr
@@ -6,10 +6,10 @@ LL | x + 100
|
= help: the trait `Add<{integer}>` is not implemented for `f32`
= help: the following other types implement trait `Add<Rhs>`:
+ <f32 as Add>
+ <f32 as Add<&f32>>
<&'a f32 as Add<f32>>
<&f32 as Add<&f32>>
- <f32 as Add<&f32>>
- <f32 as Add>
help: consider using a floating-point literal by writing it with `.0`
|
LL | x + 100.0
@@ -23,10 +23,10 @@ LL | x + 100
|
= help: the trait `Add<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Add<Rhs>`:
+ <f64 as Add>
+ <f64 as Add<&f64>>
<&'a f64 as Add<f64>>
<&f64 as Add<&f64>>
- <f64 as Add<&f64>>
- <f64 as Add>
help: consider using a floating-point literal by writing it with `.0`
|
LL | x + 100.0
@@ -40,10 +40,10 @@ LL | x - 100
|
= help: the trait `Sub<{integer}>` is not implemented for `f32`
= help: the following other types implement trait `Sub<Rhs>`:
+ <f32 as Sub>
+ <f32 as Sub<&f32>>
<&'a f32 as Sub<f32>>
<&f32 as Sub<&f32>>
- <f32 as Sub<&f32>>
- <f32 as Sub>
help: consider using a floating-point literal by writing it with `.0`
|
LL | x - 100.0
@@ -57,10 +57,10 @@ LL | x - 100
|
= help: the trait `Sub<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Sub<Rhs>`:
+ <f64 as Sub>
+ <f64 as Sub<&f64>>
<&'a f64 as Sub<f64>>
<&f64 as Sub<&f64>>
- <f64 as Sub<&f64>>
- <f64 as Sub>
help: consider using a floating-point literal by writing it with `.0`
|
LL | x - 100.0
@@ -74,10 +74,10 @@ LL | x * 100
|
= help: the trait `Mul<{integer}>` is not implemented for `f32`
= help: the following other types implement trait `Mul<Rhs>`:
+ <f32 as Mul>
+ <f32 as Mul<&f32>>
<&'a f32 as Mul<f32>>
<&f32 as Mul<&f32>>
- <f32 as Mul<&f32>>
- <f32 as Mul>
help: consider using a floating-point literal by writing it with `.0`
|
LL | x * 100.0
@@ -91,10 +91,10 @@ LL | x * 100
|
= help: the trait `Mul<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Mul<Rhs>`:
+ <f64 as Mul>
+ <f64 as Mul<&f64>>
<&'a f64 as Mul<f64>>
<&f64 as Mul<&f64>>
- <f64 as Mul<&f64>>
- <f64 as Mul>
help: consider using a floating-point literal by writing it with `.0`
|
LL | x * 100.0
@@ -108,10 +108,10 @@ LL | x / 100
|
= help: the trait `Div<{integer}>` is not implemented for `f32`
= help: the following other types implement trait `Div<Rhs>`:
+ <f32 as Div>
+ <f32 as Div<&f32>>
<&'a f32 as Div<f32>>
<&f32 as Div<&f32>>
- <f32 as Div<&f32>>
- <f32 as Div>
help: consider using a floating-point literal by writing it with `.0`
|
LL | x / 100.0
@@ -125,10 +125,10 @@ LL | x / 100
|
= help: the trait `Div<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Div<Rhs>`:
+ <f64 as Div>
+ <f64 as Div<&f64>>
<&'a f64 as Div<f64>>
<&f64 as Div<&f64>>
- <f64 as Div<&f64>>
- <f64 as Div>
help: consider using a floating-point literal by writing it with `.0`
|
LL | x / 100.0
diff --git a/tests/ui/object-safety/assoc_type_bounds_sized.rs b/tests/ui/object-safety/assoc_type_bounds_sized.rs
index 61ad3cf9d..6d10ceeb1 100644
--- a/tests/ui/object-safety/assoc_type_bounds_sized.rs
+++ b/tests/ui/object-safety/assoc_type_bounds_sized.rs
@@ -1,9 +1,24 @@
+//! This test checks that associated types only need to be
+//! mentioned in trait objects, if they don't require `Self: Sized`.
+
+// check-pass
+
trait Foo {
type Bar
where
Self: Sized;
}
-fn foo(_: &dyn Foo) {} //~ ERROR: the value of the associated type `Bar` (from trait `Foo`) must be specified
+fn foo(_: &dyn Foo) {}
+
+trait Other: Sized {}
+
+trait Boo {
+ type Assoc
+ where
+ Self: Other;
+}
+
+fn boo(_: &dyn Boo) {}
fn main() {}
diff --git a/tests/ui/object-safety/assoc_type_bounds_sized.stderr b/tests/ui/object-safety/assoc_type_bounds_sized.stderr
deleted file mode 100644
index 49d624f9b..000000000
--- a/tests/ui/object-safety/assoc_type_bounds_sized.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0191]: the value of the associated type `Bar` (from trait `Foo`) must be specified
- --> $DIR/assoc_type_bounds_sized.rs:7:16
- |
-LL | type Bar
- | -------- `Bar` defined here
-...
-LL | fn foo(_: &dyn Foo) {}
- | ^^^ help: specify the associated type: `Foo<Bar = Type>`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0191`.
diff --git a/tests/ui/object-safety/assoc_type_bounds_sized_others.rs b/tests/ui/object-safety/assoc_type_bounds_sized_others.rs
new file mode 100644
index 000000000..647b72a75
--- /dev/null
+++ b/tests/ui/object-safety/assoc_type_bounds_sized_others.rs
@@ -0,0 +1,25 @@
+//! This test checks that even if some associated types have
+//! `where Self: Sized` bounds, those without still need to be
+//! mentioned in trait objects.
+
+trait Foo {
+ type Bar
+ where
+ Self: Sized;
+ type Bop;
+}
+
+fn foo(_: &dyn Foo) {}
+//~^ ERROR the value of the associated type `Bop` (from trait `Foo`) must be specified
+
+trait Bar {
+ type Bop;
+ type Bar
+ where
+ Self: Sized;
+}
+
+fn bar(_: &dyn Bar) {}
+//~^ ERROR the value of the associated type `Bop` (from trait `Bar`) must be specified
+
+fn main() {}
diff --git a/tests/ui/object-safety/assoc_type_bounds_sized_others.stderr b/tests/ui/object-safety/assoc_type_bounds_sized_others.stderr
new file mode 100644
index 000000000..e4c44334b
--- /dev/null
+++ b/tests/ui/object-safety/assoc_type_bounds_sized_others.stderr
@@ -0,0 +1,21 @@
+error[E0191]: the value of the associated type `Bop` (from trait `Foo`) must be specified
+ --> $DIR/assoc_type_bounds_sized_others.rs:12:16
+ |
+LL | type Bop;
+ | -------- `Bop` defined here
+...
+LL | fn foo(_: &dyn Foo) {}
+ | ^^^ help: specify the associated type: `Foo<Bop = Type>`
+
+error[E0191]: the value of the associated type `Bop` (from trait `Bar`) must be specified
+ --> $DIR/assoc_type_bounds_sized_others.rs:22:16
+ |
+LL | type Bop;
+ | -------- `Bop` defined here
+...
+LL | fn bar(_: &dyn Bar) {}
+ | ^^^ help: specify the associated type: `Bar<Bop = Type>`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0191`.
diff --git a/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.rs b/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.rs
new file mode 100644
index 000000000..800624e31
--- /dev/null
+++ b/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.rs
@@ -0,0 +1,17 @@
+// check-pass
+
+trait Foo {
+ type Bar
+ where
+ Self: Sized;
+}
+
+fn foo(_: &dyn Foo<Bar = ()>) {}
+//~^ WARN: unnecessary associated type bound for not object safe associated type
+//~| WARN: unnecessary associated type bound for not object safe associated type
+//~| WARN: unnecessary associated type bound for not object safe associated type
+
+#[allow(unused_associated_type_bounds)]
+fn bar(_: &dyn Foo<Bar = ()>) {}
+
+fn main() {}
diff --git a/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr b/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr
new file mode 100644
index 000000000..d0a4179fe
--- /dev/null
+++ b/tests/ui/object-safety/assoc_type_bounds_sized_unnecessary.stderr
@@ -0,0 +1,27 @@
+warning: unnecessary associated type bound for not object safe associated type
+ --> $DIR/assoc_type_bounds_sized_unnecessary.rs:9:20
+ |
+LL | fn foo(_: &dyn Foo<Bar = ()>) {}
+ | ^^^^^^^^ help: remove this bound
+ |
+ = note: this associated type has a `where Self: Sized` bound. Thus, while the associated type can be specified, it cannot be used in any way, because trait objects are not `Sized`.
+ = note: `#[warn(unused_associated_type_bounds)]` on by default
+
+warning: unnecessary associated type bound for not object safe associated type
+ --> $DIR/assoc_type_bounds_sized_unnecessary.rs:9:20
+ |
+LL | fn foo(_: &dyn Foo<Bar = ()>) {}
+ | ^^^^^^^^ help: remove this bound
+ |
+ = note: this associated type has a `where Self: Sized` bound. Thus, while the associated type can be specified, it cannot be used in any way, because trait objects are not `Sized`.
+
+warning: unnecessary associated type bound for not object safe associated type
+ --> $DIR/assoc_type_bounds_sized_unnecessary.rs:9:20
+ |
+LL | fn foo(_: &dyn Foo<Bar = ()>) {}
+ | ^^^^^^^^ help: remove this bound
+ |
+ = note: this associated type has a `where Self: Sized` bound. Thus, while the associated type can be specified, it cannot be used in any way, because trait objects are not `Sized`.
+
+warning: 3 warnings emitted
+
diff --git a/tests/ui/object-safety/assoc_type_bounds_sized_used.rs b/tests/ui/object-safety/assoc_type_bounds_sized_used.rs
new file mode 100644
index 000000000..cf5345b1c
--- /dev/null
+++ b/tests/ui/object-safety/assoc_type_bounds_sized_used.rs
@@ -0,0 +1,20 @@
+//! This test checks that even if some associated types have
+//! `where Self: Sized` bounds, those without still need to be
+//! mentioned in trait objects.
+
+trait Bop {
+ type Bar: Default
+ where
+ Self: Sized;
+}
+
+fn bop<T: Bop + ?Sized>() {
+ let _ = <T as Bop>::Bar::default();
+ //~^ ERROR: trait bounds were not satisfied
+ //~| ERROR: the size for values of type `T` cannot be known at compilation time
+}
+
+fn main() {
+ bop::<dyn Bop>();
+ //~^ ERROR: the size for values of type `dyn Bop` cannot be known at compilation time
+}
diff --git a/tests/ui/object-safety/assoc_type_bounds_sized_used.stderr b/tests/ui/object-safety/assoc_type_bounds_sized_used.stderr
new file mode 100644
index 000000000..f8488d842
--- /dev/null
+++ b/tests/ui/object-safety/assoc_type_bounds_sized_used.stderr
@@ -0,0 +1,53 @@
+error[E0599]: the function or associated item `default` exists for associated type `<T as Bop>::Bar`, but its trait bounds were not satisfied
+ --> $DIR/assoc_type_bounds_sized_used.rs:12:30
+ |
+LL | let _ = <T as Bop>::Bar::default();
+ | ^^^^^^^ function or associated item cannot be called on `<T as Bop>::Bar` due to unsatisfied trait bounds
+ |
+ = note: the following trait bounds were not satisfied:
+ `T: Sized`
+ which is required by `<T as Bop>::Bar: Default`
+help: consider restricting the type parameter to satisfy the trait bound
+ |
+LL | fn bop<T: Bop + ?Sized>() where T: Sized {
+ | ++++++++++++++
+
+error[E0277]: the size for values of type `T` cannot be known at compilation time
+ --> $DIR/assoc_type_bounds_sized_used.rs:12:13
+ |
+LL | fn bop<T: Bop + ?Sized>() {
+ | - this type parameter needs to be `Sized`
+LL | let _ = <T as Bop>::Bar::default();
+ | ^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+note: required by a bound in `Bop::Bar`
+ --> $DIR/assoc_type_bounds_sized_used.rs:8:15
+ |
+LL | type Bar: Default
+ | --- required by a bound in this associated type
+LL | where
+LL | Self: Sized;
+ | ^^^^^ required by this bound in `Bop::Bar`
+help: consider removing the `?Sized` bound to make the type parameter `Sized`
+ |
+LL - fn bop<T: Bop + ?Sized>() {
+LL + fn bop<T: Bop>() {
+ |
+
+error[E0277]: the size for values of type `dyn Bop` cannot be known at compilation time
+ --> $DIR/assoc_type_bounds_sized_used.rs:18:11
+ |
+LL | bop::<dyn Bop>();
+ | ^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `dyn Bop`
+note: required by a bound in `bop`
+ --> $DIR/assoc_type_bounds_sized_used.rs:11:11
+ |
+LL | fn bop<T: Bop + ?Sized>() {
+ | ^^^ required by this bound in `bop`
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0277, E0599.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/offset-of/offset-of-dst-field.rs b/tests/ui/offset-of/offset-of-dst-field.rs
index 3b8dc0b84..e393b159e 100644
--- a/tests/ui/offset-of/offset-of-dst-field.rs
+++ b/tests/ui/offset-of/offset-of-dst-field.rs
@@ -36,6 +36,8 @@ fn main() {
offset_of!(Alpha, z); //~ ERROR the size for values of type
offset_of!(Beta, z); //~ ERROR the size for values of type
offset_of!(Gamma, z); //~ ERROR the size for values of type
+ offset_of!((u8, dyn Trait), 0); // ok
+ offset_of!((u8, dyn Trait), 1); //~ ERROR the size for values of type
}
fn delta() {
diff --git a/tests/ui/offset-of/offset-of-dst-field.stderr b/tests/ui/offset-of/offset-of-dst-field.stderr
index 128c783d5..658678dc4 100644
--- a/tests/ui/offset-of/offset-of-dst-field.stderr
+++ b/tests/ui/offset-of/offset-of-dst-field.stderr
@@ -25,26 +25,17 @@ LL | offset_of!(Gamma, z);
= help: the trait `Sized` is not implemented for `Extern`
= note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
-error[E0277]: the size for values of type `Extern` cannot be known at compilation time
- --> $DIR/offset-of-dst-field.rs:43:5
- |
-LL | offset_of!(Delta<Extern>, z);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
- |
- = help: the trait `Sized` is not implemented for `Extern`
- = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
-
error[E0277]: the size for values of type `dyn Trait` cannot be known at compilation time
- --> $DIR/offset-of-dst-field.rs:44:5
+ --> $DIR/offset-of-dst-field.rs:40:5
|
-LL | offset_of!(Delta<dyn Trait>, z);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+LL | offset_of!((u8, dyn Trait), 1);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `Sized` is not implemented for `dyn Trait`
= note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
- --> $DIR/offset-of-dst-field.rs:42:5
+ --> $DIR/offset-of-dst-field.rs:44:5
|
LL | offset_of!(Delta<Alpha>, z);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
@@ -57,11 +48,29 @@ LL | struct Alpha {
| ^^^^^
= note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+error[E0277]: the size for values of type `Extern` cannot be known at compilation time
+ --> $DIR/offset-of-dst-field.rs:45:5
+ |
+LL | offset_of!(Delta<Extern>, z);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `Extern`
+ = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0277]: the size for values of type `dyn Trait` cannot be known at compilation time
+ --> $DIR/offset-of-dst-field.rs:46:5
+ |
+LL | offset_of!(Delta<dyn Trait>, z);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: the trait `Sized` is not implemented for `dyn Trait`
+ = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+
error[E0277]: the size for values of type `T` cannot be known at compilation time
- --> $DIR/offset-of-dst-field.rs:48:5
+ --> $DIR/offset-of-dst-field.rs:50:5
|
LL | fn generic_with_maybe_sized<T: ?Sized>() -> usize {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | offset_of!(Delta<T>, z)
| ^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
@@ -72,6 +81,6 @@ LL - fn generic_with_maybe_sized<T: ?Sized>() -> usize {
LL + fn generic_with_maybe_sized<T>() -> usize {
|
-error: aborting due to 7 previous errors
+error: aborting due to 8 previous errors
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/offset-of/offset-of-must-use.rs b/tests/ui/offset-of/offset-of-must-use.rs
new file mode 100644
index 000000000..e30145d7a
--- /dev/null
+++ b/tests/ui/offset-of/offset-of-must-use.rs
@@ -0,0 +1,9 @@
+// check-pass
+
+#![feature(offset_of)]
+#![warn(unused)]
+
+fn main() {
+ core::mem::offset_of!((String,), 0);
+ //~^ WARN unused return value of `must_use` that must be used
+}
diff --git a/tests/ui/offset-of/offset-of-must-use.stderr b/tests/ui/offset-of/offset-of-must-use.stderr
new file mode 100644
index 000000000..5fe387a72
--- /dev/null
+++ b/tests/ui/offset-of/offset-of-must-use.stderr
@@ -0,0 +1,16 @@
+warning: unused return value of `must_use` that must be used
+ --> $DIR/offset-of-must-use.rs:7:5
+ |
+LL | core::mem::offset_of!((String,), 0);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: the lint level is defined here
+ --> $DIR/offset-of-must-use.rs:4:9
+ |
+LL | #![warn(unused)]
+ | ^^^^^^
+ = note: `#[warn(unused_must_use)]` implied by `#[warn(unused)]`
+ = note: this warning originates in the macro `core::mem::offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+warning: 1 warning emitted
+
diff --git a/tests/ui/offset-of/offset-of-output-type.stderr b/tests/ui/offset-of/offset-of-output-type.stderr
index 6f8c94750..6133f3263 100644
--- a/tests/ui/offset-of/offset-of-output-type.stderr
+++ b/tests/ui/offset-of/offset-of-output-type.stderr
@@ -2,9 +2,7 @@ error[E0308]: mismatched types
--> $DIR/offset-of-output-type.rs:12:17
|
LL | let _: u8 = offset_of!(S, v);
- | -- ^^^^^^^^^^^^^^^^ expected `u8`, found `usize`
- | |
- | expected due to this
+ | ^^^^^^^^^^^^^^^^ expected `u8`, found `usize`
|
= note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
@@ -12,9 +10,7 @@ error[E0308]: mismatched types
--> $DIR/offset-of-output-type.rs:13:18
|
LL | let _: u16 = offset_of!(S, v);
- | --- ^^^^^^^^^^^^^^^^ expected `u16`, found `usize`
- | |
- | expected due to this
+ | ^^^^^^^^^^^^^^^^ expected `u16`, found `usize`
|
= note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
@@ -22,9 +18,7 @@ error[E0308]: mismatched types
--> $DIR/offset-of-output-type.rs:14:18
|
LL | let _: u32 = offset_of!(S, v);
- | --- ^^^^^^^^^^^^^^^^ expected `u32`, found `usize`
- | |
- | expected due to this
+ | ^^^^^^^^^^^^^^^^ expected `u32`, found `usize`
|
= note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
@@ -32,9 +26,7 @@ error[E0308]: mismatched types
--> $DIR/offset-of-output-type.rs:15:18
|
LL | let _: u64 = offset_of!(S, v);
- | --- ^^^^^^^^^^^^^^^^ expected `u64`, found `usize`
- | |
- | expected due to this
+ | ^^^^^^^^^^^^^^^^ expected `u64`, found `usize`
|
= note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
@@ -42,9 +34,7 @@ error[E0308]: mismatched types
--> $DIR/offset-of-output-type.rs:16:20
|
LL | let _: isize = offset_of!(S, v);
- | ----- ^^^^^^^^^^^^^^^^ expected `isize`, found `usize`
- | |
- | expected due to this
+ | ^^^^^^^^^^^^^^^^ expected `isize`, found `usize`
|
= note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
diff --git a/tests/ui/offset-of/offset-of-tuple-nested.rs b/tests/ui/offset-of/offset-of-tuple-nested.rs
new file mode 100644
index 000000000..00fbb6bf8
--- /dev/null
+++ b/tests/ui/offset-of/offset-of-tuple-nested.rs
@@ -0,0 +1,32 @@
+// run-pass
+// Test for issue #112204 -- make sure this goes through the entire compilation pipeline,
+// similar to why `offset-of-unsized.rs` is also build-pass
+
+#![feature(offset_of)]
+#![feature(builtin_syntax)]
+
+use std::mem::offset_of;
+
+type ComplexTup = ((u8, (u8, (u8, u16), u8)), (u8, u32, u16));
+
+fn main() {
+ println!("{}", offset_of!(((u8, u8), u8), 0));
+ println!("{}", offset_of!(((u8, u8), u8), 1));
+ println!("{}", offset_of!(((u8, (u8, u8)), (u8, u8, u8)), 0.1.0));
+
+ // Complex case: do all combinations of spacings because the spacing determines what gets
+ // sent to the lexer.
+ println!("{}", offset_of!(ComplexTup, 0.1.1.1));
+ println!("{}", builtin # offset_of(ComplexTup, 0. 1.1.1));
+ println!("{}", offset_of!(ComplexTup, 0 . 1.1.1));
+ println!("{}", offset_of!(ComplexTup, 0 .1.1.1));
+ println!("{}", offset_of!(ComplexTup, 0.1 .1.1));
+ println!("{}", offset_of!(ComplexTup, 0.1 . 1.1));
+ println!("{}", offset_of!(ComplexTup, 0.1. 1.1));
+ println!("{}", builtin # offset_of(ComplexTup, 0.1.1. 1));
+ println!("{}", offset_of!(ComplexTup, 0.1.1 . 1));
+ println!("{}", offset_of!(ComplexTup, 0.1.1 .1));
+
+ println!("{}", offset_of!(((u8, u16), (u32, u16, u8)), 0.0));
+ println!("{}", offset_of!(((u8, u16), (u32, u16, u8)), 1.2));
+}
diff --git a/tests/ui/offset-of/offset-of-tuple.rs b/tests/ui/offset-of/offset-of-tuple.rs
new file mode 100644
index 000000000..e31b037ee
--- /dev/null
+++ b/tests/ui/offset-of/offset-of-tuple.rs
@@ -0,0 +1,54 @@
+#![feature(offset_of)]
+#![feature(builtin_syntax)]
+
+use std::mem::offset_of;
+
+fn main() {
+ offset_of!((u8, u8), _0); //~ ERROR no field `_0`
+ offset_of!((u8, u8), 01); //~ ERROR no field `01`
+ offset_of!((u8, u8), 1e2); //~ ERROR no field `1e2`
+ offset_of!((u8, u8), 1_u8); //~ ERROR no field `1_`
+ //~| ERROR suffixes on a tuple index
+ offset_of!((u8, u8), +1); //~ ERROR no rules expected
+ offset_of!((u8, u8), -1); //~ ERROR no rules expected
+ offset_of!((u8, u8), 1.); //~ ERROR expected identifier, found `)`
+ offset_of!((u8, u8), 1 .); //~ ERROR unexpected end of macro
+ builtin # offset_of((u8, u8), 1e2); //~ ERROR no field `1e2`
+ builtin # offset_of((u8, u8), _0); //~ ERROR no field `_0`
+ builtin # offset_of((u8, u8), 01); //~ ERROR no field `01`
+ builtin # offset_of((u8, u8), 1_u8); //~ ERROR no field `1_`
+ //~| ERROR suffixes on a tuple index
+ // We need to put these into curly braces, otherwise only one of the
+ // errors will be emitted and the others suppressed.
+ { builtin # offset_of((u8, u8), +1) }; //~ ERROR expected identifier, found `+`
+ { builtin # offset_of((u8, u8), 1.) }; //~ ERROR expected identifier, found `)`
+ { builtin # offset_of((u8, u8), 1 .) }; //~ ERROR expected identifier, found `)`
+}
+
+type ComplexTup = ((u8, (u8, u8)), u8);
+
+fn nested() {
+ offset_of!(((u8, u16), (u32, u16, u8)), 0.2); //~ ERROR no field `2`
+ offset_of!(((u8, u16), (u32, u16, u8)), 1.2);
+ offset_of!(((u8, u16), (u32, u16, u8)), 1.2.0); //~ ERROR no field `0`
+
+ // All combinations of spaces (this sends different tokens to the parser)
+ offset_of!(ComplexTup, 0.0.1.); //~ ERROR expected identifier
+ offset_of!(ComplexTup, 0 .0.1.); //~ ERROR unexpected end of macro
+ offset_of!(ComplexTup, 0 . 0.1.); //~ ERROR unexpected end of macro
+ offset_of!(ComplexTup, 0. 0.1.); //~ ERROR no rules expected
+ offset_of!(ComplexTup, 0.0 .1.); //~ ERROR expected identifier, found `)`
+ offset_of!(ComplexTup, 0.0 . 1.); //~ ERROR expected identifier, found `)`
+ offset_of!(ComplexTup, 0.0. 1.); //~ ERROR expected identifier, found `)`
+
+ // Test for builtin too to ensure that the builtin syntax can also handle these cases
+ // We need to put these into curly braces, otherwise only one of the
+ // errors will be emitted and the others suppressed.
+ { builtin # offset_of(ComplexTup, 0.0.1.) }; //~ ERROR expected identifier, found `)`
+ { builtin # offset_of(ComplexTup, 0 .0.1.) }; //~ ERROR expected identifier, found `)`
+ { builtin # offset_of(ComplexTup, 0 . 0.1.) }; //~ ERROR expected identifier, found `)`
+ { builtin # offset_of(ComplexTup, 0. 0.1.) }; //~ ERROR expected identifier, found `)`
+ { builtin # offset_of(ComplexTup, 0.0 .1.) }; //~ ERROR expected identifier, found `)`
+ { builtin # offset_of(ComplexTup, 0.0 . 1.) }; //~ ERROR expected identifier, found `)`
+ { builtin # offset_of(ComplexTup, 0.0. 1.) }; //~ ERROR expected identifier, found `)`
+}
diff --git a/tests/ui/offset-of/offset-of-tuple.stderr b/tests/ui/offset-of/offset-of-tuple.stderr
new file mode 100644
index 000000000..ed9523458
--- /dev/null
+++ b/tests/ui/offset-of/offset-of-tuple.stderr
@@ -0,0 +1,226 @@
+error: suffixes on a tuple index are invalid
+ --> $DIR/offset-of-tuple.rs:19:35
+ |
+LL | builtin # offset_of((u8, u8), 1_u8);
+ | ^^^^ invalid suffix `u8`
+
+error: expected identifier, found `+`
+ --> $DIR/offset-of-tuple.rs:23:37
+ |
+LL | { builtin # offset_of((u8, u8), +1) };
+ | ^ expected identifier
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:24:39
+ |
+LL | { builtin # offset_of((u8, u8), 1.) };
+ | ^ expected identifier
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:25:40
+ |
+LL | { builtin # offset_of((u8, u8), 1 .) };
+ | ^ expected identifier
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:47:45
+ |
+LL | { builtin # offset_of(ComplexTup, 0.0.1.) };
+ | ^ expected identifier
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:48:46
+ |
+LL | { builtin # offset_of(ComplexTup, 0 .0.1.) };
+ | ^ expected identifier
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:49:47
+ |
+LL | { builtin # offset_of(ComplexTup, 0 . 0.1.) };
+ | ^ expected identifier
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:50:46
+ |
+LL | { builtin # offset_of(ComplexTup, 0. 0.1.) };
+ | ^ expected identifier
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:51:46
+ |
+LL | { builtin # offset_of(ComplexTup, 0.0 .1.) };
+ | ^ expected identifier
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:52:47
+ |
+LL | { builtin # offset_of(ComplexTup, 0.0 . 1.) };
+ | ^ expected identifier
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:53:46
+ |
+LL | { builtin # offset_of(ComplexTup, 0.0. 1.) };
+ | ^ expected identifier
+
+error: suffixes on a tuple index are invalid
+ --> $DIR/offset-of-tuple.rs:10:26
+ |
+LL | offset_of!((u8, u8), 1_u8);
+ | ^^^^ invalid suffix `u8`
+
+error: no rules expected the token `1`
+ --> $DIR/offset-of-tuple.rs:12:27
+ |
+LL | offset_of!((u8, u8), +1);
+ | ^ no rules expected this token in macro call
+ |
+ = note: while trying to match sequence start
+
+error: no rules expected the token `1`
+ --> $DIR/offset-of-tuple.rs:13:27
+ |
+LL | offset_of!((u8, u8), -1);
+ | ^ no rules expected this token in macro call
+ |
+ = note: while trying to match sequence start
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:14:5
+ |
+LL | offset_of!((u8, u8), 1.);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ expected identifier
+ |
+ = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: unexpected end of macro invocation
+ --> $DIR/offset-of-tuple.rs:15:29
+ |
+LL | offset_of!((u8, u8), 1 .);
+ | ^ missing tokens in macro arguments
+ |
+note: while trying to match meta-variable `$fields:tt`
+ --> $SRC_DIR/core/src/mem/mod.rs:LL:COL
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:36:5
+ |
+LL | offset_of!(ComplexTup, 0.0.1.);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected identifier
+ |
+ = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: unexpected end of macro invocation
+ --> $DIR/offset-of-tuple.rs:37:35
+ |
+LL | offset_of!(ComplexTup, 0 .0.1.);
+ | ^ missing tokens in macro arguments
+ |
+note: while trying to match meta-variable `$fields:tt`
+ --> $SRC_DIR/core/src/mem/mod.rs:LL:COL
+
+error: unexpected end of macro invocation
+ --> $DIR/offset-of-tuple.rs:38:36
+ |
+LL | offset_of!(ComplexTup, 0 . 0.1.);
+ | ^ missing tokens in macro arguments
+ |
+note: while trying to match meta-variable `$fields:tt`
+ --> $SRC_DIR/core/src/mem/mod.rs:LL:COL
+
+error: no rules expected the token `0.1`
+ --> $DIR/offset-of-tuple.rs:39:31
+ |
+LL | offset_of!(ComplexTup, 0. 0.1.);
+ | ^^^ no rules expected this token in macro call
+ |
+ = note: while trying to match sequence start
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:40:5
+ |
+LL | offset_of!(ComplexTup, 0.0 .1.);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected identifier
+ |
+ = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:41:5
+ |
+LL | offset_of!(ComplexTup, 0.0 . 1.);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected identifier
+ |
+ = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: expected identifier, found `)`
+ --> $DIR/offset-of-tuple.rs:42:5
+ |
+LL | offset_of!(ComplexTup, 0.0. 1.);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected identifier
+ |
+ = note: this error originates in the macro `offset_of` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0609]: no field `_0` on type `(u8, u8)`
+ --> $DIR/offset-of-tuple.rs:7:26
+ |
+LL | offset_of!((u8, u8), _0);
+ | ^^
+
+error[E0609]: no field `01` on type `(u8, u8)`
+ --> $DIR/offset-of-tuple.rs:8:26
+ |
+LL | offset_of!((u8, u8), 01);
+ | ^^
+
+error[E0609]: no field `1e2` on type `(u8, u8)`
+ --> $DIR/offset-of-tuple.rs:9:26
+ |
+LL | offset_of!((u8, u8), 1e2);
+ | ^^^
+
+error[E0609]: no field `1_` on type `(u8, u8)`
+ --> $DIR/offset-of-tuple.rs:10:26
+ |
+LL | offset_of!((u8, u8), 1_u8);
+ | ^^^^
+
+error[E0609]: no field `1e2` on type `(u8, u8)`
+ --> $DIR/offset-of-tuple.rs:16:35
+ |
+LL | builtin # offset_of((u8, u8), 1e2);
+ | ^^^
+
+error[E0609]: no field `_0` on type `(u8, u8)`
+ --> $DIR/offset-of-tuple.rs:17:35
+ |
+LL | builtin # offset_of((u8, u8), _0);
+ | ^^
+
+error[E0609]: no field `01` on type `(u8, u8)`
+ --> $DIR/offset-of-tuple.rs:18:35
+ |
+LL | builtin # offset_of((u8, u8), 01);
+ | ^^
+
+error[E0609]: no field `1_` on type `(u8, u8)`
+ --> $DIR/offset-of-tuple.rs:19:35
+ |
+LL | builtin # offset_of((u8, u8), 1_u8);
+ | ^^^^
+
+error[E0609]: no field `2` on type `(u8, u16)`
+ --> $DIR/offset-of-tuple.rs:31:47
+ |
+LL | offset_of!(((u8, u16), (u32, u16, u8)), 0.2);
+ | ^
+
+error[E0609]: no field `0` on type `u8`
+ --> $DIR/offset-of-tuple.rs:33:49
+ |
+LL | offset_of!(((u8, u16), (u32, u16, u8)), 1.2.0);
+ | ^
+
+error: aborting due to 33 previous errors
+
+For more information about this error, try `rustc --explain E0609`.
diff --git a/tests/ui/offset-of/offset-of-unsized.rs b/tests/ui/offset-of/offset-of-unsized.rs
new file mode 100644
index 000000000..49c8328da
--- /dev/null
+++ b/tests/ui/offset-of/offset-of-unsized.rs
@@ -0,0 +1,16 @@
+// build-pass
+// regression test for #112051, not in `offset-of-dst` as the issue is in codegen,
+// and isn't triggered in the presence of typeck errors
+
+#![feature(offset_of)]
+
+struct S<T: ?Sized> {
+ a: u64,
+ b: T,
+}
+trait Tr {}
+
+fn main() {
+ let _a = core::mem::offset_of!(S<dyn Tr>, a);
+ let _b = core::mem::offset_of!((u64, dyn Tr), 0);
+}
diff --git a/tests/ui/on-unimplemented/multiple-impls.stderr b/tests/ui/on-unimplemented/multiple-impls.stderr
index d628b159a..3d0e36db7 100644
--- a/tests/ui/on-unimplemented/multiple-impls.stderr
+++ b/tests/ui/on-unimplemented/multiple-impls.stderr
@@ -8,8 +8,8 @@ LL | Index::index(&[] as &[i32], 2u32);
|
= help: the trait `Index<u32>` is not implemented for `[i32]`
= help: the following other types implement trait `Index<Idx>`:
- <[i32] as Index<Bar<usize>>>
<[i32] as Index<Foo<usize>>>
+ <[i32] as Index<Bar<usize>>>
error[E0277]: the trait bound `[i32]: Index<u32>` is not satisfied
--> $DIR/multiple-impls.rs:33:5
@@ -19,8 +19,8 @@ LL | Index::index(&[] as &[i32], 2u32);
|
= help: the trait `Index<u32>` is not implemented for `[i32]`
= help: the following other types implement trait `Index<Idx>`:
- <[i32] as Index<Bar<usize>>>
<[i32] as Index<Foo<usize>>>
+ <[i32] as Index<Bar<usize>>>
error[E0277]: the trait bound `[i32]: Index<Foo<u32>>` is not satisfied
--> $DIR/multiple-impls.rs:37:33
@@ -32,8 +32,8 @@ LL | Index::index(&[] as &[i32], Foo(2u32));
|
= help: the trait `Index<Foo<u32>>` is not implemented for `[i32]`
= help: the following other types implement trait `Index<Idx>`:
- <[i32] as Index<Bar<usize>>>
<[i32] as Index<Foo<usize>>>
+ <[i32] as Index<Bar<usize>>>
error[E0277]: the trait bound `[i32]: Index<Foo<u32>>` is not satisfied
--> $DIR/multiple-impls.rs:37:5
@@ -43,8 +43,8 @@ LL | Index::index(&[] as &[i32], Foo(2u32));
|
= help: the trait `Index<Foo<u32>>` is not implemented for `[i32]`
= help: the following other types implement trait `Index<Idx>`:
- <[i32] as Index<Bar<usize>>>
<[i32] as Index<Foo<usize>>>
+ <[i32] as Index<Bar<usize>>>
error[E0277]: the trait bound `[i32]: Index<Bar<u32>>` is not satisfied
--> $DIR/multiple-impls.rs:41:33
@@ -56,8 +56,8 @@ LL | Index::index(&[] as &[i32], Bar(2u32));
|
= help: the trait `Index<Bar<u32>>` is not implemented for `[i32]`
= help: the following other types implement trait `Index<Idx>`:
- <[i32] as Index<Bar<usize>>>
<[i32] as Index<Foo<usize>>>
+ <[i32] as Index<Bar<usize>>>
error[E0277]: the trait bound `[i32]: Index<Bar<u32>>` is not satisfied
--> $DIR/multiple-impls.rs:41:5
@@ -67,8 +67,8 @@ LL | Index::index(&[] as &[i32], Bar(2u32));
|
= help: the trait `Index<Bar<u32>>` is not implemented for `[i32]`
= help: the following other types implement trait `Index<Idx>`:
- <[i32] as Index<Bar<usize>>>
<[i32] as Index<Foo<usize>>>
+ <[i32] as Index<Bar<usize>>>
error[E0277]: the trait bound `[i32]: Index<u32>` is not satisfied
--> $DIR/multiple-impls.rs:33:5
@@ -78,8 +78,8 @@ LL | Index::index(&[] as &[i32], 2u32);
|
= help: the trait `Index<u32>` is not implemented for `[i32]`
= help: the following other types implement trait `Index<Idx>`:
- <[i32] as Index<Bar<usize>>>
<[i32] as Index<Foo<usize>>>
+ <[i32] as Index<Bar<usize>>>
error[E0277]: the trait bound `[i32]: Index<Foo<u32>>` is not satisfied
--> $DIR/multiple-impls.rs:37:5
@@ -89,8 +89,8 @@ LL | Index::index(&[] as &[i32], Foo(2u32));
|
= help: the trait `Index<Foo<u32>>` is not implemented for `[i32]`
= help: the following other types implement trait `Index<Idx>`:
- <[i32] as Index<Bar<usize>>>
<[i32] as Index<Foo<usize>>>
+ <[i32] as Index<Bar<usize>>>
error[E0277]: the trait bound `[i32]: Index<Bar<u32>>` is not satisfied
--> $DIR/multiple-impls.rs:41:5
@@ -100,8 +100,8 @@ LL | Index::index(&[] as &[i32], Bar(2u32));
|
= help: the trait `Index<Bar<u32>>` is not implemented for `[i32]`
= help: the following other types implement trait `Index<Idx>`:
- <[i32] as Index<Bar<usize>>>
<[i32] as Index<Foo<usize>>>
+ <[i32] as Index<Bar<usize>>>
error: aborting due to 9 previous errors
diff --git a/tests/ui/on-unimplemented/slice-index.stderr b/tests/ui/on-unimplemented/slice-index.stderr
index a7ec3bda8..b9bca211f 100644
--- a/tests/ui/on-unimplemented/slice-index.stderr
+++ b/tests/ui/on-unimplemented/slice-index.stderr
@@ -16,8 +16,8 @@ LL | x[..1i32];
|
= help: the trait `SliceIndex<[i32]>` is not implemented for `RangeTo<i32>`
= help: the following other types implement trait `SliceIndex<T>`:
- <RangeTo<usize> as SliceIndex<[T]>>
<RangeTo<usize> as SliceIndex<str>>
+ <RangeTo<usize> as SliceIndex<[T]>>
= note: required for `[i32]` to implement `Index<RangeTo<i32>>`
error: aborting due to 2 previous errors
diff --git a/tests/ui/on-unimplemented/sum.stderr b/tests/ui/on-unimplemented/sum.stderr
index 2a316dba7..a2357e49b 100644
--- a/tests/ui/on-unimplemented/sum.stderr
+++ b/tests/ui/on-unimplemented/sum.stderr
@@ -6,8 +6,8 @@ LL | vec![(), ()].iter().sum::<i32>();
|
= help: the trait `Sum<&()>` is not implemented for `i32`
= help: the following other types implement trait `Sum<A>`:
- <i32 as Sum<&'a i32>>
<i32 as Sum>
+ <i32 as Sum<&'a i32>>
note: the method call chain might not have had the expected associated types
--> $DIR/sum.rs:4:18
|
@@ -26,8 +26,8 @@ LL | vec![(), ()].iter().product::<i32>();
|
= help: the trait `Product<&()>` is not implemented for `i32`
= help: the following other types implement trait `Product<A>`:
- <i32 as Product<&'a i32>>
<i32 as Product>
+ <i32 as Product<&'a i32>>
note: the method call chain might not have had the expected associated types
--> $DIR/sum.rs:7:18
|
diff --git a/tests/ui/packed/issue-27060-2.stderr b/tests/ui/packed/issue-27060-2.stderr
index 0836ceaec..cf5f4e530 100644
--- a/tests/ui/packed/issue-27060-2.stderr
+++ b/tests/ui/packed/issue-27060-2.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
--> $DIR/issue-27060-2.rs:3:11
|
LL | pub struct Bad<T: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | data: T,
| ^ doesn't have a size known at compile-time
|
diff --git a/tests/ui/parser/bad-escape-suggest-raw-string.rs b/tests/ui/parser/bad-escape-suggest-raw-string.rs
index 978b92cbc..06df82d28 100644
--- a/tests/ui/parser/bad-escape-suggest-raw-string.rs
+++ b/tests/ui/parser/bad-escape-suggest-raw-string.rs
@@ -2,6 +2,6 @@ fn main() {
let ok = r"ab\[c";
let bad = "ab\[c";
//~^ ERROR unknown character escape: `[`
- //~| HELP for more information, visit <https://static.rust-lang.org/doc/master/reference.html#literals>
+ //~| HELP for more information, visit <https://doc.rust-lang.org/reference/tokens.html#literals>
//~| HELP if you meant to write a literal backslash (perhaps escaping in a regular expression), consider a raw string literal
}
diff --git a/tests/ui/parser/bad-escape-suggest-raw-string.stderr b/tests/ui/parser/bad-escape-suggest-raw-string.stderr
index fc34bd328..45d24bc0f 100644
--- a/tests/ui/parser/bad-escape-suggest-raw-string.stderr
+++ b/tests/ui/parser/bad-escape-suggest-raw-string.stderr
@@ -4,7 +4,7 @@ error: unknown character escape: `[`
LL | let bad = "ab\[c";
| ^ unknown character escape
|
- = help: for more information, visit <https://static.rust-lang.org/doc/master/reference.html#literals>
+ = help: for more information, visit <https://doc.rust-lang.org/reference/tokens.html#literals>
help: if you meant to write a literal backslash (perhaps escaping in a regular expression), consider a raw string literal
|
LL | let bad = r"ab\[c";
diff --git a/tests/ui/parser/bad-interpolated-block.stderr b/tests/ui/parser/bad-interpolated-block.stderr
index 2a0999afd..651036c51 100644
--- a/tests/ui/parser/bad-interpolated-block.stderr
+++ b/tests/ui/parser/bad-interpolated-block.stderr
@@ -10,6 +10,10 @@ LL | m!({});
| ------ in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: wrap this in another block
+ |
+LL | 'lab: { $b };
+ | + +
error: cannot use a `block` macro fragment here
--> $DIR/bad-interpolated-block.rs:6:16
@@ -23,6 +27,10 @@ LL | m!({});
| ------ in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: wrap this in another block
+ |
+LL | unsafe { $b };
+ | + +
error: cannot use a `block` macro fragment here
--> $DIR/bad-interpolated-block.rs:7:23
@@ -34,6 +42,10 @@ LL | m!({});
| ------ in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: wrap this in another block
+ |
+LL | |x: u8| -> () { $b };
+ | + +
error: aborting due to 3 previous errors
diff --git a/tests/ui/parser/byte-literals.stderr b/tests/ui/parser/byte-literals.stderr
index efa55ae05..5b414c892 100644
--- a/tests/ui/parser/byte-literals.stderr
+++ b/tests/ui/parser/byte-literals.stderr
@@ -4,7 +4,7 @@ error: unknown byte escape: `f`
LL | static FOO: u8 = b'\f';
| ^ unknown byte escape
|
- = help: for more information, visit <https://static.rust-lang.org/doc/master/reference.html#literals>
+ = help: for more information, visit <https://doc.rust-lang.org/reference/tokens.html#literals>
error: unknown byte escape: `f`
--> $DIR/byte-literals.rs:6:8
@@ -12,7 +12,7 @@ error: unknown byte escape: `f`
LL | b'\f';
| ^ unknown byte escape
|
- = help: for more information, visit <https://static.rust-lang.org/doc/master/reference.html#literals>
+ = help: for more information, visit <https://doc.rust-lang.org/reference/tokens.html#literals>
error: invalid character in numeric character escape: `Z`
--> $DIR/byte-literals.rs:7:10
diff --git a/tests/ui/parser/byte-string-literals.stderr b/tests/ui/parser/byte-string-literals.stderr
index 5b96cc3d1..655b6998e 100644
--- a/tests/ui/parser/byte-string-literals.stderr
+++ b/tests/ui/parser/byte-string-literals.stderr
@@ -4,7 +4,7 @@ error: unknown byte escape: `f`
LL | static FOO: &'static [u8] = b"\f";
| ^ unknown byte escape
|
- = help: for more information, visit <https://static.rust-lang.org/doc/master/reference.html#literals>
+ = help: for more information, visit <https://doc.rust-lang.org/reference/tokens.html#literals>
error: unknown byte escape: `f`
--> $DIR/byte-string-literals.rs:4:8
@@ -12,7 +12,7 @@ error: unknown byte escape: `f`
LL | b"\f";
| ^ unknown byte escape
|
- = help: for more information, visit <https://static.rust-lang.org/doc/master/reference.html#literals>
+ = help: for more information, visit <https://doc.rust-lang.org/reference/tokens.html#literals>
error: invalid character in numeric character escape: `Z`
--> $DIR/byte-string-literals.rs:5:10
diff --git a/tests/ui/parser/foreign-ty-semantic-fail.rs b/tests/ui/parser/foreign-ty-semantic-fail.rs
index 96b15232b..4d30086e7 100644
--- a/tests/ui/parser/foreign-ty-semantic-fail.rs
+++ b/tests/ui/parser/foreign-ty-semantic-fail.rs
@@ -15,4 +15,5 @@ extern "C" {
//~^ ERROR incorrect `type` inside `extern` block
type E: where;
+ //~^ ERROR `type`s inside `extern` blocks cannot have `where` clauses
}
diff --git a/tests/ui/parser/foreign-ty-semantic-fail.stderr b/tests/ui/parser/foreign-ty-semantic-fail.stderr
index 588e4966a..2b400dfea 100644
--- a/tests/ui/parser/foreign-ty-semantic-fail.stderr
+++ b/tests/ui/parser/foreign-ty-semantic-fail.stderr
@@ -61,5 +61,16 @@ LL | type D = u8;
|
= note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
-error: aborting due to 6 previous errors
+error: `type`s inside `extern` blocks cannot have `where` clauses
+ --> $DIR/foreign-ty-semantic-fail.rs:17:13
+ |
+LL | extern "C" {
+ | ---------- `extern` block begins here
+...
+LL | type E: where;
+ | ^^^^^ help: remove the `where` clause
+ |
+ = note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html
+
+error: aborting due to 7 previous errors
diff --git a/tests/ui/parser/issue-112188.fixed b/tests/ui/parser/issue-112188.fixed
new file mode 100644
index 000000000..5e73d8e38
--- /dev/null
+++ b/tests/ui/parser/issue-112188.fixed
@@ -0,0 +1,14 @@
+// run-rustfix
+
+#![allow(unused)]
+
+struct Foo { x: i32 }
+
+fn main() {
+ let f = Foo { x: 0 };
+ let Foo { .. } = f;
+ let Foo { .. } = f; //~ ERROR expected `}`, found `,`
+ let Foo { x, .. } = f;
+ let Foo { x, .. } = f; //~ ERROR expected `}`, found `,`
+ let Foo { x, .. } = f; //~ ERROR expected `}`, found `,`
+}
diff --git a/tests/ui/parser/issue-112188.rs b/tests/ui/parser/issue-112188.rs
new file mode 100644
index 000000000..27ca192e5
--- /dev/null
+++ b/tests/ui/parser/issue-112188.rs
@@ -0,0 +1,14 @@
+// run-rustfix
+
+#![allow(unused)]
+
+struct Foo { x: i32 }
+
+fn main() {
+ let f = Foo { x: 0 };
+ let Foo { .. } = f;
+ let Foo { .., } = f; //~ ERROR expected `}`, found `,`
+ let Foo { x, .. } = f;
+ let Foo { .., x } = f; //~ ERROR expected `}`, found `,`
+ let Foo { .., x, .. } = f; //~ ERROR expected `}`, found `,`
+}
diff --git a/tests/ui/parser/issue-112188.stderr b/tests/ui/parser/issue-112188.stderr
new file mode 100644
index 000000000..6d2d8e6a3
--- /dev/null
+++ b/tests/ui/parser/issue-112188.stderr
@@ -0,0 +1,37 @@
+error: expected `}`, found `,`
+ --> $DIR/issue-112188.rs:10:17
+ |
+LL | let Foo { .., } = f;
+ | --^
+ | | |
+ | | expected `}`
+ | | help: remove this comma
+ | `..` must be at the end and cannot have a trailing comma
+
+error: expected `}`, found `,`
+ --> $DIR/issue-112188.rs:12:17
+ |
+LL | let Foo { .., x } = f;
+ | --^
+ | | |
+ | | expected `}`
+ | `..` must be at the end and cannot have a trailing comma
+ |
+help: move the `..` to the end of the field list
+ |
+LL - let Foo { .., x } = f;
+LL + let Foo { x, .. } = f;
+ |
+
+error: expected `}`, found `,`
+ --> $DIR/issue-112188.rs:13:17
+ |
+LL | let Foo { .., x, .. } = f;
+ | --^-
+ | | |
+ | | expected `}`
+ | `..` must be at the end and cannot have a trailing comma
+ | help: remove the starting `..`
+
+error: aborting due to 3 previous errors
+
diff --git a/tests/ui/parser/issue-113342.rs b/tests/ui/parser/issue-113342.rs
new file mode 100644
index 000000000..18b502736
--- /dev/null
+++ b/tests/ui/parser/issue-113342.rs
@@ -0,0 +1,9 @@
+#[link(name = "my_c_library")]
+extern "C" {
+ fn my_c_function(x: i32) -> bool;
+}
+
+#[no_mangle]
+extern "C" pub fn id(x: i32) -> i32 { x } //~ ERROR expected `fn`, found keyword `pub`
+
+fn main() {}
diff --git a/tests/ui/parser/issue-113342.stderr b/tests/ui/parser/issue-113342.stderr
new file mode 100644
index 000000000..a0c5e665f
--- /dev/null
+++ b/tests/ui/parser/issue-113342.stderr
@@ -0,0 +1,11 @@
+error: expected `fn`, found keyword `pub`
+ --> $DIR/issue-113342.rs:7:12
+ |
+LL | extern "C" pub fn id(x: i32) -> i32 { x }
+ | -----------^^^
+ | | |
+ | | expected `fn`
+ | help: visibility `pub` must come before `extern "C"`: `pub extern "C"`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/parser/issue-49257.stderr b/tests/ui/parser/issue-49257.stderr
index 846467f7f..97e16f88b 100644
--- a/tests/ui/parser/issue-49257.stderr
+++ b/tests/ui/parser/issue-49257.stderr
@@ -25,7 +25,7 @@ LL | let Point { .., y } = p;
help: move the `..` to the end of the field list
|
LL - let Point { .., y } = p;
-LL + let Point { y , .. } = p;
+LL + let Point { y, .. } = p;
|
error: expected `}`, found `,`
diff --git a/tests/ui/parser/issues/issue-111692.rs b/tests/ui/parser/issues/issue-111692.rs
new file mode 100644
index 000000000..56096f706
--- /dev/null
+++ b/tests/ui/parser/issues/issue-111692.rs
@@ -0,0 +1,32 @@
+mod module {
+ #[derive(Eq, PartialEq)]
+ pub struct Type {
+ pub x: u8,
+ pub y: u8,
+ }
+
+ pub const C: u8 = 32u8;
+}
+
+fn test(x: module::Type) {
+ if x == module::Type { x: module::C, y: 1 } { //~ ERROR invalid struct literal
+ }
+}
+
+fn test2(x: module::Type) {
+ if x ==module::Type { x: module::C, y: 1 } { //~ ERROR invalid struct literal
+ }
+}
+
+
+fn test3(x: module::Type) {
+ if x == Type { x: module::C, y: 1 } { //~ ERROR invalid struct literal
+ }
+}
+
+fn test4(x: module::Type) {
+ if x == demo_module::Type { x: module::C, y: 1 } { //~ ERROR invalid struct literal
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/parser/issues/issue-111692.stderr b/tests/ui/parser/issues/issue-111692.stderr
new file mode 100644
index 000000000..068b0483b
--- /dev/null
+++ b/tests/ui/parser/issues/issue-111692.stderr
@@ -0,0 +1,46 @@
+error: invalid struct literal
+ --> $DIR/issue-111692.rs:12:21
+ |
+LL | if x == module::Type { x: module::C, y: 1 } {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+help: you might need to surround the struct literal with parentheses
+ |
+LL | if x == (module::Type { x: module::C, y: 1 }) {
+ | + +
+
+error: invalid struct literal
+ --> $DIR/issue-111692.rs:17:20
+ |
+LL | if x ==module::Type { x: module::C, y: 1 } {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+help: you might need to surround the struct literal with parentheses
+ |
+LL | if x ==(module::Type { x: module::C, y: 1 }) {
+ | + +
+
+error: invalid struct literal
+ --> $DIR/issue-111692.rs:23:13
+ |
+LL | if x == Type { x: module::C, y: 1 } {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+help: you might need to surround the struct literal with parentheses
+ |
+LL | if x == (Type { x: module::C, y: 1 }) {
+ | + +
+
+error: invalid struct literal
+ --> $DIR/issue-111692.rs:28:26
+ |
+LL | if x == demo_module::Type { x: module::C, y: 1 } {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+help: you might need to surround the struct literal with parentheses
+ |
+LL | if x == (demo_module::Type { x: module::C, y: 1 }) {
+ | + +
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/parser/issues/issue-112458.rs b/tests/ui/parser/issues/issue-112458.rs
new file mode 100644
index 000000000..36895450c
--- /dev/null
+++ b/tests/ui/parser/issues/issue-112458.rs
@@ -0,0 +1,4 @@
+fn main() {
+ println!("{}", x.); //~ ERROR unexpected token: `)`
+ //~^ ERROR cannot find value `x` in this scope
+}
diff --git a/tests/ui/parser/issues/issue-112458.stderr b/tests/ui/parser/issues/issue-112458.stderr
new file mode 100644
index 000000000..54a8f1d03
--- /dev/null
+++ b/tests/ui/parser/issues/issue-112458.stderr
@@ -0,0 +1,15 @@
+error: unexpected token: `)`
+ --> $DIR/issue-112458.rs:2:22
+ |
+LL | println!("{}", x.);
+ | ^
+
+error[E0425]: cannot find value `x` in this scope
+ --> $DIR/issue-112458.rs:2:20
+ |
+LL | println!("{}", x.);
+ | ^ not found in this scope
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/parser/labeled-no-colon-expr.stderr b/tests/ui/parser/labeled-no-colon-expr.stderr
index 62288fe15..4d61d9c14 100644
--- a/tests/ui/parser/labeled-no-colon-expr.stderr
+++ b/tests/ui/parser/labeled-no-colon-expr.stderr
@@ -77,6 +77,10 @@ LL | m!({});
| ------ in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: wrap this in another block
+ |
+LL | 'l5 { $b };
+ | + +
error: labeled expression must be followed by `:`
--> $DIR/labeled-no-colon-expr.rs:14:8
diff --git a/tests/ui/parser/lit-err-in-macro.rs b/tests/ui/parser/lit-err-in-macro.rs
new file mode 100644
index 000000000..cff8ee6b4
--- /dev/null
+++ b/tests/ui/parser/lit-err-in-macro.rs
@@ -0,0 +1,10 @@
+macro_rules! f {
+ ($abi:literal) => {
+ extern $abi fn f() {}
+ }
+}
+
+f!("Foo"__);
+//~^ ERROR suffixes on string literals are invalid
+
+fn main() {}
diff --git a/tests/ui/parser/lit-err-in-macro.stderr b/tests/ui/parser/lit-err-in-macro.stderr
new file mode 100644
index 000000000..a61fb5c85
--- /dev/null
+++ b/tests/ui/parser/lit-err-in-macro.stderr
@@ -0,0 +1,8 @@
+error: suffixes on string literals are invalid
+ --> $DIR/lit-err-in-macro.rs:7:4
+ |
+LL | f!("Foo"__);
+ | ^^^^^^^ invalid suffix `__`
+
+error: aborting due to previous error
+
diff --git a/tests/ui/parser/method-call-on-struct-literal-in-if-condition.stderr b/tests/ui/parser/method-call-on-struct-literal-in-if-condition.stderr
index 7fd7ffc94..dedbad909 100644
--- a/tests/ui/parser/method-call-on-struct-literal-in-if-condition.stderr
+++ b/tests/ui/parser/method-call-on-struct-literal-in-if-condition.stderr
@@ -4,7 +4,7 @@ error: invalid struct literal
LL | if Example { a: one(), }.is_pos() {
| ^^^^^^^^^^^^^^^^^^^^^
|
-help: you might need to surround the struct literal in parentheses
+help: you might need to surround the struct literal with parentheses
|
LL | if (Example { a: one(), }).is_pos() {
| + +
diff --git a/tests/ui/parser/typod-const-in-const-param-def.rs b/tests/ui/parser/typod-const-in-const-param-def.rs
new file mode 100644
index 000000000..85d3ebba5
--- /dev/null
+++ b/tests/ui/parser/typod-const-in-const-param-def.rs
@@ -0,0 +1,16 @@
+pub fn foo<Const N: u8>() {}
+//~^ ERROR `const` keyword was mistyped as `Const`
+
+pub fn bar<Const>() {}
+// OK
+
+pub fn baz<Const N: u8, T>() {}
+//~^ ERROR `const` keyword was mistyped as `Const`
+
+pub fn qux<T, Const N: u8>() {}
+//~^ ERROR `const` keyword was mistyped as `Const`
+
+pub fn quux<T, Const N: u8, U>() {}
+//~^ ERROR `const` keyword was mistyped as `Const`
+
+fn main() {}
diff --git a/tests/ui/parser/typod-const-in-const-param-def.stderr b/tests/ui/parser/typod-const-in-const-param-def.stderr
new file mode 100644
index 000000000..75d73c6ea
--- /dev/null
+++ b/tests/ui/parser/typod-const-in-const-param-def.stderr
@@ -0,0 +1,46 @@
+error: `const` keyword was mistyped as `Const`
+ --> $DIR/typod-const-in-const-param-def.rs:1:12
+ |
+LL | pub fn foo<Const N: u8>() {}
+ | ^^^^^
+ |
+help: use the `const` keyword
+ |
+LL | pub fn foo<const N: u8>() {}
+ | ~~~~~
+
+error: `const` keyword was mistyped as `Const`
+ --> $DIR/typod-const-in-const-param-def.rs:7:12
+ |
+LL | pub fn baz<Const N: u8, T>() {}
+ | ^^^^^
+ |
+help: use the `const` keyword
+ |
+LL | pub fn baz<const N: u8, T>() {}
+ | ~~~~~
+
+error: `const` keyword was mistyped as `Const`
+ --> $DIR/typod-const-in-const-param-def.rs:10:15
+ |
+LL | pub fn qux<T, Const N: u8>() {}
+ | ^^^^^
+ |
+help: use the `const` keyword
+ |
+LL | pub fn qux<T, const N: u8>() {}
+ | ~~~~~
+
+error: `const` keyword was mistyped as `Const`
+ --> $DIR/typod-const-in-const-param-def.rs:13:16
+ |
+LL | pub fn quux<T, Const N: u8, U>() {}
+ | ^^^^^
+ |
+help: use the `const` keyword
+ |
+LL | pub fn quux<T, const N: u8, U>() {}
+ | ~~~~~
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/parser/utf16-be-without-bom.stderr b/tests/ui/parser/utf16-be-without-bom.stderr
index 768d2c531..c041f3ecf 100644
--- a/tests/ui/parser/utf16-be-without-bom.stderr
+++ b/tests/ui/parser/utf16-be-without-bom.stderr
Binary files differ
diff --git a/tests/ui/parser/utf16-le-without-bom.stderr b/tests/ui/parser/utf16-le-without-bom.stderr
index 4f4b91e39..cc2220441 100644
--- a/tests/ui/parser/utf16-le-without-bom.stderr
+++ b/tests/ui/parser/utf16-le-without-bom.stderr
Binary files differ
diff --git a/tests/ui/pattern/byte-string-inference.rs b/tests/ui/pattern/byte-string-inference.rs
new file mode 100644
index 000000000..b1517de6b
--- /dev/null
+++ b/tests/ui/pattern/byte-string-inference.rs
@@ -0,0 +1,15 @@
+// check-pass
+
+fn load<L>() -> Option<L> {
+ todo!()
+}
+
+fn main() {
+ while let Some(tag) = load() {
+ match &tag {
+ b"NAME" => {}
+ b"DATA" => {}
+ _ => {}
+ }
+ }
+}
diff --git a/tests/ui/pattern/issue-110508.rs b/tests/ui/pattern/issue-110508.rs
new file mode 100644
index 000000000..1024ff055
--- /dev/null
+++ b/tests/ui/pattern/issue-110508.rs
@@ -0,0 +1,38 @@
+// run-pass
+
+#[derive(PartialEq, Eq)]
+pub enum Foo {
+ FooA(()),
+ FooB(Vec<()>),
+}
+
+impl Foo {
+ const A1: Foo = Foo::FooA(());
+ const A2: Foo = Self::FooA(());
+ const A3: Self = Foo::FooA(());
+ const A4: Self = Self::FooA(());
+}
+
+fn main() {
+ let foo = Foo::FooA(());
+
+ match foo {
+ Foo::A1 => {},
+ _ => {},
+ }
+
+ match foo {
+ Foo::A2 => {},
+ _ => {},
+ }
+
+ match foo {
+ Foo::A3 => {},
+ _ => {},
+ }
+
+ match foo {
+ Foo::A4 => {},
+ _ => {},
+ }
+}
diff --git a/tests/ui/pattern/issue-72565.rs b/tests/ui/pattern/issue-72565.rs
index 1e262fd50..21edb26de 100644
--- a/tests/ui/pattern/issue-72565.rs
+++ b/tests/ui/pattern/issue-72565.rs
@@ -3,6 +3,6 @@ const F: &'static dyn PartialEq<u32> = &7u32;
fn main() {
let a: &dyn PartialEq<u32> = &7u32;
match a {
- F => panic!(), //~ ERROR: `&dyn PartialEq<u32>` cannot be used in patterns
+ F => panic!(), //~ ERROR: `dyn PartialEq<u32>` cannot be used in patterns
}
}
diff --git a/tests/ui/pattern/issue-72565.stderr b/tests/ui/pattern/issue-72565.stderr
index 2f82616b2..051972069 100644
--- a/tests/ui/pattern/issue-72565.stderr
+++ b/tests/ui/pattern/issue-72565.stderr
@@ -1,4 +1,4 @@
-error: `&dyn PartialEq<u32>` cannot be used in patterns
+error: `dyn PartialEq<u32>` cannot be used in patterns
--> $DIR/issue-72565.rs:6:9
|
LL | F => panic!(),
diff --git a/tests/ui/issue-94866.rs b/tests/ui/pattern/issue-94866.rs
index c42034879..c42034879 100644
--- a/tests/ui/issue-94866.rs
+++ b/tests/ui/pattern/issue-94866.rs
diff --git a/tests/ui/issue-94866.stderr b/tests/ui/pattern/issue-94866.stderr
index b3c17ce89..b3c17ce89 100644
--- a/tests/ui/issue-94866.stderr
+++ b/tests/ui/pattern/issue-94866.stderr
diff --git a/tests/ui/pattern/usefulness/empty-match.exhaustive_patterns.stderr b/tests/ui/pattern/usefulness/empty-match.exhaustive_patterns.stderr
index 49b6dfca6..5b81a8c3d 100644
--- a/tests/ui/pattern/usefulness/empty-match.exhaustive_patterns.stderr
+++ b/tests/ui/pattern/usefulness/empty-match.exhaustive_patterns.stderr
@@ -176,6 +176,7 @@ LL | match_guarded_arm!(0u8);
| ^^^ pattern `_` not covered
|
= note: the matched value is of type `u8`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -183,7 +184,7 @@ LL + _ => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyStruct1` not covered
- --> $DIR/empty-match.rs:133:24
+ --> $DIR/empty-match.rs:134:24
|
LL | match_guarded_arm!(NonEmptyStruct1);
| ^^^^^^^^^^^^^^^ pattern `NonEmptyStruct1` not covered
@@ -194,6 +195,7 @@ note: `NonEmptyStruct1` defined here
LL | struct NonEmptyStruct1;
| ^^^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyStruct1`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -201,7 +203,7 @@ LL + NonEmptyStruct1 => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyStruct2(_)` not covered
- --> $DIR/empty-match.rs:137:24
+ --> $DIR/empty-match.rs:139:24
|
LL | match_guarded_arm!(NonEmptyStruct2(true));
| ^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyStruct2(_)` not covered
@@ -212,6 +214,7 @@ note: `NonEmptyStruct2` defined here
LL | struct NonEmptyStruct2(bool);
| ^^^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyStruct2`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -219,7 +222,7 @@ LL + NonEmptyStruct2(_) => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyUnion1 { .. }` not covered
- --> $DIR/empty-match.rs:141:24
+ --> $DIR/empty-match.rs:144:24
|
LL | match_guarded_arm!((NonEmptyUnion1 { foo: () }));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyUnion1 { .. }` not covered
@@ -230,6 +233,7 @@ note: `NonEmptyUnion1` defined here
LL | union NonEmptyUnion1 {
| ^^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyUnion1`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -237,7 +241,7 @@ LL + NonEmptyUnion1 { .. } => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyUnion2 { .. }` not covered
- --> $DIR/empty-match.rs:145:24
+ --> $DIR/empty-match.rs:149:24
|
LL | match_guarded_arm!((NonEmptyUnion2 { foo: () }));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyUnion2 { .. }` not covered
@@ -248,6 +252,7 @@ note: `NonEmptyUnion2` defined here
LL | union NonEmptyUnion2 {
| ^^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyUnion2`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -255,7 +260,7 @@ LL + NonEmptyUnion2 { .. } => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyEnum1::Foo(_)` not covered
- --> $DIR/empty-match.rs:149:24
+ --> $DIR/empty-match.rs:154:24
|
LL | match_guarded_arm!(NonEmptyEnum1::Foo(true));
| ^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyEnum1::Foo(_)` not covered
@@ -268,6 +273,7 @@ LL | enum NonEmptyEnum1 {
LL | Foo(bool),
| ^^^ not covered
= note: the matched value is of type `NonEmptyEnum1`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -275,7 +281,7 @@ LL + NonEmptyEnum1::Foo(_) => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered
- --> $DIR/empty-match.rs:153:24
+ --> $DIR/empty-match.rs:159:24
|
LL | match_guarded_arm!(NonEmptyEnum2::Foo(true));
| ^^^^^^^^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered
@@ -291,6 +297,7 @@ LL | Foo(bool),
LL | Bar,
| ^^^ not covered
= note: the matched value is of type `NonEmptyEnum2`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms
|
LL ~ _ if false => {},
@@ -298,7 +305,7 @@ LL + NonEmptyEnum2::Foo(_) | NonEmptyEnum2::Bar => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered
- --> $DIR/empty-match.rs:157:24
+ --> $DIR/empty-match.rs:164:24
|
LL | match_guarded_arm!(NonEmptyEnum5::V1);
| ^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered
@@ -309,6 +316,7 @@ note: `NonEmptyEnum5` defined here
LL | enum NonEmptyEnum5 {
| ^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyEnum5`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms
|
LL ~ _ if false => {},
diff --git a/tests/ui/pattern/usefulness/empty-match.normal.stderr b/tests/ui/pattern/usefulness/empty-match.normal.stderr
index f54a3f336..6d1745508 100644
--- a/tests/ui/pattern/usefulness/empty-match.normal.stderr
+++ b/tests/ui/pattern/usefulness/empty-match.normal.stderr
@@ -175,6 +175,7 @@ LL | match_guarded_arm!(0u8);
| ^^^ pattern `_` not covered
|
= note: the matched value is of type `u8`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -182,7 +183,7 @@ LL + _ => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyStruct1` not covered
- --> $DIR/empty-match.rs:133:24
+ --> $DIR/empty-match.rs:134:24
|
LL | match_guarded_arm!(NonEmptyStruct1);
| ^^^^^^^^^^^^^^^ pattern `NonEmptyStruct1` not covered
@@ -193,6 +194,7 @@ note: `NonEmptyStruct1` defined here
LL | struct NonEmptyStruct1;
| ^^^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyStruct1`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -200,7 +202,7 @@ LL + NonEmptyStruct1 => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyStruct2(_)` not covered
- --> $DIR/empty-match.rs:137:24
+ --> $DIR/empty-match.rs:139:24
|
LL | match_guarded_arm!(NonEmptyStruct2(true));
| ^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyStruct2(_)` not covered
@@ -211,6 +213,7 @@ note: `NonEmptyStruct2` defined here
LL | struct NonEmptyStruct2(bool);
| ^^^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyStruct2`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -218,7 +221,7 @@ LL + NonEmptyStruct2(_) => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyUnion1 { .. }` not covered
- --> $DIR/empty-match.rs:141:24
+ --> $DIR/empty-match.rs:144:24
|
LL | match_guarded_arm!((NonEmptyUnion1 { foo: () }));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyUnion1 { .. }` not covered
@@ -229,6 +232,7 @@ note: `NonEmptyUnion1` defined here
LL | union NonEmptyUnion1 {
| ^^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyUnion1`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -236,7 +240,7 @@ LL + NonEmptyUnion1 { .. } => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyUnion2 { .. }` not covered
- --> $DIR/empty-match.rs:145:24
+ --> $DIR/empty-match.rs:149:24
|
LL | match_guarded_arm!((NonEmptyUnion2 { foo: () }));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyUnion2 { .. }` not covered
@@ -247,6 +251,7 @@ note: `NonEmptyUnion2` defined here
LL | union NonEmptyUnion2 {
| ^^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyUnion2`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -254,7 +259,7 @@ LL + NonEmptyUnion2 { .. } => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyEnum1::Foo(_)` not covered
- --> $DIR/empty-match.rs:149:24
+ --> $DIR/empty-match.rs:154:24
|
LL | match_guarded_arm!(NonEmptyEnum1::Foo(true));
| ^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyEnum1::Foo(_)` not covered
@@ -267,6 +272,7 @@ LL | enum NonEmptyEnum1 {
LL | Foo(bool),
| ^^^ not covered
= note: the matched value is of type `NonEmptyEnum1`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL ~ _ if false => {},
@@ -274,7 +280,7 @@ LL + NonEmptyEnum1::Foo(_) => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered
- --> $DIR/empty-match.rs:153:24
+ --> $DIR/empty-match.rs:159:24
|
LL | match_guarded_arm!(NonEmptyEnum2::Foo(true));
| ^^^^^^^^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered
@@ -290,6 +296,7 @@ LL | Foo(bool),
LL | Bar,
| ^^^ not covered
= note: the matched value is of type `NonEmptyEnum2`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms
|
LL ~ _ if false => {},
@@ -297,7 +304,7 @@ LL + NonEmptyEnum2::Foo(_) | NonEmptyEnum2::Bar => todo!()
|
error[E0004]: non-exhaustive patterns: `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered
- --> $DIR/empty-match.rs:157:24
+ --> $DIR/empty-match.rs:164:24
|
LL | match_guarded_arm!(NonEmptyEnum5::V1);
| ^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered
@@ -308,6 +315,7 @@ note: `NonEmptyEnum5` defined here
LL | enum NonEmptyEnum5 {
| ^^^^^^^^^^^^^
= note: the matched value is of type `NonEmptyEnum5`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms
|
LL ~ _ if false => {},
diff --git a/tests/ui/pattern/usefulness/empty-match.rs b/tests/ui/pattern/usefulness/empty-match.rs
index 062241faa..d56d2e3c8 100644
--- a/tests/ui/pattern/usefulness/empty-match.rs
+++ b/tests/ui/pattern/usefulness/empty-match.rs
@@ -128,34 +128,42 @@ fn main() {
match_guarded_arm!(0u8); //~ ERROR `_` not covered
//~| NOTE the matched value is of type
+ //~| NOTE match arms with guards don't count towards exhaustivity
//~| NOTE pattern `_` not covered
//~| NOTE in this expansion of match_guarded_arm!
match_guarded_arm!(NonEmptyStruct1); //~ ERROR `NonEmptyStruct1` not covered
//~| NOTE pattern `NonEmptyStruct1` not covered
//~| NOTE the matched value is of type
+ //~| NOTE match arms with guards don't count towards exhaustivity
//~| NOTE in this expansion of match_guarded_arm!
match_guarded_arm!(NonEmptyStruct2(true)); //~ ERROR `NonEmptyStruct2(_)` not covered
//~| NOTE the matched value is of type
//~| NOTE pattern `NonEmptyStruct2(_)` not covered
+ //~| NOTE match arms with guards don't count towards exhaustivity
//~| NOTE in this expansion of match_guarded_arm!
match_guarded_arm!((NonEmptyUnion1 { foo: () })); //~ ERROR `NonEmptyUnion1 { .. }` not covered
//~| NOTE the matched value is of type
//~| NOTE pattern `NonEmptyUnion1 { .. }` not covered
+ //~| NOTE match arms with guards don't count towards exhaustivity
//~| NOTE in this expansion of match_guarded_arm!
match_guarded_arm!((NonEmptyUnion2 { foo: () })); //~ ERROR `NonEmptyUnion2 { .. }` not covered
//~| NOTE the matched value is of type
//~| NOTE pattern `NonEmptyUnion2 { .. }` not covered
+ //~| NOTE match arms with guards don't count towards exhaustivity
//~| NOTE in this expansion of match_guarded_arm!
match_guarded_arm!(NonEmptyEnum1::Foo(true)); //~ ERROR `NonEmptyEnum1::Foo(_)` not covered
//~| NOTE the matched value is of type
//~| NOTE pattern `NonEmptyEnum1::Foo(_)` not covered
+ //~| NOTE match arms with guards don't count towards exhaustivity
//~| NOTE in this expansion of match_guarded_arm!
match_guarded_arm!(NonEmptyEnum2::Foo(true)); //~ ERROR `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered
//~| NOTE the matched value is of type
//~| NOTE patterns `NonEmptyEnum2::Foo(_)` and
+ //~| NOTE match arms with guards don't count towards exhaustivity
//~| NOTE in this expansion of match_guarded_arm!
match_guarded_arm!(NonEmptyEnum5::V1); //~ ERROR `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered
//~| NOTE the matched value is of type
//~| NOTE patterns `NonEmptyEnum5::V1`,
+ //~| NOTE match arms with guards don't count towards exhaustivity
//~| NOTE in this expansion of match_guarded_arm!
}
diff --git a/tests/ui/pattern/usefulness/issue-3601.rs b/tests/ui/pattern/usefulness/issue-3601.rs
index 6215a2398..a6d2b11f4 100644
--- a/tests/ui/pattern/usefulness/issue-3601.rs
+++ b/tests/ui/pattern/usefulness/issue-3601.rs
@@ -1,19 +1,19 @@
#![feature(box_patterns)]
struct HTMLImageData {
- image: Option<String>
+ image: Option<String>,
}
struct ElementData {
- kind: Box<ElementKind>
+ kind: Box<ElementKind>,
}
enum ElementKind {
- HTMLImageElement(HTMLImageData)
+ HTMLImageElement(HTMLImageData),
}
enum NodeKind {
- Element(ElementData)
+ Element(ElementData),
}
struct NodeData {
@@ -27,8 +27,13 @@ fn main() {
// n.b. span could be better
match n.kind {
- box NodeKind::Element(ed) => match ed.kind { //~ ERROR non-exhaustive patterns
- box ElementKind::HTMLImageElement(ref d) if d.image.is_some() => { true }
+ box NodeKind::Element(ed) => match ed.kind {
+ //~^ ERROR non-exhaustive patterns
+ //~| NOTE the matched value is of type
+ //~| NOTE match arms with guards don't count towards exhaustivity
+ //~| NOTE pattern `box _` not covered
+ //~| NOTE `Box<ElementKind>` defined here
+ box ElementKind::HTMLImageElement(ref d) if d.image.is_some() => true,
},
};
}
diff --git a/tests/ui/pattern/usefulness/issue-3601.stderr b/tests/ui/pattern/usefulness/issue-3601.stderr
index 2f6b167d4..b8c987431 100644
--- a/tests/ui/pattern/usefulness/issue-3601.stderr
+++ b/tests/ui/pattern/usefulness/issue-3601.stderr
@@ -7,10 +7,11 @@ LL | box NodeKind::Element(ed) => match ed.kind {
note: `Box<ElementKind>` defined here
--> $SRC_DIR/alloc/src/boxed.rs:LL:COL
= note: the matched value is of type `Box<ElementKind>`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
-LL ~ box ElementKind::HTMLImageElement(ref d) if d.image.is_some() => { true },
-LL + box _ => todo!()
+LL ~ box ElementKind::HTMLImageElement(ref d) if d.image.is_some() => true,
+LL ~ box _ => todo!(),
|
error: aborting due to previous error
diff --git a/tests/ui/pattern/usefulness/match-non-exhaustive.rs b/tests/ui/pattern/usefulness/match-non-exhaustive.rs
index 3b210a115..62c185d04 100644
--- a/tests/ui/pattern/usefulness/match-non-exhaustive.rs
+++ b/tests/ui/pattern/usefulness/match-non-exhaustive.rs
@@ -1,4 +1,5 @@
fn main() {
match 0 { 1 => () } //~ ERROR non-exhaustive patterns
match 0 { 0 if false => () } //~ ERROR non-exhaustive patterns
+ //-| NOTE match arms with guards don't count towards exhaustivity
}
diff --git a/tests/ui/pattern/usefulness/match-non-exhaustive.stderr b/tests/ui/pattern/usefulness/match-non-exhaustive.stderr
index 08dde523a..4fa3a7292 100644
--- a/tests/ui/pattern/usefulness/match-non-exhaustive.stderr
+++ b/tests/ui/pattern/usefulness/match-non-exhaustive.stderr
@@ -17,6 +17,7 @@ LL | match 0 { 0 if false => () }
| ^ pattern `_` not covered
|
= note: the matched value is of type `i32`
+ = note: match arms with guards don't count towards exhaustivity
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
LL | match 0 { 0 if false => (), _ => todo!() }
diff --git a/tests/ui/polymorphization/drop_shims/simple.rs b/tests/ui/polymorphization/drop_shims/simple.rs
index 2695dc6d4..5f10d5e83 100644
--- a/tests/ui/polymorphization/drop_shims/simple.rs
+++ b/tests/ui/polymorphization/drop_shims/simple.rs
@@ -14,7 +14,7 @@ fn foo<R, S: FnOnce()>(
let bar = || {
let _ = OnDrop(|| ());
};
- let _ = bar();
+ bar();
}
fn main() {
diff --git a/tests/ui/polymorphization/drop_shims/transitive.rs b/tests/ui/polymorphization/drop_shims/transitive.rs
index c22891171..283b8da13 100644
--- a/tests/ui/polymorphization/drop_shims/transitive.rs
+++ b/tests/ui/polymorphization/drop_shims/transitive.rs
@@ -19,7 +19,7 @@ fn foo<R, S: FnOnce()>(
let bar = || {
bar(|| {})
};
- let _ = bar();
+ bar();
}
fn main() {
diff --git a/tests/ui/privacy/effective_visibilities_full_priv.rs b/tests/ui/privacy/effective_visibilities_full_priv.rs
new file mode 100644
index 000000000..a26ae3bd1
--- /dev/null
+++ b/tests/ui/privacy/effective_visibilities_full_priv.rs
@@ -0,0 +1,21 @@
+#![feature(rustc_attrs)]
+#![allow(private_in_public)]
+
+struct SemiPriv;
+
+mod m {
+ #[rustc_effective_visibility]
+ struct Priv;
+ //~^ ERROR not in the table
+ //~| ERROR not in the table
+
+ #[rustc_effective_visibility]
+ pub fn foo() {} //~ ERROR Direct: pub(crate), Reexported: pub(crate), Reachable: pub(crate), ReachableThroughImplTrait: pub(crate)
+
+ #[rustc_effective_visibility]
+ impl crate::SemiPriv { //~ ERROR Direct: pub(crate), Reexported: pub(crate), Reachable: pub(crate), ReachableThroughImplTrait: pub(crate)
+ pub fn f(_: Priv) {}
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/privacy/effective_visibilities_full_priv.stderr b/tests/ui/privacy/effective_visibilities_full_priv.stderr
new file mode 100644
index 000000000..29d82e2ee
--- /dev/null
+++ b/tests/ui/privacy/effective_visibilities_full_priv.stderr
@@ -0,0 +1,26 @@
+error: not in the table
+ --> $DIR/effective_visibilities_full_priv.rs:8:5
+ |
+LL | struct Priv;
+ | ^^^^^^^^^^^
+
+error: not in the table
+ --> $DIR/effective_visibilities_full_priv.rs:8:5
+ |
+LL | struct Priv;
+ | ^^^^^^^^^^^
+
+error: Direct: pub(crate), Reexported: pub(crate), Reachable: pub(crate), ReachableThroughImplTrait: pub(crate)
+ --> $DIR/effective_visibilities_full_priv.rs:13:5
+ |
+LL | pub fn foo() {}
+ | ^^^^^^^^^^^^
+
+error: Direct: pub(crate), Reexported: pub(crate), Reachable: pub(crate), ReachableThroughImplTrait: pub(crate)
+ --> $DIR/effective_visibilities_full_priv.rs:16:5
+ |
+LL | impl crate::SemiPriv {
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
+
diff --git a/tests/ui/privacy/export-tag-variant.stderr b/tests/ui/privacy/export-tag-variant.stderr
index f73bd454d..e8906985e 100644
--- a/tests/ui/privacy/export-tag-variant.stderr
+++ b/tests/ui/privacy/export-tag-variant.stderr
@@ -2,7 +2,9 @@ error[E0603]: enum `Y` is private
--> $DIR/export-tag-variant.rs:7:26
|
LL | fn main() { let z = foo::Y::Y1; }
- | ^ private enum
+ | ^ -- unit variant `Y1` is not publicly re-exported
+ | |
+ | private enum
|
note: the enum `Y` is defined here
--> $DIR/export-tag-variant.rs:4:5
diff --git a/tests/ui/privacy/privacy-in-paths.stderr b/tests/ui/privacy/privacy-in-paths.stderr
index 2eb3ebb51..9c3d5e97c 100644
--- a/tests/ui/privacy/privacy-in-paths.stderr
+++ b/tests/ui/privacy/privacy-in-paths.stderr
@@ -2,7 +2,9 @@ error[E0603]: module `bar` is private
--> $DIR/privacy-in-paths.rs:24:16
|
LL | ::foo::bar::baz::f();
- | ^^^ private module
+ | ^^^ - function `f` is not publicly re-exported
+ | |
+ | private module
|
note: the module `bar` is defined here
--> $DIR/privacy-in-paths.rs:3:5
@@ -21,12 +23,18 @@ note: the module `bar` is defined here
|
LL | mod bar {
| ^^^^^^^
+help: consider importing this struct through its public re-export instead
+ |
+LL | foo::S::f();
+ | ~~~~~~
error[E0603]: trait `T` is private
--> $DIR/privacy-in-paths.rs:26:23
|
LL | <() as ::foo::T>::Assoc::f();
- | ^ private trait
+ | ^ ----- associated type `Assoc` is not publicly re-exported
+ | |
+ | private trait
|
note: the trait `T` is defined here
--> $DIR/privacy-in-paths.rs:8:5
diff --git a/tests/ui/privacy/privacy-ufcs.stderr b/tests/ui/privacy/privacy-ufcs.stderr
index e93a458ce..f45f3d8ec 100644
--- a/tests/ui/privacy/privacy-ufcs.stderr
+++ b/tests/ui/privacy/privacy-ufcs.stderr
@@ -2,7 +2,9 @@ error[E0603]: trait `Bar` is private
--> $DIR/privacy-ufcs.rs:12:20
|
LL | <i32 as ::foo::Bar>::baz();
- | ^^^ private trait
+ | ^^^ --- associated function `baz` is not publicly re-exported
+ | |
+ | private trait
|
note: the trait `Bar` is defined here
--> $DIR/privacy-ufcs.rs:4:5
diff --git a/tests/ui/privacy/privacy1.stderr b/tests/ui/privacy/privacy1.stderr
index 6ebed8ee0..ca8f242e0 100644
--- a/tests/ui/privacy/privacy1.stderr
+++ b/tests/ui/privacy/privacy1.stderr
@@ -50,7 +50,9 @@ error[E0603]: module `baz` is private
--> $DIR/privacy1.rs:104:16
|
LL | ::bar::baz::A::foo();
- | ^^^ private module
+ | ^^^ - struct `A` is not publicly re-exported
+ | |
+ | private module
|
note: the module `baz` is defined here
--> $DIR/privacy1.rs:50:5
@@ -62,7 +64,9 @@ error[E0603]: module `baz` is private
--> $DIR/privacy1.rs:105:16
|
LL | ::bar::baz::A::bar();
- | ^^^ private module
+ | ^^^ - struct `A` is not publicly re-exported
+ | |
+ | private module
|
note: the module `baz` is defined here
--> $DIR/privacy1.rs:50:5
@@ -74,7 +78,9 @@ error[E0603]: module `baz` is private
--> $DIR/privacy1.rs:107:16
|
LL | ::bar::baz::A.foo2();
- | ^^^ private module
+ | ^^^ - unit struct `A` is not publicly re-exported
+ | |
+ | private module
|
note: the module `baz` is defined here
--> $DIR/privacy1.rs:50:5
@@ -86,7 +92,9 @@ error[E0603]: module `baz` is private
--> $DIR/privacy1.rs:108:16
|
LL | ::bar::baz::A.bar2();
- | ^^^ private module
+ | ^^^ - unit struct `A` is not publicly re-exported
+ | |
+ | private module
|
note: the module `baz` is defined here
--> $DIR/privacy1.rs:50:5
@@ -98,7 +106,9 @@ error[E0603]: trait `B` is private
--> $DIR/privacy1.rs:112:16
|
LL | ::bar::B::foo();
- | ^ private trait
+ | ^ --- associated function `foo` is not publicly re-exported
+ | |
+ | private trait
|
note: the trait `B` is defined here
--> $DIR/privacy1.rs:40:5
@@ -129,6 +139,10 @@ note: the module `baz` is defined here
|
LL | mod baz {
| ^^^^^^^
+help: consider importing this function through its public re-export instead
+ |
+LL | bar::foo();
+ | ~~~~~~~~
error[E0603]: module `baz` is private
--> $DIR/privacy1.rs:128:16
@@ -141,6 +155,10 @@ note: the module `baz` is defined here
|
LL | mod baz {
| ^^^^^^^
+help: consider importing this function through its public re-export instead
+ |
+LL | bar::bar();
+ | ~~~~~~~~
error[E0603]: trait `B` is private
--> $DIR/privacy1.rs:157:17
diff --git a/tests/ui/privacy/private-in-public-non-principal.rs b/tests/ui/privacy/private-in-public-non-principal.rs
index ac1d5a9e6..a2284c930 100644
--- a/tests/ui/privacy/private-in-public-non-principal.rs
+++ b/tests/ui/privacy/private-in-public-non-principal.rs
@@ -1,5 +1,11 @@
#![feature(auto_traits)]
#![feature(negative_impls)]
+#![feature(type_privacy_lints)]
+#![deny(private_interfaces)]
+
+// In this test both old and new private-in-public diagnostic were emitted.
+// Old diagnostic will be deleted soon.
+// See https://rust-lang.github.io/rfcs/2145-type-privacy.html.
pub trait PubPrincipal {}
auto trait PrivNonPrincipal {}
@@ -7,6 +13,7 @@ auto trait PrivNonPrincipal {}
pub fn leak_dyn_nonprincipal() -> Box<dyn PubPrincipal + PrivNonPrincipal> { loop {} }
//~^ WARN private trait `PrivNonPrincipal` in public interface
//~| WARN this was previously accepted
+//~| ERROR trait `PrivNonPrincipal` is more private than the item `leak_dyn_nonprincipal`
#[deny(missing_docs)]
fn container() {
diff --git a/tests/ui/privacy/private-in-public-non-principal.stderr b/tests/ui/privacy/private-in-public-non-principal.stderr
index de20cada4..1387f59cb 100644
--- a/tests/ui/privacy/private-in-public-non-principal.stderr
+++ b/tests/ui/privacy/private-in-public-non-principal.stderr
@@ -1,5 +1,5 @@
warning: private trait `PrivNonPrincipal` in public interface (error E0445)
- --> $DIR/private-in-public-non-principal.rs:7:1
+ --> $DIR/private-in-public-non-principal.rs:13:1
|
LL | pub fn leak_dyn_nonprincipal() -> Box<dyn PubPrincipal + PrivNonPrincipal> { loop {} }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -8,17 +8,34 @@ LL | pub fn leak_dyn_nonprincipal() -> Box<dyn PubPrincipal + PrivNonPrincipal>
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
= note: `#[warn(private_in_public)]` on by default
+error: trait `PrivNonPrincipal` is more private than the item `leak_dyn_nonprincipal`
+ --> $DIR/private-in-public-non-principal.rs:13:1
+ |
+LL | pub fn leak_dyn_nonprincipal() -> Box<dyn PubPrincipal + PrivNonPrincipal> { loop {} }
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function `leak_dyn_nonprincipal` is reachable at visibility `pub`
+ |
+note: but trait `PrivNonPrincipal` is only usable at visibility `pub(crate)`
+ --> $DIR/private-in-public-non-principal.rs:11:1
+ |
+LL | auto trait PrivNonPrincipal {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/private-in-public-non-principal.rs:4:9
+ |
+LL | #![deny(private_interfaces)]
+ | ^^^^^^^^^^^^^^^^^^
+
error: missing documentation for an associated function
- --> $DIR/private-in-public-non-principal.rs:14:9
+ --> $DIR/private-in-public-non-principal.rs:21:9
|
LL | pub fn check_doc_lint() {}
| ^^^^^^^^^^^^^^^^^^^^^^^
|
note: the lint level is defined here
- --> $DIR/private-in-public-non-principal.rs:11:8
+ --> $DIR/private-in-public-non-principal.rs:18:8
|
LL | #[deny(missing_docs)]
| ^^^^^^^^^^^^
-error: aborting due to previous error; 1 warning emitted
+error: aborting due to 2 previous errors; 1 warning emitted
diff --git a/tests/ui/privacy/private-inferred-type-1.rs b/tests/ui/privacy/private-inferred-type-1.rs
index d633189e3..b3eba53dd 100644
--- a/tests/ui/privacy/private-inferred-type-1.rs
+++ b/tests/ui/privacy/private-inferred-type-1.rs
@@ -5,14 +5,24 @@ trait TyParam {
fn ty_param_secret(&self);
}
+trait Ref {
+ fn ref_secret(self);
+}
+
mod m {
struct Priv;
impl ::Arr0 for [Priv; 0] { fn arr0_secret(&self) {} }
impl ::TyParam for Option<Priv> { fn ty_param_secret(&self) {} }
+ impl<'a> ::Ref for &'a Priv { fn ref_secret(self) {} }
}
+fn anyref<'a, T>() -> &'a T { panic!() }
+
fn main() {
[].arr0_secret(); //~ ERROR type `Priv` is private
None.ty_param_secret(); //~ ERROR type `Priv` is private
+ Ref::ref_secret(anyref());
+ //~^ ERROR type `Priv` is private
+ //~| ERROR type `Priv` is private
}
diff --git a/tests/ui/privacy/private-inferred-type-1.stderr b/tests/ui/privacy/private-inferred-type-1.stderr
index 245789f43..47c11d6ec 100644
--- a/tests/ui/privacy/private-inferred-type-1.stderr
+++ b/tests/ui/privacy/private-inferred-type-1.stderr
@@ -1,14 +1,26 @@
error: type `Priv` is private
- --> $DIR/private-inferred-type-1.rs:16:5
+ --> $DIR/private-inferred-type-1.rs:23:5
|
LL | [].arr0_secret();
| ^^^^^^^^^^^^^^^^ private type
error: type `Priv` is private
- --> $DIR/private-inferred-type-1.rs:17:5
+ --> $DIR/private-inferred-type-1.rs:24:5
|
LL | None.ty_param_secret();
| ^^^^^^^^^^^^^^^^^^^^^^ private type
-error: aborting due to 2 previous errors
+error: type `Priv` is private
+ --> $DIR/private-inferred-type-1.rs:25:5
+ |
+LL | Ref::ref_secret(anyref());
+ | ^^^^^^^^^^^^^^^ private type
+
+error: type `Priv` is private
+ --> $DIR/private-inferred-type-1.rs:25:21
+ |
+LL | Ref::ref_secret(anyref());
+ | ^^^^^^^^ private type
+
+error: aborting due to 4 previous errors
diff --git a/tests/ui/privacy/sealed-traits/private-trait-non-local.rs b/tests/ui/privacy/sealed-traits/private-trait-non-local.rs
new file mode 100644
index 000000000..426f21cc7
--- /dev/null
+++ b/tests/ui/privacy/sealed-traits/private-trait-non-local.rs
@@ -0,0 +1,4 @@
+extern crate core;
+use core::slice::index::private_slice_index::Sealed; //~ ERROR module `index` is private
+fn main() {
+}
diff --git a/tests/ui/privacy/sealed-traits/private-trait-non-local.stderr b/tests/ui/privacy/sealed-traits/private-trait-non-local.stderr
new file mode 100644
index 000000000..294999798
--- /dev/null
+++ b/tests/ui/privacy/sealed-traits/private-trait-non-local.stderr
@@ -0,0 +1,12 @@
+error[E0603]: module `index` is private
+ --> $DIR/private-trait-non-local.rs:2:18
+ |
+LL | use core::slice::index::private_slice_index::Sealed;
+ | ^^^^^ private module ------ trait `Sealed` is not publicly re-exported
+ |
+note: the module `index` is defined here
+ --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0603`.
diff --git a/tests/ui/privacy/sealed-traits/private-trait.rs b/tests/ui/privacy/sealed-traits/private-trait.rs
new file mode 100644
index 000000000..bbcbaabfa
--- /dev/null
+++ b/tests/ui/privacy/sealed-traits/private-trait.rs
@@ -0,0 +1,10 @@
+pub mod a {
+ mod b {
+ pub trait Hidden {}
+ }
+}
+
+struct S;
+impl a::b::Hidden for S {} //~ ERROR module `b` is private
+
+fn main() {}
diff --git a/tests/ui/privacy/sealed-traits/private-trait.stderr b/tests/ui/privacy/sealed-traits/private-trait.stderr
new file mode 100644
index 000000000..c7ec72ff1
--- /dev/null
+++ b/tests/ui/privacy/sealed-traits/private-trait.stderr
@@ -0,0 +1,17 @@
+error[E0603]: module `b` is private
+ --> $DIR/private-trait.rs:8:9
+ |
+LL | impl a::b::Hidden for S {}
+ | ^ ------ trait `Hidden` is not publicly re-exported
+ | |
+ | private module
+ |
+note: the module `b` is defined here
+ --> $DIR/private-trait.rs:2:5
+ |
+LL | mod b {
+ | ^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0603`.
diff --git a/tests/ui/privacy/sealed-traits/re-exported-trait.fixed b/tests/ui/privacy/sealed-traits/re-exported-trait.fixed
new file mode 100644
index 000000000..79b6a6516
--- /dev/null
+++ b/tests/ui/privacy/sealed-traits/re-exported-trait.fixed
@@ -0,0 +1,13 @@
+// run-rustfix
+
+pub mod a {
+ pub use self::b::Trait;
+ mod b {
+ pub trait Trait {}
+ }
+}
+
+struct S;
+impl a::Trait for S {} //~ ERROR module `b` is private
+
+fn main() {}
diff --git a/tests/ui/privacy/sealed-traits/re-exported-trait.rs b/tests/ui/privacy/sealed-traits/re-exported-trait.rs
new file mode 100644
index 000000000..5f96dfdcb
--- /dev/null
+++ b/tests/ui/privacy/sealed-traits/re-exported-trait.rs
@@ -0,0 +1,13 @@
+// run-rustfix
+
+pub mod a {
+ pub use self::b::Trait;
+ mod b {
+ pub trait Trait {}
+ }
+}
+
+struct S;
+impl a::b::Trait for S {} //~ ERROR module `b` is private
+
+fn main() {}
diff --git a/tests/ui/privacy/sealed-traits/re-exported-trait.stderr b/tests/ui/privacy/sealed-traits/re-exported-trait.stderr
new file mode 100644
index 000000000..b630565d0
--- /dev/null
+++ b/tests/ui/privacy/sealed-traits/re-exported-trait.stderr
@@ -0,0 +1,19 @@
+error[E0603]: module `b` is private
+ --> $DIR/re-exported-trait.rs:11:9
+ |
+LL | impl a::b::Trait for S {}
+ | ^ private module
+ |
+note: the module `b` is defined here
+ --> $DIR/re-exported-trait.rs:5:5
+ |
+LL | mod b {
+ | ^^^^^
+help: consider importing this trait through its public re-export instead
+ |
+LL | impl a::Trait for S {}
+ | ~~~~~~~~
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0603`.
diff --git a/tests/ui/privacy/sealed-traits/sealed-trait-local.rs b/tests/ui/privacy/sealed-traits/sealed-trait-local.rs
new file mode 100644
index 000000000..778ddf0f8
--- /dev/null
+++ b/tests/ui/privacy/sealed-traits/sealed-trait-local.rs
@@ -0,0 +1,19 @@
+// provide custom privacy error for sealed traits
+pub mod a {
+ pub trait Sealed: self::b::Hidden {
+ fn foo() {}
+ }
+
+ struct X;
+ impl Sealed for X {}
+ impl self::b::Hidden for X {}
+
+ mod b {
+ pub trait Hidden {}
+ }
+}
+
+struct S;
+impl a::Sealed for S {} //~ ERROR the trait bound `S: Hidden` is not satisfied
+
+fn main() {}
diff --git a/tests/ui/privacy/sealed-traits/sealed-trait-local.stderr b/tests/ui/privacy/sealed-traits/sealed-trait-local.stderr
new file mode 100644
index 000000000..d1052ce35
--- /dev/null
+++ b/tests/ui/privacy/sealed-traits/sealed-trait-local.stderr
@@ -0,0 +1,16 @@
+error[E0277]: the trait bound `S: Hidden` is not satisfied
+ --> $DIR/sealed-trait-local.rs:17:20
+ |
+LL | impl a::Sealed for S {}
+ | ^ the trait `Hidden` is not implemented for `S`
+ |
+note: required by a bound in `Sealed`
+ --> $DIR/sealed-trait-local.rs:3:23
+ |
+LL | pub trait Sealed: self::b::Hidden {
+ | ^^^^^^^^^^^^^^^ required by this bound in `Sealed`
+ = note: `Sealed` is a "sealed trait", because to implement it you also need to implelement `a::b::Hidden`, which is not accessible; this is usually done to force you to use one of the provided types that already implement it
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/privacy/unnameable_types.rs b/tests/ui/privacy/unnameable_types.rs
new file mode 100644
index 000000000..eae20dd9d
--- /dev/null
+++ b/tests/ui/privacy/unnameable_types.rs
@@ -0,0 +1,30 @@
+#![feature(type_privacy_lints)]
+#![allow(private_in_public)]
+#![deny(unnameable_types)]
+
+mod m {
+ pub struct PubStruct(pub i32); //~ ERROR struct `PubStruct` is reachable but cannot be named
+
+ pub enum PubE { //~ ERROR enum `PubE` is reachable but cannot be named
+ V(i32),
+ }
+
+ pub trait PubTr { //~ ERROR trait `PubTr` is reachable but cannot be named
+ const C : i32 = 0;
+ type Alias; //~ ERROR associated type `PubTr::Alias` is reachable but cannot be named
+ fn f() {}
+ }
+
+ impl PubTr for PubStruct {
+ type Alias = i32; //~ ERROR associated type `<PubStruct as PubTr>::Alias` is reachable but cannot be named
+ fn f() {}
+ }
+}
+
+pub trait Voldemort<T> {}
+
+impl Voldemort<m::PubStruct> for i32 {}
+impl Voldemort<m::PubE> for i32 {}
+impl<T> Voldemort<T> for u32 where T: m::PubTr {}
+
+fn main() {}
diff --git a/tests/ui/privacy/unnameable_types.stderr b/tests/ui/privacy/unnameable_types.stderr
new file mode 100644
index 000000000..25eb5c943
--- /dev/null
+++ b/tests/ui/privacy/unnameable_types.stderr
@@ -0,0 +1,38 @@
+error: struct `PubStruct` is reachable but cannot be named
+ --> $DIR/unnameable_types.rs:6:5
+ |
+LL | pub struct PubStruct(pub i32);
+ | ^^^^^^^^^^^^^^^^^^^^ reachable at visibility `pub`, but can only be named at visibility `pub(crate)`
+ |
+note: the lint level is defined here
+ --> $DIR/unnameable_types.rs:3:9
+ |
+LL | #![deny(unnameable_types)]
+ | ^^^^^^^^^^^^^^^^
+
+error: enum `PubE` is reachable but cannot be named
+ --> $DIR/unnameable_types.rs:8:5
+ |
+LL | pub enum PubE {
+ | ^^^^^^^^^^^^^ reachable at visibility `pub`, but can only be named at visibility `pub(crate)`
+
+error: trait `PubTr` is reachable but cannot be named
+ --> $DIR/unnameable_types.rs:12:5
+ |
+LL | pub trait PubTr {
+ | ^^^^^^^^^^^^^^^ reachable at visibility `pub`, but can only be named at visibility `pub(crate)`
+
+error: associated type `PubTr::Alias` is reachable but cannot be named
+ --> $DIR/unnameable_types.rs:14:9
+ |
+LL | type Alias;
+ | ^^^^^^^^^^ reachable at visibility `pub`, but can only be named at visibility `pub(crate)`
+
+error: associated type `<PubStruct as PubTr>::Alias` is reachable but cannot be named
+ --> $DIR/unnameable_types.rs:19:9
+ |
+LL | type Alias = i32;
+ | ^^^^^^^^^^ reachable at visibility `pub`, but can only be named at visibility `pub(crate)`
+
+error: aborting due to 5 previous errors
+
diff --git a/tests/ui/privacy/where-priv-type.rs b/tests/ui/privacy/where-priv-type.rs
index 66ee9c4bb..2e0a6b3e7 100644
--- a/tests/ui/privacy/where-priv-type.rs
+++ b/tests/ui/privacy/where-priv-type.rs
@@ -3,8 +3,14 @@
#![crate_type = "lib"]
#![feature(generic_const_exprs)]
+#![feature(type_privacy_lints)]
#![allow(incomplete_features)]
+#![warn(private_bounds)]
+#![warn(private_interfaces)]
+// In this test both old and new private-in-public diagnostic were emitted.
+// Old diagnostic will be deleted soon.
+// See https://rust-lang.github.io/rfcs/2145-type-privacy.html.
struct PrivTy;
trait PrivTr {}
@@ -19,6 +25,7 @@ impl PubTrWithAssocTy for PrivTy { type AssocTy = PrivTy; }
pub struct S
//~^ WARNING private type `PrivTy` in public interface
//~| WARNING hard error
+//~| WARNING type `PrivTy` is more private than the item `S`
where
PrivTy:
{}
@@ -27,6 +34,7 @@ where
pub enum E
//~^ WARNING private type `PrivTy` in public interface
//~| WARNING hard error
+//~| WARNING type `PrivTy` is more private than the item `E`
where
PrivTy:
{}
@@ -35,6 +43,7 @@ where
pub fn f()
//~^ WARNING private type `PrivTy` in public interface
//~| WARNING hard error
+//~| WARNING type `PrivTy` is more private than the item `f`
where
PrivTy:
{}
@@ -42,12 +51,14 @@ where
impl S
//~^ ERROR private type `PrivTy` in public interface
+//~| WARNING type `PrivTy` is more private than the item `S`
where
PrivTy:
{
pub fn f()
//~^ WARNING private type `PrivTy` in public interface
//~| WARNING hard error
+ //~| WARNING type `PrivTy` is more private than the item `S::f`
where
PrivTy:
{}
@@ -79,6 +90,7 @@ where
{
type AssocTy = Const<{ my_const_fn(U) }>;
//~^ ERROR private type
+ //~| WARNING type `fn(u8) -> u8 {my_const_fn}` is more private than the item `<Const<U> as Trait>::AssocTy`
fn assoc_fn() -> Self::AssocTy {
Const
}
diff --git a/tests/ui/privacy/where-priv-type.stderr b/tests/ui/privacy/where-priv-type.stderr
index c5fb2cdb0..d6baf22b3 100644
--- a/tests/ui/privacy/where-priv-type.stderr
+++ b/tests/ui/privacy/where-priv-type.stderr
@@ -1,5 +1,5 @@
warning: private type `PrivTy` in public interface (error E0446)
- --> $DIR/where-priv-type.rs:19:1
+ --> $DIR/where-priv-type.rs:25:1
|
LL | pub struct S
| ^^^^^^^^^^^^
@@ -8,8 +8,25 @@ LL | pub struct S
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
= note: `#[warn(private_in_public)]` on by default
+warning: type `PrivTy` is more private than the item `S`
+ --> $DIR/where-priv-type.rs:25:1
+ |
+LL | pub struct S
+ | ^^^^^^^^^^^^ struct `S` is reachable at visibility `pub`
+ |
+note: but type `PrivTy` is only usable at visibility `pub(crate)`
+ --> $DIR/where-priv-type.rs:15:1
+ |
+LL | struct PrivTy;
+ | ^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/where-priv-type.rs:8:9
+ |
+LL | #![warn(private_bounds)]
+ | ^^^^^^^^^^^^^^
+
warning: private type `PrivTy` in public interface (error E0446)
- --> $DIR/where-priv-type.rs:27:1
+ --> $DIR/where-priv-type.rs:34:1
|
LL | pub enum E
| ^^^^^^^^^^
@@ -17,12 +34,25 @@ LL | pub enum E
= 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 #34537 <https://github.com/rust-lang/rust/issues/34537>
+warning: type `PrivTy` is more private than the item `E`
+ --> $DIR/where-priv-type.rs:34:1
+ |
+LL | pub enum E
+ | ^^^^^^^^^^ enum `E` is reachable at visibility `pub`
+ |
+note: but type `PrivTy` is only usable at visibility `pub(crate)`
+ --> $DIR/where-priv-type.rs:15:1
+ |
+LL | struct PrivTy;
+ | ^^^^^^^^^^^^^
+
warning: private type `PrivTy` in public interface (error E0446)
- --> $DIR/where-priv-type.rs:35:1
+ --> $DIR/where-priv-type.rs:43:1
|
LL | / pub fn f()
LL | |
LL | |
+LL | |
LL | | where
LL | | PrivTy:
| |___________^
@@ -30,21 +60,51 @@ LL | | PrivTy:
= 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 #34537 <https://github.com/rust-lang/rust/issues/34537>
-error[E0446]: private type `PrivTy` in public interface
+warning: type `PrivTy` is more private than the item `f`
--> $DIR/where-priv-type.rs:43:1
|
+LL | / pub fn f()
+LL | |
+LL | |
+LL | |
+LL | | where
+LL | | PrivTy:
+ | |___________^ function `f` is reachable at visibility `pub`
+ |
+note: but type `PrivTy` is only usable at visibility `pub(crate)`
+ --> $DIR/where-priv-type.rs:15:1
+ |
+LL | struct PrivTy;
+ | ^^^^^^^^^^^^^
+
+error[E0446]: private type `PrivTy` in public interface
+ --> $DIR/where-priv-type.rs:52:1
+ |
LL | struct PrivTy;
| ------------- `PrivTy` declared as private
...
LL | impl S
| ^^^^^^ can't leak private type
+warning: type `PrivTy` is more private than the item `S`
+ --> $DIR/where-priv-type.rs:52:1
+ |
+LL | impl S
+ | ^^^^^^ implementation `S` is reachable at visibility `pub`
+ |
+note: but type `PrivTy` is only usable at visibility `pub(crate)`
+ --> $DIR/where-priv-type.rs:15:1
+ |
+LL | struct PrivTy;
+ | ^^^^^^^^^^^^^
+
warning: private type `PrivTy` in public interface (error E0446)
- --> $DIR/where-priv-type.rs:48:5
+ --> $DIR/where-priv-type.rs:58:5
|
LL | / pub fn f()
LL | |
LL | |
+LL | |
LL | | where
LL | | PrivTy:
| |_______________^
@@ -52,8 +112,25 @@ LL | | PrivTy:
= 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 #34537 <https://github.com/rust-lang/rust/issues/34537>
+warning: type `PrivTy` is more private than the item `S::f`
+ --> $DIR/where-priv-type.rs:58:5
+ |
+LL | / pub fn f()
+LL | |
+LL | |
+LL | |
+LL | | where
+LL | | PrivTy:
+ | |_______________^ associated function `S::f` is reachable at visibility `pub`
+ |
+note: but type `PrivTy` is only usable at visibility `pub(crate)`
+ --> $DIR/where-priv-type.rs:15:1
+ |
+LL | struct PrivTy;
+ | ^^^^^^^^^^^^^
+
error[E0446]: private type `fn(u8) -> u8 {my_const_fn}` in public interface
- --> $DIR/where-priv-type.rs:80:5
+ --> $DIR/where-priv-type.rs:91:5
|
LL | type AssocTy = Const<{ my_const_fn(U) }>;
| ^^^^^^^^^^^^ can't leak private type
@@ -61,6 +138,23 @@ LL | type AssocTy = Const<{ my_const_fn(U) }>;
LL | const fn my_const_fn(val: u8) -> u8 {
| ----------------------------------- `fn(u8) -> u8 {my_const_fn}` declared as private
-error: aborting due to 2 previous errors; 4 warnings emitted
+warning: type `fn(u8) -> u8 {my_const_fn}` is more private than the item `<Const<U> as Trait>::AssocTy`
+ --> $DIR/where-priv-type.rs:91:5
+ |
+LL | type AssocTy = Const<{ my_const_fn(U) }>;
+ | ^^^^^^^^^^^^ associated type `<Const<U> as Trait>::AssocTy` is reachable at visibility `pub`
+ |
+note: but type `fn(u8) -> u8 {my_const_fn}` is only usable at visibility `pub(crate)`
+ --> $DIR/where-priv-type.rs:99:1
+ |
+LL | const fn my_const_fn(val: u8) -> u8 {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/where-priv-type.rs:9:9
+ |
+LL | #![warn(private_interfaces)]
+ | ^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors; 10 warnings emitted
For more information about this error, try `rustc --explain E0446`.
diff --git a/tests/ui/privacy/where-pub-type-impls-priv-trait.rs b/tests/ui/privacy/where-pub-type-impls-priv-trait.rs
index 87c211df1..c59fdb7c7 100644
--- a/tests/ui/privacy/where-pub-type-impls-priv-trait.rs
+++ b/tests/ui/privacy/where-pub-type-impls-priv-trait.rs
@@ -2,8 +2,13 @@
#![crate_type = "lib"]
#![feature(generic_const_exprs)]
+#![feature(type_privacy_lints)]
#![allow(incomplete_features)]
+#![warn(private_bounds)]
+// In this test both old and new private-in-public diagnostic were emitted.
+// Old diagnostic will be deleted soon.
+// See https://rust-lang.github.io/rfcs/2145-type-privacy.html.
struct PrivTy;
trait PrivTr {}
@@ -18,6 +23,7 @@ impl PubTrWithAssocTy for PrivTy { type AssocTy = PrivTy; }
pub struct S
//~^ ERROR private trait `PrivTr` in public interface
+//~| WARNING trait `PrivTr` is more private than the item `S`
where
PubTy: PrivTr
{}
@@ -25,6 +31,7 @@ where
pub enum E
//~^ ERROR private trait `PrivTr` in public interface
+//~| WARNING trait `PrivTr` is more private than the item `E`
where
PubTy: PrivTr
{}
@@ -32,6 +39,7 @@ where
pub fn f()
//~^ ERROR private trait `PrivTr` in public interface
+//~| WARNING trait `PrivTr` is more private than the item `f`
where
PubTy: PrivTr
{}
@@ -39,11 +47,13 @@ where
impl S
//~^ ERROR private trait `PrivTr` in public interface
+//~| WARNING trait `PrivTr` is more private than the item `S`
where
PubTy: PrivTr
{
pub fn f()
//~^ ERROR private trait `PrivTr` in public interface
+ //~| WARNING trait `PrivTr` is more private than the item `S::f`
where
PubTy: PrivTr
{}
diff --git a/tests/ui/privacy/where-pub-type-impls-priv-trait.stderr b/tests/ui/privacy/where-pub-type-impls-priv-trait.stderr
index a433cebbb..e2d7ce446 100644
--- a/tests/ui/privacy/where-pub-type-impls-priv-trait.stderr
+++ b/tests/ui/privacy/where-pub-type-impls-priv-trait.stderr
@@ -1,5 +1,5 @@
error[E0445]: private trait `PrivTr` in public interface
- --> $DIR/where-pub-type-impls-priv-trait.rs:19:1
+ --> $DIR/where-pub-type-impls-priv-trait.rs:24:1
|
LL | trait PrivTr {}
| ------------ `PrivTr` declared as private
@@ -7,8 +7,25 @@ LL | trait PrivTr {}
LL | pub struct S
| ^^^^^^^^^^^^ can't leak private trait
+warning: trait `PrivTr` is more private than the item `S`
+ --> $DIR/where-pub-type-impls-priv-trait.rs:24:1
+ |
+LL | pub struct S
+ | ^^^^^^^^^^^^ struct `S` is reachable at visibility `pub`
+ |
+note: but trait `PrivTr` is only usable at visibility `pub(crate)`
+ --> $DIR/where-pub-type-impls-priv-trait.rs:14:1
+ |
+LL | trait PrivTr {}
+ | ^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/where-pub-type-impls-priv-trait.rs:7:9
+ |
+LL | #![warn(private_bounds)]
+ | ^^^^^^^^^^^^^^
+
error[E0445]: private trait `PrivTr` in public interface
- --> $DIR/where-pub-type-impls-priv-trait.rs:26:1
+ --> $DIR/where-pub-type-impls-priv-trait.rs:32:1
|
LL | trait PrivTr {}
| ------------ `PrivTr` declared as private
@@ -16,39 +33,97 @@ LL | trait PrivTr {}
LL | pub enum E
| ^^^^^^^^^^ can't leak private trait
+warning: trait `PrivTr` is more private than the item `E`
+ --> $DIR/where-pub-type-impls-priv-trait.rs:32:1
+ |
+LL | pub enum E
+ | ^^^^^^^^^^ enum `E` is reachable at visibility `pub`
+ |
+note: but trait `PrivTr` is only usable at visibility `pub(crate)`
+ --> $DIR/where-pub-type-impls-priv-trait.rs:14:1
+ |
+LL | trait PrivTr {}
+ | ^^^^^^^^^^^^
+
error[E0445]: private trait `PrivTr` in public interface
- --> $DIR/where-pub-type-impls-priv-trait.rs:33:1
+ --> $DIR/where-pub-type-impls-priv-trait.rs:40:1
|
LL | trait PrivTr {}
| ------------ `PrivTr` declared as private
...
LL | / pub fn f()
LL | |
+LL | |
LL | | where
LL | | PubTy: PrivTr
| |_________________^ can't leak private trait
-error[E0445]: private trait `PrivTr` in public interface
+warning: trait `PrivTr` is more private than the item `f`
--> $DIR/where-pub-type-impls-priv-trait.rs:40:1
|
+LL | / pub fn f()
+LL | |
+LL | |
+LL | | where
+LL | | PubTy: PrivTr
+ | |_________________^ function `f` is reachable at visibility `pub`
+ |
+note: but trait `PrivTr` is only usable at visibility `pub(crate)`
+ --> $DIR/where-pub-type-impls-priv-trait.rs:14:1
+ |
+LL | trait PrivTr {}
+ | ^^^^^^^^^^^^
+
+error[E0445]: private trait `PrivTr` in public interface
+ --> $DIR/where-pub-type-impls-priv-trait.rs:48:1
+ |
LL | trait PrivTr {}
| ------------ `PrivTr` declared as private
...
LL | impl S
| ^^^^^^ can't leak private trait
+warning: trait `PrivTr` is more private than the item `S`
+ --> $DIR/where-pub-type-impls-priv-trait.rs:48:1
+ |
+LL | impl S
+ | ^^^^^^ implementation `S` is reachable at visibility `pub`
+ |
+note: but trait `PrivTr` is only usable at visibility `pub(crate)`
+ --> $DIR/where-pub-type-impls-priv-trait.rs:14:1
+ |
+LL | trait PrivTr {}
+ | ^^^^^^^^^^^^
+
error[E0445]: private trait `PrivTr` in public interface
- --> $DIR/where-pub-type-impls-priv-trait.rs:45:5
+ --> $DIR/where-pub-type-impls-priv-trait.rs:54:5
|
LL | trait PrivTr {}
| ------------ `PrivTr` declared as private
...
LL | / pub fn f()
LL | |
+LL | |
LL | | where
LL | | PubTy: PrivTr
| |_____________________^ can't leak private trait
-error: aborting due to 5 previous errors
+warning: trait `PrivTr` is more private than the item `S::f`
+ --> $DIR/where-pub-type-impls-priv-trait.rs:54:5
+ |
+LL | / pub fn f()
+LL | |
+LL | |
+LL | | where
+LL | | PubTy: PrivTr
+ | |_____________________^ associated function `S::f` is reachable at visibility `pub`
+ |
+note: but trait `PrivTr` is only usable at visibility `pub(crate)`
+ --> $DIR/where-pub-type-impls-priv-trait.rs:14:1
+ |
+LL | trait PrivTr {}
+ | ^^^^^^^^^^^^
+
+error: aborting due to 5 previous errors; 5 warnings emitted
For more information about this error, try `rustc --explain E0445`.
diff --git a/tests/ui/proc-macro/auxiliary/api/cmp.rs b/tests/ui/proc-macro/auxiliary/api/cmp.rs
index 5784a6e5d..ec3e637ac 100644
--- a/tests/ui/proc-macro/auxiliary/api/cmp.rs
+++ b/tests/ui/proc-macro/auxiliary/api/cmp.rs
@@ -1,18 +1,9 @@
-use proc_macro::{LineColumn, Punct, Spacing};
+use proc_macro::{Punct, Spacing};
pub fn test() {
- test_line_column_ord();
test_punct_eq();
}
-fn test_line_column_ord() {
- let line0_column0 = LineColumn { line: 0, column: 0 };
- let line0_column1 = LineColumn { line: 0, column: 1 };
- let line1_column0 = LineColumn { line: 1, column: 0 };
- assert!(line0_column0 < line0_column1);
- assert!(line0_column1 < line1_column0);
-}
-
fn test_punct_eq() {
let colon_alone = Punct::new(':', Spacing::Alone);
assert_eq!(colon_alone, ':');
diff --git a/tests/ui/proc-macro/auxiliary/assert-span-pos.rs b/tests/ui/proc-macro/auxiliary/assert-span-pos.rs
index 455c5c7c3..8126470ec 100644
--- a/tests/ui/proc-macro/auxiliary/assert-span-pos.rs
+++ b/tests/ui/proc-macro/auxiliary/assert-span-pos.rs
@@ -26,10 +26,9 @@ pub fn assert_span_pos(input: TokenStream) -> TokenStream {
let line: usize = str1.parse().unwrap();
let col: usize = str2.parse().unwrap();
- let sp1s = sp1.start();
- if (line, col) != (sp1s.line, sp1s.column) {
+ if (line, col) != (sp1.line(), sp1.column()) {
let msg = format!("line/column mismatch: ({}, {}) != ({}, {})", line, col,
- sp1s.line, sp1s.column);
+ sp1.line(), sp1.column());
sp1.error(msg).emit();
}
diff --git a/tests/ui/proc-macro/auxiliary/exports_no_mangle.rs b/tests/ui/proc-macro/auxiliary/exports_no_mangle.rs
new file mode 100644
index 000000000..a8a478ffc
--- /dev/null
+++ b/tests/ui/proc-macro/auxiliary/exports_no_mangle.rs
@@ -0,0 +1,11 @@
+// force-host
+// no-prefer-dynamic
+#![crate_type="lib"]
+
+// Issue 111888: this crate (1.) is imported by a proc-macro crate and (2.)
+// exports a no_mangle function; that combination of acts was broken for some
+// period of time. See further discussion in the test file that imports this
+// crate.
+
+#[no_mangle]
+pub fn some_no_mangle_function() { }
diff --git a/tests/ui/proc-macro/auxiliary/macro-only-syntax.rs b/tests/ui/proc-macro/auxiliary/macro-only-syntax.rs
index c72306c3d..4ca3a0faa 100644
--- a/tests/ui/proc-macro/auxiliary/macro-only-syntax.rs
+++ b/tests/ui/proc-macro/auxiliary/macro-only-syntax.rs
@@ -81,7 +81,7 @@ fn expect_brace(tokens: &mut token_stream::IntoIter) -> token_stream::IntoIter {
fn check_useful_span(token: TokenTree, expected_filename: &str) {
let span = token.span();
- assert!(span.start().column < span.end().column);
+ assert!(span.column() < span.end().column());
let source_path = span.source_file().path();
let filename = source_path.components().last().unwrap();
diff --git a/tests/ui/proc-macro/crt-static.rs b/tests/ui/proc-macro/crt-static.rs
index 020128fa2..78592f827 100644
--- a/tests/ui/proc-macro/crt-static.rs
+++ b/tests/ui/proc-macro/crt-static.rs
@@ -7,6 +7,7 @@
// build-pass
// force-host
// no-prefer-dynamic
+// needs-dynamic-linking
#![crate_type = "proc-macro"]
diff --git a/tests/ui/proc-macro/derive-helper-shadowing.rs b/tests/ui/proc-macro/derive-helper-shadowing.rs
index 80d982d25..4f25b4b0d 100644
--- a/tests/ui/proc-macro/derive-helper-shadowing.rs
+++ b/tests/ui/proc-macro/derive-helper-shadowing.rs
@@ -23,7 +23,7 @@ macro_rules! gen_helper_use {
struct S {
#[empty_helper] // OK, no ambiguity, derive helpers have highest priority
field: [u8; {
- use empty_helper; //~ ERROR `empty_helper` is ambiguous
+ use empty_helper; // OK, no ambiguity, derive helpers have highest priority
#[empty_helper] // OK, no ambiguity, derive helpers have highest priority
struct U;
diff --git a/tests/ui/proc-macro/derive-helper-shadowing.stderr b/tests/ui/proc-macro/derive-helper-shadowing.stderr
index de2c27a87..f284b1c54 100644
--- a/tests/ui/proc-macro/derive-helper-shadowing.stderr
+++ b/tests/ui/proc-macro/derive-helper-shadowing.stderr
@@ -16,9 +16,11 @@ error: cannot find attribute `empty_helper` in this scope
LL | #[derive(GenHelperUse)]
| ^^^^^^^^^^^^
|
- = help: consider importing this attribute macro:
- empty_helper
= note: this error originates in the derive macro `GenHelperUse` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: consider importing this attribute macro through its public re-export
+ |
+LL + use empty_helper;
+ |
error: cannot find attribute `empty_helper` in this scope
--> $DIR/derive-helper-shadowing.rs:14:11
@@ -29,28 +31,11 @@ LL | #[empty_helper]
LL | gen_helper_use!();
| ----------------- in this macro invocation
|
- = help: consider importing this attribute macro:
- crate::empty_helper
= note: this error originates in the macro `gen_helper_use` (in Nightly builds, run with -Z macro-backtrace for more info)
-
-error[E0659]: `empty_helper` is ambiguous
- --> $DIR/derive-helper-shadowing.rs:26:13
+help: consider importing this attribute macro through its public re-export
|
-LL | use empty_helper;
- | ^^^^^^^^^^^^ ambiguous name
+LL + use crate::empty_helper;
|
- = note: ambiguous because of multiple potential import sources
-note: `empty_helper` could refer to the derive helper attribute defined here
- --> $DIR/derive-helper-shadowing.rs:22:10
- |
-LL | #[derive(Empty)]
- | ^^^^^
-note: `empty_helper` could also refer to the attribute macro imported here
- --> $DIR/derive-helper-shadowing.rs:10:5
- |
-LL | use test_macros::empty_attr as empty_helper;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- = help: use `crate::empty_helper` to refer to this attribute macro unambiguously
error[E0659]: `empty_helper` is ambiguous
--> $DIR/derive-helper-shadowing.rs:19:3
@@ -84,6 +69,6 @@ LL | #[derive(Empty)]
= note: for more information, see issue #79202 <https://github.com/rust-lang/rust/issues/79202>
= note: `#[warn(legacy_derive_helpers)]` on by default
-error: aborting due to 5 previous errors; 1 warning emitted
+error: aborting due to 4 previous errors; 1 warning emitted
For more information about this error, try `rustc --explain E0659`.
diff --git a/tests/ui/proc-macro/no-mangle-in-proc-macro-issue-111888.rs b/tests/ui/proc-macro/no-mangle-in-proc-macro-issue-111888.rs
new file mode 100644
index 000000000..4e5208e50
--- /dev/null
+++ b/tests/ui/proc-macro/no-mangle-in-proc-macro-issue-111888.rs
@@ -0,0 +1,22 @@
+// build-pass
+// force-host
+// no-prefer-dynamic
+// aux-build:exports_no_mangle.rs
+#![crate_type = "proc-macro"]
+
+// Issue #111888: this proc-macro crate imports another crate that itself
+// exports a no_mangle function.
+//
+// That combination was broken for a period of time, because:
+//
+// In PR #99944 we *stopped* exporting no_mangle symbols from
+// proc-macro crates. The constructed linker version script still referred
+// to them, but resolving that discrepancy was left as a FIXME in the code.
+//
+// In PR #108017 we started telling the linker to check (via the
+// `--no-undefined-version` linker invocation flag) that every symbol referenced
+// in the "linker version script" is actually present in the linker input. So
+// the unresolved discrepancy from #99944 started surfacing as a compile-time
+// error.
+
+extern crate exports_no_mangle;
diff --git a/tests/ui/proc-macro/span-preservation.stderr b/tests/ui/proc-macro/span-preservation.stderr
index 66c68be2f..8c15cb9de 100644
--- a/tests/ui/proc-macro/span-preservation.stderr
+++ b/tests/ui/proc-macro/span-preservation.stderr
@@ -32,7 +32,7 @@ error[E0560]: struct `Foo` has no field named `b`
LL | let y = Foo { a: 10, b: 10isize };
| ^ `Foo` does not have this field
|
- = note: available fields are: `a`
+ = note: all struct fields are already assigned
error[E0308]: mismatched types
--> $DIR/span-preservation.rs:39:5
diff --git a/tests/ui/process/process-panic-after-fork.rs b/tests/ui/process/process-panic-after-fork.rs
index da2683121..7c2fc296b 100644
--- a/tests/ui/process/process-panic-after-fork.rs
+++ b/tests/ui/process/process-panic-after-fork.rs
@@ -11,6 +11,8 @@
#![feature(never_type)]
#![feature(panic_always_abort)]
+#![allow(invalid_from_utf8)]
+
extern crate libc;
use std::alloc::{GlobalAlloc, Layout};
diff --git a/tests/ui/pub/issue-33174-restricted-type-in-public-interface.rs b/tests/ui/pub/issue-33174-restricted-type-in-public-interface.rs
index 67f888c5e..cdeea6224 100644
--- a/tests/ui/pub/issue-33174-restricted-type-in-public-interface.rs
+++ b/tests/ui/pub/issue-33174-restricted-type-in-public-interface.rs
@@ -1,15 +1,25 @@
+#![feature(type_privacy_lints)]
#![allow(non_camel_case_types)] // genus is always capitalized
+#![warn(private_interfaces)]
+//~^ NOTE the lint level is defined here
+
+// In this test both old and new private-in-public diagnostic were emitted.
+// Old diagnostic will be deleted soon.
+// See https://rust-lang.github.io/rfcs/2145-type-privacy.html.
pub(crate) struct Snail;
//~^ NOTE `Snail` declared as private
+//~| NOTE but type `Snail` is only usable at visibility `pub(crate)`
mod sea {
pub(super) struct Turtle;
//~^ NOTE `Turtle` declared as crate-private
+ //~| NOTE but type `Turtle` is only usable at visibility `pub(crate)`
}
struct Tortoise;
//~^ NOTE `Tortoise` declared as private
+//~| NOTE but type `Tortoise` is only usable at visibility `pub(crate)`
pub struct Shell<T> {
pub(crate) creature: T,
@@ -17,12 +27,18 @@ pub struct Shell<T> {
pub type Helix_pomatia = Shell<Snail>;
//~^ ERROR private type `Snail` in public interface
+//~| WARNING type `Snail` is more private than the item `Helix_pomatia`
//~| NOTE can't leak private type
+//~| NOTE type alias `Helix_pomatia` is reachable at visibility `pub`
pub type Dermochelys_coriacea = Shell<sea::Turtle>;
//~^ ERROR crate-private type `Turtle` in public interface
+//~| WARNING type `Turtle` is more private than the item `Dermochelys_coriacea`
//~| NOTE can't leak crate-private type
+//~| NOTE type alias `Dermochelys_coriacea` is reachable at visibility `pub`
pub type Testudo_graeca = Shell<Tortoise>;
//~^ ERROR private type `Tortoise` in public interface
+//~| WARNING type `Tortoise` is more private than the item `Testudo_graeca`
//~| NOTE can't leak private type
+//~| NOTE type alias `Testudo_graeca` is reachable at visibility `pub`
fn main() {}
diff --git a/tests/ui/pub/issue-33174-restricted-type-in-public-interface.stderr b/tests/ui/pub/issue-33174-restricted-type-in-public-interface.stderr
index 39d4f5ac8..20e51e190 100644
--- a/tests/ui/pub/issue-33174-restricted-type-in-public-interface.stderr
+++ b/tests/ui/pub/issue-33174-restricted-type-in-public-interface.stderr
@@ -1,5 +1,5 @@
error[E0446]: private type `Snail` in public interface
- --> $DIR/issue-33174-restricted-type-in-public-interface.rs:18:1
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:28:1
|
LL | pub(crate) struct Snail;
| ----------------------- `Snail` declared as private
@@ -7,8 +7,25 @@ LL | pub(crate) struct Snail;
LL | pub type Helix_pomatia = Shell<Snail>;
| ^^^^^^^^^^^^^^^^^^^^^^ can't leak private type
+warning: type `Snail` is more private than the item `Helix_pomatia`
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:28:1
+ |
+LL | pub type Helix_pomatia = Shell<Snail>;
+ | ^^^^^^^^^^^^^^^^^^^^^^ type alias `Helix_pomatia` is reachable at visibility `pub`
+ |
+note: but type `Snail` is only usable at visibility `pub(crate)`
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:10:1
+ |
+LL | pub(crate) struct Snail;
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:3:9
+ |
+LL | #![warn(private_interfaces)]
+ | ^^^^^^^^^^^^^^^^^^
+
error[E0446]: crate-private type `Turtle` in public interface
- --> $DIR/issue-33174-restricted-type-in-public-interface.rs:21:1
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:33:1
|
LL | pub(super) struct Turtle;
| ------------------------ `Turtle` declared as crate-private
@@ -16,8 +33,20 @@ LL | pub(super) struct Turtle;
LL | pub type Dermochelys_coriacea = Shell<sea::Turtle>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't leak crate-private type
+warning: type `Turtle` is more private than the item `Dermochelys_coriacea`
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:33:1
+ |
+LL | pub type Dermochelys_coriacea = Shell<sea::Turtle>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type alias `Dermochelys_coriacea` is reachable at visibility `pub`
+ |
+note: but type `Turtle` is only usable at visibility `pub(crate)`
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:15:5
+ |
+LL | pub(super) struct Turtle;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+
error[E0446]: private type `Tortoise` in public interface
- --> $DIR/issue-33174-restricted-type-in-public-interface.rs:24:1
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:38:1
|
LL | struct Tortoise;
| --------------- `Tortoise` declared as private
@@ -25,6 +54,18 @@ LL | struct Tortoise;
LL | pub type Testudo_graeca = Shell<Tortoise>;
| ^^^^^^^^^^^^^^^^^^^^^^^ can't leak private type
-error: aborting due to 3 previous errors
+warning: type `Tortoise` is more private than the item `Testudo_graeca`
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:38:1
+ |
+LL | pub type Testudo_graeca = Shell<Tortoise>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^ type alias `Testudo_graeca` is reachable at visibility `pub`
+ |
+note: but type `Tortoise` is only usable at visibility `pub(crate)`
+ --> $DIR/issue-33174-restricted-type-in-public-interface.rs:20:1
+ |
+LL | struct Tortoise;
+ | ^^^^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors; 3 warnings emitted
For more information about this error, try `rustc --explain E0446`.
diff --git a/tests/ui/range/range-1.stderr b/tests/ui/range/range-1.stderr
index 395639036..277d9b268 100644
--- a/tests/ui/range/range-1.stderr
+++ b/tests/ui/range/range-1.stderr
@@ -12,13 +12,13 @@ LL | for i in false..true {}
|
= help: the following other types implement trait `Step`:
char
- i128
+ isize
+ i8
i16
i32
i64
- i8
- isize
- u128
+ i128
+ usize
and 5 others
= note: required for `std::ops::Range<bool>` to implement `Iterator`
= note: required for `std::ops::Range<bool>` to implement `IntoIterator`
diff --git a/tests/ui/reachable/expr_return.rs b/tests/ui/reachable/expr_return.rs
index 0fc43f450..0dbeb660e 100644
--- a/tests/ui/reachable/expr_return.rs
+++ b/tests/ui/reachable/expr_return.rs
@@ -7,7 +7,7 @@
fn a() {
// Here we issue that the "2nd-innermost" return is unreachable,
// but we stop there.
- let x = {return {return {return;}}}; //~ ERROR unreachable
+ let x: () = {return {return {return;}}}; //~ ERROR unreachable
}
fn main() { }
diff --git a/tests/ui/reachable/expr_return.stderr b/tests/ui/reachable/expr_return.stderr
index e1bef80ae..3791559f4 100644
--- a/tests/ui/reachable/expr_return.stderr
+++ b/tests/ui/reachable/expr_return.stderr
@@ -1,11 +1,11 @@
error: unreachable expression
- --> $DIR/expr_return.rs:10:22
+ --> $DIR/expr_return.rs:10:26
|
-LL | let x = {return {return {return;}}};
- | ^^^^^^^^------^^
- | | |
- | | any code following this expression is unreachable
- | unreachable expression
+LL | let x: () = {return {return {return;}}};
+ | ^^^^^^^^------^^
+ | | |
+ | | any code following this expression is unreachable
+ | unreachable expression
|
note: the lint level is defined here
--> $DIR/expr_return.rs:4:9
diff --git a/tests/ui/reachable/unreachable-variant.stderr b/tests/ui/reachable/unreachable-variant.stderr
index 6c27a2756..ca1d2be65 100644
--- a/tests/ui/reachable/unreachable-variant.stderr
+++ b/tests/ui/reachable/unreachable-variant.stderr
@@ -2,7 +2,7 @@ error[E0603]: module `super_sekrit` is private
--> $DIR/unreachable-variant.rs:6:21
|
LL | let _x = other::super_sekrit::sooper_sekrit::baz;
- | ^^^^^^^^^^^^ private module
+ | ^^^^^^^^^^^^ private module --- unit variant `baz` is not publicly re-exported
|
note: the module `super_sekrit` is defined here
--> $DIR/auxiliary/unreachable_variant.rs:1:1
diff --git a/tests/ui/recursion/issue-83150.rs b/tests/ui/recursion/issue-83150.rs
index 38353d161..75dcdc59f 100644
--- a/tests/ui/recursion/issue-83150.rs
+++ b/tests/ui/recursion/issue-83150.rs
@@ -2,6 +2,7 @@
// compile-flags: -Copt-level=0
// normalize-stderr-test: "long-type-\d+" -> "long-type-hash"
//~^^^ ERROR overflow evaluating the requirement
+// ignore-compare-mode-next-solver (hangs)
fn main() {
let mut iter = 0u8..1;
diff --git a/tests/ui/recursion/issue-83150.stderr b/tests/ui/recursion/issue-83150.stderr
index 64683ae3a..eae58771a 100644
--- a/tests/ui/recursion/issue-83150.stderr
+++ b/tests/ui/recursion/issue-83150.stderr
@@ -1,5 +1,5 @@
warning: function cannot return without recursing
- --> $DIR/issue-83150.rs:11:1
+ --> $DIR/issue-83150.rs:12:1
|
LL | fn func<T: Iterator<Item = u8>>(iter: &mut T) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing
@@ -9,10 +9,10 @@ LL | func(&mut iter.map(|x| x + 1))
= help: a `loop` may express intention better if this is on purpose
= note: `#[warn(unconditional_recursion)]` on by default
-error[E0275]: overflow evaluating the requirement `Map<&mut std::ops::Range<u8>, [closure@$DIR/issue-83150.rs:12:24: 12:27]>: Iterator`
+error[E0275]: overflow evaluating the requirement `Map<&mut std::ops::Range<u8>, [closure@$DIR/issue-83150.rs:13:24: 13:27]>: Iterator`
|
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_83150`)
- = note: required for `&mut Map<&mut std::ops::Range<u8>, [closure@$DIR/issue-83150.rs:12:24: 12:27]>` to implement `Iterator`
+ = note: required for `&mut Map<&mut std::ops::Range<u8>, [closure@$DIR/issue-83150.rs:13:24: 13:27]>` to implement `Iterator`
= note: 65 redundant requirements hidden
= note: required for `&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<..., ...>, ...>, ...>, ...>, ...>, ...>, ...>` to implement `Iterator`
= note: the full type name has been written to '$TEST_BUILD_DIR/recursion/issue-83150/issue-83150.long-type-hash.txt'
diff --git a/tests/ui/recursion/issue-95134.rs b/tests/ui/recursion/issue-95134.rs
index 2f1cffa2f..7ee31d85c 100644
--- a/tests/ui/recursion/issue-95134.rs
+++ b/tests/ui/recursion/issue-95134.rs
@@ -3,6 +3,7 @@
// compile-flags: -Copt-level=0
// dont-check-failure-status
// dont-check-compiler-stderr
+// ignore-compare-mode-next-solver (hangs)
pub fn encode_num<Writer: ExampleWriter>(n: u32, mut writer: Writer) -> Result<(), Writer::Error> {
if n > 15 {
diff --git a/tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.rs b/tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.rs
index 110635203..429548f11 100644
--- a/tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.rs
+++ b/tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.rs
@@ -20,7 +20,6 @@ trait Trait2<'a, 'b> {
// do not infer that.
fn callee<'x, 'y, T>(t: &'x dyn for<'z> Trait1< <T as Trait2<'y, 'z>>::Foo >)
//~^ ERROR the trait bound `for<'z> T: Trait2<'y, 'z>` is not satisfied
- //~| ERROR the trait bound `for<'z> T: Trait2<'y, 'z>` is not satisfied
{
}
diff --git a/tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.stderr b/tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.stderr
index 3fd39810d..6844e8665 100644
--- a/tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.stderr
+++ b/tests/ui/regions/regions-implied-bounds-projection-gap-hr-1.stderr
@@ -9,21 +9,6 @@ help: consider restricting type parameter `T`
LL | fn callee<'x, 'y, T: for<'z> Trait2<'y, 'z>>(t: &'x dyn for<'z> Trait1< <T as Trait2<'y, 'z>>::Foo >)
| ++++++++++++++++++++++++
-error[E0277]: the trait bound `for<'z> T: Trait2<'y, 'z>` is not satisfied
- --> $DIR/regions-implied-bounds-projection-gap-hr-1.rs:21:1
- |
-LL | / fn callee<'x, 'y, T>(t: &'x dyn for<'z> Trait1< <T as Trait2<'y, 'z>>::Foo >)
-LL | |
-LL | |
-LL | | {
-LL | | }
- | |_^ the trait `for<'z> Trait2<'y, 'z>` is not implemented for `T`
- |
-help: consider restricting type parameter `T`
- |
-LL | fn callee<'x, 'y, T: for<'z> Trait2<'y, 'z>>(t: &'x dyn for<'z> Trait1< <T as Trait2<'y, 'z>>::Foo >)
- | ++++++++++++++++++++++++
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/resolve/auxiliary/issue-112831-aux.rs b/tests/ui/resolve/auxiliary/issue-112831-aux.rs
new file mode 100644
index 000000000..df436fb99
--- /dev/null
+++ b/tests/ui/resolve/auxiliary/issue-112831-aux.rs
@@ -0,0 +1,13 @@
+// force-host
+// no-prefer-dynamic
+
+#![crate_type = "proc-macro"]
+
+extern crate proc_macro;
+
+struct Zeroable;
+
+#[proc_macro_derive(Zeroable)]
+pub fn derive_zeroable(_: proc_macro::TokenStream) -> proc_macro::TokenStream {
+ proc_macro::TokenStream::default()
+}
diff --git a/tests/ui/resolve/export-fully-qualified-2018.rs b/tests/ui/resolve/export-fully-qualified-2018.rs
new file mode 100644
index 000000000..afd48acb6
--- /dev/null
+++ b/tests/ui/resolve/export-fully-qualified-2018.rs
@@ -0,0 +1,13 @@
+// edition:2018
+
+// In this test baz isn't resolved when called as foo.baz even though
+// it's called from inside foo. This is somewhat surprising and may
+// want to change eventually.
+
+mod foo {
+ pub fn bar() { foo::baz(); } //~ ERROR failed to resolve: use of undeclared crate or module `foo`
+
+ fn baz() { }
+}
+
+fn main() { }
diff --git a/tests/ui/resolve/export-fully-qualified-2018.stderr b/tests/ui/resolve/export-fully-qualified-2018.stderr
new file mode 100644
index 000000000..366ffd9bb
--- /dev/null
+++ b/tests/ui/resolve/export-fully-qualified-2018.stderr
@@ -0,0 +1,14 @@
+error[E0433]: failed to resolve: use of undeclared crate or module `foo`
+ --> $DIR/export-fully-qualified-2018.rs:8:20
+ |
+LL | pub fn bar() { foo::baz(); }
+ | ^^^ use of undeclared crate or module `foo`
+ |
+help: consider importing this module
+ |
+LL + use crate::foo;
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0433`.
diff --git a/tests/ui/resolve/export-fully-qualified.rs b/tests/ui/resolve/export-fully-qualified.rs
index 4e73a2c54..9d4daf4cd 100644
--- a/tests/ui/resolve/export-fully-qualified.rs
+++ b/tests/ui/resolve/export-fully-qualified.rs
@@ -1,3 +1,5 @@
+// edition:2015
+
// In this test baz isn't resolved when called as foo.baz even though
// it's called from inside foo. This is somewhat surprising and may
// want to change eventually.
diff --git a/tests/ui/resolve/export-fully-qualified.stderr b/tests/ui/resolve/export-fully-qualified.stderr
index 7ee352e12..0cd516ee1 100644
--- a/tests/ui/resolve/export-fully-qualified.stderr
+++ b/tests/ui/resolve/export-fully-qualified.stderr
@@ -1,8 +1,13 @@
error[E0433]: failed to resolve: use of undeclared crate or module `foo`
- --> $DIR/export-fully-qualified.rs:6:20
+ --> $DIR/export-fully-qualified.rs:8:20
|
LL | pub fn bar() { foo::baz(); }
| ^^^ use of undeclared crate or module `foo`
+ |
+help: consider importing this module
+ |
+LL + use foo;
+ |
error: aborting due to previous error
diff --git a/tests/ui/resolve/extern-prelude.rs b/tests/ui/resolve/extern-prelude.rs
index 50fed6034..b5f1d5d35 100644
--- a/tests/ui/resolve/extern-prelude.rs
+++ b/tests/ui/resolve/extern-prelude.rs
@@ -25,7 +25,7 @@ fn shadow_mod() {
fn shadow_prelude() {
// Extern prelude shadows standard library prelude
- let x = Vec::new(0f32, ()); // OK
+ let x: () = Vec::new(0f32, ()); // OK
}
fn main() {}
diff --git a/tests/ui/resolve/hidden_glob_reexports.rs b/tests/ui/resolve/hidden_glob_reexports.rs
new file mode 100644
index 000000000..102b56562
--- /dev/null
+++ b/tests/ui/resolve/hidden_glob_reexports.rs
@@ -0,0 +1,52 @@
+// check-pass
+
+pub mod upstream_a {
+ mod inner {
+ pub struct Foo {}
+ pub struct Bar {}
+ }
+
+ struct Foo;
+ //~^ WARN private item shadows public glob re-export
+
+ pub use self::inner::*;
+}
+
+pub mod upstream_b {
+ mod inner {
+ pub struct Foo {}
+ pub struct Qux {}
+ }
+
+ mod other {
+ pub struct Foo;
+ }
+
+ pub use self::inner::*;
+
+ use self::other::Foo;
+ //~^ WARN private item shadows public glob re-export
+}
+
+pub mod upstream_c {
+ mod no_def_id {
+ #![allow(non_camel_case_types)]
+ pub struct u8;
+ pub struct World;
+ }
+
+ pub use self::no_def_id::*;
+
+ use std::primitive::u8;
+ //~^ WARN private item shadows public glob re-export
+}
+
+// Downstream crate
+// mod downstream {
+// fn proof() {
+// let _ = crate::upstream_a::Foo;
+// let _ = crate::upstream_b::Foo;
+// }
+// }
+
+pub fn main() {}
diff --git a/tests/ui/resolve/hidden_glob_reexports.stderr b/tests/ui/resolve/hidden_glob_reexports.stderr
new file mode 100644
index 000000000..11fa94d6f
--- /dev/null
+++ b/tests/ui/resolve/hidden_glob_reexports.stderr
@@ -0,0 +1,54 @@
+warning: private item shadows public glob re-export
+ --> $DIR/hidden_glob_reexports.rs:9:5
+ |
+LL | struct Foo;
+ | ^^^^^^^^^^^
+ |
+note: the name `Foo` in the type namespace is supposed to be publicly re-exported here
+ --> $DIR/hidden_glob_reexports.rs:12:13
+ |
+LL | pub use self::inner::*;
+ | ^^^^^^^^^^^^^^
+note: but the private item here shadows it
+ --> $DIR/hidden_glob_reexports.rs:9:5
+ |
+LL | struct Foo;
+ | ^^^^^^^^^^^
+ = note: `#[warn(hidden_glob_reexports)]` on by default
+
+warning: private item shadows public glob re-export
+ --> $DIR/hidden_glob_reexports.rs:27:9
+ |
+LL | use self::other::Foo;
+ | ^^^^^^^^^^^^^^^^
+ |
+note: the name `Foo` in the type namespace is supposed to be publicly re-exported here
+ --> $DIR/hidden_glob_reexports.rs:25:13
+ |
+LL | pub use self::inner::*;
+ | ^^^^^^^^^^^^^^
+note: but the private item here shadows it
+ --> $DIR/hidden_glob_reexports.rs:27:9
+ |
+LL | use self::other::Foo;
+ | ^^^^^^^^^^^^^^^^
+
+warning: private item shadows public glob re-export
+ --> $DIR/hidden_glob_reexports.rs:40:9
+ |
+LL | use std::primitive::u8;
+ | ^^^^^^^^^^^^^^^^^^
+ |
+note: the name `u8` in the type namespace is supposed to be publicly re-exported here
+ --> $DIR/hidden_glob_reexports.rs:38:13
+ |
+LL | pub use self::no_def_id::*;
+ | ^^^^^^^^^^^^^^^^^^
+note: but the private item here shadows it
+ --> $DIR/hidden_glob_reexports.rs:40:9
+ |
+LL | use std::primitive::u8;
+ | ^^^^^^^^^^^^^^^^^^
+
+warning: 3 warnings emitted
+
diff --git a/tests/ui/resolve/issue-105069.stderr b/tests/ui/resolve/issue-105069.stderr
index 1e6c9c6e2..a049cac83 100644
--- a/tests/ui/resolve/issue-105069.stderr
+++ b/tests/ui/resolve/issue-105069.stderr
@@ -4,17 +4,19 @@ error[E0659]: `V` is ambiguous
LL | use V;
| ^ ambiguous name
|
- = note: ambiguous because of multiple potential import sources
+ = note: ambiguous because of multiple glob imports of a name in the same module
note: `V` could refer to the variant imported here
--> $DIR/issue-105069.rs:1:5
|
LL | use self::A::*;
| ^^^^^^^^^^
+ = help: consider adding an explicit import of `V` to disambiguate
note: `V` could also refer to the variant imported here
--> $DIR/issue-105069.rs:3:5
|
LL | use self::B::*;
| ^^^^^^^^^^
+ = help: consider adding an explicit import of `V` to disambiguate
error: aborting due to previous error
diff --git a/tests/ui/resolve/issue-109153.rs b/tests/ui/resolve/issue-109153.rs
new file mode 100644
index 000000000..bff6c9112
--- /dev/null
+++ b/tests/ui/resolve/issue-109153.rs
@@ -0,0 +1,14 @@
+use foo::*;
+
+mod foo {
+ pub mod bar {
+ pub mod bar {
+ pub mod bar {}
+ }
+ }
+}
+
+use bar::bar; //~ ERROR `bar` is ambiguous
+use bar::*;
+
+fn main() { }
diff --git a/tests/ui/resolve/issue-109153.stderr b/tests/ui/resolve/issue-109153.stderr
new file mode 100644
index 000000000..1a345d2a3
--- /dev/null
+++ b/tests/ui/resolve/issue-109153.stderr
@@ -0,0 +1,23 @@
+error[E0659]: `bar` is ambiguous
+ --> $DIR/issue-109153.rs:11:5
+ |
+LL | use bar::bar;
+ | ^^^ ambiguous name
+ |
+ = note: ambiguous because of multiple glob imports of a name in the same module
+note: `bar` could refer to the module imported here
+ --> $DIR/issue-109153.rs:1:5
+ |
+LL | use foo::*;
+ | ^^^^^^
+ = help: consider adding an explicit import of `bar` to disambiguate
+note: `bar` could also refer to the module imported here
+ --> $DIR/issue-109153.rs:12:5
+ |
+LL | use bar::*;
+ | ^^^^^^
+ = help: consider adding an explicit import of `bar` to disambiguate
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0659`.
diff --git a/tests/ui/resolve/issue-112472-multi-generics-suggestion.fixed b/tests/ui/resolve/issue-112472-multi-generics-suggestion.fixed
new file mode 100644
index 000000000..892697493
--- /dev/null
+++ b/tests/ui/resolve/issue-112472-multi-generics-suggestion.fixed
@@ -0,0 +1,31 @@
+// run-rustfix
+
+use std::fmt::Debug;
+use std::marker::PhantomData;
+use std::convert::{self, TryFrom};
+
+#[allow(unused)]
+struct Codec<EncodeLine, DecodeLine> {
+ phantom_decode: PhantomData<DecodeLine>,
+ phantom_encode: PhantomData<EncodeLine>,
+}
+
+pub enum ParseError {}
+
+impl<EncodeLine, DecodeLine> Codec<EncodeLine, DecodeLine> where
+ DecodeLine: Debug + convert::TryFrom<String>,
+ DecodeLine: convert::TryFrom<String, Error = ParseError>,
+ //~^ ERROR expected trait, found enum `ParseError`
+ //~| HELP constrain the associated type to `ParseError`
+{
+}
+
+impl<EncodeLine, DecodeLine> Codec<EncodeLine, DecodeLine> where
+ DecodeLine: Debug + TryFrom<String>,
+ DecodeLine: TryFrom<String, Error = ParseError>,
+ //~^ ERROR expected trait, found enum `ParseError`
+ //~| HELP constrain the associated type to `ParseError`
+{
+}
+
+fn main() {}
diff --git a/tests/ui/resolve/issue-112472-multi-generics-suggestion.rs b/tests/ui/resolve/issue-112472-multi-generics-suggestion.rs
new file mode 100644
index 000000000..2b2f5f1ad
--- /dev/null
+++ b/tests/ui/resolve/issue-112472-multi-generics-suggestion.rs
@@ -0,0 +1,31 @@
+// run-rustfix
+
+use std::fmt::Debug;
+use std::marker::PhantomData;
+use std::convert::{self, TryFrom};
+
+#[allow(unused)]
+struct Codec<EncodeLine, DecodeLine> {
+ phantom_decode: PhantomData<DecodeLine>,
+ phantom_encode: PhantomData<EncodeLine>,
+}
+
+pub enum ParseError {}
+
+impl<EncodeLine, DecodeLine> Codec<EncodeLine, DecodeLine> where
+ DecodeLine: Debug + convert::TryFrom<String>,
+ <DecodeLine as convert::TryFrom<String>>::Error: ParseError,
+ //~^ ERROR expected trait, found enum `ParseError`
+ //~| HELP constrain the associated type to `ParseError`
+{
+}
+
+impl<EncodeLine, DecodeLine> Codec<EncodeLine, DecodeLine> where
+ DecodeLine: Debug + TryFrom<String>,
+ <DecodeLine as TryFrom<String>>::Error: ParseError,
+ //~^ ERROR expected trait, found enum `ParseError`
+ //~| HELP constrain the associated type to `ParseError`
+{
+}
+
+fn main() {}
diff --git a/tests/ui/resolve/issue-112472-multi-generics-suggestion.stderr b/tests/ui/resolve/issue-112472-multi-generics-suggestion.stderr
new file mode 100644
index 000000000..f463e2dad
--- /dev/null
+++ b/tests/ui/resolve/issue-112472-multi-generics-suggestion.stderr
@@ -0,0 +1,25 @@
+error[E0404]: expected trait, found enum `ParseError`
+ --> $DIR/issue-112472-multi-generics-suggestion.rs:17:54
+ |
+LL | <DecodeLine as convert::TryFrom<String>>::Error: ParseError,
+ | ^^^^^^^^^^ not a trait
+ |
+help: constrain the associated type to `ParseError`
+ |
+LL | DecodeLine: convert::TryFrom<String, Error = ParseError>,
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+error[E0404]: expected trait, found enum `ParseError`
+ --> $DIR/issue-112472-multi-generics-suggestion.rs:25:45
+ |
+LL | <DecodeLine as TryFrom<String>>::Error: ParseError,
+ | ^^^^^^^^^^ not a trait
+ |
+help: constrain the associated type to `ParseError`
+ |
+LL | DecodeLine: TryFrom<String, Error = ParseError>,
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0404`.
diff --git a/tests/ui/resolve/issue-112831.rs b/tests/ui/resolve/issue-112831.rs
new file mode 100644
index 000000000..ffd83ea8b
--- /dev/null
+++ b/tests/ui/resolve/issue-112831.rs
@@ -0,0 +1,20 @@
+// check-pass
+// aux-build:issue-112831-aux.rs
+
+mod zeroable {
+ pub trait Zeroable {}
+}
+
+use zeroable::*;
+
+mod pod {
+ use super::*;
+ pub trait Pod: Zeroable {}
+}
+
+use pod::*;
+
+extern crate issue_112831_aux;
+use issue_112831_aux::Zeroable;
+
+fn main() {}
diff --git a/tests/ui/resolve/privacy-enum-ctor.stderr b/tests/ui/resolve/privacy-enum-ctor.stderr
index 0bb090905..b10eded01 100644
--- a/tests/ui/resolve/privacy-enum-ctor.stderr
+++ b/tests/ui/resolve/privacy-enum-ctor.stderr
@@ -228,7 +228,9 @@ error[E0603]: enum `Z` is private
--> $DIR/privacy-enum-ctor.rs:61:22
|
LL | let _: Z = m::n::Z::Fn;
- | ^ private enum
+ | ^ -- tuple variant `Fn` is not publicly re-exported
+ | |
+ | private enum
|
note: the enum `Z` is defined here
--> $DIR/privacy-enum-ctor.rs:11:9
@@ -252,7 +254,9 @@ error[E0603]: enum `Z` is private
--> $DIR/privacy-enum-ctor.rs:68:22
|
LL | let _: Z = m::n::Z::Unit {};
- | ^ private enum
+ | ^ ---- variant `Unit` is not publicly re-exported
+ | |
+ | private enum
|
note: the enum `Z` is defined here
--> $DIR/privacy-enum-ctor.rs:11:9
diff --git a/tests/ui/resolve/resolve-pseudo-shadowing.rs b/tests/ui/resolve/resolve-pseudo-shadowing.rs
index 85c684ca0..0ee0d0efa 100644
--- a/tests/ui/resolve/resolve-pseudo-shadowing.rs
+++ b/tests/ui/resolve/resolve-pseudo-shadowing.rs
@@ -3,7 +3,7 @@
fn check<Clone>(_c: Clone) {
fn check2() {
- let _ = <() as std::clone::Clone>::clone(&());
+ let () = <() as std::clone::Clone>::clone(&());
}
check2();
}
diff --git a/tests/ui/resolve/resolve-self-in-impl.stderr b/tests/ui/resolve/resolve-self-in-impl.stderr
index b3042d413..9f9ed6889 100644
--- a/tests/ui/resolve/resolve-self-in-impl.stderr
+++ b/tests/ui/resolve/resolve-self-in-impl.stderr
@@ -1,40 +1,40 @@
error: `Self` is not valid in the self type of an impl block
- --> $DIR/resolve-self-in-impl.rs:16:6
+ --> $DIR/resolve-self-in-impl.rs:14:13
|
-LL | impl Self {}
- | ^^^^
+LL | impl Tr for Self {}
+ | ^^^^
|
= note: replace `Self` with a different type
error: `Self` is not valid in the self type of an impl block
- --> $DIR/resolve-self-in-impl.rs:17:8
+ --> $DIR/resolve-self-in-impl.rs:15:15
|
-LL | impl S<Self> {}
- | ^^^^
+LL | impl Tr for S<Self> {}
+ | ^^^^
|
= note: replace `Self` with a different type
error: `Self` is not valid in the self type of an impl block
- --> $DIR/resolve-self-in-impl.rs:18:7
+ --> $DIR/resolve-self-in-impl.rs:16:6
|
-LL | impl (Self, Self) {}
- | ^^^^ ^^^^
+LL | impl Self {}
+ | ^^^^
|
= note: replace `Self` with a different type
error: `Self` is not valid in the self type of an impl block
- --> $DIR/resolve-self-in-impl.rs:14:13
+ --> $DIR/resolve-self-in-impl.rs:17:8
|
-LL | impl Tr for Self {}
- | ^^^^
+LL | impl S<Self> {}
+ | ^^^^
|
= note: replace `Self` with a different type
error: `Self` is not valid in the self type of an impl block
- --> $DIR/resolve-self-in-impl.rs:15:15
+ --> $DIR/resolve-self-in-impl.rs:18:7
|
-LL | impl Tr for S<Self> {}
- | ^^^^
+LL | impl (Self, Self) {}
+ | ^^^^ ^^^^
|
= note: replace `Self` with a different type
diff --git a/tests/ui/return-nil.rs b/tests/ui/return-nil.rs
index fd5203ff0..4fc937f96 100644
--- a/tests/ui/return-nil.rs
+++ b/tests/ui/return-nil.rs
@@ -1,6 +1,6 @@
// run-pass
// pretty-expanded FIXME #23616
-fn f() { let x: () = (); return x; }
+fn f() { let x = (); return x; }
-pub fn main() { let _x = f(); }
+pub fn main() { f(); }
diff --git a/tests/ui/return/issue-64620.rs b/tests/ui/return/issue-64620.rs
index a62e5bf8d..ab2931651 100644
--- a/tests/ui/return/issue-64620.rs
+++ b/tests/ui/return/issue-64620.rs
@@ -1,5 +1,5 @@
enum Bug {
- V1 = return [0][0] //~ERROR return statement outside of function body
+ V1 = return [0][0], //~ERROR return statement outside of function body
}
fn main() {}
diff --git a/tests/ui/return/issue-64620.stderr b/tests/ui/return/issue-64620.stderr
index f40ac4de3..3210a67d4 100644
--- a/tests/ui/return/issue-64620.stderr
+++ b/tests/ui/return/issue-64620.stderr
@@ -1,7 +1,7 @@
error[E0572]: return statement outside of function body
--> $DIR/issue-64620.rs:2:10
|
-LL | V1 = return [0][0]
+LL | V1 = return [0][0],
| ^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/tests/ui/return/issue-86188-return-not-in-fn-body.rs b/tests/ui/return/issue-86188-return-not-in-fn-body.rs
index 4f076fa06..3117cf3fd 100644
--- a/tests/ui/return/issue-86188-return-not-in-fn-body.rs
+++ b/tests/ui/return/issue-86188-return-not-in-fn-body.rs
@@ -7,7 +7,7 @@
const C: [(); 42] = {
[(); return || {
- //~^ ERROR: return statement outside of function body [E0572]
+ //~^ ERROR: return statement outside of function body [E0572]
let tx;
}]
};
@@ -16,7 +16,7 @@ struct S {}
trait Tr {
fn foo();
fn bar() {
- //~^ NOTE: ...not the enclosing function body
+ //~^ NOTE: ...not the enclosing function body
[(); return];
//~^ ERROR: return statement outside of function body [E0572]
//~| NOTE: the return is part of this body...
@@ -24,7 +24,7 @@ trait Tr {
}
impl Tr for S {
fn foo() {
- //~^ NOTE: ...not the enclosing function body
+ //~^ NOTE: ...not the enclosing function body
[(); return];
//~^ ERROR: return statement outside of function body [E0572]
//~| NOTE: the return is part of this body...
@@ -32,10 +32,10 @@ impl Tr for S {
}
fn main() {
-//~^ NOTE: ...not the enclosing function body
+ //~^ NOTE: ...not the enclosing function body
[(); return || {
- //~^ ERROR: return statement outside of function body [E0572]
- //~| NOTE: the return is part of this body...
+ //~^ ERROR: return statement outside of function body [E0572]
+ //~| NOTE: the return is part of this body...
let tx;
}];
}
diff --git a/tests/ui/return/tail-expr-as-potential-return.rs b/tests/ui/return/tail-expr-as-potential-return.rs
index f46e088b8..2046d6680 100644
--- a/tests/ui/return/tail-expr-as-potential-return.rs
+++ b/tests/ui/return/tail-expr-as-potential-return.rs
@@ -1,8 +1,8 @@
-// > Suggest `return`ing tail expressions that match return type
+// > Suggest returning tail expressions that match return type
// >
// > Some newcomers are confused by the behavior of tail expressions,
// > interpreting that "leaving out the `;` makes it the return value".
-// > To help them go in the right direction, suggest using `return` instead
+// > To help them go in the right direction, suggest using return instead
// > when applicable.
// (original commit description for this test)
//
diff --git a/tests/ui/rfc-2005-default-binding-mode/enum.rs b/tests/ui/rfc-2005-default-binding-mode/enum.rs
deleted file mode 100644
index 4e57769d6..000000000
--- a/tests/ui/rfc-2005-default-binding-mode/enum.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-enum Wrapper {
- Wrap(i32),
-}
-
-use Wrapper::Wrap;
-
-pub fn main() {
- let Wrap(x) = &Wrap(3);
- *x += 1; //~ ERROR cannot assign to `*x`, which is behind a `&` reference
-
-
- if let Some(x) = &Some(3) {
- *x += 1; //~ ERROR cannot assign to `*x`, which is behind a `&` reference
- } else {
- panic!();
- }
-
- while let Some(x) = &Some(3) {
- *x += 1; //~ ERROR cannot assign to `*x`, which is behind a `&` reference
- break;
- }
-}
diff --git a/tests/ui/rfc-2005-default-binding-mode/for.rs b/tests/ui/rfc-2005-default-binding-mode/for.rs
deleted file mode 100644
index d6c5a13b1..000000000
--- a/tests/ui/rfc-2005-default-binding-mode/for.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-struct Foo {}
-
-pub fn main() {
- let mut tups = vec![(Foo {}, Foo {})];
- // The below desugars to &(ref n, mut m).
- for (n, mut m) in &tups {
- //~^ ERROR cannot move out of a shared reference
- }
-}
diff --git a/tests/ui/rfc-2005-default-binding-mode/lit.rs b/tests/ui/rfc-2005-default-binding-mode/lit.rs
deleted file mode 100644
index ce79cfbdc..000000000
--- a/tests/ui/rfc-2005-default-binding-mode/lit.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// FIXME(tschottdorf): we want these to compile, but they don't.
-
-fn with_str() {
- let s: &'static str = "abc";
-
- match &s {
- "abc" => true, //~ ERROR mismatched types
- _ => panic!(),
- };
-}
-
-fn with_bytes() {
- let s: &'static [u8] = b"abc";
-
- match &s {
- b"abc" => true, //~ ERROR mismatched types
- _ => panic!(),
- };
-}
-
-pub fn main() {
- with_str();
- with_bytes();
-}
diff --git a/tests/ui/rfc-2005-default-binding-mode/slice.rs b/tests/ui/rfc-2005-default-binding-mode/slice.rs
deleted file mode 100644
index 363a0e3e6..000000000
--- a/tests/ui/rfc-2005-default-binding-mode/slice.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-pub fn main() {
- let sl: &[u8] = b"foo";
-
- match sl { //~ ERROR non-exhaustive patterns
- [first, remainder @ ..] => {},
- };
-}
diff --git a/tests/ui/rfc-0107-bind-by-move-pattern-guards/bind-by-move-no-guards.rs b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/bind-by-move-no-guards.rs
index 1e086160f..1e086160f 100644
--- a/tests/ui/rfc-0107-bind-by-move-pattern-guards/bind-by-move-no-guards.rs
+++ b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/bind-by-move-no-guards.rs
diff --git a/tests/ui/rfc-0107-bind-by-move-pattern-guards/former-E0008-now-pass.rs b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/former-E0008-now-pass.rs
index 3161d6fbb..3161d6fbb 100644
--- a/tests/ui/rfc-0107-bind-by-move-pattern-guards/former-E0008-now-pass.rs
+++ b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/former-E0008-now-pass.rs
diff --git a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-basic-examples.rs b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-basic-examples.rs
index b716fc870..b716fc870 100644
--- a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-basic-examples.rs
+++ b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-basic-examples.rs
diff --git a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.rs b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.rs
index 6f0d2b045..6f0d2b045 100644
--- a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.rs
+++ b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.rs
diff --git a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.stderr b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.stderr
index a749361bf..a749361bf 100644
--- a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.stderr
+++ b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-across-arms.stderr
diff --git a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.rs b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.rs
index 827335f6a..827335f6a 100644
--- a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.rs
+++ b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.rs
diff --git a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.stderr b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.stderr
index 9285492b2..9285492b2 100644
--- a/tests/ui/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.stderr
+++ b/tests/ui/rfcs/rfc-0107-bind-by-move-pattern-guards/rfc-reject-double-move-in-first-arm.stderr
diff --git a/tests/ui/rfcs/rfc-1014-2.rs b/tests/ui/rfcs/rfc-1014-stdout-existential-crisis/rfc-1014-2.rs
index 7dd65701f..7dd65701f 100644
--- a/tests/ui/rfcs/rfc-1014-2.rs
+++ b/tests/ui/rfcs/rfc-1014-stdout-existential-crisis/rfc-1014-2.rs
diff --git a/tests/ui/rfcs/rfc-1014.rs b/tests/ui/rfcs/rfc-1014-stdout-existential-crisis/rfc-1014.rs
index c454dfa4e..c454dfa4e 100644
--- a/tests/ui/rfcs/rfc-1014.rs
+++ b/tests/ui/rfcs/rfc-1014-stdout-existential-crisis/rfc-1014.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-embedded.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-embedded.rs
index 1914e1554..1914e1554 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-embedded.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-embedded.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-param.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-param.rs
index e713b003b..e713b003b 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-param.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-direct-unsafe-ptr-param.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-embedded.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-embedded.rs
index 04da14c54..04da14c54 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-embedded.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-embedded.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-param.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-param.rs
index 8313c25e7..8313c25e7 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-param.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-hide-behind-indirect-unsafe-ptr-param.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-use-behind-cousin-variant.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-use-behind-cousin-variant.rs
index dca8aaef1..dca8aaef1 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/allow-use-behind-cousin-variant.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/allow-use-behind-cousin-variant.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.rs
index 7623839fd..7623839fd 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.stderr
index f08ba522a..f08ba522a 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-embedded.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.rs
index 93022a23d..93022a23d 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.stderr
index 012ccab17..012ccab17 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-direct-struct-param.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.rs
index 894739ff7..894739ff7 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.stderr
index 94ee2216e..94ee2216e 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-embedded.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.rs
index 1699dae46..1699dae46 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.stderr
index 666b7b95e..666b7b95e 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-doubly-indirect-param.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.rs
index 2672bdd9e..2672bdd9e 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.stderr
index ecbe83f3d..ecbe83f3d 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-embedded.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.rs
index 3489995ae..3489995ae 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.stderr
index 211990801..211990801 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/cant-hide-behind-indirect-struct-param.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.no_gate.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.no_gate.stderr
index bd2940479..bd2940479 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.no_gate.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.no_gate.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.rs
index ee6674097..ee6674097 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.with_gate.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.with_gate.stderr
index 623fd585a..623fd585a 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/feature-gate.with_gate.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/feature-gate.with_gate.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/fn-ptr-is-structurally-matchable.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/fn-ptr-is-structurally-matchable.rs
index 2b3fbd2a4..2b3fbd2a4 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/fn-ptr-is-structurally-matchable.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/fn-ptr-is-structurally-matchable.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.rs
index 2a915d61e..2a915d61e 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.stderr
index 46600e7b2..46600e7b2 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-61188-match-slice-forbidden-without-eq.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.rs
index 46d8ee3b6..46d8ee3b6 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.stderr
index 435812306..435812306 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-62307-match-ref-ref-forbidden-without-eq.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.rs
index 567685950..567685950 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.stderr
index d6afc0255..d6afc0255 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-63479-match-fnptr.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-6804.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-6804.rs
index 0260caa82..0260caa82 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-6804.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-6804.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-6804.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-6804.stderr
index f37255d08..f37255d08 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/issue-6804.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/issue-6804.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-empty-array-allowed-without-eq-issue-62336.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-empty-array-allowed-without-eq-issue-62336.rs
index 7ba0f3a9e..7ba0f3a9e 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-empty-array-allowed-without-eq-issue-62336.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-empty-array-allowed-without-eq-issue-62336.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.rs
index 59a22c337..59a22c337 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.stderr
index 1c4fb9146..1c4fb9146 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-forbidden-without-eq.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.rs
index 151a475c9..151a475c9 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.stderr
index 6adebada0..6adebada0 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-nonempty-array-forbidden-without-eq.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.rs
index a8deb8a75..a8deb8a75 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.rs
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.stderr b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.stderr
index f5b10f062..f5b10f062 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.stderr
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/match-requires-both-partialeq-and-eq.stderr
diff --git a/tests/ui/rfc-1445-restrict-constants-in-patterns/phantom-data-is-structurally-matchable.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/phantom-data-is-structurally-matchable.rs
index 50f91420c..50f91420c 100644
--- a/tests/ui/rfc-1445-restrict-constants-in-patterns/phantom-data-is-structurally-matchable.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/phantom-data-is-structurally-matchable.rs
diff --git a/tests/ui/rfcs/rfc1445/eq-allows-match-on-ty-in-macro.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/rfc1445/eq-allows-match-on-ty-in-macro.rs
index 17174e22c..17174e22c 100644
--- a/tests/ui/rfcs/rfc1445/eq-allows-match-on-ty-in-macro.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/rfc1445/eq-allows-match-on-ty-in-macro.rs
diff --git a/tests/ui/rfcs/rfc1445/eq-allows-match.rs b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/rfc1445/eq-allows-match.rs
index 405a69c94..405a69c94 100644
--- a/tests/ui/rfcs/rfc1445/eq-allows-match.rs
+++ b/tests/ui/rfcs/rfc-1445-restrict-constants-in-patterns/rfc1445/eq-allows-match.rs
diff --git a/tests/ui/rfcs/rfc1623-2.rs b/tests/ui/rfcs/rfc-1623-static/rfc1623-2.rs
index c0e13a5f5..c0e13a5f5 100644
--- a/tests/ui/rfcs/rfc1623-2.rs
+++ b/tests/ui/rfcs/rfc-1623-static/rfc1623-2.rs
diff --git a/tests/ui/rfcs/rfc1623-2.stderr b/tests/ui/rfcs/rfc-1623-static/rfc1623-2.stderr
index d183eaaa6..d183eaaa6 100644
--- a/tests/ui/rfcs/rfc1623-2.stderr
+++ b/tests/ui/rfcs/rfc-1623-static/rfc1623-2.stderr
diff --git a/tests/ui/rfcs/rfc1623-3.rs b/tests/ui/rfcs/rfc-1623-static/rfc1623-3.rs
index 26fa6fdb5..26fa6fdb5 100644
--- a/tests/ui/rfcs/rfc1623-3.rs
+++ b/tests/ui/rfcs/rfc-1623-static/rfc1623-3.rs
diff --git a/tests/ui/rfcs/rfc1623-3.stderr b/tests/ui/rfcs/rfc-1623-static/rfc1623-3.stderr
index 77fc3f041..77fc3f041 100644
--- a/tests/ui/rfcs/rfc1623-3.stderr
+++ b/tests/ui/rfcs/rfc-1623-static/rfc1623-3.stderr
diff --git a/tests/ui/rfcs/rfc1623.rs b/tests/ui/rfcs/rfc-1623-static/rfc1623.rs
index adaf25c6b..adaf25c6b 100644
--- a/tests/ui/rfcs/rfc1623.rs
+++ b/tests/ui/rfcs/rfc-1623-static/rfc1623.rs
diff --git a/tests/ui/rfcs/rfc1717/library-override.rs b/tests/ui/rfcs/rfc-1717-dllimport/1717-dllimport/library-override.rs
index 014ccac31..014ccac31 100644
--- a/tests/ui/rfcs/rfc1717/library-override.rs
+++ b/tests/ui/rfcs/rfc-1717-dllimport/1717-dllimport/library-override.rs
diff --git a/tests/ui/rfc-1717-dllimport/missing-link-attr.rs b/tests/ui/rfcs/rfc-1717-dllimport/missing-link-attr.rs
index b46d85160..b46d85160 100644
--- a/tests/ui/rfc-1717-dllimport/missing-link-attr.rs
+++ b/tests/ui/rfcs/rfc-1717-dllimport/missing-link-attr.rs
diff --git a/tests/ui/rfc-1717-dllimport/missing-link-attr.stderr b/tests/ui/rfcs/rfc-1717-dllimport/missing-link-attr.stderr
index d4410e147..d4410e147 100644
--- a/tests/ui/rfc-1717-dllimport/missing-link-attr.stderr
+++ b/tests/ui/rfcs/rfc-1717-dllimport/missing-link-attr.stderr
diff --git a/tests/ui/rfc-1717-dllimport/multiple-renames.rs b/tests/ui/rfcs/rfc-1717-dllimport/multiple-renames.rs
index 106f196b4..106f196b4 100644
--- a/tests/ui/rfc-1717-dllimport/multiple-renames.rs
+++ b/tests/ui/rfcs/rfc-1717-dllimport/multiple-renames.rs
diff --git a/tests/ui/rfc-1717-dllimport/multiple-renames.stderr b/tests/ui/rfcs/rfc-1717-dllimport/multiple-renames.stderr
index a6fec9c4e..a6fec9c4e 100644
--- a/tests/ui/rfc-1717-dllimport/multiple-renames.stderr
+++ b/tests/ui/rfcs/rfc-1717-dllimport/multiple-renames.stderr
diff --git a/tests/ui/rfc-1717-dllimport/rename-modifiers.rs b/tests/ui/rfcs/rfc-1717-dllimport/rename-modifiers.rs
index 30f4db718..30f4db718 100644
--- a/tests/ui/rfc-1717-dllimport/rename-modifiers.rs
+++ b/tests/ui/rfcs/rfc-1717-dllimport/rename-modifiers.rs
diff --git a/tests/ui/rfc-1717-dllimport/rename-modifiers.stderr b/tests/ui/rfcs/rfc-1717-dllimport/rename-modifiers.stderr
index bee639bf2..bee639bf2 100644
--- a/tests/ui/rfc-1717-dllimport/rename-modifiers.stderr
+++ b/tests/ui/rfcs/rfc-1717-dllimport/rename-modifiers.stderr
diff --git a/tests/ui/rfc-1717-dllimport/rename-to-empty.rs b/tests/ui/rfcs/rfc-1717-dllimport/rename-to-empty.rs
index 9356c4129..9356c4129 100644
--- a/tests/ui/rfc-1717-dllimport/rename-to-empty.rs
+++ b/tests/ui/rfcs/rfc-1717-dllimport/rename-to-empty.rs
diff --git a/tests/ui/rfc-1717-dllimport/rename-to-empty.stderr b/tests/ui/rfcs/rfc-1717-dllimport/rename-to-empty.stderr
index aca839d80..aca839d80 100644
--- a/tests/ui/rfc-1717-dllimport/rename-to-empty.stderr
+++ b/tests/ui/rfcs/rfc-1717-dllimport/rename-to-empty.stderr
diff --git a/tests/ui/rfcs/rfc1857-drop-order.rs b/tests/ui/rfcs/rfc-1857-stabilize-drop-order/drop-order.rs
index 4c4816c2f..4c4816c2f 100644
--- a/tests/ui/rfcs/rfc1857-drop-order.rs
+++ b/tests/ui/rfcs/rfc-1857-stabilize-drop-order/drop-order.rs
diff --git a/tests/ui/rfc-1937-termination-trait/issue-103052-1.rs b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-1.rs
index a75c91cc9..a75c91cc9 100644
--- a/tests/ui/rfc-1937-termination-trait/issue-103052-1.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-1.rs
diff --git a/tests/ui/rfc-1937-termination-trait/issue-103052-1.stderr b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-1.stderr
index 409dede1a..409dede1a 100644
--- a/tests/ui/rfc-1937-termination-trait/issue-103052-1.stderr
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-1.stderr
diff --git a/tests/ui/rfc-1937-termination-trait/issue-103052-2.current.stderr b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.current.stderr
index f72b3ab02..f72b3ab02 100644
--- a/tests/ui/rfc-1937-termination-trait/issue-103052-2.current.stderr
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.current.stderr
diff --git a/tests/ui/rfc-1937-termination-trait/issue-103052-2.next.stderr b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.next.stderr
index 8b01941b4..8b01941b4 100644
--- a/tests/ui/rfc-1937-termination-trait/issue-103052-2.next.stderr
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.next.stderr
diff --git a/tests/ui/rfc-1937-termination-trait/issue-103052-2.rs b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.rs
index ca5fa6df2..ca5fa6df2 100644
--- a/tests/ui/rfc-1937-termination-trait/issue-103052-2.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/issue-103052-2.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error-err.rs
index 10dc6115d..10dc6115d 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error-err.rs
diff --git a/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error-ok.rs
index e98582cbc..e98582cbc 100644
--- a/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-box-dyn-error-ok.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-for-never.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-never.rs
index faf2526c8..faf2526c8 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-for-never.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-never.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs
index 6a625fb05..6a625fb05 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-for-str.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str-err.rs
index 94f16c6fd..94f16c6fd 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-for-str.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str-err.rs
diff --git a/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str-ok.rs
index f0591c38c..f0591c38c 100644
--- a/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-for-str-ok.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-impl-trait.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-impl-trait.rs
index 3b60cbc57..3b60cbc57 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-impl-trait.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-impl-trait.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-impl-trait.stderr b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-impl-trait.stderr
index 5ee6d127e..5ee6d127e 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-impl-trait.stderr
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-impl-trait.stderr
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-in-test-should-panic.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test-should-panic.rs
index 96808a3ed..96808a3ed 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-in-test-should-panic.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test-should-panic.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-in-test-should-panic.stderr b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test-should-panic.stderr
index 7f6749fc9..7f6749fc9 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-in-test-should-panic.stderr
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test-should-panic.stderr
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-in-test.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test.rs
index 43888cece..43888cece 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-in-test.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-in-test.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-main-i32.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-i32.rs
index 10f7d2215..10f7d2215 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-main-i32.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-i32.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-main-i32.stderr b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-i32.stderr
index 53779d365..53779d365 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-main-i32.stderr
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-i32.stderr
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-main-wrong-type.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-wrong-type.rs
index 687d5f144..687d5f144 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-main-wrong-type.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-wrong-type.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-main-wrong-type.stderr b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-wrong-type.stderr
index bc8fd92ce..bc8fd92ce 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-main-wrong-type.stderr
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-main-wrong-type.stderr
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-not-satisfied.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-not-satisfied.rs
index 4c6168abb..4c6168abb 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-not-satisfied.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-not-satisfied.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-not-satisfied.stderr b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-not-satisfied.stderr
index cb329548d..cb329548d 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-not-satisfied.stderr
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-not-satisfied.stderr
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-test-wrong-type.rs b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-test-wrong-type.rs
index 193a523ae..193a523ae 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-test-wrong-type.rs
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-test-wrong-type.rs
diff --git a/tests/ui/rfc-1937-termination-trait/termination-trait-test-wrong-type.stderr b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-test-wrong-type.stderr
index a19750cc7..a19750cc7 100644
--- a/tests/ui/rfc-1937-termination-trait/termination-trait-test-wrong-type.stderr
+++ b/tests/ui/rfcs/rfc-1937-termination-trait/termination-trait-test-wrong-type.stderr
diff --git a/tests/ui/rfc-2005-default-binding-mode/borrowck-issue-49631.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/borrowck-issue-49631.rs
index 54ab9f0ad..54ab9f0ad 100644
--- a/tests/ui/rfc-2005-default-binding-mode/borrowck-issue-49631.rs
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/borrowck-issue-49631.rs
diff --git a/tests/ui/rfc-2005-default-binding-mode/borrowck-issue-49631.stderr b/tests/ui/rfcs/rfc-2005-default-binding-mode/borrowck-issue-49631.stderr
index b7c0b0bb6..b7c0b0bb6 100644
--- a/tests/ui/rfc-2005-default-binding-mode/borrowck-issue-49631.stderr
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/borrowck-issue-49631.stderr
diff --git a/tests/ui/rfc-2005-default-binding-mode/const.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/const.rs
index 93df88040..93df88040 100644
--- a/tests/ui/rfc-2005-default-binding-mode/const.rs
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/const.rs
diff --git a/tests/ui/rfc-2005-default-binding-mode/const.stderr b/tests/ui/rfcs/rfc-2005-default-binding-mode/const.stderr
index fc06de90a..fc06de90a 100644
--- a/tests/ui/rfc-2005-default-binding-mode/const.stderr
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/const.stderr
diff --git a/tests/ui/rfcs/rfc-2005-default-binding-mode/enum-ok.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/enum-ok.rs
new file mode 100644
index 000000000..52fbb90ed
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/enum-ok.rs
@@ -0,0 +1,45 @@
+// run-pass
+enum Wrapper {
+ Wrap(i32),
+}
+
+use Wrapper::Wrap;
+
+pub fn main() {
+ let Wrap(x) = &Wrap(3);
+ println!("{}", *x);
+
+ let Wrap(x) = &mut Wrap(3);
+ println!("{}", *x);
+
+ if let Some(x) = &Some(3) {
+ println!("{}", *x);
+ } else {
+ panic!();
+ }
+
+ if let Some(x) = &mut Some(3) {
+ println!("{}", *x);
+ } else {
+ panic!();
+ }
+
+ if let Some(x) = &mut Some(3) {
+ *x += 1;
+ } else {
+ panic!();
+ }
+
+ while let Some(x) = &Some(3) {
+ println!("{}", *x);
+ break;
+ }
+ while let Some(x) = &mut Some(3) {
+ println!("{}", *x);
+ break;
+ }
+ while let Some(x) = &mut Some(3) {
+ *x += 1;
+ break;
+ }
+}
diff --git a/tests/ui/rfcs/rfc-2005-default-binding-mode/enum.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/enum.rs
index 52fbb90ed..4e57769d6 100644
--- a/tests/ui/rfcs/rfc-2005-default-binding-mode/enum.rs
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/enum.rs
@@ -1,4 +1,3 @@
-// run-pass
enum Wrapper {
Wrap(i32),
}
@@ -7,39 +6,17 @@ use Wrapper::Wrap;
pub fn main() {
let Wrap(x) = &Wrap(3);
- println!("{}", *x);
+ *x += 1; //~ ERROR cannot assign to `*x`, which is behind a `&` reference
- let Wrap(x) = &mut Wrap(3);
- println!("{}", *x);
if let Some(x) = &Some(3) {
- println!("{}", *x);
- } else {
- panic!();
- }
-
- if let Some(x) = &mut Some(3) {
- println!("{}", *x);
- } else {
- panic!();
- }
-
- if let Some(x) = &mut Some(3) {
- *x += 1;
+ *x += 1; //~ ERROR cannot assign to `*x`, which is behind a `&` reference
} else {
panic!();
}
while let Some(x) = &Some(3) {
- println!("{}", *x);
- break;
- }
- while let Some(x) = &mut Some(3) {
- println!("{}", *x);
- break;
- }
- while let Some(x) = &mut Some(3) {
- *x += 1;
+ *x += 1; //~ ERROR cannot assign to `*x`, which is behind a `&` reference
break;
}
}
diff --git a/tests/ui/rfc-2005-default-binding-mode/enum.stderr b/tests/ui/rfcs/rfc-2005-default-binding-mode/enum.stderr
index 21e3d3d27..21e3d3d27 100644
--- a/tests/ui/rfc-2005-default-binding-mode/enum.stderr
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/enum.stderr
diff --git a/tests/ui/rfc-2005-default-binding-mode/explicit-mut.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/explicit-mut.rs
index b8fde2208..b8fde2208 100644
--- a/tests/ui/rfc-2005-default-binding-mode/explicit-mut.rs
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/explicit-mut.rs
diff --git a/tests/ui/rfc-2005-default-binding-mode/explicit-mut.stderr b/tests/ui/rfcs/rfc-2005-default-binding-mode/explicit-mut.stderr
index c3f64f65a..c3f64f65a 100644
--- a/tests/ui/rfc-2005-default-binding-mode/explicit-mut.stderr
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/explicit-mut.stderr
diff --git a/tests/ui/rfcs/rfc-2005-default-binding-mode/for-ok.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/for-ok.rs
new file mode 100644
index 000000000..a5a24a806
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/for-ok.rs
@@ -0,0 +1,20 @@
+// run-pass
+pub fn main() {
+ let mut tups = vec![(0u8, 1u8)];
+
+ for (n, m) in &tups {
+ let _: &u8 = n;
+ let _: &u8 = m;
+ }
+
+ for (n, m) in &mut tups {
+ *n += 1;
+ *m += 2;
+ }
+
+ assert_eq!(tups, vec![(1u8, 3u8)]);
+
+ for (n, m) in tups {
+ println!("{} {}", m, n);
+ }
+}
diff --git a/tests/ui/rfcs/rfc-2005-default-binding-mode/for.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/for.rs
index a5a24a806..d6c5a13b1 100644
--- a/tests/ui/rfcs/rfc-2005-default-binding-mode/for.rs
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/for.rs
@@ -1,20 +1,9 @@
-// run-pass
-pub fn main() {
- let mut tups = vec![(0u8, 1u8)];
-
- for (n, m) in &tups {
- let _: &u8 = n;
- let _: &u8 = m;
- }
+struct Foo {}
- for (n, m) in &mut tups {
- *n += 1;
- *m += 2;
- }
-
- assert_eq!(tups, vec![(1u8, 3u8)]);
-
- for (n, m) in tups {
- println!("{} {}", m, n);
+pub fn main() {
+ let mut tups = vec![(Foo {}, Foo {})];
+ // The below desugars to &(ref n, mut m).
+ for (n, mut m) in &tups {
+ //~^ ERROR cannot move out of a shared reference
}
}
diff --git a/tests/ui/rfc-2005-default-binding-mode/for.stderr b/tests/ui/rfcs/rfc-2005-default-binding-mode/for.stderr
index 07991af6e..07991af6e 100644
--- a/tests/ui/rfc-2005-default-binding-mode/for.stderr
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/for.stderr
diff --git a/tests/ui/rfc-2005-default-binding-mode/issue-44912-or.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/issue-44912-or.rs
index b4a0d8145..b4a0d8145 100644
--- a/tests/ui/rfc-2005-default-binding-mode/issue-44912-or.rs
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/issue-44912-or.rs
diff --git a/tests/ui/rfc-2005-default-binding-mode/issue-44912-or.stderr b/tests/ui/rfcs/rfc-2005-default-binding-mode/issue-44912-or.stderr
index e1e1bf7f6..e1e1bf7f6 100644
--- a/tests/ui/rfc-2005-default-binding-mode/issue-44912-or.stderr
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/issue-44912-or.stderr
diff --git a/tests/ui/rfcs/rfc-2005-default-binding-mode/lit-ok.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/lit-ok.rs
new file mode 100644
index 000000000..937975359
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/lit-ok.rs
@@ -0,0 +1,34 @@
+// run-pass
+#![allow(dead_code)]
+fn with_u8() {
+ let s = 5u8;
+ let r = match &s {
+ 4 => false,
+ 5 => true,
+ _ => false,
+ };
+ assert!(r);
+}
+
+// A string literal isn't mistaken for a non-ref pattern (in which case we'd
+// deref `s` and mess things up).
+fn with_str() {
+ let s: &'static str = "abc";
+ match s {
+ "abc" => true,
+ _ => panic!(),
+ };
+}
+
+// Ditto with byte strings.
+fn with_bytes() {
+ let s: &'static [u8] = b"abc";
+ match s {
+ b"abc" => true,
+ _ => panic!(),
+ };
+}
+
+pub fn main() {
+ with_str();
+}
diff --git a/tests/ui/rfcs/rfc-2005-default-binding-mode/lit.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/lit.rs
index 937975359..ce79cfbdc 100644
--- a/tests/ui/rfcs/rfc-2005-default-binding-mode/lit.rs
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/lit.rs
@@ -1,34 +1,24 @@
-// run-pass
-#![allow(dead_code)]
-fn with_u8() {
- let s = 5u8;
- let r = match &s {
- 4 => false,
- 5 => true,
- _ => false,
- };
- assert!(r);
-}
+// FIXME(tschottdorf): we want these to compile, but they don't.
-// A string literal isn't mistaken for a non-ref pattern (in which case we'd
-// deref `s` and mess things up).
fn with_str() {
let s: &'static str = "abc";
- match s {
- "abc" => true,
+
+ match &s {
+ "abc" => true, //~ ERROR mismatched types
_ => panic!(),
};
}
-// Ditto with byte strings.
fn with_bytes() {
let s: &'static [u8] = b"abc";
- match s {
- b"abc" => true,
+
+ match &s {
+ b"abc" => true, //~ ERROR mismatched types
_ => panic!(),
};
}
pub fn main() {
with_str();
+ with_bytes();
}
diff --git a/tests/ui/rfc-2005-default-binding-mode/lit.stderr b/tests/ui/rfcs/rfc-2005-default-binding-mode/lit.stderr
index 181f57899..181f57899 100644
--- a/tests/ui/rfc-2005-default-binding-mode/lit.stderr
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/lit.stderr
diff --git a/tests/ui/rfc-2005-default-binding-mode/no-double-error.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/no-double-error.rs
index 46fdfd678..46fdfd678 100644
--- a/tests/ui/rfc-2005-default-binding-mode/no-double-error.rs
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/no-double-error.rs
diff --git a/tests/ui/rfc-2005-default-binding-mode/no-double-error.stderr b/tests/ui/rfcs/rfc-2005-default-binding-mode/no-double-error.stderr
index c672acee0..c672acee0 100644
--- a/tests/ui/rfc-2005-default-binding-mode/no-double-error.stderr
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/no-double-error.stderr
diff --git a/tests/ui/rfcs/rfc-2005-default-binding-mode/slice-ok.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/slice-ok.rs
new file mode 100644
index 000000000..33229a205
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/slice-ok.rs
@@ -0,0 +1,25 @@
+// run-pass
+
+fn slice_pat() {
+ let sl: &[u8] = b"foo";
+
+ match sl {
+ [first, remainder @ ..] => {
+ let _: &u8 = first;
+ assert_eq!(first, &b'f');
+ assert_eq!(remainder, b"oo");
+ }
+ [] => panic!(),
+ }
+}
+
+fn slice_pat_omission() {
+ match &[0, 1, 2] {
+ [..] => {}
+ };
+}
+
+fn main() {
+ slice_pat();
+ slice_pat_omission();
+}
diff --git a/tests/ui/rfcs/rfc-2005-default-binding-mode/slice.rs b/tests/ui/rfcs/rfc-2005-default-binding-mode/slice.rs
index 33229a205..363a0e3e6 100644
--- a/tests/ui/rfcs/rfc-2005-default-binding-mode/slice.rs
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/slice.rs
@@ -1,25 +1,7 @@
-// run-pass
-
-fn slice_pat() {
+pub fn main() {
let sl: &[u8] = b"foo";
- match sl {
- [first, remainder @ ..] => {
- let _: &u8 = first;
- assert_eq!(first, &b'f');
- assert_eq!(remainder, b"oo");
- }
- [] => panic!(),
- }
-}
-
-fn slice_pat_omission() {
- match &[0, 1, 2] {
- [..] => {}
- };
-}
-
-fn main() {
- slice_pat();
- slice_pat_omission();
+ match sl { //~ ERROR non-exhaustive patterns
+ [first, remainder @ ..] => {},
+ };
}
diff --git a/tests/ui/rfc-2005-default-binding-mode/slice.stderr b/tests/ui/rfcs/rfc-2005-default-binding-mode/slice.stderr
index 5b51dc5ac..5b51dc5ac 100644
--- a/tests/ui/rfc-2005-default-binding-mode/slice.stderr
+++ b/tests/ui/rfcs/rfc-2005-default-binding-mode/slice.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/auxiliary/enums.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/enums.rs
index cb2b585ab..cb2b585ab 100644
--- a/tests/ui/rfc-2008-non-exhaustive/auxiliary/enums.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/enums.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/auxiliary/monovariants.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/monovariants.rs
index 5f86db86d..5f86db86d 100644
--- a/tests/ui/rfc-2008-non-exhaustive/auxiliary/monovariants.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/monovariants.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/auxiliary/structs.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/structs.rs
index 78db6b170..78db6b170 100644
--- a/tests/ui/rfc-2008-non-exhaustive/auxiliary/structs.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/structs.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/auxiliary/unstable.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/unstable.rs
index 11df44461..11df44461 100644
--- a/tests/ui/rfc-2008-non-exhaustive/auxiliary/unstable.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/unstable.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/auxiliary/variants.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/variants.rs
index 02672d545..02672d545 100644
--- a/tests/ui/rfc-2008-non-exhaustive/auxiliary/variants.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/auxiliary/variants.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/borrowck-exhaustive.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-exhaustive.rs
index b9ff24c76..b9ff24c76 100644
--- a/tests/ui/rfc-2008-non-exhaustive/borrowck-exhaustive.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-exhaustive.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/borrowck-non-exhaustive.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-non-exhaustive.rs
index 2ad92b794..2ad92b794 100644
--- a/tests/ui/rfc-2008-non-exhaustive/borrowck-non-exhaustive.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-non-exhaustive.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/borrowck-non-exhaustive.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-non-exhaustive.stderr
index ad84ebe3a..ad84ebe3a 100644
--- a/tests/ui/rfc-2008-non-exhaustive/borrowck-non-exhaustive.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/borrowck-non-exhaustive.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/enum-as-cast.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum-as-cast.rs
index 5dce8180f..5dce8180f 100644
--- a/tests/ui/rfc-2008-non-exhaustive/enum-as-cast.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum-as-cast.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/enum-as-cast.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum-as-cast.stderr
index a61dcf839..a61dcf839 100644
--- a/tests/ui/rfc-2008-non-exhaustive/enum-as-cast.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum-as-cast.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/enum.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum.rs
index 9d2855f5c..9d2855f5c 100644
--- a/tests/ui/rfc-2008-non-exhaustive/enum.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/enum.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum.stderr
index 872cb9b8b..872cb9b8b 100644
--- a/tests/ui/rfc-2008-non-exhaustive/enum.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/enum_same_crate.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate.rs
index 54e42917f..54e42917f 100644
--- a/tests/ui/rfc-2008-non-exhaustive/enum_same_crate.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/enum_same_crate_empty_match.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate_empty_match.rs
index 69a283c31..69a283c31 100644
--- a/tests/ui/rfc-2008-non-exhaustive/enum_same_crate_empty_match.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate_empty_match.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/enum_same_crate_empty_match.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate_empty_match.stderr
index de1bf8be8..de1bf8be8 100644
--- a/tests/ui/rfc-2008-non-exhaustive/enum_same_crate_empty_match.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/enum_same_crate_empty_match.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/improper_ctypes/auxiliary/types.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/auxiliary/types.rs
index d6251fcb7..d6251fcb7 100644
--- a/tests/ui/rfc-2008-non-exhaustive/improper_ctypes/auxiliary/types.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/auxiliary/types.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.rs
index 15c0c695f..15c0c695f 100644
--- a/tests/ui/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.stderr
index 43c8e1015..43c8e1015 100644
--- a/tests/ui/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/extern_crate_improper.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/improper_ctypes/same_crate_proper.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/same_crate_proper.rs
index fe4ae345d..fe4ae345d 100644
--- a/tests/ui/rfc-2008-non-exhaustive/improper_ctypes/same_crate_proper.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/improper_ctypes/same_crate_proper.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/invalid-attribute.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/invalid-attribute.rs
index 143f9a300..143f9a300 100644
--- a/tests/ui/rfc-2008-non-exhaustive/invalid-attribute.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/invalid-attribute.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/invalid-attribute.stderr
index 136cd763b..136cd763b 100644
--- a/tests/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/invalid-attribute.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/omitted-patterns.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/omitted-patterns.rs
index 3482af747..3482af747 100644
--- a/tests/ui/rfc-2008-non-exhaustive/omitted-patterns.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/omitted-patterns.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/omitted-patterns.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/omitted-patterns.stderr
index 923394474..923394474 100644
--- a/tests/ui/rfc-2008-non-exhaustive/omitted-patterns.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/omitted-patterns.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/stable-omitted-patterns.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/stable-omitted-patterns.rs
index 82ee68687..82ee68687 100644
--- a/tests/ui/rfc-2008-non-exhaustive/stable-omitted-patterns.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/stable-omitted-patterns.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/stable-omitted-patterns.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/stable-omitted-patterns.stderr
index f38368590..f38368590 100644
--- a/tests/ui/rfc-2008-non-exhaustive/stable-omitted-patterns.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/stable-omitted-patterns.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/struct.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/struct.rs
index 07e093c15..07e093c15 100644
--- a/tests/ui/rfc-2008-non-exhaustive/struct.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/struct.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/struct.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/struct.stderr
index 39b1ef1e0..39b1ef1e0 100644
--- a/tests/ui/rfc-2008-non-exhaustive/struct.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/struct.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/structs_same_crate.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/structs_same_crate.rs
index 5f76b0cb2..5f76b0cb2 100644
--- a/tests/ui/rfc-2008-non-exhaustive/structs_same_crate.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/structs_same_crate.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/auxiliary/uninhabited.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/auxiliary/uninhabited.rs
index a2735d4cb..a2735d4cb 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/auxiliary/uninhabited.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/auxiliary/uninhabited.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions.rs
index 80b9dc4c1..80b9dc4c1 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions.stderr
index c209caab5..c209caab5 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.rs
index 6b911dd98..6b911dd98 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.stderr
index 289433edf..289433edf 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/coercions_same_crate.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match.rs
index 98a7fdbc5..98a7fdbc5 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match.stderr
index 66e93291c..66e93291c 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.rs
index 8f090fe88..8f090fe88 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.stderr
index c12190541..c12190541 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_same_crate.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.rs
index be86519ec..be86519ec 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.stderr
index ef97c1fa1..ef97c1fa1 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns_same_crate.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns_same_crate.rs
index 60289aa78..60289aa78 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns_same_crate.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/indirect_match_with_exhaustive_patterns_same_crate.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.rs
index 230ac7529..230ac7529 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.stderr
index f39e6ee29..f39e6ee29 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/issue-65157-repeated-match-arm.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match.rs
index e54098d4d..e54098d4d 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match.stderr
index a9c54af04..a9c54af04 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_same_crate.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_same_crate.rs
index ebbdfba15..ebbdfba15 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_same_crate.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_same_crate.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_same_crate.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_same_crate.stderr
index ec2a2f6f0..ec2a2f6f0 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_same_crate.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_same_crate.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.rs
index 900dfff65..900dfff65 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.stderr
index b6b777ec5..b6b777ec5 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns_same_crate.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns_same_crate.rs
index de5530485..de5530485 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns_same_crate.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/match_with_exhaustive_patterns_same_crate.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns.rs
index 221b5cf6b..221b5cf6b 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.rs
index ffc496a97..ffc496a97 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.stderr
index 8bfd6e91f..8bfd6e91f 100644
--- a/tests/ui/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/uninhabited/patterns_same_crate.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/variant.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/variant.rs
index bc346aea5..bc346aea5 100644
--- a/tests/ui/rfc-2008-non-exhaustive/variant.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/variant.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/variant.stderr b/tests/ui/rfcs/rfc-2008-non-exhaustive/variant.stderr
index 4083f57a9..4083f57a9 100644
--- a/tests/ui/rfc-2008-non-exhaustive/variant.stderr
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/variant.stderr
diff --git a/tests/ui/rfc-2008-non-exhaustive/variants_fictive_visibility.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/variants_fictive_visibility.rs
index dacaf489a..dacaf489a 100644
--- a/tests/ui/rfc-2008-non-exhaustive/variants_fictive_visibility.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/variants_fictive_visibility.rs
diff --git a/tests/ui/rfc-2008-non-exhaustive/variants_same_crate.rs b/tests/ui/rfcs/rfc-2008-non-exhaustive/variants_same_crate.rs
index 5f2816ec6..5f2816ec6 100644
--- a/tests/ui/rfc-2008-non-exhaustive/variants_same_crate.rs
+++ b/tests/ui/rfcs/rfc-2008-non-exhaustive/variants_same_crate.rs
diff --git a/tests/ui/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs b/tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs
index fa04f4b12..fa04f4b12 100644
--- a/tests/ui/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs
+++ b/tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs
diff --git a/tests/ui/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs b/tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs
index 721890db4..721890db4 100644
--- a/tests/ui/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs
+++ b/tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs
diff --git a/tests/ui/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs b/tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs
index df97d2c13..df97d2c13 100644
--- a/tests/ui/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs
+++ b/tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs
diff --git a/tests/ui/rfc-2091-track-caller/call-chain.rs b/tests/ui/rfcs/rfc-2091-track-caller/call-chain.rs
index a8814ce28..a8814ce28 100644
--- a/tests/ui/rfc-2091-track-caller/call-chain.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/call-chain.rs
diff --git a/tests/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs b/tests/ui/rfcs/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs
index a3bed707e..a3bed707e 100644
--- a/tests/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs
diff --git a/tests/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.stderr b/tests/ui/rfcs/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.stderr
index cf8ca5771..cf8ca5771 100644
--- a/tests/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.stderr
+++ b/tests/ui/rfcs/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.stderr
diff --git a/tests/ui/rfc-2091-track-caller/caller-location-intrinsic.rs b/tests/ui/rfcs/rfc-2091-track-caller/caller-location-intrinsic.rs
index e5754d355..e5754d355 100644
--- a/tests/ui/rfc-2091-track-caller/caller-location-intrinsic.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/caller-location-intrinsic.rs
diff --git a/tests/ui/rfc-2091-track-caller/const-caller-location.rs b/tests/ui/rfcs/rfc-2091-track-caller/const-caller-location.rs
index 6e15cf3fe..6e15cf3fe 100644
--- a/tests/ui/rfc-2091-track-caller/const-caller-location.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/const-caller-location.rs
diff --git a/tests/ui/rfc-2091-track-caller/diverging-caller-location.rs b/tests/ui/rfcs/rfc-2091-track-caller/diverging-caller-location.rs
index 668111955..668111955 100644
--- a/tests/ui/rfc-2091-track-caller/diverging-caller-location.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/diverging-caller-location.rs
diff --git a/tests/ui/rfc-2091-track-caller/error-odd-syntax.rs b/tests/ui/rfcs/rfc-2091-track-caller/error-odd-syntax.rs
index 6f4290e2a..6f4290e2a 100644
--- a/tests/ui/rfc-2091-track-caller/error-odd-syntax.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-odd-syntax.rs
diff --git a/tests/ui/rfc-2091-track-caller/error-odd-syntax.stderr b/tests/ui/rfcs/rfc-2091-track-caller/error-odd-syntax.stderr
index e7ddf8df4..e7ddf8df4 100644
--- a/tests/ui/rfc-2091-track-caller/error-odd-syntax.stderr
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-odd-syntax.stderr
diff --git a/tests/ui/rfc-2091-track-caller/error-with-invalid-abi.rs b/tests/ui/rfcs/rfc-2091-track-caller/error-with-invalid-abi.rs
index 074e1ceb7..074e1ceb7 100644
--- a/tests/ui/rfc-2091-track-caller/error-with-invalid-abi.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-with-invalid-abi.rs
diff --git a/tests/ui/rfc-2091-track-caller/error-with-invalid-abi.stderr b/tests/ui/rfcs/rfc-2091-track-caller/error-with-invalid-abi.stderr
index bcc0c8170..bcc0c8170 100644
--- a/tests/ui/rfc-2091-track-caller/error-with-invalid-abi.stderr
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-with-invalid-abi.stderr
diff --git a/tests/ui/rfc-2091-track-caller/error-with-main.rs b/tests/ui/rfcs/rfc-2091-track-caller/error-with-main.rs
index b2ea31bb5..b2ea31bb5 100644
--- a/tests/ui/rfc-2091-track-caller/error-with-main.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-with-main.rs
diff --git a/tests/ui/rfc-2091-track-caller/error-with-main.stderr b/tests/ui/rfcs/rfc-2091-track-caller/error-with-main.stderr
index 6d6562dae..6d6562dae 100644
--- a/tests/ui/rfc-2091-track-caller/error-with-main.stderr
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-with-main.stderr
diff --git a/tests/ui/rfc-2091-track-caller/error-with-naked.rs b/tests/ui/rfcs/rfc-2091-track-caller/error-with-naked.rs
index 43e33cbb1..43e33cbb1 100644
--- a/tests/ui/rfc-2091-track-caller/error-with-naked.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-with-naked.rs
diff --git a/tests/ui/rfc-2091-track-caller/error-with-naked.stderr b/tests/ui/rfcs/rfc-2091-track-caller/error-with-naked.stderr
index 3f7d0df42..3f7d0df42 100644
--- a/tests/ui/rfc-2091-track-caller/error-with-naked.stderr
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-with-naked.stderr
diff --git a/tests/ui/rfc-2091-track-caller/error-with-start.rs b/tests/ui/rfcs/rfc-2091-track-caller/error-with-start.rs
index 0cab47170..0cab47170 100644
--- a/tests/ui/rfc-2091-track-caller/error-with-start.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-with-start.rs
diff --git a/tests/ui/rfc-2091-track-caller/error-with-start.stderr b/tests/ui/rfcs/rfc-2091-track-caller/error-with-start.stderr
index 454c98ff9..454c98ff9 100644
--- a/tests/ui/rfc-2091-track-caller/error-with-start.stderr
+++ b/tests/ui/rfcs/rfc-2091-track-caller/error-with-start.stderr
diff --git a/tests/ui/rfc-2091-track-caller/intrinsic-wrapper.rs b/tests/ui/rfcs/rfc-2091-track-caller/intrinsic-wrapper.rs
index 23d2a4b0a..23d2a4b0a 100644
--- a/tests/ui/rfc-2091-track-caller/intrinsic-wrapper.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/intrinsic-wrapper.rs
diff --git a/tests/ui/rfc-2091-track-caller/macro-declaration.rs b/tests/ui/rfcs/rfc-2091-track-caller/macro-declaration.rs
index 6ca09fac8..6ca09fac8 100644
--- a/tests/ui/rfc-2091-track-caller/macro-declaration.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/macro-declaration.rs
diff --git a/tests/ui/rfc-2091-track-caller/mir-inlined-macro.rs b/tests/ui/rfcs/rfc-2091-track-caller/mir-inlined-macro.rs
index a2e8eb27e..a2e8eb27e 100644
--- a/tests/ui/rfc-2091-track-caller/mir-inlined-macro.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/mir-inlined-macro.rs
diff --git a/tests/ui/rfc-2091-track-caller/only-for-fns.rs b/tests/ui/rfcs/rfc-2091-track-caller/only-for-fns.rs
index 2d2b01b6f..2d2b01b6f 100644
--- a/tests/ui/rfc-2091-track-caller/only-for-fns.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/only-for-fns.rs
diff --git a/tests/ui/rfc-2091-track-caller/only-for-fns.stderr b/tests/ui/rfcs/rfc-2091-track-caller/only-for-fns.stderr
index b36597bde..b36597bde 100644
--- a/tests/ui/rfc-2091-track-caller/only-for-fns.stderr
+++ b/tests/ui/rfcs/rfc-2091-track-caller/only-for-fns.stderr
diff --git a/tests/ui/rfc-2091-track-caller/pass.rs b/tests/ui/rfcs/rfc-2091-track-caller/pass.rs
index 1b13ea3e9..1b13ea3e9 100644
--- a/tests/ui/rfc-2091-track-caller/pass.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/pass.rs
diff --git a/tests/ui/rfc-2091-track-caller/std-panic-locations.rs b/tests/ui/rfcs/rfc-2091-track-caller/std-panic-locations.rs
index f11456250..f11456250 100644
--- a/tests/ui/rfc-2091-track-caller/std-panic-locations.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/std-panic-locations.rs
diff --git a/tests/ui/rfc-2091-track-caller/track-caller-attribute.rs b/tests/ui/rfcs/rfc-2091-track-caller/track-caller-attribute.rs
index 9d28eb9de..9d28eb9de 100644
--- a/tests/ui/rfc-2091-track-caller/track-caller-attribute.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/track-caller-attribute.rs
diff --git a/tests/ui/rfc-2091-track-caller/track-caller-ffi.rs b/tests/ui/rfcs/rfc-2091-track-caller/track-caller-ffi.rs
index 5115f687c..5115f687c 100644
--- a/tests/ui/rfc-2091-track-caller/track-caller-ffi.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/track-caller-ffi.rs
diff --git a/tests/ui/rfc-2091-track-caller/tracked-closure.rs b/tests/ui/rfcs/rfc-2091-track-caller/tracked-closure.rs
index 670c423a7..670c423a7 100644
--- a/tests/ui/rfc-2091-track-caller/tracked-closure.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/tracked-closure.rs
diff --git a/tests/ui/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs b/tests/ui/rfcs/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs
index 658812578..658812578 100644
--- a/tests/ui/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs
diff --git a/tests/ui/rfc-2091-track-caller/tracked-fn-ptr.rs b/tests/ui/rfcs/rfc-2091-track-caller/tracked-fn-ptr.rs
index 8bb4dd288..8bb4dd288 100644
--- a/tests/ui/rfc-2091-track-caller/tracked-fn-ptr.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/tracked-fn-ptr.rs
diff --git a/tests/ui/rfc-2091-track-caller/tracked-trait-impls.rs b/tests/ui/rfcs/rfc-2091-track-caller/tracked-trait-impls.rs
index 4db4c29e5..4db4c29e5 100644
--- a/tests/ui/rfc-2091-track-caller/tracked-trait-impls.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/tracked-trait-impls.rs
diff --git a/tests/ui/rfc-2091-track-caller/tracked-trait-obj.rs b/tests/ui/rfcs/rfc-2091-track-caller/tracked-trait-obj.rs
index 06883a857..06883a857 100644
--- a/tests/ui/rfc-2091-track-caller/tracked-trait-obj.rs
+++ b/tests/ui/rfcs/rfc-2091-track-caller/tracked-trait-obj.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/cross-crate.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/cross-crate.rs
index a9bfeabf1..a9bfeabf1 100644
--- a/tests/ui/rfc-2093-infer-outlives/cross-crate.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/cross-crate.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/cross-crate.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/cross-crate.stderr
index 76300cce5..76300cce5 100644
--- a/tests/ui/rfc-2093-infer-outlives/cross-crate.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/cross-crate.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/dont-infer-static.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/dont-infer-static.rs
index d3940b13b..d3940b13b 100644
--- a/tests/ui/rfc-2093-infer-outlives/dont-infer-static.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/dont-infer-static.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/dont-infer-static.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/dont-infer-static.stderr
index 0c388f5fe..0c388f5fe 100644
--- a/tests/ui/rfc-2093-infer-outlives/dont-infer-static.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/dont-infer-static.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/enum.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/enum.rs
index 71d2d3222..71d2d3222 100644
--- a/tests/ui/rfc-2093-infer-outlives/enum.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/enum.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/enum.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/enum.stderr
index b6ce2450e..b6ce2450e 100644
--- a/tests/ui/rfc-2093-infer-outlives/enum.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/enum.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-dyn.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-dyn.rs
index 419fb0a0e..419fb0a0e 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-dyn.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-dyn.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-dyn.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-dyn.stderr
index 595a5c280..595a5c280 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-dyn.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-dyn.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-enum.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-enum.rs
index c330c27fe..c330c27fe 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-enum.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-enum.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-enum.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-enum.stderr
index 3059f95ae..3059f95ae 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-enum.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-enum.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-projection.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-projection.rs
index 00b895288..00b895288 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-projection.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-projection.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-projection.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-projection.stderr
index 589e95899..589e95899 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-projection.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-projection.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-struct.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-struct.rs
index 3d5e610b9..3d5e610b9 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-struct.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-struct.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-struct.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-struct.stderr
index 9912e36b2..9912e36b2 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-struct.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-struct.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-union.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-union.rs
index 871208b5b..871208b5b 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-union.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-union.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/explicit-union.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-union.stderr
index 16b64bdc2..16b64bdc2 100644
--- a/tests/ui/rfc-2093-infer-outlives/explicit-union.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/explicit-union.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/issue-54467.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/issue-54467.rs
index c712f15e3..c712f15e3 100644
--- a/tests/ui/rfc-2093-infer-outlives/issue-54467.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/issue-54467.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/nested-enum.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-enum.rs
index 0cd706e7a..0cd706e7a 100644
--- a/tests/ui/rfc-2093-infer-outlives/nested-enum.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-enum.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/nested-enum.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-enum.stderr
index 4350e6e8b..4350e6e8b 100644
--- a/tests/ui/rfc-2093-infer-outlives/nested-enum.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-enum.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/nested-regions.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-regions.rs
index a01c50681..a01c50681 100644
--- a/tests/ui/rfc-2093-infer-outlives/nested-regions.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-regions.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/nested-regions.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-regions.stderr
index c08add7ed..c08add7ed 100644
--- a/tests/ui/rfc-2093-infer-outlives/nested-regions.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-regions.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/nested-structs.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-structs.rs
index ac6817d22..ac6817d22 100644
--- a/tests/ui/rfc-2093-infer-outlives/nested-structs.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-structs.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/nested-structs.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-structs.stderr
index 769555234..769555234 100644
--- a/tests/ui/rfc-2093-infer-outlives/nested-structs.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-structs.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/nested-union.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-union.rs
index 27ebd0b54..27ebd0b54 100644
--- a/tests/ui/rfc-2093-infer-outlives/nested-union.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-union.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/nested-union.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-union.stderr
index a785c63ce..a785c63ce 100644
--- a/tests/ui/rfc-2093-infer-outlives/nested-union.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/nested-union.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/privacy.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/privacy.rs
index 180f5ac6c..180f5ac6c 100644
--- a/tests/ui/rfc-2093-infer-outlives/privacy.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/privacy.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/projection.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/projection.rs
index 411c86da1..411c86da1 100644
--- a/tests/ui/rfc-2093-infer-outlives/projection.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/projection.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/projection.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/projection.stderr
index d9342013f..d9342013f 100644
--- a/tests/ui/rfc-2093-infer-outlives/projection.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/projection.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/reference.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/reference.rs
index a48a3315a..a48a3315a 100644
--- a/tests/ui/rfc-2093-infer-outlives/reference.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/reference.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/reference.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/reference.stderr
index 508114357..508114357 100644
--- a/tests/ui/rfc-2093-infer-outlives/reference.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/reference.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-enum-not-wf.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-enum-not-wf.rs
index 8b491ee4e..8b491ee4e 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-enum-not-wf.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-enum-not-wf.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-enum-not-wf.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-enum-not-wf.stderr
index 2c660b285..2c660b285 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-enum-not-wf.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-enum-not-wf.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.rs
index 36b024d2e..36b024d2e 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.stderr
index 5dff4c8ff..5dff4c8ff 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region-rev.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.rs
index 47a38f7c4..47a38f7c4 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.stderr
index 975776cdd..975776cdd 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-region.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.rs
index 083ba8948..083ba8948 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.stderr
index be05ecec0..be05ecec0 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type-rev.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.rs
index f3e4e39ac..f3e4e39ac 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.stderr
index 4ba1778d6..4ba1778d6 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-outlives-nominal-type-type.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-struct-not-wf.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-struct-not-wf.rs
index 552c6cf00..552c6cf00 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-struct-not-wf.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-struct-not-wf.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/regions-struct-not-wf.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-struct-not-wf.stderr
index 34ff1362c..34ff1362c 100644
--- a/tests/ui/rfc-2093-infer-outlives/regions-struct-not-wf.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/regions-struct-not-wf.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/self-dyn.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/self-dyn.rs
index c53d6c18f..c53d6c18f 100644
--- a/tests/ui/rfc-2093-infer-outlives/self-dyn.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/self-dyn.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/self-dyn.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/self-dyn.stderr
index 9c836b190..9c836b190 100644
--- a/tests/ui/rfc-2093-infer-outlives/self-dyn.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/self-dyn.stderr
diff --git a/tests/ui/rfc-2093-infer-outlives/self-structs.rs b/tests/ui/rfcs/rfc-2093-infer-outlives/self-structs.rs
index 8f2d29d6f..8f2d29d6f 100644
--- a/tests/ui/rfc-2093-infer-outlives/self-structs.rs
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/self-structs.rs
diff --git a/tests/ui/rfc-2093-infer-outlives/self-structs.stderr b/tests/ui/rfcs/rfc-2093-infer-outlives/self-structs.stderr
index 2b4625f77..2b4625f77 100644
--- a/tests/ui/rfc-2093-infer-outlives/self-structs.stderr
+++ b/tests/ui/rfcs/rfc-2093-infer-outlives/self-structs.stderr
diff --git a/tests/ui/rfc-2126-crate-paths/crate-path-non-absolute.rs b/tests/ui/rfcs/rfc-2126-crate-paths/crate-path-non-absolute.rs
index 79f6b0dfe..79f6b0dfe 100644
--- a/tests/ui/rfc-2126-crate-paths/crate-path-non-absolute.rs
+++ b/tests/ui/rfcs/rfc-2126-crate-paths/crate-path-non-absolute.rs
diff --git a/tests/ui/rfc-2126-crate-paths/crate-path-non-absolute.stderr b/tests/ui/rfcs/rfc-2126-crate-paths/crate-path-non-absolute.stderr
index 7e7ee3ce0..7e7ee3ce0 100644
--- a/tests/ui/rfc-2126-crate-paths/crate-path-non-absolute.stderr
+++ b/tests/ui/rfcs/rfc-2126-crate-paths/crate-path-non-absolute.stderr
diff --git a/tests/ui/rfc-2126-crate-paths/keyword-crate-as-identifier.rs b/tests/ui/rfcs/rfc-2126-crate-paths/keyword-crate-as-identifier.rs
index 019ef8e9d..019ef8e9d 100644
--- a/tests/ui/rfc-2126-crate-paths/keyword-crate-as-identifier.rs
+++ b/tests/ui/rfcs/rfc-2126-crate-paths/keyword-crate-as-identifier.rs
diff --git a/tests/ui/rfc-2126-crate-paths/keyword-crate-as-identifier.stderr b/tests/ui/rfcs/rfc-2126-crate-paths/keyword-crate-as-identifier.stderr
index c39a70f66..c39a70f66 100644
--- a/tests/ui/rfc-2126-crate-paths/keyword-crate-as-identifier.stderr
+++ b/tests/ui/rfcs/rfc-2126-crate-paths/keyword-crate-as-identifier.stderr
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs
index c4d444764..c4d444764 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-1.rs b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-1.rs
index 9c0e0bef4..9c0e0bef4 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-1.rs
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-1.rs
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-1.stderr b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-1.stderr
index 818915721..818915721 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-1.stderr
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-1.stderr
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-2.rs b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-2.rs
index def60feb5..def60feb5 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-2.rs
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-2.rs
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-2.stderr b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-2.stderr
index 7df4f06d1..7df4f06d1 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-2.stderr
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-2.stderr
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-3.rs b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-3.rs
index 486159c0e..486159c0e 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-3.rs
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-3.rs
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-3.stderr b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-3.stderr
index bd6778cf3..bd6778cf3 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/non-existent-3.stderr
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/non-existent-3.stderr
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/not-allowed.rs b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/not-allowed.rs
index acb4bbebe..acb4bbebe 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/not-allowed.rs
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/not-allowed.rs
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/not-allowed.stderr b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/not-allowed.stderr
index 122e8fd35..122e8fd35 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/not-allowed.stderr
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/not-allowed.stderr
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/single-segment.rs b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/single-segment.rs
index 72e50d78b..72e50d78b 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/single-segment.rs
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/single-segment.rs
diff --git a/tests/ui/rfc-2126-extern-absolute-paths/single-segment.stderr b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/single-segment.stderr
index 253cc1bc5..253cc1bc5 100644
--- a/tests/ui/rfc-2126-extern-absolute-paths/single-segment.stderr
+++ b/tests/ui/rfcs/rfc-2126-extern-absolute-paths/single-segment.stderr
diff --git a/tests/ui/rfc-2294-if-let-guard/bindings.rs b/tests/ui/rfcs/rfc-2294-if-let-guard/bindings.rs
index 1f32e4af1..1f32e4af1 100644
--- a/tests/ui/rfc-2294-if-let-guard/bindings.rs
+++ b/tests/ui/rfcs/rfc-2294-if-let-guard/bindings.rs
diff --git a/tests/ui/rfc-2294-if-let-guard/bindings.stderr b/tests/ui/rfcs/rfc-2294-if-let-guard/bindings.stderr
index 2463b7f3e..2463b7f3e 100644
--- a/tests/ui/rfc-2294-if-let-guard/bindings.stderr
+++ b/tests/ui/rfcs/rfc-2294-if-let-guard/bindings.stderr
diff --git a/tests/ui/rfc-2294-if-let-guard/feature-gate.rs b/tests/ui/rfcs/rfc-2294-if-let-guard/feature-gate.rs
index 3beb20f0a..3beb20f0a 100644
--- a/tests/ui/rfc-2294-if-let-guard/feature-gate.rs
+++ b/tests/ui/rfcs/rfc-2294-if-let-guard/feature-gate.rs
diff --git a/tests/ui/rfc-2294-if-let-guard/feature-gate.stderr b/tests/ui/rfcs/rfc-2294-if-let-guard/feature-gate.stderr
index dc182ce46..dc182ce46 100644
--- a/tests/ui/rfc-2294-if-let-guard/feature-gate.stderr
+++ b/tests/ui/rfcs/rfc-2294-if-let-guard/feature-gate.stderr
diff --git a/tests/ui/rfc-2294-if-let-guard/run-pass.rs b/tests/ui/rfcs/rfc-2294-if-let-guard/run-pass.rs
index a303a0d1f..a303a0d1f 100644
--- a/tests/ui/rfc-2294-if-let-guard/run-pass.rs
+++ b/tests/ui/rfcs/rfc-2294-if-let-guard/run-pass.rs
diff --git a/tests/ui/rfc-2294-if-let-guard/typeck.rs b/tests/ui/rfcs/rfc-2294-if-let-guard/typeck.rs
index ad178dfa4..ad178dfa4 100644
--- a/tests/ui/rfc-2294-if-let-guard/typeck.rs
+++ b/tests/ui/rfcs/rfc-2294-if-let-guard/typeck.rs
diff --git a/tests/ui/rfc-2294-if-let-guard/typeck.stderr b/tests/ui/rfcs/rfc-2294-if-let-guard/typeck.stderr
index 4ce97a68a..4ce97a68a 100644
--- a/tests/ui/rfc-2294-if-let-guard/typeck.stderr
+++ b/tests/ui/rfcs/rfc-2294-if-let-guard/typeck.stderr
diff --git a/tests/ui/rfc-2294-if-let-guard/warns.rs b/tests/ui/rfcs/rfc-2294-if-let-guard/warns.rs
index 3ad1a50c6..3ad1a50c6 100644
--- a/tests/ui/rfc-2294-if-let-guard/warns.rs
+++ b/tests/ui/rfcs/rfc-2294-if-let-guard/warns.rs
diff --git a/tests/ui/rfc-2294-if-let-guard/warns.stderr b/tests/ui/rfcs/rfc-2294-if-let-guard/warns.stderr
index 75f22ac8d..75f22ac8d 100644
--- a/tests/ui/rfc-2294-if-let-guard/warns.stderr
+++ b/tests/ui/rfcs/rfc-2294-if-let-guard/warns.stderr
diff --git a/tests/ui/rfcs/rfc-2302-self-struct-ctor.rs b/tests/ui/rfcs/rfc-2302-self-struct-ctor/rfc-2302-self-struct-ctor.rs
index 1ec20c500..1ec20c500 100644
--- a/tests/ui/rfcs/rfc-2302-self-struct-ctor.rs
+++ b/tests/ui/rfcs/rfc-2302-self-struct-ctor/rfc-2302-self-struct-ctor.rs
diff --git a/tests/ui/rfc-2306/convert-id-const-with-gate.rs b/tests/ui/rfcs/rfc-2306-convert-id/convert-id-const-with-gate.rs
index 762dfbe48..762dfbe48 100644
--- a/tests/ui/rfc-2306/convert-id-const-with-gate.rs
+++ b/tests/ui/rfcs/rfc-2306-convert-id/convert-id-const-with-gate.rs
diff --git a/tests/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs
index 542be3942..542be3942 100644
--- a/tests/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs
+++ b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs
diff --git a/tests/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.run.stderr b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-expected-behavior.run.stderr
index a20a6062c..a20a6062c 100644
--- a/tests/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.run.stderr
+++ b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-expected-behavior.run.stderr
diff --git a/tests/ui/rfc-2361-dbg-macro/dbg-macro-move-semantics.rs b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-move-semantics.rs
index 9f3c567b6..9f3c567b6 100644
--- a/tests/ui/rfc-2361-dbg-macro/dbg-macro-move-semantics.rs
+++ b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-move-semantics.rs
diff --git a/tests/ui/rfc-2361-dbg-macro/dbg-macro-move-semantics.stderr b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-move-semantics.stderr
index e97fdcce1..e97fdcce1 100644
--- a/tests/ui/rfc-2361-dbg-macro/dbg-macro-move-semantics.stderr
+++ b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-move-semantics.stderr
diff --git a/tests/ui/rfc-2361-dbg-macro/dbg-macro-requires-debug.rs b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-requires-debug.rs
index f2fb62d76..f2fb62d76 100644
--- a/tests/ui/rfc-2361-dbg-macro/dbg-macro-requires-debug.rs
+++ b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-requires-debug.rs
diff --git a/tests/ui/rfc-2361-dbg-macro/dbg-macro-requires-debug.stderr b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-requires-debug.stderr
index ce165e646..ce165e646 100644
--- a/tests/ui/rfc-2361-dbg-macro/dbg-macro-requires-debug.stderr
+++ b/tests/ui/rfcs/rfc-2361-dbg-macro/dbg-macro-requires-debug.stderr
diff --git a/tests/ui/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.rs b/tests/ui/rfcs/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.rs
index 5053c115b..5053c115b 100644
--- a/tests/ui/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.rs
+++ b/tests/ui/rfcs/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.rs
diff --git a/tests/ui/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.stderr b/tests/ui/rfcs/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.stderr
index a3e559054..a3e559054 100644
--- a/tests/ui/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.stderr
+++ b/tests/ui/rfcs/rfc-2397-do-not-recommend/feature-gate-do_not_recommend.stderr
diff --git a/tests/ui/rfc-2397-do-not-recommend/incorrect-locations.rs b/tests/ui/rfcs/rfc-2397-do-not-recommend/incorrect-locations.rs
index 91863f5e4..91863f5e4 100644
--- a/tests/ui/rfc-2397-do-not-recommend/incorrect-locations.rs
+++ b/tests/ui/rfcs/rfc-2397-do-not-recommend/incorrect-locations.rs
diff --git a/tests/ui/rfc-2397-do-not-recommend/incorrect-locations.stderr b/tests/ui/rfcs/rfc-2397-do-not-recommend/incorrect-locations.stderr
index 01ebc23c8..01ebc23c8 100644
--- a/tests/ui/rfc-2397-do-not-recommend/incorrect-locations.stderr
+++ b/tests/ui/rfcs/rfc-2397-do-not-recommend/incorrect-locations.stderr
diff --git a/tests/ui/rfc-2397-do-not-recommend/unstable-feature.rs b/tests/ui/rfcs/rfc-2397-do-not-recommend/unstable-feature.rs
index f0c5c222e..f0c5c222e 100644
--- a/tests/ui/rfc-2397-do-not-recommend/unstable-feature.rs
+++ b/tests/ui/rfcs/rfc-2397-do-not-recommend/unstable-feature.rs
diff --git a/tests/ui/rfc-2397-do-not-recommend/unstable-feature.stderr b/tests/ui/rfcs/rfc-2397-do-not-recommend/unstable-feature.stderr
index 1597e5be4..1597e5be4 100644
--- a/tests/ui/rfc-2397-do-not-recommend/unstable-feature.stderr
+++ b/tests/ui/rfcs/rfc-2397-do-not-recommend/unstable-feature.stderr
diff --git a/tests/ui/rfcs/rfc-2421-unreserve-pure-offsetof-sizeof-alignof.rs b/tests/ui/rfcs/rfc-2421-unreserve-pure-offsetof-sizeof-alignof/offsetof-alignof-sizeof-pure-can-be-used-as-idents.rs
index 6d7bca4da..6d7bca4da 100644
--- a/tests/ui/rfcs/rfc-2421-unreserve-pure-offsetof-sizeof-alignof.rs
+++ b/tests/ui/rfcs/rfc-2421-unreserve-pure-offsetof-sizeof-alignof/offsetof-alignof-sizeof-pure-can-be-used-as-idents.rs
diff --git a/tests/ui/rfc-2457/auxiliary/mod_file_nonascii_with_path_allowed-aux.rs b/tests/ui/rfcs/rfc-2457-non-ascii-idents/auxiliary/mod_file_nonascii_with_path_allowed-aux.rs
index e373b6438..e373b6438 100644
--- a/tests/ui/rfc-2457/auxiliary/mod_file_nonascii_with_path_allowed-aux.rs
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/auxiliary/mod_file_nonascii_with_path_allowed-aux.rs
diff --git a/tests/ui/rfc-2457/crate_name_nonascii_forbidden-1.rs b/tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-1.rs
index c07ba54af..c07ba54af 100644
--- a/tests/ui/rfc-2457/crate_name_nonascii_forbidden-1.rs
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-1.rs
diff --git a/tests/ui/rfc-2457/crate_name_nonascii_forbidden-1.stderr b/tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-1.stderr
index a8f3abe59..a8f3abe59 100644
--- a/tests/ui/rfc-2457/crate_name_nonascii_forbidden-1.stderr
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-1.stderr
diff --git a/tests/ui/rfc-2457/crate_name_nonascii_forbidden-2.rs b/tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-2.rs
index f8e033937..f8e033937 100644
--- a/tests/ui/rfc-2457/crate_name_nonascii_forbidden-2.rs
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-2.rs
diff --git a/tests/ui/rfc-2457/crate_name_nonascii_forbidden-2.stderr b/tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-2.stderr
index 05fc4fb22..05fc4fb22 100644
--- a/tests/ui/rfc-2457/crate_name_nonascii_forbidden-2.stderr
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/crate_name_nonascii_forbidden-2.stderr
diff --git a/tests/ui/rfc-2457/extern_block_nonascii_forbidden.rs b/tests/ui/rfcs/rfc-2457-non-ascii-idents/extern_block_nonascii_forbidden.rs
index ad6825404..ad6825404 100644
--- a/tests/ui/rfc-2457/extern_block_nonascii_forbidden.rs
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/extern_block_nonascii_forbidden.rs
diff --git a/tests/ui/rfc-2457/extern_block_nonascii_forbidden.stderr b/tests/ui/rfcs/rfc-2457-non-ascii-idents/extern_block_nonascii_forbidden.stderr
index ca1b8a6e7..ca1b8a6e7 100644
--- a/tests/ui/rfc-2457/extern_block_nonascii_forbidden.stderr
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/extern_block_nonascii_forbidden.stderr
diff --git a/tests/ui/rfc-2457/idents-normalized.rs b/tests/ui/rfcs/rfc-2457-non-ascii-idents/idents-normalized.rs
index 1023fee37..1023fee37 100644
--- a/tests/ui/rfc-2457/idents-normalized.rs
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/idents-normalized.rs
diff --git a/tests/ui/rfc-2457/mod_file_nonascii_forbidden.rs b/tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_forbidden.rs
index e949e2319..e949e2319 100644
--- a/tests/ui/rfc-2457/mod_file_nonascii_forbidden.rs
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_forbidden.rs
diff --git a/tests/ui/rfc-2457/mod_file_nonascii_forbidden.stderr b/tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_forbidden.stderr
index 7639ae9f6..7639ae9f6 100644
--- a/tests/ui/rfc-2457/mod_file_nonascii_forbidden.stderr
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_forbidden.stderr
diff --git a/tests/ui/rfc-2457/mod_file_nonascii_with_path_allowed.rs b/tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_with_path_allowed.rs
index 94327846d..94327846d 100644
--- a/tests/ui/rfc-2457/mod_file_nonascii_with_path_allowed.rs
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_file_nonascii_with_path_allowed.rs
diff --git a/tests/ui/rfc-2457/mod_inline_nonascii_allowed.rs b/tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_inline_nonascii_allowed.rs
index e1d836b7c..e1d836b7c 100644
--- a/tests/ui/rfc-2457/mod_inline_nonascii_allowed.rs
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/mod_inline_nonascii_allowed.rs
diff --git a/tests/ui/rfc-2457/no_mangle_nonascii_forbidden.rs b/tests/ui/rfcs/rfc-2457-non-ascii-idents/no_mangle_nonascii_forbidden.rs
index f4c126a6e..f4c126a6e 100644
--- a/tests/ui/rfc-2457/no_mangle_nonascii_forbidden.rs
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/no_mangle_nonascii_forbidden.rs
diff --git a/tests/ui/rfc-2457/no_mangle_nonascii_forbidden.stderr b/tests/ui/rfcs/rfc-2457-non-ascii-idents/no_mangle_nonascii_forbidden.stderr
index 459d5d6b5..459d5d6b5 100644
--- a/tests/ui/rfc-2457/no_mangle_nonascii_forbidden.stderr
+++ b/tests/ui/rfcs/rfc-2457-non-ascii-idents/no_mangle_nonascii_forbidden.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/ast-lowering-does-not-wrap-let-chains.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-lowering-does-not-wrap-let-chains.rs
index d851fac8e..d851fac8e 100644
--- a/tests/ui/rfc-2497-if-let-chains/ast-lowering-does-not-wrap-let-chains.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-lowering-does-not-wrap-let-chains.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/ast-pretty-check.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-pretty-check.rs
index 69bc189dd..69bc189dd 100644
--- a/tests/ui/rfc-2497-if-let-chains/ast-pretty-check.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-pretty-check.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/ast-pretty-check.stdout b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-pretty-check.stdout
index e737ef26e..e737ef26e 100644
--- a/tests/ui/rfc-2497-if-let-chains/ast-pretty-check.stdout
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-pretty-check.stdout
diff --git a/tests/ui/rfc-2497-if-let-chains/ast-validate-guards.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-validate-guards.rs
index e6dee2a1d..e6dee2a1d 100644
--- a/tests/ui/rfc-2497-if-let-chains/ast-validate-guards.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-validate-guards.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/ast-validate-guards.stderr b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-validate-guards.stderr
index 26850998c..26850998c 100644
--- a/tests/ui/rfc-2497-if-let-chains/ast-validate-guards.stderr
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/ast-validate-guards.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/chains-without-let.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/chains-without-let.rs
index e0dded152..e0dded152 100644
--- a/tests/ui/rfc-2497-if-let-chains/chains-without-let.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/chains-without-let.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/chains-without-let.stderr b/tests/ui/rfcs/rfc-2497-if-let-chains/chains-without-let.stderr
index 30d5a6779..30d5a6779 100644
--- a/tests/ui/rfc-2497-if-let-chains/chains-without-let.stderr
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/chains-without-let.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/disallowed-positions.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/disallowed-positions.rs
index 2a9a5472b..2a9a5472b 100644
--- a/tests/ui/rfc-2497-if-let-chains/disallowed-positions.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/disallowed-positions.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/disallowed-positions.stderr b/tests/ui/rfcs/rfc-2497-if-let-chains/disallowed-positions.stderr
index 81933173c..81933173c 100644
--- a/tests/ui/rfc-2497-if-let-chains/disallowed-positions.stderr
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/disallowed-positions.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.rs
index 2a6c14435..2a6c14435 100644
--- a/tests/ui/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.stderr b/tests/ui/rfcs/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.stderr
index 9bc3e7541..9bc3e7541 100644
--- a/tests/ui/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.stderr
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/ensure-that-let-else-does-not-interact-with-let-chains.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/feature-gate.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/feature-gate.rs
index 2b407ef51..2b407ef51 100644
--- a/tests/ui/rfc-2497-if-let-chains/feature-gate.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/feature-gate.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/feature-gate.stderr b/tests/ui/rfcs/rfc-2497-if-let-chains/feature-gate.stderr
index 7a43b71fc..7a43b71fc 100644
--- a/tests/ui/rfc-2497-if-let-chains/feature-gate.stderr
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/feature-gate.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.rs
index a942d1f4c..a942d1f4c 100644
--- a/tests/ui/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.stderr b/tests/ui/rfcs/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.stderr
index d1ce83c72..d1ce83c72 100644
--- a/tests/ui/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.stderr
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/invalid-let-in-a-valid-let-context.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/irrefutable-lets.disallowed.stderr b/tests/ui/rfcs/rfc-2497-if-let-chains/irrefutable-lets.disallowed.stderr
index be4a52315..be4a52315 100644
--- a/tests/ui/rfc-2497-if-let-chains/irrefutable-lets.disallowed.stderr
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/irrefutable-lets.disallowed.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/irrefutable-lets.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/irrefutable-lets.rs
index 9afb6853b..9afb6853b 100644
--- a/tests/ui/rfc-2497-if-let-chains/irrefutable-lets.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/irrefutable-lets.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/issue-88498.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-88498.rs
index 3eb8a9ad0..3eb8a9ad0 100644
--- a/tests/ui/rfc-2497-if-let-chains/issue-88498.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-88498.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/issue-90722.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-90722.rs
index 6b7d88356..6b7d88356 100644
--- a/tests/ui/rfc-2497-if-let-chains/issue-90722.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-90722.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/issue-92145.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-92145.rs
index 7c7e31f4d..7c7e31f4d 100644
--- a/tests/ui/rfc-2497-if-let-chains/issue-92145.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-92145.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/issue-93150.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-93150.rs
index f90b9ab0d..f90b9ab0d 100644
--- a/tests/ui/rfc-2497-if-let-chains/issue-93150.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-93150.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/issue-93150.stderr b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-93150.stderr
index b25f299a2..b25f299a2 100644
--- a/tests/ui/rfc-2497-if-let-chains/issue-93150.stderr
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-93150.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/issue-99938.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-99938.rs
index bd81ce0b1..bd81ce0b1 100644
--- a/tests/ui/rfc-2497-if-let-chains/issue-99938.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/issue-99938.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/no-double-assigments.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/no-double-assigments.rs
index 6b91c455e..6b91c455e 100644
--- a/tests/ui/rfc-2497-if-let-chains/no-double-assigments.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/no-double-assigments.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/protect-precedences.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/protect-precedences.rs
index fcc09b159..fcc09b159 100644
--- a/tests/ui/rfc-2497-if-let-chains/protect-precedences.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/protect-precedences.rs
diff --git a/tests/ui/rfc-2497-if-let-chains/protect-precedences.stderr b/tests/ui/rfcs/rfc-2497-if-let-chains/protect-precedences.stderr
index 24b35a2ab..24b35a2ab 100644
--- a/tests/ui/rfc-2497-if-let-chains/protect-precedences.stderr
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/protect-precedences.stderr
diff --git a/tests/ui/rfc-2497-if-let-chains/then-else-blocks.rs b/tests/ui/rfcs/rfc-2497-if-let-chains/then-else-blocks.rs
index e061174f6..e061174f6 100644
--- a/tests/ui/rfc-2497-if-let-chains/then-else-blocks.rs
+++ b/tests/ui/rfcs/rfc-2497-if-let-chains/then-else-blocks.rs
diff --git a/tests/ui/rfc-2565-param-attrs/attr-without-param.rs b/tests/ui/rfcs/rfc-2565-param-attrs/attr-without-param.rs
index eeb2191ba..eeb2191ba 100644
--- a/tests/ui/rfc-2565-param-attrs/attr-without-param.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/attr-without-param.rs
diff --git a/tests/ui/rfc-2565-param-attrs/attr-without-param.stderr b/tests/ui/rfcs/rfc-2565-param-attrs/attr-without-param.stderr
index 26dff4d4b..26dff4d4b 100644
--- a/tests/ui/rfc-2565-param-attrs/attr-without-param.stderr
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/attr-without-param.stderr
diff --git a/tests/ui/rfc-2565-param-attrs/auxiliary/ident-mac.rs b/tests/ui/rfcs/rfc-2565-param-attrs/auxiliary/ident-mac.rs
index b62cf3120..b62cf3120 100644
--- a/tests/ui/rfc-2565-param-attrs/auxiliary/ident-mac.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/auxiliary/ident-mac.rs
diff --git a/tests/ui/rfc-2565-param-attrs/auxiliary/param-attrs.rs b/tests/ui/rfcs/rfc-2565-param-attrs/auxiliary/param-attrs.rs
index 82c4120b4..82c4120b4 100644
--- a/tests/ui/rfc-2565-param-attrs/auxiliary/param-attrs.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/auxiliary/param-attrs.rs
diff --git a/tests/ui/rfc-2565-param-attrs/issue-64682-dropping-first-attrs-in-impl-fns.rs b/tests/ui/rfcs/rfc-2565-param-attrs/issue-64682-dropping-first-attrs-in-impl-fns.rs
index 670303906..670303906 100644
--- a/tests/ui/rfc-2565-param-attrs/issue-64682-dropping-first-attrs-in-impl-fns.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/issue-64682-dropping-first-attrs-in-impl-fns.rs
diff --git a/tests/ui/rfc-2565-param-attrs/param-attrs-2018.rs b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-2018.rs
index a6f693bd5..a6f693bd5 100644
--- a/tests/ui/rfc-2565-param-attrs/param-attrs-2018.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-2018.rs
diff --git a/tests/ui/rfc-2565-param-attrs/param-attrs-2018.stderr b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-2018.stderr
index 593821bf9..593821bf9 100644
--- a/tests/ui/rfc-2565-param-attrs/param-attrs-2018.stderr
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-2018.stderr
diff --git a/tests/ui/rfc-2565-param-attrs/param-attrs-allowed.rs b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-allowed.rs
index a547d09d0..2de37c859 100644
--- a/tests/ui/rfc-2565-param-attrs/param-attrs-allowed.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-allowed.rs
@@ -97,5 +97,5 @@ fn main() {
#[cfg_attr(something, cfg(nothing))]
#[deny(unused_mut)] c: i32,
| {};
- let _ = c(1, 2);
+ c(1, 2);
}
diff --git a/tests/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs
index 151659e35..151659e35 100644
--- a/tests/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs
diff --git a/tests/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.stderr b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-builtin-attrs.stderr
index 7573e39d8..7573e39d8 100644
--- a/tests/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.stderr
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-builtin-attrs.stderr
diff --git a/tests/ui/rfc-2565-param-attrs/param-attrs-cfg.rs b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-cfg.rs
index a4d9d32b5..14539d4b6 100644
--- a/tests/ui/rfc-2565-param-attrs/param-attrs-cfg.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-cfg.rs
@@ -116,6 +116,6 @@ fn main() {
//~^ ERROR unused variable: `c`
#[cfg_attr(something, cfg(nothing))] d: i32,
| {};
- let _ = a(1);
- let _ = c(1, 2);
+ a(1);
+ c(1, 2);
}
diff --git a/tests/ui/rfc-2565-param-attrs/param-attrs-cfg.stderr b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-cfg.stderr
index 16e1af460..16e1af460 100644
--- a/tests/ui/rfc-2565-param-attrs/param-attrs-cfg.stderr
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-cfg.stderr
diff --git a/tests/ui/rfc-2565-param-attrs/param-attrs-pretty.rs b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-pretty.rs
index 1183ac65b..1183ac65b 100644
--- a/tests/ui/rfc-2565-param-attrs/param-attrs-pretty.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/param-attrs-pretty.rs
diff --git a/tests/ui/rfc-2565-param-attrs/proc-macro-cannot-be-used.rs b/tests/ui/rfcs/rfc-2565-param-attrs/proc-macro-cannot-be-used.rs
index 54f2f451b..54f2f451b 100644
--- a/tests/ui/rfc-2565-param-attrs/proc-macro-cannot-be-used.rs
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/proc-macro-cannot-be-used.rs
diff --git a/tests/ui/rfc-2565-param-attrs/proc-macro-cannot-be-used.stderr b/tests/ui/rfcs/rfc-2565-param-attrs/proc-macro-cannot-be-used.stderr
index e74d05d49..e74d05d49 100644
--- a/tests/ui/rfc-2565-param-attrs/proc-macro-cannot-be-used.stderr
+++ b/tests/ui/rfcs/rfc-2565-param-attrs/proc-macro-cannot-be-used.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/dlltool-failed.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/dlltool-failed.rs
index d7a418959..d7a418959 100644
--- a/tests/ui/rfc-2627-raw-dylib/dlltool-failed.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/dlltool-failed.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/dlltool-failed.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/dlltool-failed.stderr
index 020ac6a2b..020ac6a2b 100644
--- a/tests/ui/rfc-2627-raw-dylib/dlltool-failed.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/dlltool-failed.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-invalid-format.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-invalid-format.rs
index 7bc44d65b..7bc44d65b 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-invalid-format.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-invalid-format.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-invalid-format.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-invalid-format.stderr
index fb70b987f..fb70b987f 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-invalid-format.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-invalid-format.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-multiple.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-multiple.rs
index b96f61a26..b96f61a26 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-multiple.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-multiple.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-multiple.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-multiple.stderr
index 953306189..953306189 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-multiple.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-multiple.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-unknown-value.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unknown-value.rs
index 067e82a17..067e82a17 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-unknown-value.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unknown-value.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-unknown-value.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unknown-value.stderr
index 2bce9758e..2bce9758e 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-unknown-value.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unknown-value.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.rs
index 34e907bde..34e907bde 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.stderr
index 75cadc471..75cadc471 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-unsupported-link-kind.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-x86-only.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-x86-only.rs
index 346ea18a8..346ea18a8 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-x86-only.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-x86-only.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/import-name-type-x86-only.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-x86-only.stderr
index b56449299..b56449299 100644
--- a/tests/ui/rfc-2627-raw-dylib/import-name-type-x86-only.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/import-name-type-x86-only.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/invalid-dlltool.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/invalid-dlltool.rs
index a07be9d92..a07be9d92 100644
--- a/tests/ui/rfc-2627-raw-dylib/invalid-dlltool.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/invalid-dlltool.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/invalid-dlltool.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/invalid-dlltool.stderr
index 3ae901e0d..3ae901e0d 100644
--- a/tests/ui/rfc-2627-raw-dylib/invalid-dlltool.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/invalid-dlltool.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-and-name.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-and-name.rs
index b04c2facb..b04c2facb 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-and-name.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-and-name.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-and-name.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-and-name.stderr
index f1e54d378..f1e54d378 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-and-name.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-and-name.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-invalid-format.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-invalid-format.rs
index 9b7e8d707..9b7e8d707 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-invalid-format.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-invalid-format.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-invalid-format.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-invalid-format.stderr
index 6341e57a0..6341e57a0 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-invalid-format.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-invalid-format.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-missing-argument.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-missing-argument.rs
index 6b8cd4956..6b8cd4956 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-missing-argument.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-missing-argument.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-missing-argument.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-missing-argument.stderr
index 1b04bb228..1b04bb228 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-missing-argument.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-missing-argument.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-multiple.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-multiple.rs
index 8842cb944..8842cb944 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-multiple.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-multiple.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-multiple.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-multiple.stderr
index 2e6cf3761..2e6cf3761 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-multiple.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-multiple.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.rs
index f33a3d62e..f33a3d62e 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.stderr
index 8f2795087..8f2795087 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-not-foreign-fn.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-too-large.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-large.rs
index 9d741630f..9d741630f 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-too-large.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-large.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-too-large.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-large.stderr
index 811145e77..811145e77 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-too-large.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-large.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.rs
index 9988115fd..9988115fd 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.stderr
index d5ce8aff3..d5ce8aff3 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-too-many-arguments.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.rs
index 14e915d60..14e915d60 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.stderr
index 200b8f628..200b8f628 100644
--- a/tests/ui/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/link-ordinal-unsupported-link-kind.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/multiple-declarations.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/multiple-declarations.rs
index b4173f3b6..b4173f3b6 100644
--- a/tests/ui/rfc-2627-raw-dylib/multiple-declarations.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/multiple-declarations.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/multiple-declarations.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/multiple-declarations.stderr
index 510108405..510108405 100644
--- a/tests/ui/rfc-2627-raw-dylib/multiple-declarations.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/multiple-declarations.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/raw-dylib-windows-only.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/raw-dylib-windows-only.rs
index d4c6658a3..d4c6658a3 100644
--- a/tests/ui/rfc-2627-raw-dylib/raw-dylib-windows-only.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/raw-dylib-windows-only.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/raw-dylib-windows-only.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/raw-dylib-windows-only.stderr
index b635a09af..b635a09af 100644
--- a/tests/ui/rfc-2627-raw-dylib/raw-dylib-windows-only.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/raw-dylib-windows-only.stderr
diff --git a/tests/ui/rfc-2627-raw-dylib/unsupported-abi.rs b/tests/ui/rfcs/rfc-2627-raw-dylib/unsupported-abi.rs
index 2f5a23e47..2f5a23e47 100644
--- a/tests/ui/rfc-2627-raw-dylib/unsupported-abi.rs
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/unsupported-abi.rs
diff --git a/tests/ui/rfc-2627-raw-dylib/unsupported-abi.stderr b/tests/ui/rfcs/rfc-2627-raw-dylib/unsupported-abi.stderr
index f8265ae69..f8265ae69 100644
--- a/tests/ui/rfc-2627-raw-dylib/unsupported-abi.stderr
+++ b/tests/ui/rfcs/rfc-2627-raw-dylib/unsupported-abi.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/assoc-type-const-bound-usage.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage.rs
index 780a510c5..780a510c5 100644
--- a/tests/ui/rfc-2632-const-trait-impl/assoc-type-const-bound-usage.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type-const-bound-usage.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/assoc-type.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.rs
index 96790a873..96790a873 100644
--- a/tests/ui/rfc-2632-const-trait-impl/assoc-type.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/assoc-type.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.stderr
index 0cffae1da..0cffae1da 100644
--- a/tests/ui/rfc-2632-const-trait-impl/assoc-type.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/assoc-type.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/attr-misuse.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/attr-misuse.rs
index 01ac74fef..01ac74fef 100644
--- a/tests/ui/rfc-2632-const-trait-impl/attr-misuse.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/attr-misuse.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/attr-misuse.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/attr-misuse.stderr
index b18f33218..998958ced 100644
--- a/tests/ui/rfc-2632-const-trait-impl/attr-misuse.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/attr-misuse.stderr
@@ -3,12 +3,16 @@ error: attribute should be applied to a trait
|
LL | #[const_trait]
| ^^^^^^^^^^^^^^
+LL | fn main() {}
+ | ------------ not a trait
error: attribute should be applied to a trait
--> $DIR/attr-misuse.rs:5:5
|
LL | #[const_trait]
| ^^^^^^^^^^^^^^
+LL | fn foo(self);
+ | ------------- not a trait
error: aborting due to 2 previous errors
diff --git a/tests/ui/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs
index e73082c11..e73082c11 100644
--- a/tests/ui/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/cross-crate.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/auxiliary/staged-api.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/staged-api.rs
index 589e3f024..589e3f024 100644
--- a/tests/ui/rfc-2632-const-trait-impl/auxiliary/staged-api.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/auxiliary/staged-api.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs
index dd9933974..dd9933974 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr
index 7350909ba..7350909ba 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-fail.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-pass.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-pass.rs
index ae0c2e6bc..ae0c2e6bc 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-pass.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-pass.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-pass.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-pass.stderr
index ff53eea11..ff53eea11 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-const-trait-method-pass.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-const-trait-method-pass.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-in-impl.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.rs
index 5120e6bfb..5120e6bfb 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-in-impl.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-in-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.stderr
index 02d53cc78..02d53cc78 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-in-impl.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-in-impl.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-chain.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.rs
index 3febb328a..3febb328a 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-chain.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-chain.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.stderr
index 529a472e0..529a472e0 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-chain.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-chain.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs
index e618160d3..e618160d3 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr
index bdc6ccc8a..bdc6ccc8a 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-dup-bound.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-fail.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.rs
index fe1abbf42..fe1abbf42 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-fail.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-fail.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.stderr
index 3963f64ad..3963f64ad 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-fail.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-fail.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst-bound.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst-bound.rs
index e197c8b73..e197c8b73 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst-bound.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst-bound.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs
index 414a8c87d..414a8c87d 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr
index a28d6ce05..a28d6ce05 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-pass.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.rs
index 09f35a277..09f35a277 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-pass.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-pass.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.stderr
index 7fbe89dba..7fbe89dba 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call-generic-method-pass.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call-generic-method-pass.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/call.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/call.rs
index 5f48c2353..5f48c2353 100644
--- a/tests/ui/rfc-2632-const-trait-impl/call.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/call.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-and-non-const-impl.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.rs
index 9ba19e800..9ba19e800 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-and-non-const-impl.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr
index 4f858d61e..4f858d61e 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-and-non-const-impl.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs
index 52984fb6b..52984fb6b 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr
index c8783de4c..c8783de4c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-closure-parse-not-item.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-parse-not-item.rs
index 2c99d8bf1..2c99d8bf1 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-closure-parse-not-item.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-parse-not-item.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method-fail.rs
index b4cc7a9e1..b4cc7a9e1 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method-fail.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr
index 112416a35..112416a35 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method-fail.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method.rs
index 3e6d19088..3e6d19088 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-closure-trait-method.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closure-trait-method.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-closures.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closures.rs
index 7c55b51c8..7c55b51c8 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-closures.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-closures.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-default-method-bodies.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.rs
index 140a06a73..140a06a73 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-default-method-bodies.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-default-method-bodies.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.stderr
index f9d0d1f78..f9d0d1f78 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-default-method-bodies.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-default-method-bodies.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-bound.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-bound.rs
index 948f0efbc..948f0efbc 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-bound.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-bound.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr
index 13350a6d1..13350a6d1 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.precise.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.rs
index 3de9d37d4..3de9d37d4 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stderr
index 375f5d2c5..375f5d2c5 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr
index 13350a6d1..13350a6d1 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail-2.stock.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr
index e745cbd24..e745cbd24 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.precise.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.rs
index 1c37648ff..1c37648ff 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr
index e745cbd24..e745cbd24 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop-fail.stock.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-drop.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.rs
index b0fc3adf9..b0fc3adf9 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-drop.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-drop.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-impl-norecover.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-norecover.rs
index bed4e9fd1..bed4e9fd1 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-impl-norecover.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-norecover.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-impl-norecover.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-norecover.stderr
index 603f6b7d2..603f6b7d2 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-impl-norecover.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-norecover.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-impl-recovery.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-recovery.rs
index 837124db0..837124db0 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-impl-recovery.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-recovery.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-impl-recovery.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-recovery.stderr
index 7217fc855..7217fc855 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-impl-recovery.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-recovery.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-impl-requires-const-trait.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.rs
index 2b4963991..2b4963991 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-impl-requires-const-trait.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr
index 478adcf3e..478adcf3e 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-requires-const-trait.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-impl-trait.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.rs
index f396deff4..f396deff4 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-impl-trait.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const-impl-trait.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.stderr
index f9078e227..f9078e227 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const-impl-trait.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const-impl-trait.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-gate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-gate.rs
index dba3ad7f8..dba3ad7f8 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-gate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-gate.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-gate.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-gate.stderr
index 6a81f96d8..6a81f96d8 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-gate.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-gate.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs
index b575ea8da..b575ea8da 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr
index 1c69ad431..1c69ad431 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-non-const-type.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-use.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.rs
index 69098542b..69098542b 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-use.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr
index 88054096e..88054096e 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-use.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs
index 2a5d0176b..2a5d0176b 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr
index fa7832658..fa7832658 100644
--- a/tests/ui/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/const_derives/derive-const-with-params.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs
index bde8bf20f..bde8bf20f 100644
--- a/tests/ui/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate-default-method-body-is-const.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr
index 633b7cc25..633b7cc25 100644
--- a/tests/ui/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.gatednc.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/cross-crate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.rs
index 6df47022c..6df47022c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/cross-crate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/cross-crate.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stock.stderr
index 22f13a741..22f13a741 100644
--- a/tests/ui/rfc-2632-const-trait-impl/cross-crate.stock.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stock.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr
index 9e97d3f11..9e97d3f11 100644
--- a/tests/ui/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/cross-crate.stocknc.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.rs
index 96acdc300..96acdc300 100644
--- a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr
index 26644f72c..26644f72c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-body-checking.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs
index f70ecbc37..f70ecbc37 100644
--- a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr
index 21ecddaff..21ecddaff 100644
--- a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-same-trait-ck.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-with-staged-api.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-with-staged-api.rs
index 1b45cd9aa..1b45cd9aa 100644
--- a/tests/ui/rfc-2632-const-trait-impl/default-method-body-is-const-with-staged-api.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/default-method-body-is-const-with-staged-api.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/do-not-const-check-override.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.rs
index 730e268c0..730e268c0 100644
--- a/tests/ui/rfc-2632-const-trait-impl/do-not-const-check-override.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check-override.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/do-not-const-check.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check.rs
index 3c39c53de..3c39c53de 100644
--- a/tests/ui/rfc-2632-const-trait-impl/do-not-const-check.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/do-not-const-check.rs
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs
new file mode 100644
index 000000000..49457354c
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/effects/helloworld.rs
@@ -0,0 +1,29 @@
+// check-pass
+
+// gate-test-effects
+// ^ effects doesn't have a gate so we will trick tidy into thinking this is a gate test
+
+#![feature(const_trait_impl, effects, rustc_attrs)]
+
+// ensure we are passing in the correct host effect in always const contexts.
+
+pub const fn hmm</* T, */ #[rustc_host] const host: bool = true>() -> usize {
+ if host {
+ 1
+ } else {
+ 0
+ }
+}
+
+const _: () = {
+ let x = hmm();
+ assert!(0 == x);
+};
+
+/* FIXME(effects)
+pub const fn uwu(x: [u8; hmm::<()>()]) {
+ let [] = x;
+}
+*/
+
+fn main() {}
diff --git a/tests/ui/rfc-2632-const-trait-impl/feature-gate.gated.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.gated.stderr
index 4c630d33c..4c630d33c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/feature-gate.gated.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.gated.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/feature-gate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.rs
index 0b409fbaa..0b409fbaa 100644
--- a/tests/ui/rfc-2632-const-trait-impl/feature-gate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/feature-gate.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.stock.stderr
index 0e938c1c5..0e938c1c5 100644
--- a/tests/ui/rfc-2632-const-trait-impl/feature-gate.stock.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/feature-gate.stock.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs
index 60790e297..60790e297 100644
--- a/tests/ui/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/function-pointer-does-not-require-const.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/gate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/gate.rs
index d1c93ab9f..d1c93ab9f 100644
--- a/tests/ui/rfc-2632-const-trait-impl/gate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/gate.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/gate.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/gate.stderr
index 11cc2cd56..11cc2cd56 100644
--- a/tests/ui/rfc-2632-const-trait-impl/gate.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/gate.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/generic-bound.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/generic-bound.rs
index d665c4479..d665c4479 100644
--- a/tests/ui/rfc-2632-const-trait-impl/generic-bound.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/generic-bound.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/generic-bound.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/generic-bound.stderr
index 1b21d7c0e..1b21d7c0e 100644
--- a/tests/ui/rfc-2632-const-trait-impl/generic-bound.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/generic-bound.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/hir-const-check.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.rs
index 337c73340..337c73340 100644
--- a/tests/ui/rfc-2632-const-trait-impl/hir-const-check.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/hir-const-check.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.stderr
index 6d2be1daa..6d2be1daa 100644
--- a/tests/ui/rfc-2632-const-trait-impl/hir-const-check.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/hir-const-check.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/impl-tilde-const-trait.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-tilde-const-trait.rs
index 05b26465c..05b26465c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/impl-tilde-const-trait.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-tilde-const-trait.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/impl-tilde-const-trait.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-tilde-const-trait.stderr
index 0a91719e1..0a91719e1 100644
--- a/tests/ui/rfc-2632-const-trait-impl/impl-tilde-const-trait.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-tilde-const-trait.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-fail.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-fail.rs
index 6df9696f2..6df9696f2 100644
--- a/tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-fail.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-fail.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-fail.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-fail.stderr
index 6c6ca9f5d..6c6ca9f5d 100644
--- a/tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-fail.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-fail.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-pass.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-pass.rs
index ae81421e9..ae81421e9 100644
--- a/tests/ui/rfc-2632-const-trait-impl/impl-with-default-fn-pass.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/impl-with-default-fn-pass.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/inherent-impl-const-bounds.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl-const-bounds.rs
index f8ac793e4..f8ac793e4 100644
--- a/tests/ui/rfc-2632-const-trait-impl/inherent-impl-const-bounds.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl-const-bounds.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/inherent-impl.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl.rs
index afd0d137b..afd0d137b 100644
--- a/tests/ui/rfc-2632-const-trait-impl/inherent-impl.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/inherent-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl.stderr
index 8c5562703..8c5562703 100644
--- a/tests/ui/rfc-2632-const-trait-impl/inherent-impl.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/inherent-impl.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-100222.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-100222.rs
index 9f3f38ad4..9f3f38ad4 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-100222.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-100222.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-102156.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102156.rs
index fe4e91081..fe4e91081 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-102156.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102156.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-102156.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102156.stderr
index 8bf00eaff..8bf00eaff 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-102156.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102156.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-102985.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102985.rs
index 07d3f51ed..07d3f51ed 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-102985.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102985.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-102985.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102985.stderr
index b98ccbe5d..b98ccbe5d 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-102985.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-102985.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-103677.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-103677.rs
index d81724a36..d81724a36 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-103677.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-103677.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-79450.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.rs
index b604c65d7..b604c65d7 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-79450.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-79450.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.stderr
index 082c0333f..082c0333f 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-79450.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-79450.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-88155.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-88155.rs
index b132c395a..b132c395a 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-88155.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-88155.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-88155.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-88155.stderr
index 955923505..955923505 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-88155.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-88155.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-90052.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-90052.rs
index 21ddf4ab4..21ddf4ab4 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-90052.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-90052.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-90052.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-90052.stderr
index b2a936537..b2a936537 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-90052.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-90052.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-92111.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92111.rs
index 96a3e386e..96a3e386e 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-92111.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92111.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/issue-92230-wf-super-trait-env.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92230-wf-super-trait-env.rs
index 4d3469653..4d3469653 100644
--- a/tests/ui/rfc-2632-const-trait-impl/issue-92230-wf-super-trait-env.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/issue-92230-wf-super-trait-env.rs
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.gated.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.gated.stderr
new file mode 100644
index 000000000..bd0dd126c
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.gated.stderr
@@ -0,0 +1,26 @@
+error[E0277]: can't compare `str` with `str` in const contexts
+ --> $DIR/match-non-const-eq.rs:6:9
+ |
+LL | "a" => (),
+ | ^^^ no implementation for `str == str`
+ |
+ = help: the trait `~const PartialEq` is not implemented for `str`
+note: the trait `PartialEq` is implemented for `str`, but that implementation is not `const`
+ --> $DIR/match-non-const-eq.rs:6:9
+ |
+LL | "a" => (),
+ | ^^^
+
+error[E0015]: cannot match on `str` in constant functions
+ --> $DIR/match-non-const-eq.rs:6:9
+ |
+LL | "a" => (),
+ | ^^^
+ |
+ = note: `str` cannot be compared in compile-time, and therefore cannot be used in `match`es
+ = note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0015, E0277.
+For more information about an error, try `rustc --explain E0015`.
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.rs
new file mode 100644
index 000000000..0d04101a3
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.rs
@@ -0,0 +1,12 @@
+// revisions: stock gated
+#![cfg_attr(gated, feature(const_trait_impl))]
+
+const fn foo(input: &'static str) {
+ match input {
+ "a" => (), //[gated]~ ERROR can't compare `str` with `str` in const contexts
+ //~^ ERROR cannot match on `str` in constant functions
+ _ => (),
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.stock.stderr
new file mode 100644
index 000000000..dcb9b49ea
--- /dev/null
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/match-non-const-eq.stock.stderr
@@ -0,0 +1,13 @@
+error[E0015]: cannot match on `str` in constant functions
+ --> $DIR/match-non-const-eq.rs:6:9
+ |
+LL | "a" => (),
+ | ^^^
+ |
+ = note: `str` cannot be compared in compile-time, and therefore cannot be used in `match`es
+ = note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
+ = help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0015`.
diff --git a/tests/ui/rfc-2632-const-trait-impl/nested-closure.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/nested-closure.rs
index 0b423b340..0b423b340 100644
--- a/tests/ui/rfc-2632-const-trait-impl/nested-closure.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/nested-closure.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.rs
index cd8bb5963..cd8bb5963 100644
--- a/tests/ui/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.stderr
index 979d7febb..979d7febb 100644
--- a/tests/ui/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-const-closure-non-const-outer.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.rs
index dff8a2444..dff8a2444 100644
--- a/tests/ui/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.stderr
index cfdda4713..cfdda4713 100644
--- a/tests/ui/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/non-const-op-in-closure-in-const.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs
index f31123f16..f31123f16 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr
index 057cf4aea..057cf4aea 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-bound-non-const-specialized-bound.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs
index 9ddea427c..9ddea427c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-const-specialized.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs
index a3bb9b3f9..a3bb9b3f9 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr
index 247668047..247668047 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/const-default-impl-non-const-specialized-impl.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/default-keyword.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/default-keyword.rs
index 2aac0a2b4..2aac0a2b4 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/default-keyword.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/default-keyword.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs
index 92d8be6bb..92d8be6bb 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/issue-95186-specialize-on-tilde-const.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs
index 51bfaf73b..51bfaf73b 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/issue-95187-same-trait-bound-different-constness.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs
index 35aa52fbd..35aa52fbd 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specialization/non-const-default-const-specialized.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/specializing-constness-2.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.rs
index 633543700..633543700 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specializing-constness-2.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/specializing-constness-2.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.stderr
index 8923416f4..8923416f4 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specializing-constness-2.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness-2.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/specializing-constness.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.rs
index 5c2a3f801..5c2a3f801 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specializing-constness.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/specializing-constness.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.stderr
index 1ffdc50e5..1ffdc50e5 100644
--- a/tests/ui/rfc-2632-const-trait-impl/specializing-constness.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/specializing-constness.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/staged-api-user-crate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api-user-crate.rs
index fc0d82727..fc0d82727 100644
--- a/tests/ui/rfc-2632-const-trait-impl/staged-api-user-crate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api-user-crate.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/staged-api-user-crate.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api-user-crate.stderr
index d7aa0d95c..d7aa0d95c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/staged-api-user-crate.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api-user-crate.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/staged-api.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.rs
index 1d79f5adf..1d79f5adf 100644
--- a/tests/ui/rfc-2632-const-trait-impl/staged-api.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/staged-api.stable.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.stable.stderr
index a1aca762e..a1aca762e 100644
--- a/tests/ui/rfc-2632-const-trait-impl/staged-api.stable.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.stable.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/staged-api.unstable.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.unstable.stderr
index c38d1a81a..c38d1a81a 100644
--- a/tests/ui/rfc-2632-const-trait-impl/staged-api.unstable.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/staged-api.unstable.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/static-const-trait-bound.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/static-const-trait-bound.rs
index 4520a3696..4520a3696 100644
--- a/tests/ui/rfc-2632-const-trait-impl/static-const-trait-bound.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/static-const-trait-bound.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/std-impl-gate.gated.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.gated.stderr
index 78aab9469..78aab9469 100644
--- a/tests/ui/rfc-2632-const-trait-impl/std-impl-gate.gated.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.gated.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/std-impl-gate.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.rs
index e9e5e0235..e9e5e0235 100644
--- a/tests/ui/rfc-2632-const-trait-impl/std-impl-gate.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/std-impl-gate.stock.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.stock.stderr
index 6a3396401..6a3396401 100644
--- a/tests/ui/rfc-2632-const-trait-impl/std-impl-gate.stock.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/std-impl-gate.stock.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr
index 97f346e8c..97f346e8c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.nn.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr
index 97f346e8c..97f346e8c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.ny.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.rs
index ecb06271c..ecb06271c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr
index c9fa19554..c9fa19554 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yn.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr
index c9fa19554..c9fa19554 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-2.yy.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr
index fdc6b8058..fdc6b8058 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.nn.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr
index 7375b8c81..7375b8c81 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.ny.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.rs
index 8cf64944a..8cf64944a 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr
index 7a152914b..7a152914b 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail-3.yn.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail.rs
index 3e2b81368..3e2b81368 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail.stderr
index bf12ef1ca..bf12ef1ca 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits-fail.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits-fail.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/super-traits.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.rs
index df96f6fb4..df96f6fb4 100644
--- a/tests/ui/rfc-2632-const-trait-impl/super-traits.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/super-traits.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/syntax.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/syntax.rs
index 7ac2458e3..7ac2458e3 100644
--- a/tests/ui/rfc-2632-const-trait-impl/syntax.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/syntax.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/tilde-const-and-const-params.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-and-const-params.rs
index 78a64b901..78a64b901 100644
--- a/tests/ui/rfc-2632-const-trait-impl/tilde-const-and-const-params.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-and-const-params.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/tilde-const-and-const-params.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-and-const-params.stderr
index aae72f36e..aae72f36e 100644
--- a/tests/ui/rfc-2632-const-trait-impl/tilde-const-and-const-params.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-and-const-params.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/tilde-const-invalid-places.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-invalid-places.rs
index 95f7aaba0..95f7aaba0 100644
--- a/tests/ui/rfc-2632-const-trait-impl/tilde-const-invalid-places.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-invalid-places.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/tilde-const-invalid-places.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-invalid-places.stderr
index d20f146df..d20f146df 100644
--- a/tests/ui/rfc-2632-const-trait-impl/tilde-const-invalid-places.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-invalid-places.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/tilde-const-syntax.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-syntax.rs
index 9b3c2cf2a..9b3c2cf2a 100644
--- a/tests/ui/rfc-2632-const-trait-impl/tilde-const-syntax.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-const-syntax.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/tilde-twice.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-twice.rs
index 06e4ede8b..06e4ede8b 100644
--- a/tests/ui/rfc-2632-const-trait-impl/tilde-twice.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-twice.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/tilde-twice.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-twice.stderr
index 928d23e8a..928d23e8a 100644
--- a/tests/ui/rfc-2632-const-trait-impl/tilde-twice.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde-twice.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/tilde_const_on_impl_bound.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde_const_on_impl_bound.rs
index 285cef571..285cef571 100644
--- a/tests/ui/rfc-2632-const-trait-impl/tilde_const_on_impl_bound.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/tilde_const_on_impl_bound.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/trait-default-body-stability.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.rs
index 8d56295e7..8d56295e7 100644
--- a/tests/ui/rfc-2632-const-trait-impl/trait-default-body-stability.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/trait-default-body-stability.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.stderr
index 35dc1ca12..35dc1ca12 100644
--- a/tests/ui/rfc-2632-const-trait-impl/trait-default-body-stability.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-default-body-stability.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/trait-method-ptr-in-consts-ice.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-method-ptr-in-consts-ice.rs
index 7d7cb967c..7d7cb967c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/trait-method-ptr-in-consts-ice.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-method-ptr-in-consts-ice.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause-const.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.rs
index bfe98b98c..bfe98b98c 100644
--- a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause-const.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause-const.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.stderr
index f2846b6a6..f2846b6a6 100644
--- a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause-const.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-const.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause-run.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.rs
index 4b8b00406..4b8b00406 100644
--- a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause-run.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-run.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs
index 3b028ac48..3b028ac48 100644
--- a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause-self-referential.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause.rs
index 85ca5fc90..85ca5fc90 100644
--- a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause.stderr
index 11f0c4016..11f0c4016 100644
--- a/tests/ui/rfc-2632-const-trait-impl/trait-where-clause.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/trait-where-clause.stderr
diff --git a/tests/ui/rfc-2632-const-trait-impl/without-tilde.rs b/tests/ui/rfcs/rfc-2632-const-trait-impl/without-tilde.rs
index d63381b5f..d63381b5f 100644
--- a/tests/ui/rfc-2632-const-trait-impl/without-tilde.rs
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/without-tilde.rs
diff --git a/tests/ui/rfc-2632-const-trait-impl/without-tilde.stderr b/tests/ui/rfcs/rfc-2632-const-trait-impl/without-tilde.stderr
index 31300354a..31300354a 100644
--- a/tests/ui/rfc-2632-const-trait-impl/without-tilde.stderr
+++ b/tests/ui/rfcs/rfc-2632-const-trait-impl/without-tilde.stderr
diff --git a/tests/ui/rust-2018/edition-lint-infer-outlives.fixed b/tests/ui/rust-2018/edition-lint-infer-outlives.fixed
index 868bdf2e0..5058d61b5 100644
--- a/tests/ui/rust-2018/edition-lint-infer-outlives.fixed
+++ b/tests/ui/rust-2018/edition-lint-infer-outlives.fixed
@@ -801,4 +801,10 @@ where
yoo: &'a U
}
+// https://github.com/rust-lang/rust/issues/105150
+struct InferredWhereBoundWithInlineBound<'a, T: ?Sized>
+{
+ data: &'a T,
+}
+
fn main() {}
diff --git a/tests/ui/rust-2018/edition-lint-infer-outlives.rs b/tests/ui/rust-2018/edition-lint-infer-outlives.rs
index 75783764a..3f63cb8e9 100644
--- a/tests/ui/rust-2018/edition-lint-infer-outlives.rs
+++ b/tests/ui/rust-2018/edition-lint-infer-outlives.rs
@@ -801,4 +801,12 @@ where
yoo: &'a U
}
+// https://github.com/rust-lang/rust/issues/105150
+struct InferredWhereBoundWithInlineBound<'a, T: ?Sized>
+//~^ ERROR outlives requirements can be inferred
+ where T: 'a,
+{
+ data: &'a T,
+}
+
fn main() {}
diff --git a/tests/ui/rust-2018/edition-lint-infer-outlives.stderr b/tests/ui/rust-2018/edition-lint-infer-outlives.stderr
index e655fb484..dbf301fd8 100644
--- a/tests/ui/rust-2018/edition-lint-infer-outlives.stderr
+++ b/tests/ui/rust-2018/edition-lint-infer-outlives.stderr
@@ -11,6 +11,15 @@ LL | #![deny(explicit_outlives_requirements)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: outlives requirements can be inferred
+ --> $DIR/edition-lint-infer-outlives.rs:805:56
+ |
+LL | struct InferredWhereBoundWithInlineBound<'a, T: ?Sized>
+ | ________________________________________________________^
+LL | |
+LL | | where T: 'a,
+ | |________________^ help: remove this bound
+
+error: outlives requirements can be inferred
--> $DIR/edition-lint-infer-outlives.rs:26:31
|
LL | struct TeeOutlivesAy<'a, T: 'a> {
@@ -922,5 +931,5 @@ error: outlives requirements can be inferred
LL | union BeeWhereOutlivesAyTeeWhereDebug<'a, 'b, T> where 'b: 'a, T: Debug {
| ^^^^^^^^ help: remove this bound
-error: aborting due to 153 previous errors
+error: aborting due to 154 previous errors
diff --git a/tests/ui/rust-2018/uniform-paths/ambiguity-macros-nested.stderr b/tests/ui/rust-2018/uniform-paths/ambiguity-macros-nested.stderr
index 7e008d465..a5c79366b 100644
--- a/tests/ui/rust-2018/uniform-paths/ambiguity-macros-nested.stderr
+++ b/tests/ui/rust-2018/uniform-paths/ambiguity-macros-nested.stderr
@@ -4,7 +4,7 @@ error[E0659]: `std` is ambiguous
LL | pub use std::io;
| ^^^ ambiguous name
|
- = note: ambiguous because of multiple potential import sources
+ = note: ambiguous because of a conflict between a macro-expanded name and a less macro-expanded name from outer scope during import or macro resolution
= note: `std` could refer to a built-in crate
= help: use `::std` to refer to this crate unambiguously
note: `std` could also refer to the module defined here
diff --git a/tests/ui/rust-2018/uniform-paths/ambiguity-macros.stderr b/tests/ui/rust-2018/uniform-paths/ambiguity-macros.stderr
index 771d2c10c..8045f3a45 100644
--- a/tests/ui/rust-2018/uniform-paths/ambiguity-macros.stderr
+++ b/tests/ui/rust-2018/uniform-paths/ambiguity-macros.stderr
@@ -4,7 +4,7 @@ error[E0659]: `std` is ambiguous
LL | use std::io;
| ^^^ ambiguous name
|
- = note: ambiguous because of multiple potential import sources
+ = note: ambiguous because of a conflict between a macro-expanded name and a less macro-expanded name from outer scope during import or macro resolution
= note: `std` could refer to a built-in crate
= help: use `::std` to refer to this crate unambiguously
note: `std` could also refer to the module defined here
diff --git a/tests/ui/rust-2018/uniform-paths/ambiguity-nested.rs b/tests/ui/rust-2018/uniform-paths/ambiguity-nested.rs
index 50c8fc822..0ef580d7a 100644
--- a/tests/ui/rust-2018/uniform-paths/ambiguity-nested.rs
+++ b/tests/ui/rust-2018/uniform-paths/ambiguity-nested.rs
@@ -1,3 +1,4 @@
+// check-pass
// edition:2018
// This test is similar to `ambiguity.rs`, but nested in a module.
@@ -5,8 +6,7 @@
#![allow(non_camel_case_types)]
mod foo {
- pub use std::io;
- //~^ ERROR `std` is ambiguous
+ pub use std::io; // OK
mod std {
pub struct io;
diff --git a/tests/ui/rust-2018/uniform-paths/ambiguity-nested.stderr b/tests/ui/rust-2018/uniform-paths/ambiguity-nested.stderr
deleted file mode 100644
index defb16f79..000000000
--- a/tests/ui/rust-2018/uniform-paths/ambiguity-nested.stderr
+++ /dev/null
@@ -1,21 +0,0 @@
-error[E0659]: `std` is ambiguous
- --> $DIR/ambiguity-nested.rs:8:13
- |
-LL | pub use std::io;
- | ^^^ ambiguous name
- |
- = note: ambiguous because of multiple potential import sources
- = note: `std` could refer to a built-in crate
- = help: use `::std` to refer to this crate unambiguously
-note: `std` could also refer to the module defined here
- --> $DIR/ambiguity-nested.rs:11:5
- |
-LL | / mod std {
-LL | | pub struct io;
-LL | | }
- | |_____^
- = help: use `self::std` 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/tests/ui/rust-2018/uniform-paths/ambiguity.rs b/tests/ui/rust-2018/uniform-paths/ambiguity.rs
index 60f77a1c6..890e8b7b3 100644
--- a/tests/ui/rust-2018/uniform-paths/ambiguity.rs
+++ b/tests/ui/rust-2018/uniform-paths/ambiguity.rs
@@ -1,9 +1,9 @@
+// check-pass
// edition:2018
#![allow(non_camel_case_types)]
-use std::io;
-//~^ ERROR `std` is ambiguous
+use std::io; // OK
mod std {
pub struct io;
diff --git a/tests/ui/rust-2018/uniform-paths/ambiguity.stderr b/tests/ui/rust-2018/uniform-paths/ambiguity.stderr
deleted file mode 100644
index 2d735c7e3..000000000
--- a/tests/ui/rust-2018/uniform-paths/ambiguity.stderr
+++ /dev/null
@@ -1,21 +0,0 @@
-error[E0659]: `std` is ambiguous
- --> $DIR/ambiguity.rs:5:5
- |
-LL | use std::io;
- | ^^^ ambiguous name
- |
- = note: ambiguous because of multiple potential import sources
- = note: `std` could refer to a built-in crate
- = help: use `::std` to refer to this crate unambiguously
-note: `std` could also refer to the module defined here
- --> $DIR/ambiguity.rs:8:1
- |
-LL | / mod std {
-LL | | pub struct io;
-LL | | }
- | |_^
- = help: use `crate::std` 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/tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.rs b/tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.rs
index 3f5897901..4cba09498 100644
--- a/tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.rs
+++ b/tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.rs
@@ -1,3 +1,4 @@
+// check-pass
// edition:2018
mod my {
@@ -13,7 +14,7 @@ mod sub {
fn foo() {
use my::sub;
{
- use sub::bar; //~ ERROR `sub` is ambiguous
+ use sub::bar; // OK
}
}
diff --git a/tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.stderr b/tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.stderr
deleted file mode 100644
index 3d45a8140..000000000
--- a/tests/ui/rust-2018/uniform-paths/block-scoped-shadow-nested.stderr
+++ /dev/null
@@ -1,24 +0,0 @@
-error[E0659]: `sub` is ambiguous
- --> $DIR/block-scoped-shadow-nested.rs:16:13
- |
-LL | use sub::bar;
- | ^^^ ambiguous name
- |
- = note: ambiguous because of multiple potential import sources
-note: `sub` could refer to the module imported here
- --> $DIR/block-scoped-shadow-nested.rs:14:9
- |
-LL | use my::sub;
- | ^^^^^^^
-note: `sub` could also refer to the module defined here
- --> $DIR/block-scoped-shadow-nested.rs:9:1
- |
-LL | / mod sub {
-LL | | pub fn bar() {}
-LL | | }
- | |_^
- = help: use `crate::sub` 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/tests/ui/rust-2018/uniform-paths/block-scoped-shadow.rs b/tests/ui/rust-2018/uniform-paths/block-scoped-shadow.rs
index 828ee4fe4..c902d133e 100644
--- a/tests/ui/rust-2018/uniform-paths/block-scoped-shadow.rs
+++ b/tests/ui/rust-2018/uniform-paths/block-scoped-shadow.rs
@@ -1,3 +1,4 @@
+// check-pass
// edition:2018
#![allow(non_camel_case_types)]
@@ -8,14 +9,11 @@ struct std;
fn main() {
enum Foo { A, B }
- use Foo::*;
- //~^ ERROR `Foo` is ambiguous
+ use Foo::*; // OK
let _ = (A, B);
fn std() {}
enum std {}
- use std as foo;
- //~^ ERROR `std` is ambiguous
- //~| ERROR `std` is ambiguous
+ use std as foo; // OK
}
diff --git a/tests/ui/rust-2018/uniform-paths/block-scoped-shadow.stderr b/tests/ui/rust-2018/uniform-paths/block-scoped-shadow.stderr
deleted file mode 100644
index b068312ce..000000000
--- a/tests/ui/rust-2018/uniform-paths/block-scoped-shadow.stderr
+++ /dev/null
@@ -1,60 +0,0 @@
-error[E0659]: `Foo` is ambiguous
- --> $DIR/block-scoped-shadow.rs:11:9
- |
-LL | use Foo::*;
- | ^^^ ambiguous name
- |
- = note: ambiguous because of multiple potential import sources
-note: `Foo` could refer to the enum defined here
- --> $DIR/block-scoped-shadow.rs:10:5
- |
-LL | enum Foo { A, B }
- | ^^^^^^^^^^^^^^^^^
-note: `Foo` could also refer to the enum defined here
- --> $DIR/block-scoped-shadow.rs:5:1
- |
-LL | enum Foo {}
- | ^^^^^^^^^^^
- = help: use `crate::Foo` to refer to this enum unambiguously
-
-error[E0659]: `std` is ambiguous
- --> $DIR/block-scoped-shadow.rs:18:9
- |
-LL | use std as foo;
- | ^^^ ambiguous name
- |
- = note: ambiguous because of multiple potential import sources
-note: `std` could refer to the enum defined here
- --> $DIR/block-scoped-shadow.rs:17:5
- |
-LL | enum std {}
- | ^^^^^^^^^^^
-note: `std` could also refer to the struct defined here
- --> $DIR/block-scoped-shadow.rs:7:1
- |
-LL | struct std;
- | ^^^^^^^^^^^
- = help: use `crate::std` to refer to this struct unambiguously
-
-error[E0659]: `std` is ambiguous
- --> $DIR/block-scoped-shadow.rs:18:9
- |
-LL | use std as foo;
- | ^^^ ambiguous name
- |
- = note: ambiguous because of multiple potential import sources
-note: `std` could refer to the function defined here
- --> $DIR/block-scoped-shadow.rs:16:5
- |
-LL | fn std() {}
- | ^^^^^^^^^^^
-note: `std` could also refer to the unit struct defined here
- --> $DIR/block-scoped-shadow.rs:7:1
- |
-LL | struct std;
- | ^^^^^^^^^^^
- = help: use `crate::std` to refer to this unit struct unambiguously
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0659`.
diff --git a/tests/ui/rust-2018/uniform-paths/issue-56596.stderr b/tests/ui/rust-2018/uniform-paths/issue-56596.stderr
index 8b8ab26dc..849d6275e 100644
--- a/tests/ui/rust-2018/uniform-paths/issue-56596.stderr
+++ b/tests/ui/rust-2018/uniform-paths/issue-56596.stderr
@@ -4,7 +4,7 @@ error[E0659]: `issue_56596` is ambiguous
LL | use issue_56596;
| ^^^^^^^^^^^ ambiguous name
|
- = note: ambiguous because of multiple potential import sources
+ = note: ambiguous because of a conflict between a name from a glob import and an outer scope during import or macro resolution
= note: `issue_56596` could refer to a crate passed with `--extern`
= help: use `::issue_56596` to refer to this crate unambiguously
note: `issue_56596` could also refer to the module imported here
@@ -12,7 +12,8 @@ note: `issue_56596` could also refer to the module imported here
|
LL | use m::*;
| ^^^^
- = help: use `crate::issue_56596` to refer to this module unambiguously
+ = help: consider adding an explicit import of `issue_56596` to disambiguate
+ = help: or use `crate::issue_56596` to refer to this module unambiguously
error: aborting due to previous error
diff --git a/tests/ui/rust-2018/uniform-paths/macro-rules.rs b/tests/ui/rust-2018/uniform-paths/macro-rules.rs
index 2d9a6a9a9..1084f5e8b 100644
--- a/tests/ui/rust-2018/uniform-paths/macro-rules.rs
+++ b/tests/ui/rust-2018/uniform-paths/macro-rules.rs
@@ -27,8 +27,7 @@ mod m3 {
fn f() {
macro_rules! legacy_macro { () => () }
- // Legacy macro imports create ambiguities with other names in the same namespace.
- use legacy_macro as _; //~ ERROR `legacy_macro` is ambiguous
+ use legacy_macro as _; // OK
}
}
diff --git a/tests/ui/rust-2018/uniform-paths/macro-rules.stderr b/tests/ui/rust-2018/uniform-paths/macro-rules.stderr
index 9f8c928c3..8a978c98a 100644
--- a/tests/ui/rust-2018/uniform-paths/macro-rules.stderr
+++ b/tests/ui/rust-2018/uniform-paths/macro-rules.stderr
@@ -10,26 +10,6 @@ help: consider adding a `#[macro_export]` to the macro in the imported module
LL | macro_rules! legacy_macro { () => () }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-error[E0659]: `legacy_macro` is ambiguous
- --> $DIR/macro-rules.rs:31:13
- |
-LL | use legacy_macro as _;
- | ^^^^^^^^^^^^ ambiguous name
- |
- = note: ambiguous because of multiple potential import sources
-note: `legacy_macro` could refer to the macro defined here
- --> $DIR/macro-rules.rs:28:9
- |
-LL | macro_rules! legacy_macro { () => () }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-note: `legacy_macro` could also refer to the macro defined here
- --> $DIR/macro-rules.rs:25:5
- |
-LL | macro legacy_macro() {}
- | ^^^^^^^^^^^^^^^^^^^^^^^
- = help: use `self::legacy_macro` to refer to this macro unambiguously
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
-Some errors have detailed explanations: E0364, E0659.
-For more information about an error, try `rustc --explain E0364`.
+For more information about this error, try `rustc --explain E0364`.
diff --git a/tests/ui/sanitize/issue-111184-generator-witness.rs b/tests/ui/sanitize/issue-111184-generator-witness.rs
new file mode 100644
index 000000000..8f4118057
--- /dev/null
+++ b/tests/ui/sanitize/issue-111184-generator-witness.rs
@@ -0,0 +1,17 @@
+// Regression test for issue 111184, where ty::GeneratorWitness were not expected to occur in
+// encode_ty and caused the compiler to ICE.
+//
+// needs-sanitizer-cfi
+// compile-flags: -Clto -Ctarget-feature=-crt-static -Zsanitizer=cfi --edition=2021
+// no-prefer-dynamic
+// only-x86_64-unknown-linux-gnu
+// run-pass
+
+use std::future::Future;
+
+async fn foo() {}
+fn bar<T>(_: impl Future<Output = T>) {}
+
+fn main() {
+ bar(foo());
+}
diff --git a/tests/ui/simd/shuffle.rs b/tests/ui/simd/shuffle.rs
index 3592adfdc..461243d48 100644
--- a/tests/ui/simd/shuffle.rs
+++ b/tests/ui/simd/shuffle.rs
@@ -1,14 +1,24 @@
-//run-pass
+// run-pass
+// revisions: opt noopt
+//[noopt] compile-flags: -Copt-level=0
+//[opt] compile-flags: -O
#![feature(repr_simd, platform_intrinsics)]
+#![allow(incomplete_features)]
+#![feature(adt_const_params)]
extern "platform-intrinsic" {
fn simd_shuffle<T, I, U>(a: T, b: T, i: I) -> U;
+ fn simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U;
}
#[derive(Copy, Clone)]
#[repr(simd)]
struct Simd<T, const N: usize>([T; N]);
+pub unsafe fn __shuffle_vector16<const IDX: [u32; 16], T, U>(x: T, y: T) -> U {
+ simd_shuffle16(x, y, IDX)
+}
+
fn main() {
const I1: [u32; 4] = [0, 2, 4, 6];
const I2: [u32; 2] = [1, 5];
@@ -21,4 +31,16 @@ fn main() {
let y: Simd<u8, 2> = simd_shuffle(a, b, I2);
assert_eq!(y.0, [1, 5]);
}
+ // Test that an indirection (via an unnamed constant)
+ // through a const generic parameter also works.
+ // See https://github.com/rust-lang/rust/issues/113500 for details.
+ let a = Simd::<u8, 16>([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]);
+ let b = Simd::<u8, 16>([16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]);
+ unsafe {
+ __shuffle_vector16::<
+ { [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] },
+ Simd<u8, 16>,
+ Simd<u8, 16>,
+ >(a, b);
+ }
}
diff --git a/tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs b/tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs
index a776e5089..a9d678c1e 100644
--- a/tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs
+++ b/tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs
@@ -1,4 +1,4 @@
-// compile-flags -Wrust-2021-incompatible-closure-captures
+#![warn(rust_2021_incompatible_closure_captures)]
fn main() {}
@@ -9,7 +9,7 @@ impl Numberer {
//~^ ERROR `async fn` is not permitted in Rust 2015
interval: Duration,
//~^ ERROR cannot find type `Duration` in this scope
- ) -> Numberer {
+ ) -> Numberer { //~WARN: changes to closure capture in Rust 2021
Numberer {}
}
}
diff --git a/tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.stderr b/tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.stderr
index 60433e1c2..71e9e7602 100644
--- a/tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.stderr
+++ b/tests/ui/span/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.stderr
@@ -18,7 +18,32 @@ help: consider importing this struct
LL + use std::time::Duration;
|
-error: aborting due to 2 previous errors
+warning: changes to closure capture in Rust 2021 will affect drop order
+ --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs:12:19
+ |
+LL | interval: Duration,
+ | -------- in Rust 2018, this causes the closure to capture `interval`, but in Rust 2021, it has no effect
+LL |
+LL | ) -> Numberer {
+ | _________________-_^
+ | | |
+ | | in Rust 2018, `interval` is dropped here along with the closure, but in Rust 2021 `interval` is not part of the closure
+LL | | Numberer {}
+LL | | }
+ | |_____^
+ |
+ = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>
+note: the lint level is defined here
+ --> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-96258.rs:1:9
+ |
+LL | #![warn(rust_2021_incompatible_closure_captures)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+help: add a dummy let to cause `interval` to be fully captured
+ |
+LL | ) -> Numberer { let _ = &interval;
+ | ++++++++++++++++++
+
+error: aborting due to 2 previous errors; 1 warning emitted
Some errors have detailed explanations: E0412, E0670.
For more information about an error, try `rustc --explain E0412`.
diff --git a/tests/ui/span/multiline-span-simple.stderr b/tests/ui/span/multiline-span-simple.stderr
index b44df962a..b6052a209 100644
--- a/tests/ui/span/multiline-span-simple.stderr
+++ b/tests/ui/span/multiline-span-simple.stderr
@@ -6,10 +6,10 @@ LL | foo(1 as u32 +
|
= help: the trait `Add<()>` is not implemented for `u32`
= help: the following other types implement trait `Add<Rhs>`:
+ <u32 as Add>
+ <u32 as Add<&u32>>
<&'a u32 as Add<u32>>
<&u32 as Add<&u32>>
- <u32 as Add<&u32>>
- <u32 as Add>
error: aborting due to previous error
diff --git a/tests/ui/specialization/specialization-default-items-drop-coherence.coherence.stderr b/tests/ui/specialization/specialization-default-items-drop-coherence.coherence.stderr
new file mode 100644
index 000000000..578db0cc6
--- /dev/null
+++ b/tests/ui/specialization/specialization-default-items-drop-coherence.coherence.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `Overlap` for type `u32`
+ --> $DIR/specialization-default-items-drop-coherence.rs:29:1
+ |
+LL | impl Overlap for u32 {
+ | -------------------- first implementation here
+...
+LL | impl Overlap for <u32 as Default>::Id {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `u32`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/specialization/specialization-default-items-drop-coherence.next.stderr b/tests/ui/specialization/specialization-default-items-drop-coherence.next.stderr
new file mode 100644
index 000000000..578db0cc6
--- /dev/null
+++ b/tests/ui/specialization/specialization-default-items-drop-coherence.next.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `Overlap` for type `u32`
+ --> $DIR/specialization-default-items-drop-coherence.rs:29:1
+ |
+LL | impl Overlap for u32 {
+ | -------------------- first implementation here
+...
+LL | impl Overlap for <u32 as Default>::Id {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `u32`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/specialization/specialization-default-items-drop-coherence.rs b/tests/ui/specialization/specialization-default-items-drop-coherence.rs
index 16ad942d5..44c598f19 100644
--- a/tests/ui/specialization/specialization-default-items-drop-coherence.rs
+++ b/tests/ui/specialization/specialization-default-items-drop-coherence.rs
@@ -1,5 +1,8 @@
-// check-pass
-// known-bug: #105782
+// revisions: classic coherence next
+//[next] compile-flags: -Ztrait-solver=next
+//[coherence] compile-flags: -Ztrait-solver=next-coherence
+//[classic] check-pass
+//[classic] known-bug: #105782
// Should fail. Default items completely drop candidates instead of ambiguity,
// which is unsound during coherence, since coherence requires completeness.
@@ -24,6 +27,8 @@ impl Overlap for u32 {
}
impl Overlap for <u32 as Default>::Id {
+ //[coherence]~^ ERROR conflicting implementations of trait `Overlap` for type `u32`
+ //[next]~^^ ERROR conflicting implementations of trait `Overlap` for type `u32`
type Assoc = Box<usize>;
}
diff --git a/tests/ui/stability-attribute/auxiliary/default_body.rs b/tests/ui/stability-attribute/auxiliary/default_body.rs
index 3a177419d..2f315eb1b 100644
--- a/tests/ui/stability-attribute/auxiliary/default_body.rs
+++ b/tests/ui/stability-attribute/auxiliary/default_body.rs
@@ -11,6 +11,10 @@ pub trait JustTrait {
#[rustc_default_body_unstable(feature = "fun_default_body", issue = "none")]
#[stable(feature = "stable_feature", since = "1.0.0")]
fn fun() {}
+
+ #[rustc_default_body_unstable(feature = "fun_default_body", issue = "none", reason = "reason")]
+ #[stable(feature = "stable_feature", since = "1.0.0")]
+ fn fun2() {}
}
#[rustc_must_implement_one_of(eq, neq)]
diff --git a/tests/ui/stability-attribute/default-body-stability-err.rs b/tests/ui/stability-attribute/default-body-stability-err.rs
index ecb281bcc..d1a359768 100644
--- a/tests/ui/stability-attribute/default-body-stability-err.rs
+++ b/tests/ui/stability-attribute/default-body-stability-err.rs
@@ -10,6 +10,7 @@ struct Type;
impl JustTrait for Type {}
//~^ ERROR not all trait items implemented, missing: `CONSTANT` [E0046]
//~| ERROR not all trait items implemented, missing: `fun` [E0046]
+//~| ERROR not all trait items implemented, missing: `fun2` [E0046]
impl Equal for Type {
//~^ ERROR not all trait items implemented, missing: `eq` [E0046]
diff --git a/tests/ui/stability-attribute/default-body-stability-err.stderr b/tests/ui/stability-attribute/default-body-stability-err.stderr
index ef666f30f..12ec9ea3a 100644
--- a/tests/ui/stability-attribute/default-body-stability-err.stderr
+++ b/tests/ui/stability-attribute/default-body-stability-err.stderr
@@ -18,8 +18,18 @@ LL | impl JustTrait for Type {}
= note: use of unstable library feature 'fun_default_body'
= help: add `#![feature(fun_default_body)]` to the crate attributes to enable
+error[E0046]: not all trait items implemented, missing: `fun2`
+ --> $DIR/default-body-stability-err.rs:10:1
+ |
+LL | impl JustTrait for Type {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: default implementation of `fun2` is unstable
+ = note: use of unstable library feature 'fun_default_body': reason
+ = help: add `#![feature(fun_default_body)]` to the crate attributes to enable
+
error[E0046]: not all trait items implemented, missing: `eq`
- --> $DIR/default-body-stability-err.rs:14:1
+ --> $DIR/default-body-stability-err.rs:15:1
|
LL | / impl Equal for Type {
LL | |
@@ -33,6 +43,6 @@ LL | | }
= note: use of unstable library feature 'eq_default_body'
= help: add `#![feature(eq_default_body)]` to the crate attributes to enable
-error: aborting due to 3 previous errors
+error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0046`.
diff --git a/tests/ui/stability-attribute/default-body-stability-ok-impls.rs b/tests/ui/stability-attribute/default-body-stability-ok-impls.rs
index e1f5c0170..b29d45256 100644
--- a/tests/ui/stability-attribute/default-body-stability-ok-impls.rs
+++ b/tests/ui/stability-attribute/default-body-stability-ok-impls.rs
@@ -12,6 +12,8 @@ impl JustTrait for Type {
const CONSTANT: usize = 1;
fn fun() {}
+
+ fn fun2() {}
}
impl Equal for Type {
diff --git a/tests/ui/stability-attribute/stability-in-private-module.stderr b/tests/ui/stability-attribute/stability-in-private-module.stderr
index 2f02a2496..cc8758714 100644
--- a/tests/ui/stability-attribute/stability-in-private-module.stderr
+++ b/tests/ui/stability-attribute/stability-in-private-module.stderr
@@ -2,7 +2,9 @@ error[E0603]: module `thread_info` is private
--> $DIR/stability-in-private-module.rs:2:26
|
LL | let _ = std::thread::thread_info::current_thread();
- | ^^^^^^^^^^^ private module
+ | ^^^^^^^^^^^ -------------- function `current_thread` is not publicly re-exported
+ | |
+ | private module
|
note: the module `thread_info` is defined here
--> $SRC_DIR/std/src/thread/mod.rs:LL:COL
diff --git a/tests/ui/statics/uninhabited-static.stderr b/tests/ui/statics/uninhabited-static.stderr
index 35fdcae6a..926093047 100644
--- a/tests/ui/statics/uninhabited-static.stderr
+++ b/tests/ui/statics/uninhabited-static.stderr
@@ -47,7 +47,7 @@ error[E0080]: could not evaluate static initializer
--> $DIR/uninhabited-static.rs:12:31
|
LL | static VOID2: Void = unsafe { std::mem::transmute(()) };
- | ^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value: encountered a value of uninhabited type Void
+ | ^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value: encountered a value of uninhabited type `Void`
warning: the type `Void` does not permit zero-initialization
--> $DIR/uninhabited-static.rs:12:31
@@ -66,7 +66,7 @@ error[E0080]: could not evaluate static initializer
--> $DIR/uninhabited-static.rs:16:32
|
LL | static NEVER2: Void = unsafe { std::mem::transmute(()) };
- | ^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value: encountered a value of uninhabited type Void
+ | ^^^^^^^^^^^^^^^^^^^^^^^ constructing invalid value: encountered a value of uninhabited type `Void`
warning: the type `Void` does not permit zero-initialization
--> $DIR/uninhabited-static.rs:16:32
diff --git a/tests/ui/std/slice-from-array-issue-113238.rs b/tests/ui/std/slice-from-array-issue-113238.rs
new file mode 100644
index 000000000..e9e1bfb8d
--- /dev/null
+++ b/tests/ui/std/slice-from-array-issue-113238.rs
@@ -0,0 +1,9 @@
+// check-pass
+
+// This intends to use the unsizing coercion from array to slice, but it only
+// works if we resolve `<&[u8]>::from` as the reflexive `From<T> for T`. In
+// #113238, we found that gimli had added its own `From<EndianSlice> for &[u8]`
+// that affected all `std/backtrace` users.
+fn main() {
+ let _ = <&[u8]>::from(&[]);
+}
diff --git a/tests/ui/stdlib-unit-tests/not-sync.rs b/tests/ui/stdlib-unit-tests/not-sync.rs
index f4648994f..e9395ae9e 100644
--- a/tests/ui/stdlib-unit-tests/not-sync.rs
+++ b/tests/ui/stdlib-unit-tests/not-sync.rs
@@ -17,6 +17,4 @@ fn main() {
test::<Receiver<i32>>();
//~^ ERROR `std::sync::mpsc::Receiver<i32>` cannot be shared between threads safely [E0277]
- test::<Sender<i32>>();
- //~^ ERROR `Sender<i32>` cannot be shared between threads safely [E0277]
}
diff --git a/tests/ui/stdlib-unit-tests/not-sync.stderr b/tests/ui/stdlib-unit-tests/not-sync.stderr
index 4e34e10e3..b9a266e4e 100644
--- a/tests/ui/stdlib-unit-tests/not-sync.stderr
+++ b/tests/ui/stdlib-unit-tests/not-sync.stderr
@@ -65,19 +65,6 @@ note: required by a bound in `test`
LL | fn test<T: Sync>() {}
| ^^^^ required by this bound in `test`
-error[E0277]: `Sender<i32>` cannot be shared between threads safely
- --> $DIR/not-sync.rs:20:12
- |
-LL | test::<Sender<i32>>();
- | ^^^^^^^^^^^ `Sender<i32>` cannot be shared between threads safely
- |
- = help: the trait `Sync` is not implemented for `Sender<i32>`
-note: required by a bound in `test`
- --> $DIR/not-sync.rs:5:12
- |
-LL | fn test<T: Sync>() {}
- | ^^^^ required by this bound in `test`
-
-error: aborting due to 6 previous errors
+error: aborting due to 5 previous errors
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/issues/issue-3008-1.rs b/tests/ui/structs-enums/issue-3008-1.rs
index 1124969e6..1124969e6 100644
--- a/tests/ui/issues/issue-3008-1.rs
+++ b/tests/ui/structs-enums/issue-3008-1.rs
diff --git a/tests/ui/issues/issue-3008-1.stderr b/tests/ui/structs-enums/issue-3008-1.stderr
index be25b9091..be25b9091 100644
--- a/tests/ui/issues/issue-3008-1.stderr
+++ b/tests/ui/structs-enums/issue-3008-1.stderr
diff --git a/tests/ui/issues/issue-3008-2.rs b/tests/ui/structs-enums/issue-3008-2.rs
index 5846c69da..5846c69da 100644
--- a/tests/ui/issues/issue-3008-2.rs
+++ b/tests/ui/structs-enums/issue-3008-2.rs
diff --git a/tests/ui/issues/issue-3008-2.stderr b/tests/ui/structs-enums/issue-3008-2.stderr
index 858a8fd6a..858a8fd6a 100644
--- a/tests/ui/issues/issue-3008-2.stderr
+++ b/tests/ui/structs-enums/issue-3008-2.stderr
diff --git a/tests/ui/issues/issue-3008-3.rs b/tests/ui/structs-enums/issue-3008-3.rs
index 212eb2eb8..212eb2eb8 100644
--- a/tests/ui/issues/issue-3008-3.rs
+++ b/tests/ui/structs-enums/issue-3008-3.rs
diff --git a/tests/ui/issues/issue-3008-3.stderr b/tests/ui/structs-enums/issue-3008-3.stderr
index a1a81e293..a1a81e293 100644
--- a/tests/ui/issues/issue-3008-3.stderr
+++ b/tests/ui/structs-enums/issue-3008-3.stderr
diff --git a/tests/ui/structs/struct-field-cfg.stderr b/tests/ui/structs/struct-field-cfg.stderr
index 5ec47c093..2b9ba85dd 100644
--- a/tests/ui/structs/struct-field-cfg.stderr
+++ b/tests/ui/structs/struct-field-cfg.stderr
@@ -10,7 +10,7 @@ error[E0560]: struct `Foo` has no field named `absent`
LL | let _ = Foo { present: (), #[cfg(all())] absent: () };
| ^^^^^^ `Foo` does not have this field
|
- = note: available fields are: `present`
+ = note: all struct fields are already assigned
error[E0027]: pattern does not mention field `present`
--> $DIR/struct-field-cfg.rs:13:9
diff --git a/tests/ui/structs/struct-fields-shorthand.stderr b/tests/ui/structs/struct-fields-shorthand.stderr
index a285a3921..d89d45b39 100644
--- a/tests/ui/structs/struct-fields-shorthand.stderr
+++ b/tests/ui/structs/struct-fields-shorthand.stderr
@@ -4,7 +4,7 @@ error[E0560]: struct `Foo` has no field named `z`
LL | x, y, z
| ^ `Foo` does not have this field
|
- = note: available fields are: `x`, `y`
+ = note: all struct fields are already assigned
error: aborting due to previous error
diff --git a/tests/ui/structs/struct-fields-too-many.stderr b/tests/ui/structs/struct-fields-too-many.stderr
index a1b7a7a31..9342607eb 100644
--- a/tests/ui/structs/struct-fields-too-many.stderr
+++ b/tests/ui/structs/struct-fields-too-many.stderr
@@ -4,7 +4,7 @@ error[E0560]: struct `BuildData` has no field named `bar`
LL | bar: 0
| ^^^ `BuildData` does not have this field
|
- = note: available fields are: `foo`
+ = note: all struct fields are already assigned
error: aborting due to previous error
diff --git a/tests/ui/structs/struct-variant-privacy-xc.stderr b/tests/ui/structs/struct-variant-privacy-xc.stderr
index 1c1caaef8..7a1c84bad 100644
--- a/tests/ui/structs/struct-variant-privacy-xc.stderr
+++ b/tests/ui/structs/struct-variant-privacy-xc.stderr
@@ -14,7 +14,9 @@ error[E0603]: enum `Bar` is private
--> $DIR/struct-variant-privacy-xc.rs:7:33
|
LL | struct_variant_privacy::Bar::Baz { a: _a } => {}
- | ^^^ private enum
+ | ^^^ --- variant `Baz` is not publicly re-exported
+ | |
+ | private enum
|
note: the enum `Bar` is defined here
--> $DIR/auxiliary/struct_variant_privacy.rs:1:1
diff --git a/tests/ui/structs/struct-variant-privacy.stderr b/tests/ui/structs/struct-variant-privacy.stderr
index eafd26c71..eabd66907 100644
--- a/tests/ui/structs/struct-variant-privacy.stderr
+++ b/tests/ui/structs/struct-variant-privacy.stderr
@@ -14,7 +14,9 @@ error[E0603]: enum `Bar` is private
--> $DIR/struct-variant-privacy.rs:10:14
|
LL | foo::Bar::Baz { a: _a } => {}
- | ^^^ private enum
+ | ^^^ --- variant `Baz` is not publicly re-exported
+ | |
+ | private enum
|
note: the enum `Bar` is defined here
--> $DIR/struct-variant-privacy.rs:2:5
diff --git a/tests/ui/suggestions/adt-param-with-implicit-sized-bound.stderr b/tests/ui/suggestions/adt-param-with-implicit-sized-bound.stderr
index b77c8c7fd..d136f5ff6 100644
--- a/tests/ui/suggestions/adt-param-with-implicit-sized-bound.stderr
+++ b/tests/ui/suggestions/adt-param-with-implicit-sized-bound.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
--> $DIR/adt-param-with-implicit-sized-bound.rs:25:9
|
LL | struct Struct5<T: ?Sized>{
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | _t: X<T>,
| ^^^^ doesn't have a size known at compile-time
|
diff --git a/tests/ui/suggestions/as-ref.rs b/tests/ui/suggestions/as-ref.rs
index a05353441..0d9790ac2 100644
--- a/tests/ui/suggestions/as-ref.rs
+++ b/tests/ui/suggestions/as-ref.rs
@@ -24,4 +24,6 @@ fn main() {
let multiple_ref_result = &&Ok(Foo);
multiple_ref_result.map(|arg| takes_ref(arg)); //~ ERROR mismatched types [E0308]
multiple_ref_result.and_then(|arg| Ok(takes_ref(arg))); //~ ERROR mismatched types [E0308]
+
+ let _: Result<&usize, _> = &Ok(42); //~ ERROR mismatched types [E0308]
}
diff --git a/tests/ui/suggestions/as-ref.stderr b/tests/ui/suggestions/as-ref.stderr
index 2147d2d92..c5b2bb126 100644
--- a/tests/ui/suggestions/as-ref.stderr
+++ b/tests/ui/suggestions/as-ref.stderr
@@ -74,14 +74,16 @@ error[E0308]: mismatched types
--> $DIR/as-ref.rs:13:29
|
LL | let y: Option<&usize> = x;
- | -------------- ^
- | | |
- | | expected `Option<&usize>`, found `&Option<usize>`
- | | help: you can convert from `&Option<T>` to `Option<&T>` using `.as_ref()`: `x.as_ref()`
+ | -------------- ^ expected `Option<&usize>`, found `&Option<usize>`
+ | |
| expected due to this
|
= note: expected enum `Option<&usize>`
found reference `&Option<usize>`
+help: try using `.as_ref()` to convert `&Option<usize>` to `Option<&usize>`
+ |
+LL | let y: Option<&usize> = x.as_ref();
+ | +++++++++
error[E0308]: mismatched types
--> $DIR/as-ref.rs:15:37
@@ -93,10 +95,10 @@ LL | let y: Result<&usize, &usize> = x;
|
= note: expected enum `Result<&usize, &usize>`
found reference `&Result<usize, usize>`
-help: you can convert from `&Result<T, E>` to `Result<&T, &E>` using `.as_ref()`
+help: try using `.as_ref()` to convert `&Result<usize, usize>` to `Result<&usize, &usize>`
|
LL | let y: Result<&usize, &usize> = x.as_ref();
- | ~~~~~~~~~~
+ | +++++++++
error[E0308]: mismatched types
--> $DIR/as-ref.rs:19:36
@@ -181,6 +183,22 @@ help: consider using `as_ref` instead
LL | multiple_ref_result.as_ref().and_then(|arg| Ok(takes_ref(arg)));
| +++++++++
-error: aborting due to 11 previous errors
+error[E0308]: mismatched types
+ --> $DIR/as-ref.rs:28:32
+ |
+LL | let _: Result<&usize, _> = &Ok(42);
+ | ----------------- ^^^^^^^ expected `Result<&usize, _>`, found `&Result<{integer}, _>`
+ | |
+ | expected due to this
+ |
+ = note: expected enum `Result<&usize, _>`
+ found reference `&Result<{integer}, _>`
+help: try using `.as_ref()` to convert `&Result<{integer}, _>` to `Result<&usize, _>`
+ |
+LL - let _: Result<&usize, _> = &Ok(42);
+LL + let _: Result<&usize, _> = Ok(42).as_ref();
+ |
+
+error: aborting due to 12 previous errors
For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/suggestions/crate-or-module-typo.stderr b/tests/ui/suggestions/crate-or-module-typo.stderr
index 98b88b4fb..5e7a7685a 100644
--- a/tests/ui/suggestions/crate-or-module-typo.stderr
+++ b/tests/ui/suggestions/crate-or-module-typo.stderr
@@ -36,6 +36,11 @@ error[E0433]: failed to resolve: use of undeclared crate or module `bar`
|
LL | pub fn bar() { bar::baz(); }
| ^^^ use of undeclared crate or module `bar`
+ |
+help: consider importing this module
+ |
+LL + use crate::bar;
+ |
error: aborting due to 4 previous errors
diff --git a/tests/ui/suggestions/dont-suggest-try_into-in-macros.stderr b/tests/ui/suggestions/dont-suggest-try_into-in-macros.stderr
index bc6342004..319d86600 100644
--- a/tests/ui/suggestions/dont-suggest-try_into-in-macros.stderr
+++ b/tests/ui/suggestions/dont-suggest-try_into-in-macros.stderr
@@ -1,13 +1,13 @@
error[E0308]: mismatched types
- --> $DIR/dont-suggest-try_into-in-macros.rs:2:5
+ --> $DIR/dont-suggest-try_into-in-macros.rs:2:23
|
LL | assert_eq!(10u64, 10usize);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^
- | |
- | expected `u64`, found `usize`
- | expected because this is `u64`
+ | ^^^^^^^ expected `u64`, found `usize`
|
- = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: change the type of the numeric literal from `usize` to `u64`
+ |
+LL | assert_eq!(10u64, 10u64);
+ | ~~~
error: aborting due to previous error
diff --git a/tests/ui/suggestions/impl-trait-return-trailing-semicolon.stderr b/tests/ui/suggestions/impl-trait-return-trailing-semicolon.stderr
index e74c2c421..6465eeb8b 100644
--- a/tests/ui/suggestions/impl-trait-return-trailing-semicolon.stderr
+++ b/tests/ui/suggestions/impl-trait-return-trailing-semicolon.stderr
@@ -16,8 +16,8 @@ LL | fn bar() -> impl Bar {
| ^^^^^^^^ the trait `Bar` is not implemented for `()`
|
= help: the following other types implement trait `Bar`:
- Qux
i32
+ Qux
error: aborting due to 2 previous errors
diff --git a/tests/ui/suggestions/into-str.stderr b/tests/ui/suggestions/into-str.stderr
index a56a2a188..7e24150e7 100644
--- a/tests/ui/suggestions/into-str.stderr
+++ b/tests/ui/suggestions/into-str.stderr
@@ -8,12 +8,12 @@ LL | foo(String::new());
|
= note: to coerce a `String` into a `&str`, use `&*` as a prefix
= help: the following other types implement trait `From<T>`:
- <String as From<&String>>
- <String as From<&mut str>>
- <String as From<&str>>
+ <String as From<char>>
<String as From<Box<str>>>
<String as From<Cow<'a, str>>>
- <String as From<char>>
+ <String as From<&str>>
+ <String as From<&mut str>>
+ <String as From<&String>>
= note: required for `String` to implement `Into<&str>`
note: required by a bound in `foo`
--> $DIR/into-str.rs:1:31
diff --git a/tests/ui/suggestions/issue-102972.rs b/tests/ui/suggestions/issue-102972.rs
new file mode 100644
index 000000000..106288b05
--- /dev/null
+++ b/tests/ui/suggestions/issue-102972.rs
@@ -0,0 +1,16 @@
+fn test1() {
+ let mut chars = "Hello".chars();
+ for _c in chars.by_ref() {
+ chars.next(); //~ ERROR cannot borrow `chars` as mutable more than once at a time
+ }
+}
+
+fn test2() {
+ let v = vec![1, 2, 3];
+ let mut iter = v.iter();
+ for _i in iter {
+ iter.next(); //~ ERROR borrow of moved value: `iter`
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/suggestions/issue-102972.stderr b/tests/ui/suggestions/issue-102972.stderr
new file mode 100644
index 000000000..03f9dbb6c
--- /dev/null
+++ b/tests/ui/suggestions/issue-102972.stderr
@@ -0,0 +1,33 @@
+error[E0499]: cannot borrow `chars` as mutable more than once at a time
+ --> $DIR/issue-102972.rs:4:9
+ |
+LL | for _c in chars.by_ref() {
+ | --------------
+ | |
+ | first mutable borrow occurs here
+ | first borrow later used here
+LL | chars.next();
+ | ^^^^^^^^^^^^ second mutable borrow occurs here
+ |
+ = note: a for loop advances the iterator for you, the result is stored in `_c`.
+ = help: if you want to call `next` on a iterator within the loop, consider using `while let`.
+
+error[E0382]: borrow of moved value: `iter`
+ --> $DIR/issue-102972.rs:12:9
+ |
+LL | let mut iter = v.iter();
+ | -------- move occurs because `iter` has type `std::slice::Iter<'_, i32>`, which does not implement the `Copy` trait
+LL | for _i in iter {
+ | ---- `iter` moved due to this implicit call to `.into_iter()`
+LL | iter.next();
+ | ^^^^^^^^^^^ value borrowed here after move
+ |
+ = note: a for loop advances the iterator for you, the result is stored in `_i`.
+ = help: if you want to call `next` on a iterator within the loop, consider using `while let`.
+note: `into_iter` takes ownership of the receiver `self`, which moves `iter`
+ --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0382, E0499.
+For more information about an error, try `rustc --explain E0382`.
diff --git a/tests/ui/suggestions/issue-103646.rs b/tests/ui/suggestions/issue-103646.rs
new file mode 100644
index 000000000..f679640c5
--- /dev/null
+++ b/tests/ui/suggestions/issue-103646.rs
@@ -0,0 +1,11 @@
+trait Cat {
+ fn nya() {}
+}
+
+fn uwu<T: Cat>(c: T) {
+ c.nya();
+ //~^ ERROR no method named `nya` found for type parameter `T` in the current scope
+ //~| Suggestion T::nya()
+}
+
+fn main() {}
diff --git a/tests/ui/suggestions/issue-103646.stderr b/tests/ui/suggestions/issue-103646.stderr
new file mode 100644
index 000000000..3ae9813d4
--- /dev/null
+++ b/tests/ui/suggestions/issue-103646.stderr
@@ -0,0 +1,21 @@
+error[E0599]: no method named `nya` found for type parameter `T` in the current scope
+ --> $DIR/issue-103646.rs:6:7
+ |
+LL | fn uwu<T: Cat>(c: T) {
+ | - method `nya` not found for this type parameter
+LL | c.nya();
+ | --^^^--
+ | | |
+ | | this is an associated function, not a method
+ | help: use associated function syntax instead: `T::nya()`
+ |
+ = note: found the following associated functions; to be used as methods, functions must have a `self` parameter
+note: the candidate is defined in the trait `Cat`
+ --> $DIR/issue-103646.rs:2:5
+ |
+LL | fn nya() {}
+ | ^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/tests/ui/suggestions/issue-109991.rs b/tests/ui/suggestions/issue-109991.rs
new file mode 100644
index 000000000..918451cb8
--- /dev/null
+++ b/tests/ui/suggestions/issue-109991.rs
@@ -0,0 +1,27 @@
+struct S {
+ a: usize,
+ b: usize,
+}
+
+fn main() {
+ let a: usize;
+ let b: usize;
+ let c: usize;
+
+ (c) = (&123); //~ ERROR mismatched types
+ (a, b) = (123, &mut 123); //~ ERROR mismatched types
+
+ let x: String;
+ (x,) = (1,); //~ ERROR mismatched types
+
+ let x: i32;
+ [x] = [&1]; //~ ERROR mismatched types
+
+ let x: &i32;
+ [x] = [1]; //~ ERROR mismatched types
+
+ let x = (1, &mut 2);
+ (a, b) = x; //~ ERROR mismatched types
+
+ S { a, b } = S { a: 1, b: &mut 2 }; //~ ERROR mismatched types
+}
diff --git a/tests/ui/suggestions/issue-109991.stderr b/tests/ui/suggestions/issue-109991.stderr
new file mode 100644
index 000000000..bd21e4de6
--- /dev/null
+++ b/tests/ui/suggestions/issue-109991.stderr
@@ -0,0 +1,72 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-109991.rs:11:11
+ |
+LL | let c: usize;
+ | ----- expected due to this type
+LL |
+LL | (c) = (&123);
+ | ^^^^^^ expected `usize`, found `&{integer}`
+ |
+help: consider removing the borrow
+ |
+LL - (c) = (&123);
+LL + (c) = (123);
+ |
+
+error[E0308]: mismatched types
+ --> $DIR/issue-109991.rs:12:9
+ |
+LL | let b: usize;
+ | ----- expected due to this type
+...
+LL | (a, b) = (123, &mut 123);
+ | ^ expected `usize`, found `&mut {integer}`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-109991.rs:15:6
+ |
+LL | let x: String;
+ | ------ expected due to this type
+LL | (x,) = (1,);
+ | ^ expected `String`, found integer
+
+error[E0308]: mismatched types
+ --> $DIR/issue-109991.rs:18:6
+ |
+LL | let x: i32;
+ | --- expected due to this type
+LL | [x] = [&1];
+ | ^ expected `i32`, found `&{integer}`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-109991.rs:21:6
+ |
+LL | let x: &i32;
+ | ---- expected due to this type
+LL | [x] = [1];
+ | ^ expected `&i32`, found integer
+
+error[E0308]: mismatched types
+ --> $DIR/issue-109991.rs:24:9
+ |
+LL | let b: usize;
+ | ----- expected due to this type
+...
+LL | (a, b) = x;
+ | ^ expected `usize`, found `&mut {integer}`
+
+error[E0308]: mismatched types
+ --> $DIR/issue-109991.rs:26:31
+ |
+LL | S { a, b } = S { a: 1, b: &mut 2 };
+ | ^^^^^^ expected `usize`, found `&mut {integer}`
+ |
+help: consider removing the borrow
+ |
+LL - S { a, b } = S { a: 1, b: &mut 2 };
+LL + S { a, b } = S { a: 1, b: 2 };
+ |
+
+error: aborting due to 7 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/suggestions/issue-112590-suggest-import.rs b/tests/ui/suggestions/issue-112590-suggest-import.rs
new file mode 100644
index 000000000..0938814c5
--- /dev/null
+++ b/tests/ui/suggestions/issue-112590-suggest-import.rs
@@ -0,0 +1,10 @@
+pub struct S;
+
+impl fmt::Debug for S { //~ ERROR failed to resolve: use of undeclared crate or module `fmt`
+ fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result { //~ ERROR failed to resolve: use of undeclared crate or module `fmt`
+ //~^ ERROR failed to resolve: use of undeclared crate or module `fmt`
+ Ok(())
+ }
+}
+
+fn main() { }
diff --git a/tests/ui/suggestions/issue-112590-suggest-import.stderr b/tests/ui/suggestions/issue-112590-suggest-import.stderr
new file mode 100644
index 000000000..aeac18c16
--- /dev/null
+++ b/tests/ui/suggestions/issue-112590-suggest-import.stderr
@@ -0,0 +1,36 @@
+error[E0433]: failed to resolve: use of undeclared crate or module `fmt`
+ --> $DIR/issue-112590-suggest-import.rs:3:6
+ |
+LL | impl fmt::Debug for S {
+ | ^^^ use of undeclared crate or module `fmt`
+ |
+help: consider importing this module
+ |
+LL + use std::fmt;
+ |
+
+error[E0433]: failed to resolve: use of undeclared crate or module `fmt`
+ --> $DIR/issue-112590-suggest-import.rs:4:28
+ |
+LL | fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ | ^^^ use of undeclared crate or module `fmt`
+ |
+help: consider importing this module
+ |
+LL + use std::fmt;
+ |
+
+error[E0433]: failed to resolve: use of undeclared crate or module `fmt`
+ --> $DIR/issue-112590-suggest-import.rs:4:51
+ |
+LL | fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ | ^^^ use of undeclared crate or module `fmt`
+ |
+help: consider importing this module
+ |
+LL + use std::fmt;
+ |
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0433`.
diff --git a/tests/ui/suggestions/issue-71394-no-from-impl.stderr b/tests/ui/suggestions/issue-71394-no-from-impl.stderr
index 2cd036d2b..80be252a0 100644
--- a/tests/ui/suggestions/issue-71394-no-from-impl.stderr
+++ b/tests/ui/suggestions/issue-71394-no-from-impl.stderr
@@ -5,14 +5,14 @@ LL | let _: &[i8] = data.into();
| ^^^^ the trait `From<&[u8]>` is not implemented for `&[i8]`
|
= help: the following other types implement trait `From<T>`:
- <[T; 10] as From<(T, T, T, T, T, T, T, T, T, T)>>
- <[T; 11] as From<(T, T, T, T, T, T, T, T, T, T, T)>>
- <[T; 12] as From<(T, T, T, T, T, T, T, T, T, T, T, T)>>
+ <[bool; LANES] as From<Mask<T, LANES>>>
+ <[T; N] as From<Simd<T, N>>>
<[T; 1] as From<(T,)>>
<[T; 2] as From<(T, T)>>
<[T; 3] as From<(T, T, T)>>
<[T; 4] as From<(T, T, T, T)>>
<[T; 5] as From<(T, T, T, T, T)>>
+ <[T; 6] as From<(T, T, T, T, T, T)>>
and 6 others
= note: required for `&[u8]` to implement `Into<&[i8]>`
diff --git a/tests/ui/suggestions/issue-88696.rs b/tests/ui/suggestions/issue-88696.rs
new file mode 100644
index 000000000..745fdef15
--- /dev/null
+++ b/tests/ui/suggestions/issue-88696.rs
@@ -0,0 +1,14 @@
+// This test case should ensure that miniz_oxide isn't
+// suggested, since it's not a direct dependency.
+
+fn a() -> Result<u64, i32> {
+ Err(1)
+}
+
+fn b() -> Result<u32, i32> {
+ a().into() //~ERROR [E0277]
+}
+
+fn main() {
+ let _ = dbg!(b());
+}
diff --git a/tests/ui/suggestions/issue-88696.stderr b/tests/ui/suggestions/issue-88696.stderr
new file mode 100644
index 000000000..4947269d7
--- /dev/null
+++ b/tests/ui/suggestions/issue-88696.stderr
@@ -0,0 +1,11 @@
+error[E0277]: the trait bound `Result<u32, i32>: From<Result<u64, i32>>` is not satisfied
+ --> $DIR/issue-88696.rs:9:9
+ |
+LL | a().into()
+ | ^^^^ the trait `From<Result<u64, i32>>` is not implemented for `Result<u32, i32>`
+ |
+ = note: required for `Result<u64, i32>` to implement `Into<Result<u32, i32>>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/suggestions/issue-89640.rs b/tests/ui/suggestions/issue-89640.rs
new file mode 100644
index 000000000..6bb33ad8f
--- /dev/null
+++ b/tests/ui/suggestions/issue-89640.rs
@@ -0,0 +1,3 @@
+fn main() {
+ le t x: i32 = 3; //~ ERROR expected one of
+}
diff --git a/tests/ui/suggestions/issue-89640.stderr b/tests/ui/suggestions/issue-89640.stderr
new file mode 100644
index 000000000..8ff4ef4f0
--- /dev/null
+++ b/tests/ui/suggestions/issue-89640.stderr
@@ -0,0 +1,13 @@
+error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `t`
+ --> $DIR/issue-89640.rs:2:8
+ |
+LL | le t x: i32 = 3;
+ | ^ expected one of 8 possible tokens
+ |
+help: consider removing the space to spell keyword `let`
+ |
+LL | let x: i32 = 3;
+ | ~~~
+
+error: aborting due to previous error
+
diff --git a/tests/ui/suggestions/removal-of-multiline-trait-bound-in-where-clause.stderr b/tests/ui/suggestions/removal-of-multiline-trait-bound-in-where-clause.stderr
index 6071b10d3..eb74679d6 100644
--- a/tests/ui/suggestions/removal-of-multiline-trait-bound-in-where-clause.stderr
+++ b/tests/ui/suggestions/removal-of-multiline-trait-bound-in-where-clause.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
LL | fn foo<T>(foo: Wrapper<T>)
| - ^^^^^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Wrapper`
--> $DIR/removal-of-multiline-trait-bound-in-where-clause.rs:1:16
@@ -33,7 +33,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
LL | fn bar<T>(foo: Wrapper<T>)
| - ^^^^^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Wrapper`
--> $DIR/removal-of-multiline-trait-bound-in-where-clause.rs:1:16
@@ -58,7 +58,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
LL | fn qux<T>(foo: Wrapper<T>)
| - ^^^^^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Wrapper`
--> $DIR/removal-of-multiline-trait-bound-in-where-clause.rs:1:16
diff --git a/tests/ui/suggestions/suggest-split-at-mut.stderr b/tests/ui/suggestions/suggest-split-at-mut.stderr
index 330f012b2..bb1851383 100644
--- a/tests/ui/suggestions/suggest-split-at-mut.stderr
+++ b/tests/ui/suggestions/suggest-split-at-mut.stderr
@@ -9,6 +9,7 @@ LL | *a = 5;
| ------ first borrow later used here
|
= help: consider using `.split_at_mut(position)` or similar method to obtain two mutable non-overlapping sub-slices
+ = help: consider using `.swap(index_1, index_2)` to swap elements at the specified indices
error: aborting due to previous error
diff --git a/tests/ui/suggestions/while-let-typo.rs b/tests/ui/suggestions/while-let-typo.rs
index dbbcdee3c..21b254054 100644
--- a/tests/ui/suggestions/while-let-typo.rs
+++ b/tests/ui/suggestions/while-let-typo.rs
@@ -2,7 +2,7 @@ fn main() {
let foo = Some(0);
let bar = None;
while Some(x) = foo {} //~ ERROR cannot find value `x` in this scope
- while Some(foo) = bar {}
+ while Some(foo) = bar {} //~ ERROR mismatched types
while 3 = foo {} //~ ERROR mismatched types
while Some(3) = foo {} //~ ERROR invalid left-hand side of assignment
while x = 5 {} //~ ERROR cannot find value `x` in this scope
diff --git a/tests/ui/suggestions/while-let-typo.stderr b/tests/ui/suggestions/while-let-typo.stderr
index 7cc2ed314..69a7e5761 100644
--- a/tests/ui/suggestions/while-let-typo.stderr
+++ b/tests/ui/suggestions/while-let-typo.stderr
@@ -21,6 +21,17 @@ LL | while let x = 5 {}
| +++
error[E0308]: mismatched types
+ --> $DIR/while-let-typo.rs:5:11
+ |
+LL | while Some(foo) = bar {}
+ | ^^^^^^^^^^^^^^^ expected `bool`, found `()`
+ |
+help: consider adding `let`
+ |
+LL | while let Some(foo) = bar {}
+ | +++
+
+error[E0308]: mismatched types
--> $DIR/while-let-typo.rs:6:11
|
LL | while 3 = foo {}
@@ -39,7 +50,7 @@ help: you might have meant to use pattern destructuring
LL | while let Some(3) = foo {}
| +++
-error: aborting due to 4 previous errors
+error: aborting due to 5 previous errors
Some errors have detailed explanations: E0070, E0308, E0425.
For more information about an error, try `rustc --explain E0070`.
diff --git a/tests/ui/switched-expectations.stderr b/tests/ui/switched-expectations.stderr
index 744d8483b..6e1bbf701 100644
--- a/tests/ui/switched-expectations.stderr
+++ b/tests/ui/switched-expectations.stderr
@@ -2,7 +2,9 @@ error[E0308]: mismatched types
--> $DIR/switched-expectations.rs:3:30
|
LL | let ref string: String = var;
- | ^^^ expected `String`, found `i32`
+ | ^^^- help: try using a conversion method: `.to_string()`
+ | |
+ | expected `String`, found `i32`
error: aborting due to previous error
diff --git a/tests/ui/symbol-names/const-generics-structural-demangling.rs b/tests/ui/symbol-names/const-generics-structural-demangling.rs
index df09ba494..947fddf3f 100644
--- a/tests/ui/symbol-names/const-generics-structural-demangling.rs
+++ b/tests/ui/symbol-names/const-generics-structural-demangling.rs
@@ -1,14 +1,13 @@
// build-fail
// compile-flags: -C symbol-mangling-version=v0 --crate-name=c
-// NOTE(eddyb) we need `core` for `core::option::Option`, normalize away its
-// disambiguator hash, which can/should change (including between stage{1,2}).
-// normalize-stderr-test: "core\[[0-9a-f]+\]" -> "core[HASH]"
// normalize-stderr-test: "c\[[0-9a-f]+\]" -> "c[HASH]"
#![feature(adt_const_params, decl_macro, rustc_attrs)]
#![allow(incomplete_features)]
+use std::marker::ConstParamTy;
+
pub struct RefByte<const RB: &'static u8>;
#[rustc_symbol_name]
@@ -43,25 +42,31 @@ pub struct TupleByteBool<const TBB: (u8, bool)>;
//~| ERROR demangling-alt(<c::TupleByteBool<{(1, false)}>>)
impl TupleByteBool<{(1, false)}> {}
-pub struct OptionUsize<const OU: Option<usize>>;
+#[derive(PartialEq, Eq, ConstParamTy)]
+pub enum MyOption<T> {
+ Some(T),
+ None,
+}
+
+pub struct OptionUsize<const OU: MyOption<usize>>;
// HACK(eddyb) the full mangling is only in `.stderr` because we can normalize
// the `core` disambiguator hash away there, but not here.
#[rustc_symbol_name]
//~^ ERROR symbol-name
//~| ERROR demangling
-//~| ERROR demangling-alt(<c::OptionUsize<{core::option::Option::<usize>::None}>>)
-impl OptionUsize<{None}> {}
+//~| ERROR demangling-alt(<c::OptionUsize<{c::MyOption::<usize>::None}>>)
+impl OptionUsize<{MyOption::None}> {}
// HACK(eddyb) the full mangling is only in `.stderr` because we can normalize
// the `core` disambiguator hash away there, but not here.
#[rustc_symbol_name]
//~^ ERROR symbol-name
//~| ERROR demangling
-//~| ERROR demangling-alt(<c::OptionUsize<{core::option::Option::<usize>::Some(0)}>>)
-impl OptionUsize<{Some(0)}> {}
+//~| ERROR demangling-alt(<c::OptionUsize<{c::MyOption::<usize>::Some(0)}>>)
+impl OptionUsize<{MyOption::Some(0)}> {}
-#[derive(PartialEq, Eq)]
+#[derive(PartialEq, Eq, ConstParamTy)]
pub struct Foo {
s: &'static str,
ch: char,
@@ -78,7 +83,7 @@ impl Foo_<{Foo { s: "abc", ch: 'x', slice: &[1, 2, 3] }}> {}
// NOTE(eddyb) this tests specifically the use of disambiguators in field names,
// using macros 2.0 hygiene to create a `struct` with conflicting field names.
macro duplicate_field_name_test($x:ident) {
- #[derive(PartialEq, Eq)]
+ #[derive(PartialEq, Eq, ConstParamTy)]
pub struct Bar {
$x: u8,
x: u16,
diff --git a/tests/ui/symbol-names/const-generics-structural-demangling.stderr b/tests/ui/symbol-names/const-generics-structural-demangling.stderr
index a4c997477..96dea154d 100644
--- a/tests/ui/symbol-names/const-generics-structural-demangling.stderr
+++ b/tests/ui/symbol-names/const-generics-structural-demangling.stderr
@@ -1,131 +1,131 @@
error: symbol-name(_RMCsCRATE_HASH_1cINtB<REF>_7RefByteKRh7b_E)
- --> $DIR/const-generics-structural-demangling.rs:14:1
+ --> $DIR/const-generics-structural-demangling.rs:13:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling(<c[HASH]::RefByte<{&123u8}>>)
- --> $DIR/const-generics-structural-demangling.rs:14:1
+ --> $DIR/const-generics-structural-demangling.rs:13:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling-alt(<c::RefByte<{&123}>>)
- --> $DIR/const-generics-structural-demangling.rs:14:1
+ --> $DIR/const-generics-structural-demangling.rs:13:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: symbol-name(_RMs_CsCRATE_HASH_1cINtB<REF>_6RefZstKRAEE)
- --> $DIR/const-generics-structural-demangling.rs:24:1
+ --> $DIR/const-generics-structural-demangling.rs:23:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling(<c[HASH]::RefZst<{&[]}>>)
- --> $DIR/const-generics-structural-demangling.rs:24:1
+ --> $DIR/const-generics-structural-demangling.rs:23:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling-alt(<c::RefZst<{&[]}>>)
- --> $DIR/const-generics-structural-demangling.rs:24:1
+ --> $DIR/const-generics-structural-demangling.rs:23:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: symbol-name(_RMs0_CsCRATE_HASH_1cINtB<REF>_11Array3BytesKAh1_h2_h3_EE)
- --> $DIR/const-generics-structural-demangling.rs:32:1
+ --> $DIR/const-generics-structural-demangling.rs:31:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling(<c[HASH]::Array3Bytes<{[1u8, 2u8, 3u8]}>>)
- --> $DIR/const-generics-structural-demangling.rs:32:1
+ --> $DIR/const-generics-structural-demangling.rs:31:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling-alt(<c::Array3Bytes<{[1, 2, 3]}>>)
- --> $DIR/const-generics-structural-demangling.rs:32:1
+ --> $DIR/const-generics-structural-demangling.rs:31:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: symbol-name(_RMs1_CsCRATE_HASH_1cINtB<REF>_13TupleByteBoolKTh1_b0_EE)
- --> $DIR/const-generics-structural-demangling.rs:40:1
+ --> $DIR/const-generics-structural-demangling.rs:39:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling(<c[HASH]::TupleByteBool<{(1u8, false)}>>)
- --> $DIR/const-generics-structural-demangling.rs:40:1
+ --> $DIR/const-generics-structural-demangling.rs:39:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling-alt(<c::TupleByteBool<{(1, false)}>>)
- --> $DIR/const-generics-structural-demangling.rs:40:1
+ --> $DIR/const-generics-structural-demangling.rs:39:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
-error: symbol-name(_RMs2_CsCRATE_HASH_1cINtB<REF>_11OptionUsizeKVNtINtNtCsCRATE_HASH_4core6option6OptionjE4NoneUE)
- --> $DIR/const-generics-structural-demangling.rs:50:1
+error: symbol-name(_RMs2_CsCRATE_HASH_1cINtB<REF>_11OptionUsizeKVNtINtB<REF>_8MyOptionjE4NoneUE)
+ --> $DIR/const-generics-structural-demangling.rs:55:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
-error: demangling(<c[HASH]::OptionUsize<{core[HASH]::option::Option::<usize>::None}>>)
- --> $DIR/const-generics-structural-demangling.rs:50:1
+error: demangling(<c[HASH]::OptionUsize<{c[HASH]::MyOption::<usize>::None}>>)
+ --> $DIR/const-generics-structural-demangling.rs:55:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
-error: demangling-alt(<c::OptionUsize<{core::option::Option::<usize>::None}>>)
- --> $DIR/const-generics-structural-demangling.rs:50:1
+error: demangling-alt(<c::OptionUsize<{c::MyOption::<usize>::None}>>)
+ --> $DIR/const-generics-structural-demangling.rs:55:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
-error: symbol-name(_RMs3_CsCRATE_HASH_1cINtB<REF>_11OptionUsizeKVNtINtNtCsCRATE_HASH_4core6option6OptionjE4SomeTj0_EE)
- --> $DIR/const-generics-structural-demangling.rs:58:1
+error: symbol-name(_RMs3_CsCRATE_HASH_1cINtB<REF>_11OptionUsizeKVNtINtB<REF>_8MyOptionjE4SomeTj0_EE)
+ --> $DIR/const-generics-structural-demangling.rs:63:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
-error: demangling(<c[HASH]::OptionUsize<{core[HASH]::option::Option::<usize>::Some(0usize)}>>)
- --> $DIR/const-generics-structural-demangling.rs:58:1
+error: demangling(<c[HASH]::OptionUsize<{c[HASH]::MyOption::<usize>::Some(0usize)}>>)
+ --> $DIR/const-generics-structural-demangling.rs:63:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
-error: demangling-alt(<c::OptionUsize<{core::option::Option::<usize>::Some(0)}>>)
- --> $DIR/const-generics-structural-demangling.rs:58:1
+error: demangling-alt(<c::OptionUsize<{c::MyOption::<usize>::Some(0)}>>)
+ --> $DIR/const-generics-structural-demangling.rs:63:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: symbol-name(_RMs4_CsCRATE_HASH_1cINtB<REF>_4Foo_KVNtB<REF>_3FooS1sRe616263_2chc78_5sliceRAh1_h2_h3_EEE)
- --> $DIR/const-generics-structural-demangling.rs:72:1
+ --> $DIR/const-generics-structural-demangling.rs:77:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling(<c[HASH]::Foo_<{c[HASH]::Foo { s: "abc", ch: 'x', slice: &[1u8, 2u8, 3u8] }}>>)
- --> $DIR/const-generics-structural-demangling.rs:72:1
+ --> $DIR/const-generics-structural-demangling.rs:77:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling-alt(<c::Foo_<{c::Foo { s: "abc", ch: 'x', slice: &[1, 2, 3] }}>>)
- --> $DIR/const-generics-structural-demangling.rs:72:1
+ --> $DIR/const-generics-structural-demangling.rs:77:1
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
-error: symbol-name(_RMs9_CsCRATE_HASH_1cINtB<REF>_4Bar_KVNtB<REF>_3BarS1xh7b_s_1xt1000_EE)
- --> $DIR/const-generics-structural-demangling.rs:88:5
+error: symbol-name(_RMsf_CsCRATE_HASH_1cINtB<REF>_4Bar_KVNtB<REF>_3BarS1xh7b_s_1xt1000_EE)
+ --> $DIR/const-generics-structural-demangling.rs:93:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
@@ -136,7 +136,7 @@ LL | duplicate_field_name_test!(x);
= note: this error originates in the macro `duplicate_field_name_test` (in Nightly builds, run with -Z macro-backtrace for more info)
error: demangling(<c[HASH]::Bar_<{c[HASH]::Bar { x: 123u8, x: 4096u16 }}>>)
- --> $DIR/const-generics-structural-demangling.rs:88:5
+ --> $DIR/const-generics-structural-demangling.rs:93:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
@@ -147,7 +147,7 @@ LL | duplicate_field_name_test!(x);
= note: this error originates in the macro `duplicate_field_name_test` (in Nightly builds, run with -Z macro-backtrace for more info)
error: demangling-alt(<c::Bar_<{c::Bar { x: 123, x: 4096 }}>>)
- --> $DIR/const-generics-structural-demangling.rs:88:5
+ --> $DIR/const-generics-structural-demangling.rs:93:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/test-attrs/test-fn-signature-verification-for-explicit-return-type.rs b/tests/ui/test-attrs/test-fn-signature-verification-for-explicit-return-type.rs
index 585874e27..02fee1a00 100644
--- a/tests/ui/test-attrs/test-fn-signature-verification-for-explicit-return-type.rs
+++ b/tests/ui/test-attrs/test-fn-signature-verification-for-explicit-return-type.rs
@@ -1,5 +1,5 @@
// run-pass
-// needs-unwind (#73509)
+// ignore-fuchsia Test must be run out-of-process
#![feature(test)]
diff --git a/tests/ui/test-attrs/test-function-signature.rs b/tests/ui/test-attrs/test-function-signature.rs
new file mode 100644
index 000000000..9e86e9209
--- /dev/null
+++ b/tests/ui/test-attrs/test-function-signature.rs
@@ -0,0 +1,31 @@
+// compile-flags: --test
+
+#[test]
+fn foo() -> Result<(), ()> {
+ Ok(())
+}
+
+#[test]
+fn bar() -> i32 { //~ ERROR the trait bound `i32: Termination` is not satisfied
+ 0
+}
+
+#[test]
+fn baz(val: i32) {} //~ ERROR functions used as tests can not have any arguments
+
+#[test]
+fn lifetime_generic<'a>() -> Result<(), &'a str> {
+ Err("coerce me to any lifetime")
+}
+
+#[test]
+fn type_generic<T>() {} //~ ERROR functions used as tests can not have any non-lifetime generic parameters
+
+#[test]
+fn const_generic<const N: usize>() {} //~ ERROR functions used as tests can not have any non-lifetime generic parameters
+
+// Regression test for <https://github.com/rust-lang/rust/issues/112360>. This used to ICE.
+fn nested() {
+ #[test]
+ fn foo(arg: ()) {} //~ ERROR functions used as tests can not have any arguments
+}
diff --git a/tests/ui/test-attrs/test-function-signature.stderr b/tests/ui/test-attrs/test-function-signature.stderr
new file mode 100644
index 000000000..abdb30dc9
--- /dev/null
+++ b/tests/ui/test-attrs/test-function-signature.stderr
@@ -0,0 +1,39 @@
+error: functions used as tests can not have any arguments
+ --> $DIR/test-function-signature.rs:14:1
+ |
+LL | fn baz(val: i32) {}
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: functions used as tests can not have any non-lifetime generic parameters
+ --> $DIR/test-function-signature.rs:22:1
+ |
+LL | fn type_generic<T>() {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+
+error: functions used as tests can not have any non-lifetime generic parameters
+ --> $DIR/test-function-signature.rs:25:1
+ |
+LL | fn const_generic<const N: usize>() {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: functions used as tests can not have any arguments
+ --> $DIR/test-function-signature.rs:30:5
+ |
+LL | fn foo(arg: ()) {}
+ | ^^^^^^^^^^^^^^^^^^
+
+error[E0277]: the trait bound `i32: Termination` is not satisfied
+ --> $DIR/test-function-signature.rs:9:13
+ |
+LL | #[test]
+ | ------- in this procedural macro expansion
+LL | fn bar() -> i32 {
+ | ^^^ the trait `Termination` is not implemented for `i32`
+ |
+note: required by a bound in `assert_test_result`
+ --> $SRC_DIR/test/src/lib.rs:LL:COL
+ = note: this error originates in the attribute macro `test` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 5 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/test-attrs/test-panic-abort-disabled.rs b/tests/ui/test-attrs/test-panic-abort-disabled.rs
index 874dbdb42..fa67a784d 100644
--- a/tests/ui/test-attrs/test-panic-abort-disabled.rs
+++ b/tests/ui/test-attrs/test-panic-abort-disabled.rs
@@ -3,6 +3,7 @@
// compile-flags: --test -Cpanic=abort -Zpanic-abort-tests=no
// run-flags: --test-threads=1
+// needs-unwind
// ignore-wasm no panic or subprocess support
// ignore-emscripten no panic or subprocess support
diff --git a/tests/ui/test-attrs/test-panic-abort.rs b/tests/ui/test-attrs/test-panic-abort.rs
index 931b7993c..08e5242af 100644
--- a/tests/ui/test-attrs/test-panic-abort.rs
+++ b/tests/ui/test-attrs/test-panic-abort.rs
@@ -11,9 +11,13 @@
// ignore-sgx no subprocess support
#![cfg(test)]
+#![feature(test)]
+
+extern crate test;
use std::io::Write;
use std::env;
+use test::Bencher;
#[test]
fn it_works() {
@@ -48,3 +52,8 @@ fn no_residual_environment() {
}
}
}
+
+#[bench]
+fn benchmark(b: &mut Bencher) {
+ b.iter(|| assert_eq!(1 + 1, 2));
+}
diff --git a/tests/ui/test-attrs/test-panic-abort.run.stdout b/tests/ui/test-attrs/test-panic-abort.run.stdout
index f608a8cdc..b6b9c2560 100644
--- a/tests/ui/test-attrs/test-panic-abort.run.stdout
+++ b/tests/ui/test-attrs/test-panic-abort.run.stdout
@@ -1,5 +1,6 @@
-running 5 tests
+running 6 tests
+test benchmark ... ok
test it_exits ... FAILED
test it_fails ... FAILED
test it_panics - should panic ... ok
@@ -18,7 +19,7 @@ testing123
testing321
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `2`,
- right: `5`', $DIR/test-panic-abort.rs:34:5
+ right: `5`', $DIR/test-panic-abort.rs:38:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
@@ -26,5 +27,5 @@ failures:
it_exits
it_fails
-test result: FAILED. 3 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME
+test result: FAILED. 4 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME
diff --git a/tests/ui/test-attrs/test-type.rs b/tests/ui/test-attrs/test-type.rs
index 8416270fd..d6d44a6b4 100644
--- a/tests/ui/test-attrs/test-type.rs
+++ b/tests/ui/test-attrs/test-type.rs
@@ -1,9 +1,8 @@
-// compile-flags: --test
+// compile-flags: --test -Zpanic-abort-tests
// run-flags: --test-threads=1
// check-run-results
// normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
// ignore-emscripten no threads support
-// needs-unwind
// run-pass
#[test]
diff --git a/tests/ui/thir-print/thir-flat-const-variant.rs b/tests/ui/thir-print/thir-flat-const-variant.rs
new file mode 100644
index 000000000..2cd87a5cb
--- /dev/null
+++ b/tests/ui/thir-print/thir-flat-const-variant.rs
@@ -0,0 +1,18 @@
+// compile-flags: -Z unpretty=thir-flat
+// check-pass
+
+// Previously, the constants with `Self::Bar(())` would be `Call`s instead of
+// `Adt`s in THIR.
+
+pub enum Foo {
+ Bar(()),
+}
+
+impl Foo {
+ const BAR1: Foo = Foo::Bar(());
+ const BAR2: Foo = Self::Bar(());
+ const BAR3: Self = Foo::Bar(());
+ const BAR4: Self = Self::Bar(());
+}
+
+fn main() {}
diff --git a/tests/ui/thir-print/thir-flat-const-variant.stdout b/tests/ui/thir-print/thir-flat-const-variant.stdout
new file mode 100644
index 000000000..1b76f07c3
--- /dev/null
+++ b/tests/ui/thir-print/thir-flat-const-variant.stdout
@@ -0,0 +1,399 @@
+DefId(0:8 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR1):
+Thir {
+ body_type: Const(
+ Foo,
+ ),
+ arms: [],
+ blocks: [],
+ exprs: [
+ Expr {
+ kind: Tuple {
+ fields: [],
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:12:32: 12:34 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Node(7),
+ lint_level: Explicit(
+ HirId(DefId(0:8 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR1).7),
+ ),
+ value: e0,
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:12:32: 12:34 (#0),
+ },
+ Expr {
+ kind: Adt(
+ AdtExpr {
+ adt_def: Foo,
+ variant_index: 0,
+ substs: [],
+ user_ty: None,
+ fields: [
+ FieldExpr {
+ name: 0,
+ expr: e1,
+ },
+ ],
+ base: None,
+ },
+ ),
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:12:23: 12:35 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Node(3),
+ lint_level: Explicit(
+ HirId(DefId(0:8 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR1).3),
+ ),
+ value: e2,
+ },
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:12:23: 12:35 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Destruction(3),
+ lint_level: Inherited,
+ value: e3,
+ },
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:12:23: 12:35 (#0),
+ },
+ ],
+ stmts: [],
+ params: [],
+}
+
+DefId(0:9 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR2):
+Thir {
+ body_type: Const(
+ Foo,
+ ),
+ arms: [],
+ blocks: [],
+ exprs: [
+ Expr {
+ kind: Tuple {
+ fields: [],
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:13:33: 13:35 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Node(8),
+ lint_level: Explicit(
+ HirId(DefId(0:9 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR2).8),
+ ),
+ value: e0,
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:13:33: 13:35 (#0),
+ },
+ Expr {
+ kind: Adt(
+ AdtExpr {
+ adt_def: Foo,
+ variant_index: 0,
+ substs: [],
+ user_ty: None,
+ fields: [
+ FieldExpr {
+ name: 0,
+ expr: e1,
+ },
+ ],
+ base: None,
+ },
+ ),
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:13:23: 13:36 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Node(3),
+ lint_level: Explicit(
+ HirId(DefId(0:9 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR2).3),
+ ),
+ value: e2,
+ },
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:13:23: 13:36 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Destruction(3),
+ lint_level: Inherited,
+ value: e3,
+ },
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:13:23: 13:36 (#0),
+ },
+ ],
+ stmts: [],
+ params: [],
+}
+
+DefId(0:10 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR3):
+Thir {
+ body_type: Const(
+ Foo,
+ ),
+ arms: [],
+ blocks: [],
+ exprs: [
+ Expr {
+ kind: Tuple {
+ fields: [],
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:14:33: 14:35 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Node(7),
+ lint_level: Explicit(
+ HirId(DefId(0:10 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR3).7),
+ ),
+ value: e0,
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:14:33: 14:35 (#0),
+ },
+ Expr {
+ kind: Adt(
+ AdtExpr {
+ adt_def: Foo,
+ variant_index: 0,
+ substs: [],
+ user_ty: None,
+ fields: [
+ FieldExpr {
+ name: 0,
+ expr: e1,
+ },
+ ],
+ base: None,
+ },
+ ),
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:14:24: 14:36 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Node(3),
+ lint_level: Explicit(
+ HirId(DefId(0:10 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR3).3),
+ ),
+ value: e2,
+ },
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:14:24: 14:36 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Destruction(3),
+ lint_level: Inherited,
+ value: e3,
+ },
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:14:24: 14:36 (#0),
+ },
+ ],
+ stmts: [],
+ params: [],
+}
+
+DefId(0:11 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR4):
+Thir {
+ body_type: Const(
+ Foo,
+ ),
+ arms: [],
+ blocks: [],
+ exprs: [
+ Expr {
+ kind: Tuple {
+ fields: [],
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:15:34: 15:36 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Node(8),
+ lint_level: Explicit(
+ HirId(DefId(0:11 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR4).8),
+ ),
+ value: e0,
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:15:34: 15:36 (#0),
+ },
+ Expr {
+ kind: Adt(
+ AdtExpr {
+ adt_def: Foo,
+ variant_index: 0,
+ substs: [],
+ user_ty: None,
+ fields: [
+ FieldExpr {
+ name: 0,
+ expr: e1,
+ },
+ ],
+ base: None,
+ },
+ ),
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:15:24: 15:37 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Node(3),
+ lint_level: Explicit(
+ HirId(DefId(0:11 ~ thir_flat_const_variant[1f54]::{impl#0}::BAR4).3),
+ ),
+ value: e2,
+ },
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:15:24: 15:37 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Destruction(3),
+ lint_level: Inherited,
+ value: e3,
+ },
+ ty: Foo,
+ temp_lifetime: Some(
+ Node(3),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:15:24: 15:37 (#0),
+ },
+ ],
+ stmts: [],
+ params: [],
+}
+
+DefId(0:12 ~ thir_flat_const_variant[1f54]::main):
+Thir {
+ body_type: Fn(
+ fn(),
+ ),
+ arms: [],
+ blocks: [
+ Block {
+ targeted_by_break: false,
+ region_scope: Node(1),
+ opt_destruction_scope: None,
+ span: $DIR/thir-flat-const-variant.rs:18:11: 18:13 (#0),
+ stmts: [],
+ expr: None,
+ safety_mode: Safe,
+ },
+ ],
+ exprs: [
+ Expr {
+ kind: Block {
+ block: b0,
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(2),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:18:11: 18:13 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Node(2),
+ lint_level: Explicit(
+ HirId(DefId(0:12 ~ thir_flat_const_variant[1f54]::main).2),
+ ),
+ value: e0,
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(2),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:18:11: 18:13 (#0),
+ },
+ Expr {
+ kind: Scope {
+ region_scope: Destruction(2),
+ lint_level: Inherited,
+ value: e1,
+ },
+ ty: (),
+ temp_lifetime: Some(
+ Node(2),
+ ),
+ span: $DIR/thir-flat-const-variant.rs:18:11: 18:13 (#0),
+ },
+ ],
+ stmts: [],
+ params: [],
+}
+
diff --git a/tests/ui/thir-print/thir-flat.stdout b/tests/ui/thir-print/thir-flat.stdout
index 9d467f73d..b0aa44b56 100644
--- a/tests/ui/thir-print/thir-flat.stdout
+++ b/tests/ui/thir-print/thir-flat.stdout
@@ -1,7 +1,7 @@
DefId(0:3 ~ thir_flat[7b97]::main):
Thir {
body_type: Fn(
- ([]; c_variadic: false)->(),
+ fn(),
),
arms: [],
blocks: [
diff --git a/tests/ui/track-diagnostics/track6.stderr b/tests/ui/track-diagnostics/track6.stderr
index 89438aea9..583b02555 100644
--- a/tests/ui/track-diagnostics/track6.stderr
+++ b/tests/ui/track-diagnostics/track6.stderr
@@ -3,7 +3,7 @@ error[E0658]: specialization is unstable
|
LL | default fn bar() {}
| ^^^^^^^^^^^^^^^^^^^
--Ztrack-diagnostics: created at $COMPILER_DIR/rustc_session/src/parse.rs:LL:CC
+-Ztrack-diagnostics: created at compiler/rustc_ast_passes/src/feature_gate.rs:LL:CC
|
= note: see issue #31844 <https://github.com/rust-lang/rust/issues/31844> for more information
= help: add `#![feature(specialization)]` to the crate attributes to enable
diff --git a/tests/ui/trait-bounds/apit-unsized.rs b/tests/ui/trait-bounds/apit-unsized.rs
new file mode 100644
index 000000000..469d6a634
--- /dev/null
+++ b/tests/ui/trait-bounds/apit-unsized.rs
@@ -0,0 +1,4 @@
+fn foo(_: impl Iterator<Item = i32> + ?Sized) {} //~ ERROR [E0277]
+fn bar(_: impl ?Sized) {} //~ ERROR [E0277]
+
+fn main() {}
diff --git a/tests/ui/trait-bounds/apit-unsized.stderr b/tests/ui/trait-bounds/apit-unsized.stderr
new file mode 100644
index 000000000..0f2dc5259
--- /dev/null
+++ b/tests/ui/trait-bounds/apit-unsized.stderr
@@ -0,0 +1,41 @@
+error[E0277]: the size for values of type `impl Iterator<Item = i32> + ?Sized` cannot be known at compilation time
+ --> $DIR/apit-unsized.rs:1:8
+ |
+LL | fn foo(_: impl Iterator<Item = i32> + ?Sized) {}
+ | ^ ---------------------------------- this type parameter needs to be `Sized`
+ | |
+ | doesn't have a size known at compile-time
+ |
+ = help: unsized fn params are gated as an unstable feature
+help: consider removing the `?Sized` bound to make the type parameter `Sized`
+ |
+LL - fn foo(_: impl Iterator<Item = i32> + ?Sized) {}
+LL + fn foo(_: impl Iterator<Item = i32>) {}
+ |
+help: function arguments must have a statically known size, borrowed types always have a known size
+ |
+LL | fn foo(_: &impl Iterator<Item = i32> + ?Sized) {}
+ | +
+
+error[E0277]: the size for values of type `impl ?Sized` cannot be known at compilation time
+ --> $DIR/apit-unsized.rs:2:8
+ |
+LL | fn bar(_: impl ?Sized) {}
+ | ^ ----------- this type parameter needs to be `Sized`
+ | |
+ | doesn't have a size known at compile-time
+ |
+ = help: unsized fn params are gated as an unstable feature
+help: consider replacing `?Sized` with `Sized`
+ |
+LL - fn bar(_: impl ?Sized) {}
+LL + fn bar(_: impl Sized) {}
+ |
+help: function arguments must have a statically known size, borrowed types always have a known size
+ |
+LL | fn bar(_: &impl ?Sized) {}
+ | +
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/trait-bounds/unsized-bound.stderr b/tests/ui/trait-bounds/unsized-bound.stderr
index da27ba1c5..4d45bffab 100644
--- a/tests/ui/trait-bounds/unsized-bound.stderr
+++ b/tests/ui/trait-bounds/unsized-bound.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `B` cannot be known at compilation tim
LL | impl<A, B> Trait<(A, B)> for (A, B) where A: ?Sized, B: ?Sized, {}
| - ^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
= note: required because it appears within the type `(A, B)`
note: required by a bound in `Trait`
@@ -28,7 +28,7 @@ error[E0277]: the size for values of type `A` cannot be known at compilation tim
LL | impl<A, B> Trait<(A, B)> for (A, B) where A: ?Sized, B: ?Sized, {}
| - ^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
= note: only the last element of a tuple may have a dynamically sized type
help: consider removing the `?Sized` bound to make the type parameter `Sized`
@@ -43,7 +43,7 @@ error[E0277]: the size for values of type `C` cannot be known at compilation tim
LL | impl<A, B: ?Sized, C: ?Sized> Trait<(A, B, C)> for (A, B, C) where A: ?Sized, {}
| - ^^^^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
= note: required because it appears within the type `(A, B, C)`
note: required by a bound in `Trait`
@@ -65,9 +65,7 @@ error[E0277]: the size for values of type `A` cannot be known at compilation tim
--> $DIR/unsized-bound.rs:5:52
|
LL | impl<A, B: ?Sized, C: ?Sized> Trait<(A, B, C)> for (A, B, C) where A: ?Sized, {}
- | - ^^^^^^^^^ doesn't have a size known at compile-time
- | |
- | this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized` ^^^^^^^^^ doesn't have a size known at compile-time
|
= note: only the last element of a tuple may have a dynamically sized type
help: consider removing the `?Sized` bound to make the type parameter `Sized`
@@ -80,9 +78,7 @@ error[E0277]: the size for values of type `B` cannot be known at compilation tim
--> $DIR/unsized-bound.rs:5:52
|
LL | impl<A, B: ?Sized, C: ?Sized> Trait<(A, B, C)> for (A, B, C) where A: ?Sized, {}
- | - ^^^^^^^^^ doesn't have a size known at compile-time
- | |
- | this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized` ^^^^^^^^^ doesn't have a size known at compile-time
|
= note: only the last element of a tuple may have a dynamically sized type
help: consider removing the `?Sized` bound to make the type parameter `Sized`
@@ -97,7 +93,7 @@ error[E0277]: the size for values of type `B` cannot be known at compilation tim
LL | impl<A: ?Sized, B: ?Sized> Trait2<(A, B)> for (A, B) {}
| - ^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
= note: required because it appears within the type `(A, B)`
note: required by a bound in `Trait2`
@@ -121,7 +117,7 @@ error[E0277]: the size for values of type `A` cannot be known at compilation tim
LL | impl<A: ?Sized, B: ?Sized> Trait2<(A, B)> for (A, B) {}
| - ^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
= note: only the last element of a tuple may have a dynamically sized type
help: consider removing the `?Sized` bound to make the type parameter `Sized`
@@ -136,7 +132,7 @@ error[E0277]: the size for values of type `A` cannot be known at compilation tim
LL | impl<A> Trait3<A> for A where A: ?Sized {}
| - ^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Trait3`
--> $DIR/unsized-bound.rs:13:14
@@ -159,7 +155,7 @@ error[E0277]: the size for values of type `A` cannot be known at compilation tim
LL | impl<A: ?Sized> Trait4<A> for A {}
| - ^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Trait4`
--> $DIR/unsized-bound.rs:16:14
@@ -182,7 +178,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
LL | impl<X, Y> Trait5<X, Y> for X where X: ?Sized {}
| - ^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Trait5`
--> $DIR/unsized-bound.rs:19:14
@@ -205,7 +201,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
LL | impl<X: ?Sized, Y> Trait6<X, Y> for X {}
| - ^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Trait6`
--> $DIR/unsized-bound.rs:22:14
@@ -228,7 +224,7 @@ error[E0277]: the size for values of type `Y` cannot be known at compilation tim
LL | impl<X, Y> Trait7<X, Y> for X where Y: ?Sized {}
| - ^^^^^^^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Trait7`
--> $DIR/unsized-bound.rs:25:17
@@ -251,7 +247,7 @@ error[E0277]: the size for values of type `Y` cannot be known at compilation tim
LL | impl<X, Y: ?Sized> Trait8<X, Y> for X {}
| - ^^^^^^^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Trait8`
--> $DIR/unsized-bound.rs:28:17
diff --git a/tests/ui/traits/auxiliary/trivial3.rs b/tests/ui/traits/auxiliary/trivial3.rs
new file mode 100644
index 000000000..0a47fdc74
--- /dev/null
+++ b/tests/ui/traits/auxiliary/trivial3.rs
@@ -0,0 +1 @@
+pub trait Trait {}
diff --git a/tests/ui/traits/auxiliary/trivial4.rs b/tests/ui/traits/auxiliary/trivial4.rs
new file mode 100644
index 000000000..a527d1a95
--- /dev/null
+++ b/tests/ui/traits/auxiliary/trivial4.rs
@@ -0,0 +1,3 @@
+pub trait Trait {}
+
+impl Trait for () {}
diff --git a/tests/ui/traits/bound/assoc-fn-bound-root-obligation.stderr b/tests/ui/traits/bound/assoc-fn-bound-root-obligation.stderr
index ce9ab2d81..b1c683e47 100644
--- a/tests/ui/traits/bound/assoc-fn-bound-root-obligation.stderr
+++ b/tests/ui/traits/bound/assoc-fn-bound-root-obligation.stderr
@@ -6,13 +6,13 @@ LL | s.strip_suffix(b'\n').unwrap_or(s)
|
= help: the trait `FnMut<(char,)>` is not implemented for `u8`
= help: the following other types implement trait `Pattern<'a>`:
+ char
+ [char; N]
&'b String
&'b [char; N]
&'b [char]
- &'b str
&'c &'b str
- [char; N]
- char
+ &'b str
= note: required for `u8` to implement `Pattern<'_>`
error: aborting due to previous error
diff --git a/tests/ui/traits/bound/generic_trait.rs b/tests/ui/traits/bound/generic_trait.rs
index 18382bb59..2484c5a88 100644
--- a/tests/ui/traits/bound/generic_trait.rs
+++ b/tests/ui/traits/bound/generic_trait.rs
@@ -24,7 +24,7 @@ impl connection_factory<my_connection> for my_connection_factory {
pub fn main() {
let factory = ();
- let connection = factory.create();
+ let connection: () = factory.create();
let result = connection.read();
assert_eq!(result, 43);
}
diff --git a/tests/ui/traits/cache-reached-depth-ice.rs b/tests/ui/traits/cache-reached-depth-ice.rs
index c36ac0857..8c2391113 100644
--- a/tests/ui/traits/cache-reached-depth-ice.rs
+++ b/tests/ui/traits/cache-reached-depth-ice.rs
@@ -41,5 +41,5 @@ fn test<X: ?Sized + Send>() {}
fn main() {
test::<A>();
- //~^ ERROR evaluate(Binder(TraitPredicate(<A as std::marker::Send>, polarity:Positive), [])) = Ok(EvaluatedToOk)
+ //~^ ERROR evaluate(Binder { value: TraitPredicate(<A as std::marker::Send>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
}
diff --git a/tests/ui/traits/cache-reached-depth-ice.stderr b/tests/ui/traits/cache-reached-depth-ice.stderr
index 082aa0f5c..7cd758192 100644
--- a/tests/ui/traits/cache-reached-depth-ice.stderr
+++ b/tests/ui/traits/cache-reached-depth-ice.stderr
@@ -1,4 +1,4 @@
-error: evaluate(Binder(TraitPredicate(<A as std::marker::Send>, polarity:Positive), [])) = Ok(EvaluatedToOk)
+error: evaluate(Binder { value: TraitPredicate(<A as std::marker::Send>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
--> $DIR/cache-reached-depth-ice.rs:43:5
|
LL | fn test<X: ?Sized + Send>() {}
diff --git a/tests/ui/traits/deny-builtin-object-impl.current.stderr b/tests/ui/traits/deny-builtin-object-impl.current.stderr
new file mode 100644
index 000000000..5c1987426
--- /dev/null
+++ b/tests/ui/traits/deny-builtin-object-impl.current.stderr
@@ -0,0 +1,15 @@
+error[E0277]: the trait bound `dyn NotObject: NotObject` is not satisfied
+ --> $DIR/deny-builtin-object-impl.rs:18:23
+ |
+LL | test_not_object::<dyn NotObject>();
+ | ^^^^^^^^^^^^^ the trait `NotObject` is not implemented for `dyn NotObject`
+ |
+note: required by a bound in `test_not_object`
+ --> $DIR/deny-builtin-object-impl.rs:14:23
+ |
+LL | fn test_not_object<T: NotObject + ?Sized>() {}
+ | ^^^^^^^^^ required by this bound in `test_not_object`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/traits/deny-builtin-object-impl.next.stderr b/tests/ui/traits/deny-builtin-object-impl.next.stderr
new file mode 100644
index 000000000..5c1987426
--- /dev/null
+++ b/tests/ui/traits/deny-builtin-object-impl.next.stderr
@@ -0,0 +1,15 @@
+error[E0277]: the trait bound `dyn NotObject: NotObject` is not satisfied
+ --> $DIR/deny-builtin-object-impl.rs:18:23
+ |
+LL | test_not_object::<dyn NotObject>();
+ | ^^^^^^^^^^^^^ the trait `NotObject` is not implemented for `dyn NotObject`
+ |
+note: required by a bound in `test_not_object`
+ --> $DIR/deny-builtin-object-impl.rs:14:23
+ |
+LL | fn test_not_object<T: NotObject + ?Sized>() {}
+ | ^^^^^^^^^ required by this bound in `test_not_object`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/traits/deny-builtin-object-impl.rs b/tests/ui/traits/deny-builtin-object-impl.rs
new file mode 100644
index 000000000..dce03a43b
--- /dev/null
+++ b/tests/ui/traits/deny-builtin-object-impl.rs
@@ -0,0 +1,20 @@
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
+
+#![feature(rustc_attrs)]
+
+#[rustc_deny_explicit_impl(implement_via_object = true)]
+trait YesObject {}
+
+#[rustc_deny_explicit_impl(implement_via_object = false)]
+trait NotObject {}
+
+fn test_yes_object<T: YesObject + ?Sized>() {}
+
+fn test_not_object<T: NotObject + ?Sized>() {}
+
+fn main() {
+ test_yes_object::<dyn YesObject>();
+ test_not_object::<dyn NotObject>();
+ //~^ ERROR the trait bound `dyn NotObject: NotObject` is not satisfied
+}
diff --git a/tests/ui/traits/ice-with-dyn-pointee-errors.rs b/tests/ui/traits/ice-with-dyn-pointee-errors.rs
new file mode 100644
index 000000000..46cef2c8b
--- /dev/null
+++ b/tests/ui/traits/ice-with-dyn-pointee-errors.rs
@@ -0,0 +1,15 @@
+#![feature(ptr_metadata)]
+// Address issue #112737 -- ICE with dyn Pointee
+extern crate core;
+use core::ptr::Pointee;
+
+fn unknown_sized_object_ptr_in(_: &(impl Pointee<Metadata = ()> + ?Sized)) {}
+
+fn raw_pointer_in(x: &dyn Pointee<Metadata = ()>) {
+ unknown_sized_object_ptr_in(x)
+ //~^ ERROR type mismatch resolving `<dyn Pointee<Metadata = ()> as Pointee>::Metadata == ()`
+}
+
+fn main() {
+ raw_pointer_in(&42)
+}
diff --git a/tests/ui/traits/ice-with-dyn-pointee-errors.stderr b/tests/ui/traits/ice-with-dyn-pointee-errors.stderr
new file mode 100644
index 000000000..8ad11c334
--- /dev/null
+++ b/tests/ui/traits/ice-with-dyn-pointee-errors.stderr
@@ -0,0 +1,19 @@
+error[E0271]: type mismatch resolving `<dyn Pointee<Metadata = ()> as Pointee>::Metadata == ()`
+ --> $DIR/ice-with-dyn-pointee-errors.rs:9:33
+ |
+LL | unknown_sized_object_ptr_in(x)
+ | --------------------------- ^ expected `()`, found `DynMetadata<dyn Pointee<Metadata = ...>>`
+ | |
+ | required by a bound introduced by this call
+ |
+ = note: expected unit type `()`
+ found struct `DynMetadata<dyn Pointee<Metadata = ()>>`
+note: required by a bound in `unknown_sized_object_ptr_in`
+ --> $DIR/ice-with-dyn-pointee-errors.rs:6:50
+ |
+LL | fn unknown_sized_object_ptr_in(_: &(impl Pointee<Metadata = ()> + ?Sized)) {}
+ | ^^^^^^^^^^^^^ required by this bound in `unknown_sized_object_ptr_in`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0271`.
diff --git a/tests/ui/traits/ice-with-dyn-pointee.rs b/tests/ui/traits/ice-with-dyn-pointee.rs
new file mode 100644
index 000000000..9b3b9c8cd
--- /dev/null
+++ b/tests/ui/traits/ice-with-dyn-pointee.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![feature(ptr_metadata)]
+// Address issue #112737 -- ICE with dyn Pointee
+extern crate core;
+use core::ptr::Pointee;
+
+fn raw_pointer_in(_: &dyn Pointee<Metadata = ()>) {}
+
+fn main() {
+ raw_pointer_in(&42)
+}
diff --git a/tests/ui/traits/issue-105231.rs b/tests/ui/traits/issue-105231.rs
new file mode 100644
index 000000000..74c7afd6b
--- /dev/null
+++ b/tests/ui/traits/issue-105231.rs
@@ -0,0 +1,9 @@
+//~ ERROR overflow evaluating the requirement `A<A<A<A<A<A<A<...>>>>>>>: Send`
+struct A<T>(B<T>);
+//~^ ERROR recursive types `A` and `B` have infinite size
+struct B<T>(A<A<T>>);
+trait Foo {}
+impl<T> Foo for T where T: Send {}
+impl Foo for B<u8> {}
+
+fn main() {}
diff --git a/tests/ui/traits/issue-105231.stderr b/tests/ui/traits/issue-105231.stderr
new file mode 100644
index 000000000..fe20c47c5
--- /dev/null
+++ b/tests/ui/traits/issue-105231.stderr
@@ -0,0 +1,29 @@
+error[E0072]: recursive types `A` and `B` have infinite size
+ --> $DIR/issue-105231.rs:2:1
+ |
+LL | struct A<T>(B<T>);
+ | ^^^^^^^^^^^ ---- recursive without indirection
+LL |
+LL | struct B<T>(A<A<T>>);
+ | ^^^^^^^^^^^ ------- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
+ |
+LL ~ struct A<T>(Box<B<T>>);
+LL |
+LL ~ struct B<T>(Box<A<A<T>>>);
+ |
+
+error[E0275]: overflow evaluating the requirement `A<A<A<A<A<A<A<...>>>>>>>: Send`
+ |
+ = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_105231`)
+note: required because it appears within the type `B<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
+ --> $DIR/issue-105231.rs:4:8
+ |
+LL | struct B<T>(A<A<T>>);
+ | ^
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0072, E0275.
+For more information about an error, try `rustc --explain E0072`.
diff --git a/tests/ui/traits/issue-83538-tainted-cache-after-cycle.rs b/tests/ui/traits/issue-83538-tainted-cache-after-cycle.rs
index 3cd68ff6f..5136aef4f 100644
--- a/tests/ui/traits/issue-83538-tainted-cache-after-cycle.rs
+++ b/tests/ui/traits/issue-83538-tainted-cache-after-cycle.rs
@@ -57,10 +57,10 @@ fn main() {
// Key is that Vec<First> is "ok" and Third<'_, Ty> is "ok modulo regions":
forward();
- //~^ ERROR evaluate(Binder(TraitPredicate(<std::vec::Vec<First> as std::marker::Unpin>, polarity:Positive), [])) = Ok(EvaluatedToOk)
- //~| ERROR evaluate(Binder(TraitPredicate(<Third<'_, Ty> as std::marker::Unpin>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
+ //~^ ERROR evaluate(Binder { value: TraitPredicate(<std::vec::Vec<First> as std::marker::Unpin>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
+ //~| ERROR evaluate(Binder { value: TraitPredicate(<Third<'_, Ty> as std::marker::Unpin>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
reverse();
- //~^ ERROR evaluate(Binder(TraitPredicate(<std::vec::Vec<First> as std::marker::Unpin>, polarity:Positive), [])) = Ok(EvaluatedToOk)
- //~| ERROR evaluate(Binder(TraitPredicate(<Third<'_, Ty> as std::marker::Unpin>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
+ //~^ ERROR evaluate(Binder { value: TraitPredicate(<std::vec::Vec<First> as std::marker::Unpin>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
+ //~| ERROR evaluate(Binder { value: TraitPredicate(<Third<'_, Ty> as std::marker::Unpin>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
}
diff --git a/tests/ui/traits/issue-83538-tainted-cache-after-cycle.stderr b/tests/ui/traits/issue-83538-tainted-cache-after-cycle.stderr
index 7c4041144..96baec76a 100644
--- a/tests/ui/traits/issue-83538-tainted-cache-after-cycle.stderr
+++ b/tests/ui/traits/issue-83538-tainted-cache-after-cycle.stderr
@@ -1,4 +1,4 @@
-error: evaluate(Binder(TraitPredicate(<std::vec::Vec<First> as std::marker::Unpin>, polarity:Positive), [])) = Ok(EvaluatedToOk)
+error: evaluate(Binder { value: TraitPredicate(<std::vec::Vec<First> as std::marker::Unpin>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
--> $DIR/issue-83538-tainted-cache-after-cycle.rs:59:5
|
LL | Vec<First>: Unpin,
@@ -7,7 +7,7 @@ LL | Vec<First>: Unpin,
LL | forward();
| ^^^^^^^
-error: evaluate(Binder(TraitPredicate(<Third<'_, Ty> as std::marker::Unpin>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
+error: evaluate(Binder { value: TraitPredicate(<Third<'_, Ty> as std::marker::Unpin>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
--> $DIR/issue-83538-tainted-cache-after-cycle.rs:59:5
|
LL | Third<'a, Ty>: Unpin,
@@ -16,7 +16,7 @@ LL | Third<'a, Ty>: Unpin,
LL | forward();
| ^^^^^^^
-error: evaluate(Binder(TraitPredicate(<Third<'_, Ty> as std::marker::Unpin>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
+error: evaluate(Binder { value: TraitPredicate(<Third<'_, Ty> as std::marker::Unpin>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
--> $DIR/issue-83538-tainted-cache-after-cycle.rs:63:5
|
LL | Third<'a, Ty>: Unpin,
@@ -25,7 +25,7 @@ LL | Third<'a, Ty>: Unpin,
LL | reverse();
| ^^^^^^^
-error: evaluate(Binder(TraitPredicate(<std::vec::Vec<First> as std::marker::Unpin>, polarity:Positive), [])) = Ok(EvaluatedToOk)
+error: evaluate(Binder { value: TraitPredicate(<std::vec::Vec<First> as std::marker::Unpin>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
--> $DIR/issue-83538-tainted-cache-after-cycle.rs:63:5
|
LL | Vec<First>: Unpin,
diff --git a/tests/ui/traits/issue-85360-eval-obligation-ice.rs b/tests/ui/traits/issue-85360-eval-obligation-ice.rs
index 19131684a..ac8bda9c0 100644
--- a/tests/ui/traits/issue-85360-eval-obligation-ice.rs
+++ b/tests/ui/traits/issue-85360-eval-obligation-ice.rs
@@ -7,12 +7,12 @@ use core::marker::PhantomData;
fn main() {
test::<MaskedStorage<GenericComp<Pos>>>(make());
- //~^ ERROR evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOk)
- //~| ERROR evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOk)
+ //~^ ERROR evaluate(Binder { value: TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
+ //~| ERROR evaluate(Binder { value: TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
test::<MaskedStorage<GenericComp2<Pos>>>(make());
- //~^ ERROR evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
- //~| ERROR evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
+ //~^ ERROR evaluate(Binder { value: TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
+ //~| ERROR evaluate(Binder { value: TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
}
#[rustc_evaluate_where_clauses]
diff --git a/tests/ui/traits/issue-85360-eval-obligation-ice.stderr b/tests/ui/traits/issue-85360-eval-obligation-ice.stderr
index ebf977dd6..9590ea12c 100644
--- a/tests/ui/traits/issue-85360-eval-obligation-ice.stderr
+++ b/tests/ui/traits/issue-85360-eval-obligation-ice.stderr
@@ -1,4 +1,4 @@
-error: evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOk)
+error: evaluate(Binder { value: TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
--> $DIR/issue-85360-eval-obligation-ice.rs:9:5
|
LL | test::<MaskedStorage<GenericComp<Pos>>>(make());
@@ -7,7 +7,7 @@ LL | test::<MaskedStorage<GenericComp<Pos>>>(make());
LL | fn test<T: Sized>(_: T) {}
| - predicate
-error: evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOk)
+error: evaluate(Binder { value: TraitPredicate(<MaskedStorage<GenericComp<Pos>> as std::marker::Sized>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
--> $DIR/issue-85360-eval-obligation-ice.rs:9:5
|
LL | test::<MaskedStorage<GenericComp<Pos>>>(make());
@@ -16,7 +16,7 @@ LL | test::<MaskedStorage<GenericComp<Pos>>>(make());
LL | fn test<T: Sized>(_: T) {}
| ----- predicate
-error: evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
+error: evaluate(Binder { value: TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
--> $DIR/issue-85360-eval-obligation-ice.rs:13:5
|
LL | test::<MaskedStorage<GenericComp2<Pos>>>(make());
@@ -25,7 +25,7 @@ LL | test::<MaskedStorage<GenericComp2<Pos>>>(make());
LL | fn test<T: Sized>(_: T) {}
| - predicate
-error: evaluate(Binder(TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
+error: evaluate(Binder { value: TraitPredicate(<MaskedStorage<GenericComp2<Pos>> as std::marker::Sized>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
--> $DIR/issue-85360-eval-obligation-ice.rs:13:5
|
LL | test::<MaskedStorage<GenericComp2<Pos>>>(make());
diff --git a/tests/ui/traits/issue-91949-hangs-on-recursion.rs b/tests/ui/traits/issue-91949-hangs-on-recursion.rs
index 4eca643a9..312d5d08c 100644
--- a/tests/ui/traits/issue-91949-hangs-on-recursion.rs
+++ b/tests/ui/traits/issue-91949-hangs-on-recursion.rs
@@ -3,6 +3,7 @@
// error-pattern: overflow evaluating the requirement `<std::iter::Empty<()> as Iterator>::Item == ()`
// error-pattern: function cannot return without recursing
// normalize-stderr-test: "long-type-\d+" -> "long-type-hash"
+// ignore-compare-mode-next-solver (hangs)
// Regression test for #91949.
// This hanged *forever* on 1.56, fixed by #90423.
diff --git a/tests/ui/traits/issue-91949-hangs-on-recursion.stderr b/tests/ui/traits/issue-91949-hangs-on-recursion.stderr
index 144990d50..c721dd41a 100644
--- a/tests/ui/traits/issue-91949-hangs-on-recursion.stderr
+++ b/tests/ui/traits/issue-91949-hangs-on-recursion.stderr
@@ -1,5 +1,5 @@
warning: function cannot return without recursing
- --> $DIR/issue-91949-hangs-on-recursion.rs:23:1
+ --> $DIR/issue-91949-hangs-on-recursion.rs:24:1
|
LL | / fn recurse<T>(elements: T) -> Vec<char>
LL | | where
@@ -16,7 +16,7 @@ error[E0275]: overflow evaluating the requirement `<std::iter::Empty<()> as Iter
|
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "512"]` attribute to your crate (`issue_91949_hangs_on_recursion`)
note: required for `IteratorOfWrapped<(), std::iter::Empty<()>>` to implement `Iterator`
- --> $DIR/issue-91949-hangs-on-recursion.rs:16:32
+ --> $DIR/issue-91949-hangs-on-recursion.rs:17:32
|
LL | impl<T, I: Iterator<Item = T>> Iterator for IteratorOfWrapped<T, I> {
| -------- ^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/traits/new-solver/alias-bound-unsound.rs b/tests/ui/traits/new-solver/alias-bound-unsound.rs
index 00294c708..959f1afa0 100644
--- a/tests/ui/traits/new-solver/alias-bound-unsound.rs
+++ b/tests/ui/traits/new-solver/alias-bound-unsound.rs
@@ -21,7 +21,7 @@ impl Foo for () {
fn main() {
let x = String::from("hello, world");
drop(<() as Foo>::copy_me(&x));
- //~^ ERROR `<() as Foo>::Item: Copy` is not satisfied
+ //~^ ERROR the type `&<() as Foo>::Item` is not well-formed
//~| ERROR `<() as Foo>::Item` is not well-formed
println!("{x}");
}
diff --git a/tests/ui/traits/new-solver/alias-bound-unsound.stderr b/tests/ui/traits/new-solver/alias-bound-unsound.stderr
index 9a43d2a66..5800e2c43 100644
--- a/tests/ui/traits/new-solver/alias-bound-unsound.stderr
+++ b/tests/ui/traits/new-solver/alias-bound-unsound.stderr
@@ -1,17 +1,8 @@
-error[E0277]: the trait bound `<() as Foo>::Item: Copy` is not satisfied
- --> $DIR/alias-bound-unsound.rs:23:10
+error: the type `&<() as Foo>::Item` is not well-formed
+ --> $DIR/alias-bound-unsound.rs:23:31
|
LL | drop(<() as Foo>::copy_me(&x));
- | ^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `<() as Foo>::Item`
- |
-note: required by a bound in `Foo::Item`
- --> $DIR/alias-bound-unsound.rs:10:30
- |
-LL | type Item: Copy
- | ---- required by a bound in this associated type
-LL | where
-LL | <Self as Foo>::Item: Copy;
- | ^^^^ required by this bound in `Foo::Item`
+ | ^^
error: the type `<() as Foo>::Item` is not well-formed
--> $DIR/alias-bound-unsound.rs:23:10
@@ -21,4 +12,3 @@ LL | drop(<() as Foo>::copy_me(&x));
error: aborting due to 2 previous errors
-For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.rs b/tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.rs
index b036411be..204f6e8b0 100644
--- a/tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.rs
+++ b/tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.rs
@@ -1,22 +1,17 @@
// compile-flags: -Ztrait-solver=next
-// check-pass
-// (should not pass, should be turned into a coherence-only test)
-
-// check that a `alias-eq(<?0 as TraitB>::Assoc, <T as TraitB>::Assoc)` goal fails.
-
-// FIXME(deferred_projection_equality): add a test that this is true during coherence
+// check that a `alias-eq(<?a as TraitB>::Assoc, <?b as TraitB>::Assoc)` goal fails
+// during coherence. We must not incorrectly constrain `?a` and `?b` to be
+// equal.
trait TraitB {
type Assoc;
}
-fn needs_a<T: TraitB>() -> T::Assoc {
- unimplemented!()
-}
+trait Overlaps<T> {}
-fn bar<T: TraitB>() {
- let _: <_ as TraitB>::Assoc = needs_a::<T>();
-}
+impl<T: TraitB> Overlaps<Box<T>> for <T as TraitB>::Assoc {}
+impl<U: TraitB> Overlaps<U> for <U as TraitB>::Assoc {}
+//~^ ERROR conflicting implementations of trait
fn main() {}
diff --git a/tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.stderr b/tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.stderr
new file mode 100644
index 000000000..8eda64e44
--- /dev/null
+++ b/tests/ui/traits/new-solver/alias_eq_substs_eq_not_intercrate.stderr
@@ -0,0 +1,11 @@
+error[E0119]: conflicting implementations of trait `Overlaps<Box<_>>` for type `<_ as TraitB>::Assoc`
+ --> $DIR/alias_eq_substs_eq_not_intercrate.rs:14:1
+ |
+LL | impl<T: TraitB> Overlaps<Box<T>> for <T as TraitB>::Assoc {}
+ | --------------------------------------------------------- first implementation here
+LL | impl<U: TraitB> Overlaps<U> for <U as TraitB>::Assoc {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `<_ as TraitB>::Assoc`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/traits/new-solver/array-default.rs b/tests/ui/traits/new-solver/array-default.rs
new file mode 100644
index 000000000..5077137b0
--- /dev/null
+++ b/tests/ui/traits/new-solver/array-default.rs
@@ -0,0 +1,8 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+fn has_default<const N: usize>() where [(); N]: Default {}
+
+fn main() {
+ has_default::<1>();
+}
diff --git a/tests/ui/traits/new-solver/async.fail.stderr b/tests/ui/traits/new-solver/async.fail.stderr
index b395c23ae..72fa2eb31 100644
--- a/tests/ui/traits/new-solver/async.fail.stderr
+++ b/tests/ui/traits/new-solver/async.fail.stderr
@@ -1,8 +1,8 @@
-error[E0271]: expected `[async block@$DIR/async.rs:12:17: 12:25]` to be a future that resolves to `i32`, but it resolves to `()`
+error[E0271]: type mismatch resolving `<[async block@$DIR/async.rs:12:17: 12:25] as Future>::Output == i32`
--> $DIR/async.rs:12:17
|
LL | needs_async(async {});
- | ----------- ^^^^^^^^ expected `i32`, found `()`
+ | ----------- ^^^^^^^^ types differ
| |
| required by a bound introduced by this call
|
diff --git a/tests/ui/traits/new-solver/async.rs b/tests/ui/traits/new-solver/async.rs
index 195cc35ca..155b71eb7 100644
--- a/tests/ui/traits/new-solver/async.rs
+++ b/tests/ui/traits/new-solver/async.rs
@@ -10,7 +10,7 @@ fn needs_async(_: impl Future<Output = i32>) {}
#[cfg(fail)]
fn main() {
needs_async(async {});
- //[fail]~^ ERROR to be a future that resolves to `i32`, but it resolves to `()`
+ //[fail]~^ ERROR type mismatch
}
#[cfg(pass)]
diff --git a/tests/ui/traits/new-solver/closure-substs-ambiguity.rs b/tests/ui/traits/new-solver/closure-substs-ambiguity.rs
new file mode 100644
index 000000000..48432f402
--- /dev/null
+++ b/tests/ui/traits/new-solver/closure-substs-ambiguity.rs
@@ -0,0 +1,7 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+fn main() {
+ let mut x: Vec<_> = vec![];
+ x.extend(Some(1i32).into_iter().map(|x| x));
+}
diff --git a/tests/ui/traits/new-solver/dedup-regions.rs b/tests/ui/traits/new-solver/dedup-regions.rs
new file mode 100644
index 000000000..f376f39a5
--- /dev/null
+++ b/tests/ui/traits/new-solver/dedup-regions.rs
@@ -0,0 +1,31 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+struct A(*mut ());
+
+unsafe impl Send for A where A: 'static {}
+
+macro_rules! mk {
+ ($name:ident $ty:ty) => {
+ struct $name($ty, $ty, $ty, $ty, $ty, $ty, $ty, $ty, $ty, $ty);
+ };
+}
+
+mk!(B A);
+mk!(C B);
+mk!(D C);
+mk!(E D);
+mk!(F E);
+mk!(G F);
+mk!(H G);
+mk!(I H);
+mk!(J I);
+mk!(K J);
+mk!(L K);
+mk!(M L);
+
+fn needs_send<T: Send>() {}
+
+fn main() {
+ needs_send::<M>();
+}
diff --git a/tests/ui/traits/new-solver/dont-remap-tait-substs.rs b/tests/ui/traits/new-solver/dont-remap-tait-substs.rs
new file mode 100644
index 000000000..309bee8aa
--- /dev/null
+++ b/tests/ui/traits/new-solver/dont-remap-tait-substs.rs
@@ -0,0 +1,19 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+// Makes sure we don't prepopulate the MIR typeck of `define`
+// with `Foo<T, U> = T`, but instead, `Foo<B, A> = B`, so that
+// the param-env predicates actually apply.
+
+#![feature(type_alias_impl_trait)]
+
+type Foo<T: Send, U> = impl NeedsSend<T>;
+
+trait NeedsSend<T> {}
+impl<T: Send> NeedsSend<T> for T {}
+
+fn define<A, B: Send>(a: A, b: B, _: Foo<B, A>) {
+ let y: Option<Foo<B, A>> = Some(b);
+}
+
+fn main() {}
diff --git a/tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.not_send.stderr b/tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.not_send.stderr
new file mode 100644
index 000000000..ec1c3231a
--- /dev/null
+++ b/tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.not_send.stderr
@@ -0,0 +1,16 @@
+error[E0283]: type annotations needed: cannot satisfy `Foo: Send`
+ --> $DIR/dont-type_of-tait-in-defining-scope.rs:16:5
+ |
+LL | needs_send::<Foo>();
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: cannot satisfy `Foo: Send`
+note: required by a bound in `needs_send`
+ --> $DIR/dont-type_of-tait-in-defining-scope.rs:13:18
+ |
+LL | fn needs_send<T: Send>() {}
+ | ^^^^ required by this bound in `needs_send`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0283`.
diff --git a/tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.rs b/tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.rs
new file mode 100644
index 000000000..08f14d749
--- /dev/null
+++ b/tests/ui/traits/new-solver/dont-type_of-tait-in-defining-scope.rs
@@ -0,0 +1,24 @@
+// revisions: is_send not_send
+// compile-flags: -Ztrait-solver=next
+//[is_send] check-pass
+
+#![feature(type_alias_impl_trait)]
+
+#[cfg(is_send)]
+type Foo = impl Send;
+
+#[cfg(not_send)]
+type Foo = impl Sized;
+
+fn needs_send<T: Send>() {}
+
+fn test(_: Foo) {
+ needs_send::<Foo>();
+ //[not_send]~^ ERROR type annotations needed: cannot satisfy `Foo: Send`
+}
+
+fn defines(_: Foo) {
+ let _: Foo = ();
+}
+
+fn main() {}
diff --git a/tests/ui/traits/new-solver/dyn-any-dont-prefer-impl.rs b/tests/ui/traits/new-solver/dyn-any-dont-prefer-impl.rs
new file mode 100644
index 000000000..7d15b8c63
--- /dev/null
+++ b/tests/ui/traits/new-solver/dyn-any-dont-prefer-impl.rs
@@ -0,0 +1,13 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+use std::any::Any;
+
+fn needs_usize(_: &usize) {}
+
+fn main() {
+ let x: &dyn Any = &1usize;
+ if let Some(x) = x.downcast_ref::<usize>() {
+ needs_usize(x);
+ }
+}
diff --git a/tests/ui/traits/new-solver/equating-projection-cyclically.rs b/tests/ui/traits/new-solver/equating-projection-cyclically.rs
index 019c6e81c..2668da1b7 100644
--- a/tests/ui/traits/new-solver/equating-projection-cyclically.rs
+++ b/tests/ui/traits/new-solver/equating-projection-cyclically.rs
@@ -1,11 +1,10 @@
// compile-flags: -Ztrait-solver=next
-// known-bug: unknown
trait Test {
type Assoc;
}
-fn transform<T: Test>(x: T) -> T::Assoc {
+fn transform<T: Test>(x: Inv<T>) -> Inv<T::Assoc> {
todo!()
}
@@ -17,8 +16,13 @@ impl Test for String {
type Assoc = String;
}
+struct Inv<T>(Option<*mut T>);
+
fn main() {
- let mut x = Default::default();
+ let mut x: Inv<_> = Inv(None);
+ // This ends up equating `Inv<?x>` with `Inv<<?x as Test>::Assoc>`
+ // which fails the occurs check when generalizing `?x`.
x = transform(x);
- x = 1i32;
+ //~^ ERROR mismatched types
+ x = Inv::<i32>(None);
}
diff --git a/tests/ui/traits/new-solver/equating-projection-cyclically.stderr b/tests/ui/traits/new-solver/equating-projection-cyclically.stderr
index 57cbc65a1..6031d4f08 100644
--- a/tests/ui/traits/new-solver/equating-projection-cyclically.stderr
+++ b/tests/ui/traits/new-solver/equating-projection-cyclically.stderr
@@ -1,13 +1,8 @@
error[E0308]: mismatched types
- --> $DIR/equating-projection-cyclically.rs:22:19
+ --> $DIR/equating-projection-cyclically.rs:25:9
|
LL | x = transform(x);
- | ^ expected inferred type, found associated type
- |
- = note: expected type `_`
- found associated type `<_ as Test>::Assoc`
- = help: consider constraining the associated type `<_ as Test>::Assoc` to `_`
- = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
+ | ^^^^^^^^^^^^ cyclic type of infinite size
error: aborting due to previous error
diff --git a/tests/ui/traits/new-solver/lazy-nested-obligations-2.rs b/tests/ui/traits/new-solver/lazy-nested-obligations-2.rs
index 32addd829..fd91d81cd 100644
--- a/tests/ui/traits/new-solver/lazy-nested-obligations-2.rs
+++ b/tests/ui/traits/new-solver/lazy-nested-obligations-2.rs
@@ -1,6 +1,5 @@
-// check-pass
// compile-flags: -Ztrait-solver=next
-// Issue 95863
+// known-bug: #95863
pub trait With {
type F;
diff --git a/tests/ui/traits/new-solver/lazy-nested-obligations-2.stderr b/tests/ui/traits/new-solver/lazy-nested-obligations-2.stderr
new file mode 100644
index 000000000..d0a4cd661
--- /dev/null
+++ b/tests/ui/traits/new-solver/lazy-nested-obligations-2.stderr
@@ -0,0 +1,39 @@
+error[E0308]: mismatched types
+ --> $DIR/lazy-nested-obligations-2.rs:15:23
+ |
+LL | let _: V<i32> = V(f);
+ | - ^ types differ
+ | |
+ | arguments to this struct are incorrect
+ |
+ = note: expected associated type `<i32 as With>::F`
+ found fn item `for<'a> fn(&'a str) {f}`
+ = help: consider constraining the associated type `<i32 as With>::F` to `for<'a> fn(&'a str) {f}` or calling a method that returns `<i32 as With>::F`
+ = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
+note: tuple struct defined here
+ --> $DIR/lazy-nested-obligations-2.rs:16:16
+ |
+LL | pub struct V<T: With>(<T as With>::F);
+ | ^
+
+error[E0308]: mismatched types
+ --> $DIR/lazy-nested-obligations-2.rs:21:30
+ |
+LL | let _: E3<i32> = E3::Var(f);
+ | ------- ^ types differ
+ | |
+ | arguments to this enum variant are incorrect
+ |
+ = note: expected associated type `<i32 as With>::F`
+ found fn item `for<'a> fn(&'a str) {f}`
+ = help: consider constraining the associated type `<i32 as With>::F` to `for<'a> fn(&'a str) {f}` or calling a method that returns `<i32 as With>::F`
+ = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
+note: tuple variant defined here
+ --> $DIR/lazy-nested-obligations-2.rs:19:9
+ |
+LL | Var(<T as With>::F),
+ | ^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/traits/new-solver/leak-check-coinductive-cycle.rs b/tests/ui/traits/new-solver/leak-check-coinductive-cycle.rs
new file mode 100644
index 000000000..1f7d4a49c
--- /dev/null
+++ b/tests/ui/traits/new-solver/leak-check-coinductive-cycle.rs
@@ -0,0 +1,33 @@
+// check-pass
+// compile-flags: -Ztrait-solver=next
+#![feature(rustc_attrs)]
+
+#[rustc_coinductive]
+trait Trait<T> {}
+impl<'a, 'b, T> Trait<T> for (&'a (), &'b ())
+where
+ 'b: 'a,
+ &'a (): Trait<T>,
+{}
+
+impl Trait<i32> for &'static () {}
+impl<'a> Trait<u32> for &'a ()
+where
+ for<'b> (&'a (), &'b ()): Trait<u32>,
+{}
+
+
+fn impls_trait<T: Trait<U>, U>() {}
+
+fn main() {
+ // This infers to `impls_trait::<(&'static (), &'static ()), i32>();`
+ //
+ // In the first attempt we have 2 candidates for `&'a (): Trait<_>`
+ // and we get ambiguity. The result is therefore ambiguity with a `'b: 'a`
+ // constraint. The next attempt then uses that provisional result when
+ // trying to apply `impl<'a> Trait<u32> for &'a ()`. This means we get a
+ // `for<'b> 'b: 'a` bound which fails the leak check. Because of this we
+ // end up with a single impl for `&'a (): Trait<_>` which infers `_` to `i32`
+ // and succeeds.
+ impls_trait::<(&(), &()), _>();
+}
diff --git a/tests/ui/traits/new-solver/member-constraints-in-root-universe.rs b/tests/ui/traits/new-solver/member-constraints-in-root-universe.rs
new file mode 100644
index 000000000..97c443058
--- /dev/null
+++ b/tests/ui/traits/new-solver/member-constraints-in-root-universe.rs
@@ -0,0 +1,17 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+trait Trait {
+ type Ty;
+}
+
+impl Trait for for<'a> fn(&'a u8, &'a u8) {
+ type Ty = ();
+}
+
+// argument is necessary to create universes before registering the hidden type.
+fn test<'a>(_: <fn(&u8, &u8) as Trait>::Ty) -> impl Sized {
+ "hidden type is `&'?0 str` with '?0 member of ['static,]"
+}
+
+fn main() {}
diff --git a/tests/ui/traits/new-solver/normalized-const-built-in-op.rs b/tests/ui/traits/new-solver/normalized-const-built-in-op.rs
new file mode 100644
index 000000000..2443e5178
--- /dev/null
+++ b/tests/ui/traits/new-solver/normalized-const-built-in-op.rs
@@ -0,0 +1,11 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+const fn foo() {
+ let mut x = [1, 2, 3];
+ // We need to fix up `<<[i32; 3] as Index<usize>>::Output as AddAssign>`
+ // to be treated like a built-in operation.
+ x[1] += 5;
+}
+
+fn main() {}
diff --git a/tests/ui/traits/new-solver/object-unsafety.rs b/tests/ui/traits/new-solver/object-unsafety.rs
index 7bdd863a7..da843c914 100644
--- a/tests/ui/traits/new-solver/object-unsafety.rs
+++ b/tests/ui/traits/new-solver/object-unsafety.rs
@@ -10,7 +10,15 @@ fn copy<U: Setup + ?Sized>(from: &U::From) -> U::From {
pub fn copy_any<T>(t: &T) -> T {
copy::<dyn Setup<From=T>>(t)
- //~^ ERROR the trait bound `dyn Setup<From = T>: Setup` is not satisfied
+ //~^ ERROR the type `&<dyn Setup<From = T> as Setup>::From` is not well-formed
+ //~| ERROR the trait bound `dyn Setup<From = T>: Setup` is not satisfied
+ //~| ERROR mismatched types
+ //~| ERROR mismatched types
+ //~| ERROR the type `<dyn Setup<From = T> as Setup>::From` is not well-formed
+ //~| ERROR the size for values of type `<dyn Setup<From = T> as Setup>::From` cannot be known at compilation time
+
+ // FIXME(-Ztrait-solver=next): These error messages are horrible and some of them
+ // are even simple fallout from previous error.
}
fn main() {
diff --git a/tests/ui/traits/new-solver/object-unsafety.stderr b/tests/ui/traits/new-solver/object-unsafety.stderr
index 198ac623d..bb7c68b89 100644
--- a/tests/ui/traits/new-solver/object-unsafety.stderr
+++ b/tests/ui/traits/new-solver/object-unsafety.stderr
@@ -14,6 +14,65 @@ help: consider introducing a `where` clause, but there might be an alternative b
LL | pub fn copy_any<T>(t: &T) -> T where dyn Setup<From = T>: Setup {
| ++++++++++++++++++++++++++++++++
-error: aborting due to previous error
+error: the type `&<dyn Setup<From = T> as Setup>::From` is not well-formed
+ --> $DIR/object-unsafety.rs:12:31
+ |
+LL | copy::<dyn Setup<From=T>>(t)
+ | ^
+
+error[E0308]: mismatched types
+ --> $DIR/object-unsafety.rs:12:31
+ |
+LL | copy::<dyn Setup<From=T>>(t)
+ | ------------------------- ^ types differ
+ | |
+ | arguments to this function are incorrect
+ |
+ = note: expected reference `&<dyn Setup<From = T> as Setup>::From`
+ found reference `&T`
+note: function defined here
+ --> $DIR/object-unsafety.rs:7:4
+ |
+LL | fn copy<U: Setup + ?Sized>(from: &U::From) -> U::From {
+ | ^^^^ --------------
+
+error[E0308]: mismatched types
+ --> $DIR/object-unsafety.rs:12:5
+ |
+LL | pub fn copy_any<T>(t: &T) -> T {
+ | - - expected `T` because of return type
+ | |
+ | this type parameter
+LL | copy::<dyn Setup<From=T>>(t)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ types differ
+ |
+ = note: expected type parameter `T`
+ found associated type `<dyn Setup<From = T> as Setup>::From`
+ = note: you might be missing a type parameter or trait bound
+
+error: the type `<dyn Setup<From = T> as Setup>::From` is not well-formed
+ --> $DIR/object-unsafety.rs:12:5
+ |
+LL | copy::<dyn Setup<From=T>>(t)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0277]: the size for values of type `<dyn Setup<From = T> as Setup>::From` cannot be known at compilation time
+ --> $DIR/object-unsafety.rs:12:5
+ |
+LL | copy::<dyn Setup<From=T>>(t)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^---
+ | |
+ | doesn't have a size known at compile-time
+ | this returned value is of type `<dyn Setup<From = T> as Setup>::From`
+ |
+ = help: the trait `Sized` is not implemented for `<dyn Setup<From = T> as Setup>::From`
+ = note: the return type of a function must have a statically known size
+help: consider further restricting the associated type
+ |
+LL | pub fn copy_any<T>(t: &T) -> T where <dyn Setup<From = T> as Setup>::From: Sized {
+ | +++++++++++++++++++++++++++++++++++++++++++++++++
+
+error: aborting due to 6 previous errors
-For more information about this error, try `rustc --explain E0277`.
+Some errors have detailed explanations: E0277, E0308.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/traits/new-solver/opportunistic-region-resolve.rs b/tests/ui/traits/new-solver/opportunistic-region-resolve.rs
new file mode 100644
index 000000000..2610789cd
--- /dev/null
+++ b/tests/ui/traits/new-solver/opportunistic-region-resolve.rs
@@ -0,0 +1,19 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+#![feature(rustc_attrs)]
+
+#[rustc_coinductive]
+trait Trait {}
+
+#[rustc_coinductive]
+trait Indirect {}
+impl<T: Trait + ?Sized> Indirect for T {}
+
+impl<'a> Trait for &'a () where &'a (): Indirect {}
+
+fn impls_trait<T: Trait>() {}
+
+fn main() {
+ impls_trait::<&'static ()>();
+}
diff --git a/tests/ui/traits/new-solver/recursive-self-normalization-2.rs b/tests/ui/traits/new-solver/recursive-self-normalization-2.rs
index 8c029f517..d086db475 100644
--- a/tests/ui/traits/new-solver/recursive-self-normalization-2.rs
+++ b/tests/ui/traits/new-solver/recursive-self-normalization-2.rs
@@ -1,3 +1,4 @@
+//~ ERROR overflow
// compile-flags: -Ztrait-solver=next
trait Foo1 {
diff --git a/tests/ui/traits/new-solver/recursive-self-normalization-2.stderr b/tests/ui/traits/new-solver/recursive-self-normalization-2.stderr
index 139b0a456..eebaf21d7 100644
--- a/tests/ui/traits/new-solver/recursive-self-normalization-2.stderr
+++ b/tests/ui/traits/new-solver/recursive-self-normalization-2.stderr
@@ -1,16 +1,20 @@
error[E0275]: overflow evaluating the requirement `<T as Foo1>::Assoc1: Bar`
- --> $DIR/recursive-self-normalization-2.rs:15:5
+ --> $DIR/recursive-self-normalization-2.rs:16:5
|
LL | needs_bar::<T::Assoc1>();
| ^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`recursive_self_normalization_2`)
note: required by a bound in `needs_bar`
- --> $DIR/recursive-self-normalization-2.rs:12:17
+ --> $DIR/recursive-self-normalization-2.rs:13:17
|
LL | fn needs_bar<S: Bar>() {}
| ^^^ required by this bound in `needs_bar`
-error: aborting due to previous error
+error[E0275]: overflow evaluating the requirement `<T as Foo2>::Assoc2`
+ |
+ = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`recursive_self_normalization_2`)
+
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/traits/new-solver/recursive-self-normalization.rs b/tests/ui/traits/new-solver/recursive-self-normalization.rs
index 06d187b5f..d15df7dea 100644
--- a/tests/ui/traits/new-solver/recursive-self-normalization.rs
+++ b/tests/ui/traits/new-solver/recursive-self-normalization.rs
@@ -1,3 +1,4 @@
+//~ ERROR overflow evaluating the requirement `<T as Foo>::Assoc` [E0275]
// compile-flags: -Ztrait-solver=next
trait Foo {
diff --git a/tests/ui/traits/new-solver/recursive-self-normalization.stderr b/tests/ui/traits/new-solver/recursive-self-normalization.stderr
index 8e9b9b4b4..6a87fe2f1 100644
--- a/tests/ui/traits/new-solver/recursive-self-normalization.stderr
+++ b/tests/ui/traits/new-solver/recursive-self-normalization.stderr
@@ -1,16 +1,20 @@
error[E0275]: overflow evaluating the requirement `<T as Foo>::Assoc: Bar`
- --> $DIR/recursive-self-normalization.rs:11:5
+ --> $DIR/recursive-self-normalization.rs:12:5
|
LL | needs_bar::<T::Assoc>();
| ^^^^^^^^^^^^^^^^^^^^^
|
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`recursive_self_normalization`)
note: required by a bound in `needs_bar`
- --> $DIR/recursive-self-normalization.rs:8:17
+ --> $DIR/recursive-self-normalization.rs:9:17
|
LL | fn needs_bar<S: Bar>() {}
| ^^^ required by this bound in `needs_bar`
-error: aborting due to previous error
+error[E0275]: overflow evaluating the requirement `<T as Foo>::Assoc`
+ |
+ = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`recursive_self_normalization`)
+
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/traits/new-solver/slice-match-byte-lit.rs b/tests/ui/traits/new-solver/slice-match-byte-lit.rs
new file mode 100644
index 000000000..4f8480625
--- /dev/null
+++ b/tests/ui/traits/new-solver/slice-match-byte-lit.rs
@@ -0,0 +1,11 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+fn test(s: &[u8]) {
+ match &s[0..3] {
+ b"uwu" => {}
+ _ => {}
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/traits/new-solver/specialization-transmute.rs b/tests/ui/traits/new-solver/specialization-transmute.rs
index a54701df4..f6b19e7ad 100644
--- a/tests/ui/traits/new-solver/specialization-transmute.rs
+++ b/tests/ui/traits/new-solver/specialization-transmute.rs
@@ -10,12 +10,11 @@ trait Default {
}
impl<T> Default for T {
- default type Id = T;
-
- fn intu(&self) -> &Self::Id {
+ default type Id = T;
+ // This will be fixed by #111994
+ fn intu(&self) -> &Self::Id { //~ ERROR type annotations needed
self
- //~^ ERROR cannot satisfy `T <: <T as Default>::Id`
- }
+ }
}
fn transmute<T: Default<Id = U>, U: Copy>(t: T) -> U {
@@ -24,7 +23,6 @@ fn transmute<T: Default<Id = U>, U: Copy>(t: T) -> U {
use std::num::NonZeroU8;
fn main() {
- let s = transmute::<u8, Option<NonZeroU8>>(0);
- //~^ ERROR cannot satisfy `<u8 as Default>::Id == Option<NonZeroU8>
+ let s = transmute::<u8, Option<NonZeroU8>>(0); // this call should then error
assert_eq!(s, None);
}
diff --git a/tests/ui/traits/new-solver/specialization-transmute.stderr b/tests/ui/traits/new-solver/specialization-transmute.stderr
index e67c56afc..09b1405fe 100644
--- a/tests/ui/traits/new-solver/specialization-transmute.stderr
+++ b/tests/ui/traits/new-solver/specialization-transmute.stderr
@@ -8,24 +8,14 @@ LL | #![feature(specialization)]
= help: consider using `min_specialization` instead, which is more stable and complete
= note: `#[warn(incomplete_features)]` on by default
-error[E0284]: type annotations needed: cannot satisfy `T <: <T as Default>::Id`
- --> $DIR/specialization-transmute.rs:16:9
+error[E0284]: type annotations needed
+ --> $DIR/specialization-transmute.rs:15:23
|
-LL | self
- | ^^^^ cannot satisfy `T <: <T as Default>::Id`
-
-error[E0284]: type annotations needed: cannot satisfy `<u8 as Default>::Id == Option<NonZeroU8>`
- --> $DIR/specialization-transmute.rs:27:13
- |
-LL | let s = transmute::<u8, Option<NonZeroU8>>(0);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot satisfy `<u8 as Default>::Id == Option<NonZeroU8>`
- |
-note: required by a bound in `transmute`
- --> $DIR/specialization-transmute.rs:21:25
+LL | fn intu(&self) -> &Self::Id {
+ | ^^^^^^^^^ cannot infer type
|
-LL | fn transmute<T: Default<Id = U>, U: Copy>(t: T) -> U {
- | ^^^^^^ required by this bound in `transmute`
+ = note: cannot satisfy `<T as Default>::Id == _`
-error: aborting due to 2 previous errors; 1 warning emitted
+error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0284`.
diff --git a/tests/ui/traits/new-solver/specialization-unconstrained.rs b/tests/ui/traits/new-solver/specialization-unconstrained.rs
index 02150689e..7fd753109 100644
--- a/tests/ui/traits/new-solver/specialization-unconstrained.rs
+++ b/tests/ui/traits/new-solver/specialization-unconstrained.rs
@@ -11,7 +11,7 @@ trait Default {
}
impl<T> Default for T {
- default type Id = T;
+ default type Id = T; //~ ERROR type annotations needed
}
fn test<T: Default<Id = U>, U>() {}
diff --git a/tests/ui/traits/new-solver/specialization-unconstrained.stderr b/tests/ui/traits/new-solver/specialization-unconstrained.stderr
index 910925cba..9915da1a2 100644
--- a/tests/ui/traits/new-solver/specialization-unconstrained.stderr
+++ b/tests/ui/traits/new-solver/specialization-unconstrained.stderr
@@ -8,6 +8,12 @@ LL | #![feature(specialization)]
= help: consider using `min_specialization` instead, which is more stable and complete
= note: `#[warn(incomplete_features)]` on by default
+error[E0282]: type annotations needed
+ --> $DIR/specialization-unconstrained.rs:14:22
+ |
+LL | default type Id = T;
+ | ^ cannot infer type for associated type `<T as Default>::Id`
+
error[E0284]: type annotations needed: cannot satisfy `<u32 as Default>::Id == ()`
--> $DIR/specialization-unconstrained.rs:20:5
|
@@ -20,6 +26,7 @@ note: required by a bound in `test`
LL | fn test<T: Default<Id = U>, U>() {}
| ^^^^^^ required by this bound in `test`
-error: aborting due to previous error; 1 warning emitted
+error: aborting due to 2 previous errors; 1 warning emitted
-For more information about this error, try `rustc --explain E0284`.
+Some errors have detailed explanations: E0282, E0284.
+For more information about an error, try `rustc --explain E0282`.
diff --git a/tests/ui/traits/new-solver/tait-eq-proj-2.rs b/tests/ui/traits/new-solver/tait-eq-proj-2.rs
new file mode 100644
index 000000000..77ea8bc24
--- /dev/null
+++ b/tests/ui/traits/new-solver/tait-eq-proj-2.rs
@@ -0,0 +1,23 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+#![feature(type_alias_impl_trait)]
+
+// Similar to tests/ui/traits/new-solver/tait-eq-proj.rs
+// but check the alias-sub relation in the other direction.
+
+type Tait = impl Iterator<Item = impl Sized>;
+
+fn mk<T>() -> T {
+ todo!()
+}
+
+fn a(_: Tait) {
+ let x: Tait = mk();
+ let mut array = mk();
+ let mut z = IntoIterator::into_iter(array);
+ z = x;
+ array = [0i32; 32];
+}
+
+fn main() {}
diff --git a/tests/ui/traits/new-solver/tait-eq-proj.rs b/tests/ui/traits/new-solver/tait-eq-proj.rs
new file mode 100644
index 000000000..01ef2ec95
--- /dev/null
+++ b/tests/ui/traits/new-solver/tait-eq-proj.rs
@@ -0,0 +1,35 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+#![feature(type_alias_impl_trait)]
+
+type Tait = impl Iterator<Item = impl Sized>;
+
+/*
+
+Consider the goal - AliasRelate(Tait, <[i32; 32] as IntoIterator>::IntoIter)
+which is registered on the line above.
+
+A. SubstRelate - fails (of course).
+
+B. NormalizesToRhs - Tait normalizes-to <[i32; 32] as IntoIterator>::IntoIter
+ * infer definition - Tait := <[i32; 32] as IntoIterator>::IntoIter
+
+C. NormalizesToLhs - <[i32; 32] as IntoIterator>::IntoIter normalizes-to Tait
+ * Find impl candidate, after substitute - std::array::IntoIter<i32, 32>
+ * Equate std::array::IntoIter<i32, 32> and Tait
+ * infer definition - Tait := std::array::IntoIter<i32, 32>
+
+B and C are not equal, but they are equivalent modulo normalization.
+
+We get around this by evaluating both the NormalizesToRhs and NormalizesToLhs
+goals together. Essentially:
+ A alias-relate B if A normalizes-to B and B normalizes-to A.
+
+*/
+
+fn a(_: Tait) {
+ let _: Tait = IntoIterator::into_iter([0i32; 32]);
+}
+
+fn main() {}
diff --git a/tests/ui/traits/new-solver/tait-eq-tait.rs b/tests/ui/traits/new-solver/tait-eq-tait.rs
new file mode 100644
index 000000000..70d9dc0ea
--- /dev/null
+++ b/tests/ui/traits/new-solver/tait-eq-tait.rs
@@ -0,0 +1,18 @@
+// compile-flags: -Ztrait-solver=next
+// check-pass
+
+// Not exactly sure if this is the inference behavior we *want*,
+// but it is a side-effect of the lazy normalization of TAITs.
+
+#![feature(type_alias_impl_trait)]
+
+fn mk<T>() -> T {
+ todo!()
+}
+
+fn main() {
+ type Tait = impl Sized;
+ type Tait2 = impl Sized;
+ let x: Tait = 1u32;
+ let y: Tait2 = x;
+}
diff --git a/tests/ui/traits/new-solver/two-projection-param-candidates-are-ambiguous.stderr b/tests/ui/traits/new-solver/two-projection-param-candidates-are-ambiguous.stderr
index fa5e780ee..83a0452b0 100644
--- a/tests/ui/traits/new-solver/two-projection-param-candidates-are-ambiguous.stderr
+++ b/tests/ui/traits/new-solver/two-projection-param-candidates-are-ambiguous.stderr
@@ -5,6 +5,7 @@ LL | needs_bar::<T>();
| ^^^^^^^^^^^^^^
|
= note: cannot satisfy `T: Bar`
+ = help: the trait `Bar` is implemented for `T`
note: required by a bound in `needs_bar`
--> $DIR/two-projection-param-candidates-are-ambiguous.rs:23:17
|
diff --git a/tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.fails.stderr b/tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.fails.stderr
new file mode 100644
index 000000000..072ac32a5
--- /dev/null
+++ b/tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.fails.stderr
@@ -0,0 +1,18 @@
+error[E0277]: the trait bound `(): Trait<1>` is not satisfied
+ --> $DIR/unevaluated-const-impl-trait-ref.rs:20:13
+ |
+LL | needs::<1>();
+ | ^ the trait `Trait<1>` is not implemented for `()`
+ |
+ = help: the following other types implement trait `Trait<N>`:
+ <() as Trait<0>>
+ <() as Trait<2>>
+note: required by a bound in `needs`
+ --> $DIR/unevaluated-const-impl-trait-ref.rs:10:38
+ |
+LL | fn needs<const N: usize>() where (): Trait<N> {}
+ | ^^^^^^^^ required by this bound in `needs`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.rs b/tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.rs
new file mode 100644
index 000000000..26c595bc9
--- /dev/null
+++ b/tests/ui/traits/new-solver/unevaluated-const-impl-trait-ref.rs
@@ -0,0 +1,22 @@
+// compile-flags: -Ztrait-solver=next
+// revisions: works fails
+//[works] check-pass
+
+trait Trait<const N: usize> {}
+
+impl Trait<{ 1 - 1 }> for () {}
+impl Trait<{ 1 + 1 }> for () {}
+
+fn needs<const N: usize>() where (): Trait<N> {}
+
+#[cfg(works)]
+fn main() {
+ needs::<0>();
+ needs::<2>();
+}
+
+#[cfg(fails)]
+fn main() {
+ needs::<1>();
+ //[fails]~^ ERROR the trait bound `(): Trait<1>` is not satisfied
+}
diff --git a/tests/ui/traits/new-solver/winnow-specializing-impls.rs b/tests/ui/traits/new-solver/winnow-specializing-impls.rs
new file mode 100644
index 000000000..06f64de74
--- /dev/null
+++ b/tests/ui/traits/new-solver/winnow-specializing-impls.rs
@@ -0,0 +1,22 @@
+// build-pass
+// compile-flags: -Ztrait-solver=next
+
+// Tests that the specializing impl `<() as Foo>` holds during codegen.
+
+#![feature(min_specialization)]
+
+trait Foo {
+ fn bar();
+}
+
+impl<T> Foo for T {
+ default fn bar() {}
+}
+
+impl Foo for () {
+ fn bar() {}
+}
+
+fn main() {
+ <() as Foo>::bar();
+}
diff --git a/tests/ui/traits/non_lifetime_binders/foreach-partial-eq.rs b/tests/ui/traits/non_lifetime_binders/foreach-partial-eq.rs
new file mode 100644
index 000000000..96a7424f0
--- /dev/null
+++ b/tests/ui/traits/non_lifetime_binders/foreach-partial-eq.rs
@@ -0,0 +1,12 @@
+#![feature(non_lifetime_binders)]
+//~^ WARN the feature `non_lifetime_binders` is incomplete
+
+fn auto_trait()
+where
+ for<T> T: PartialEq + PartialOrd,
+{}
+
+fn main() {
+ auto_trait();
+ //~^ ERROR can't compare `T` with `T`
+}
diff --git a/tests/ui/traits/non_lifetime_binders/foreach-partial-eq.stderr b/tests/ui/traits/non_lifetime_binders/foreach-partial-eq.stderr
new file mode 100644
index 000000000..da09343fb
--- /dev/null
+++ b/tests/ui/traits/non_lifetime_binders/foreach-partial-eq.stderr
@@ -0,0 +1,28 @@
+warning: the feature `non_lifetime_binders` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/foreach-partial-eq.rs:1:12
+ |
+LL | #![feature(non_lifetime_binders)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #108185 <https://github.com/rust-lang/rust/issues/108185> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error[E0277]: can't compare `T` with `T`
+ --> $DIR/foreach-partial-eq.rs:10:5
+ |
+LL | auto_trait();
+ | ^^^^^^^^^^ no implementation for `T < T` and `T > T`
+ |
+ = help: the trait `PartialOrd` is not implemented for `T`
+note: required by a bound in `auto_trait`
+ --> $DIR/foreach-partial-eq.rs:6:27
+ |
+LL | fn auto_trait()
+ | ---------- required by a bound in this function
+LL | where
+LL | for<T> T: PartialEq + PartialOrd,
+ | ^^^^^^^^^^ required by this bound in `auto_trait`
+
+error: aborting due to previous error; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.rs b/tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.rs
new file mode 100644
index 000000000..e9ae00df7
--- /dev/null
+++ b/tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.rs
@@ -0,0 +1,11 @@
+#![feature(non_lifetime_binders)]
+//~^ WARN the feature `non_lifetime_binders` is incomplete
+
+trait Trait<Input> {
+ type Assoc;
+}
+
+fn uwu(_: impl for<T> Trait<(), Assoc = impl Trait<T>>) {}
+//~^ ERROR `impl Trait` can only mention type parameters from an fn or impl
+
+fn main() {}
diff --git a/tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.stderr b/tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.stderr
new file mode 100644
index 000000000..1124076c2
--- /dev/null
+++ b/tests/ui/traits/non_lifetime_binders/nested-apit-mentioning-outer-bound-var.stderr
@@ -0,0 +1,17 @@
+warning: the feature `non_lifetime_binders` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/nested-apit-mentioning-outer-bound-var.rs:1:12
+ |
+LL | #![feature(non_lifetime_binders)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #108185 <https://github.com/rust-lang/rust/issues/108185> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error: `impl Trait` can only mention type parameters from an fn or impl
+ --> $DIR/nested-apit-mentioning-outer-bound-var.rs:8:52
+ |
+LL | fn uwu(_: impl for<T> Trait<(), Assoc = impl Trait<T>>) {}
+ | - type parameter declared here ^
+
+error: aborting due to previous error; 1 warning emitted
+
diff --git a/tests/ui/traits/object/print_vtable_sizes.rs b/tests/ui/traits/object/print_vtable_sizes.rs
new file mode 100644
index 000000000..565609499
--- /dev/null
+++ b/tests/ui/traits/object/print_vtable_sizes.rs
@@ -0,0 +1,61 @@
+// check-pass
+// compile-flags: -Z print-vtable-sizes
+#![crate_type = "lib"]
+
+trait A<T: help::V>: AsRef<[T::V]> + AsMut<[T::V]> {}
+
+trait B<T>: AsRef<T> + AsRef<T> + AsRef<T> + AsRef<T> {}
+
+trait C {
+ fn x() {} // not object safe, shouldn't be reported
+}
+
+// This ideally should not have any upcasting cost,
+// but currently does due to a bug
+trait D: Send + Sync + help::MarkerWithSuper {}
+
+// This can't have no cost without reordering,
+// because `Super::f`.
+trait E: help::MarkerWithSuper + Send + Sync {}
+
+trait F {
+ fn a(&self);
+ fn b(&self);
+ fn c(&self);
+
+ fn d() -> Self
+ where
+ Self: Sized;
+}
+
+trait G: AsRef<u8> + AsRef<u16> + help::MarkerWithSuper {
+ fn a(&self);
+ fn b(&self);
+ fn c(&self);
+ fn d(&self);
+ fn e(&self);
+
+ fn f() -> Self
+ where
+ Self: Sized;
+}
+
+// Traits with the same name
+const _: () = {
+ trait S {}
+};
+const _: () = {
+ trait S {}
+};
+
+mod help {
+ pub trait V {
+ type V;
+ }
+
+ pub trait MarkerWithSuper: Super {}
+
+ pub trait Super {
+ fn f(&self);
+ }
+}
diff --git a/tests/ui/traits/object/print_vtable_sizes.stdout b/tests/ui/traits/object/print_vtable_sizes.stdout
new file mode 100644
index 000000000..3ba650bc3
--- /dev/null
+++ b/tests/ui/traits/object/print_vtable_sizes.stdout
@@ -0,0 +1,11 @@
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "D", "entries": "7", "entries_ignoring_upcasting": "4", "entries_for_upcasting": "3", "upcasting_cost_percent": "75" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "E", "entries": "6", "entries_ignoring_upcasting": "4", "entries_for_upcasting": "2", "upcasting_cost_percent": "50" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "G", "entries": "14", "entries_ignoring_upcasting": "11", "entries_for_upcasting": "3", "upcasting_cost_percent": "27.27272727272727" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "A", "entries": "6", "entries_ignoring_upcasting": "5", "entries_for_upcasting": "1", "upcasting_cost_percent": "20" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "B", "entries": "4", "entries_ignoring_upcasting": "4", "entries_for_upcasting": "0", "upcasting_cost_percent": "0" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "F", "entries": "6", "entries_ignoring_upcasting": "6", "entries_for_upcasting": "0", "upcasting_cost_percent": "0" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "_::S", "entries": "3", "entries_ignoring_upcasting": "3", "entries_for_upcasting": "0", "upcasting_cost_percent": "0" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "_::S", "entries": "3", "entries_ignoring_upcasting": "3", "entries_for_upcasting": "0", "upcasting_cost_percent": "0" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "help::MarkerWithSuper", "entries": "4", "entries_ignoring_upcasting": "4", "entries_for_upcasting": "0", "upcasting_cost_percent": "0" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "help::Super", "entries": "4", "entries_ignoring_upcasting": "4", "entries_for_upcasting": "0", "upcasting_cost_percent": "0" }
+print-vtable-sizes { "crate_name": "<UNKNOWN_CRATE>", "trait_name": "help::V", "entries": "3", "entries_ignoring_upcasting": "3", "entries_for_upcasting": "0", "upcasting_cost_percent": "0" }
diff --git a/tests/ui/traits/project-modulo-regions.rs b/tests/ui/traits/project-modulo-regions.rs
index f0c0dd3ed..e88f21ecf 100644
--- a/tests/ui/traits/project-modulo-regions.rs
+++ b/tests/ui/traits/project-modulo-regions.rs
@@ -48,8 +48,8 @@ fn test(val: MyStruct) where Helper: HelperTrait {
fn foo(val: MyStruct) {
test(val);
- //[with_clause]~^ ERROR evaluate(Binder(TraitPredicate(<Helper as HelperTrait>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
- //[without_clause]~^^ ERROR evaluate(Binder(TraitPredicate(<Helper as HelperTrait>, polarity:Positive), [])) = Ok(EvaluatedToOk)
+ //[with_clause]~^ ERROR evaluate(Binder { value: TraitPredicate(<Helper as HelperTrait>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
+ //[without_clause]~^^ ERROR evaluate(Binder { value: TraitPredicate(<Helper as HelperTrait>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
}
fn main() {}
diff --git a/tests/ui/traits/project-modulo-regions.with_clause.stderr b/tests/ui/traits/project-modulo-regions.with_clause.stderr
index 2434c32c8..dcc98e855 100644
--- a/tests/ui/traits/project-modulo-regions.with_clause.stderr
+++ b/tests/ui/traits/project-modulo-regions.with_clause.stderr
@@ -1,4 +1,4 @@
-error: evaluate(Binder(TraitPredicate(<Helper as HelperTrait>, polarity:Positive), [])) = Ok(EvaluatedToOkModuloRegions)
+error: evaluate(Binder { value: TraitPredicate(<Helper as HelperTrait>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOkModuloRegions)
--> $DIR/project-modulo-regions.rs:50:5
|
LL | fn test(val: MyStruct) where Helper: HelperTrait {
diff --git a/tests/ui/traits/project-modulo-regions.without_clause.stderr b/tests/ui/traits/project-modulo-regions.without_clause.stderr
index 9d35690d5..e9959567e 100644
--- a/tests/ui/traits/project-modulo-regions.without_clause.stderr
+++ b/tests/ui/traits/project-modulo-regions.without_clause.stderr
@@ -1,4 +1,4 @@
-error: evaluate(Binder(TraitPredicate(<Helper as HelperTrait>, polarity:Positive), [])) = Ok(EvaluatedToOk)
+error: evaluate(Binder { value: TraitPredicate(<Helper as HelperTrait>, polarity:Positive), bound_vars: [] }) = Ok(EvaluatedToOk)
--> $DIR/project-modulo-regions.rs:50:5
|
LL | fn test(val: MyStruct) where Helper: HelperTrait {
diff --git a/tests/ui/traits/suggest-where-clause.stderr b/tests/ui/traits/suggest-where-clause.stderr
index 44e63b78c..f3a4c6890 100644
--- a/tests/ui/traits/suggest-where-clause.stderr
+++ b/tests/ui/traits/suggest-where-clause.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `U` cannot be known at compilation tim
--> $DIR/suggest-where-clause.rs:7:20
|
LL | fn check<T: Iterator, U: ?Sized>() {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | // suggest a where-clause, if needed
LL | mem::size_of::<U>();
| ^ doesn't have a size known at compile-time
@@ -19,7 +19,7 @@ error[E0277]: the size for values of type `U` cannot be known at compilation tim
--> $DIR/suggest-where-clause.rs:10:20
|
LL | fn check<T: Iterator, U: ?Sized>() {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | mem::size_of::<Misc<U>>();
| ^^^^^^^ doesn't have a size known at compile-time
diff --git a/tests/ui/traits/trivial_impl.rs b/tests/ui/traits/trivial_impl.rs
new file mode 100644
index 000000000..6ac8c744b
--- /dev/null
+++ b/tests/ui/traits/trivial_impl.rs
@@ -0,0 +1,18 @@
+//! This test checks that we do need to implement
+//! all members, even if their where bounds only hold
+//! due to other impls.
+
+trait Foo<T> {
+ fn foo()
+ where
+ Self: Foo<()>;
+}
+
+impl Foo<()> for () {
+ fn foo() {}
+}
+
+impl Foo<u32> for () {}
+//~^ ERROR: not all trait items implemented, missing: `foo`
+
+fn main() {}
diff --git a/tests/ui/traits/trivial_impl.stderr b/tests/ui/traits/trivial_impl.stderr
new file mode 100644
index 000000000..4b29b55be
--- /dev/null
+++ b/tests/ui/traits/trivial_impl.stderr
@@ -0,0 +1,14 @@
+error[E0046]: not all trait items implemented, missing: `foo`
+ --> $DIR/trivial_impl.rs:15:1
+ |
+LL | / fn foo()
+LL | | where
+LL | | Self: Foo<()>;
+ | |______________________- `foo` from trait
+...
+LL | impl Foo<u32> for () {}
+ | ^^^^^^^^^^^^^^^^^^^^ missing `foo` in implementation
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0046`.
diff --git a/tests/ui/traits/trivial_impl2.rs b/tests/ui/traits/trivial_impl2.rs
new file mode 100644
index 000000000..be5809600
--- /dev/null
+++ b/tests/ui/traits/trivial_impl2.rs
@@ -0,0 +1,13 @@
+//! This test checks that we currently need to implement
+//! members, even if their where bounds don't hold for the impl type.
+
+trait Foo<T> {
+ fn foo()
+ where
+ Self: Foo<()>;
+}
+
+impl Foo<u32> for () {}
+//~^ ERROR: not all trait items implemented, missing: `foo`
+
+fn main() {}
diff --git a/tests/ui/traits/trivial_impl2.stderr b/tests/ui/traits/trivial_impl2.stderr
new file mode 100644
index 000000000..04c05df06
--- /dev/null
+++ b/tests/ui/traits/trivial_impl2.stderr
@@ -0,0 +1,14 @@
+error[E0046]: not all trait items implemented, missing: `foo`
+ --> $DIR/trivial_impl2.rs:10:1
+ |
+LL | / fn foo()
+LL | | where
+LL | | Self: Foo<()>;
+ | |______________________- `foo` from trait
+...
+LL | impl Foo<u32> for () {}
+ | ^^^^^^^^^^^^^^^^^^^^ missing `foo` in implementation
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0046`.
diff --git a/tests/ui/traits/trivial_impl3.rs b/tests/ui/traits/trivial_impl3.rs
new file mode 100644
index 000000000..714f643bc
--- /dev/null
+++ b/tests/ui/traits/trivial_impl3.rs
@@ -0,0 +1,19 @@
+//! Check that we don't break orphan rules.
+//! The dependency may add an impl for `u8` later,
+//! which would break this crate. We want to avoid adding
+//! more ways in which adding an impl can be a breaking change.
+
+// aux-build:trivial3.rs
+
+extern crate trivial3;
+
+pub trait Foo {
+ fn foo()
+ where
+ Self: trivial3::Trait;
+}
+
+impl Foo for u8 {}
+//~^ ERROR not all trait items implemented, missing: `foo`
+
+fn main() {}
diff --git a/tests/ui/traits/trivial_impl3.stderr b/tests/ui/traits/trivial_impl3.stderr
new file mode 100644
index 000000000..dfb39d6ce
--- /dev/null
+++ b/tests/ui/traits/trivial_impl3.stderr
@@ -0,0 +1,14 @@
+error[E0046]: not all trait items implemented, missing: `foo`
+ --> $DIR/trivial_impl3.rs:16:1
+ |
+LL | / fn foo()
+LL | | where
+LL | | Self: trivial3::Trait;
+ | |______________________________- `foo` from trait
+...
+LL | impl Foo for u8 {}
+ | ^^^^^^^^^^^^^^^ missing `foo` in implementation
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0046`.
diff --git a/tests/ui/traits/trivial_impl4.rs b/tests/ui/traits/trivial_impl4.rs
new file mode 100644
index 000000000..518f159c1
--- /dev/null
+++ b/tests/ui/traits/trivial_impl4.rs
@@ -0,0 +1,21 @@
+//! Check that we don't break orphan rules.
+//! The dependency may add an impl for `u8` later,
+//! which would break this crate. We want to avoid adding
+//! more ways in which adding an impl can be a breaking change.
+//! This test differs from `trivial_impl3` because there actually
+//! exists any impl for `Trait`, which has an effect on coherence.
+
+// aux-build:trivial4.rs
+
+extern crate trivial4;
+
+pub trait Foo {
+ fn foo()
+ where
+ Self: trivial4::Trait;
+}
+
+impl Foo for u8 {}
+//~^ ERROR not all trait items implemented, missing: `foo`
+
+fn main() {}
diff --git a/tests/ui/traits/trivial_impl4.stderr b/tests/ui/traits/trivial_impl4.stderr
new file mode 100644
index 000000000..04b29ed77
--- /dev/null
+++ b/tests/ui/traits/trivial_impl4.stderr
@@ -0,0 +1,14 @@
+error[E0046]: not all trait items implemented, missing: `foo`
+ --> $DIR/trivial_impl4.rs:18:1
+ |
+LL | / fn foo()
+LL | | where
+LL | | Self: trivial4::Trait;
+ | |______________________________- `foo` from trait
+...
+LL | impl Foo for u8 {}
+ | ^^^^^^^^^^^^^^^ missing `foo` in implementation
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0046`.
diff --git a/tests/ui/traits/trivial_impl_sized.rs b/tests/ui/traits/trivial_impl_sized.rs
new file mode 100644
index 000000000..501a34050
--- /dev/null
+++ b/tests/ui/traits/trivial_impl_sized.rs
@@ -0,0 +1,26 @@
+//! This test checks that we currently need to implement
+//! members, even if their where bounds don't hold for the impl type.
+
+trait Foo {
+ fn foo()
+ where
+ Self: Sized;
+}
+
+impl Foo for () {
+ fn foo() {}
+}
+
+// Must not be allowed
+impl Foo for i32 {}
+//~^ ERROR: not all trait items implemented, missing: `foo`
+
+// Should be allowed
+impl Foo for dyn std::fmt::Debug {}
+//~^ ERROR: not all trait items implemented, missing: `foo`
+
+impl Foo for dyn std::fmt::Display {
+ fn foo() {}
+}
+
+fn main() {}
diff --git a/tests/ui/traits/trivial_impl_sized.stderr b/tests/ui/traits/trivial_impl_sized.stderr
new file mode 100644
index 000000000..ebf6dfc9d
--- /dev/null
+++ b/tests/ui/traits/trivial_impl_sized.stderr
@@ -0,0 +1,25 @@
+error[E0046]: not all trait items implemented, missing: `foo`
+ --> $DIR/trivial_impl_sized.rs:15:1
+ |
+LL | / fn foo()
+LL | | where
+LL | | Self: Sized;
+ | |____________________- `foo` from trait
+...
+LL | impl Foo for i32 {}
+ | ^^^^^^^^^^^^^^^^ missing `foo` in implementation
+
+error[E0046]: not all trait items implemented, missing: `foo`
+ --> $DIR/trivial_impl_sized.rs:19:1
+ |
+LL | / fn foo()
+LL | | where
+LL | | Self: Sized;
+ | |____________________- `foo` from trait
+...
+LL | impl Foo for dyn std::fmt::Debug {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `foo` in implementation
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0046`.
diff --git a/tests/ui/transmutability/alignment/align-fail.rs b/tests/ui/transmutability/alignment/align-fail.rs
new file mode 100644
index 000000000..7f6090a6e
--- /dev/null
+++ b/tests/ui/transmutability/alignment/align-fail.rs
@@ -0,0 +1,23 @@
+// check-fail
+#![feature(transmutability)]
+
+mod assert {
+ use std::mem::{Assume, BikeshedIntrinsicFrom};
+ pub struct Context;
+
+ pub fn is_maybe_transmutable<Src, Dst>()
+ where
+ Dst: BikeshedIntrinsicFrom<Src, Context, {
+ Assume {
+ alignment: false,
+ lifetimes: true,
+ safety: true,
+ validity: true,
+ }
+ }>
+ {}
+}
+
+fn main() {
+ assert::is_maybe_transmutable::<&'static [u8; 0], &'static [u16; 0]>(); //~ ERROR `&[u8; 0]` cannot be safely transmuted into `&[u16; 0]`
+}
diff --git a/tests/ui/transmutability/alignment/align-fail.stderr b/tests/ui/transmutability/alignment/align-fail.stderr
new file mode 100644
index 000000000..59246fb1b
--- /dev/null
+++ b/tests/ui/transmutability/alignment/align-fail.stderr
@@ -0,0 +1,30 @@
+error[E0277]: `&[u8; 0]` cannot be safely transmuted into `&[u16; 0]` in the defining scope of `assert::Context`
+ --> $DIR/align-fail.rs:22:55
+ |
+LL | ...tatic [u8; 0], &'static [u16; 0]>();
+ | ^^^^^^^^^^^^^^^^^ The minimum alignment of `&[u8; 0]` (1) should be greater than that of `&[u16; 0]` (2)
+ |
+note: required by a bound in `is_maybe_transmutable`
+ --> $DIR/align-fail.rs:10:14
+ |
+LL | pub fn is_maybe_transmutable<Src, Dst>()
+ | --------------------- required by a bound in this function
+LL | where
+LL | Dst: BikeshedIntrinsicFrom<Src, Context, {
+ | ______________^
+LL | | Assume {
+LL | | alignment: false,
+LL | | lifetimes: true,
+... |
+LL | | }
+LL | | }>
+ | |__________^ required by this bound in `is_maybe_transmutable`
+help: consider removing the leading `&`-reference
+ |
+LL - assert::is_maybe_transmutable::<&'static [u8; 0], &'static [u16; 0]>();
+LL + assert::is_maybe_transmutable::<&'static [u8; 0], [u16; 0]>();
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/transmutability/alignment/align-pass.rs b/tests/ui/transmutability/alignment/align-pass.rs
new file mode 100644
index 000000000..62dc672ea
--- /dev/null
+++ b/tests/ui/transmutability/alignment/align-pass.rs
@@ -0,0 +1,23 @@
+// check-pass
+#![feature(transmutability)]
+
+mod assert {
+ use std::mem::{Assume, BikeshedIntrinsicFrom};
+ pub struct Context;
+
+ pub fn is_maybe_transmutable<Src, Dst>()
+ where
+ Dst: BikeshedIntrinsicFrom<Src, Context, {
+ Assume {
+ alignment: false,
+ lifetimes: false,
+ safety: true,
+ validity: false,
+ }
+ }>
+ {}
+}
+
+fn main() {
+ assert::is_maybe_transmutable::<&'static [u16; 0], &'static [u8; 0]>();
+}
diff --git a/tests/ui/transmutability/enums/repr/primitive_reprs_should_have_correct_length.stderr b/tests/ui/transmutability/enums/repr/primitive_reprs_should_have_correct_length.stderr
index 9877a6606..46cdaa925 100644
--- a/tests/ui/transmutability/enums/repr/primitive_reprs_should_have_correct_length.stderr
+++ b/tests/ui/transmutability/enums/repr/primitive_reprs_should_have_correct_length.stderr
@@ -90,7 +90,7 @@ error[E0277]: `u8` cannot be safely transmuted into `V0i16` in the defining scop
--> $DIR/primitive_reprs_should_have_correct_length.rs:72:44
|
LL | assert::is_transmutable::<Smaller, Current, Context>();
- | ^^^^^^^ At least one value of `u8` isn't a bit-valid value of `V0i16`
+ | ^^^^^^^ The size of `u8` is smaller than the size of `V0i16`
|
note: required by a bound in `is_transmutable`
--> $DIR/primitive_reprs_should_have_correct_length.rs:12:14
@@ -134,7 +134,7 @@ error[E0277]: `u8` cannot be safely transmuted into `V0u16` in the defining scop
--> $DIR/primitive_reprs_should_have_correct_length.rs:80:44
|
LL | assert::is_transmutable::<Smaller, Current, Context>();
- | ^^^^^^^ At least one value of `u8` isn't a bit-valid value of `V0u16`
+ | ^^^^^^^ The size of `u8` is smaller than the size of `V0u16`
|
note: required by a bound in `is_transmutable`
--> $DIR/primitive_reprs_should_have_correct_length.rs:12:14
@@ -178,7 +178,7 @@ error[E0277]: `u16` cannot be safely transmuted into `V0i32` in the defining sco
--> $DIR/primitive_reprs_should_have_correct_length.rs:96:44
|
LL | assert::is_transmutable::<Smaller, Current, Context>();
- | ^^^^^^^ At least one value of `u16` isn't a bit-valid value of `V0i32`
+ | ^^^^^^^ The size of `u16` is smaller than the size of `V0i32`
|
note: required by a bound in `is_transmutable`
--> $DIR/primitive_reprs_should_have_correct_length.rs:12:14
@@ -222,7 +222,7 @@ error[E0277]: `u16` cannot be safely transmuted into `V0u32` in the defining sco
--> $DIR/primitive_reprs_should_have_correct_length.rs:104:44
|
LL | assert::is_transmutable::<Smaller, Current, Context>();
- | ^^^^^^^ At least one value of `u16` isn't a bit-valid value of `V0u32`
+ | ^^^^^^^ The size of `u16` is smaller than the size of `V0u32`
|
note: required by a bound in `is_transmutable`
--> $DIR/primitive_reprs_should_have_correct_length.rs:12:14
@@ -266,7 +266,7 @@ error[E0277]: `u32` cannot be safely transmuted into `V0i64` in the defining sco
--> $DIR/primitive_reprs_should_have_correct_length.rs:120:44
|
LL | assert::is_transmutable::<Smaller, Current, Context>();
- | ^^^^^^^ At least one value of `u32` isn't a bit-valid value of `V0i64`
+ | ^^^^^^^ The size of `u32` is smaller than the size of `V0i64`
|
note: required by a bound in `is_transmutable`
--> $DIR/primitive_reprs_should_have_correct_length.rs:12:14
@@ -310,7 +310,7 @@ error[E0277]: `u32` cannot be safely transmuted into `V0u64` in the defining sco
--> $DIR/primitive_reprs_should_have_correct_length.rs:128:44
|
LL | assert::is_transmutable::<Smaller, Current, Context>();
- | ^^^^^^^ At least one value of `u32` isn't a bit-valid value of `V0u64`
+ | ^^^^^^^ The size of `u32` is smaller than the size of `V0u64`
|
note: required by a bound in `is_transmutable`
--> $DIR/primitive_reprs_should_have_correct_length.rs:12:14
@@ -354,7 +354,7 @@ error[E0277]: `u8` cannot be safely transmuted into `V0isize` in the defining sc
--> $DIR/primitive_reprs_should_have_correct_length.rs:144:44
|
LL | assert::is_transmutable::<Smaller, Current, Context>();
- | ^^^^^^^ At least one value of `u8` isn't a bit-valid value of `V0isize`
+ | ^^^^^^^ The size of `u8` is smaller than the size of `V0isize`
|
note: required by a bound in `is_transmutable`
--> $DIR/primitive_reprs_should_have_correct_length.rs:12:14
@@ -398,7 +398,7 @@ error[E0277]: `u8` cannot be safely transmuted into `V0usize` in the defining sc
--> $DIR/primitive_reprs_should_have_correct_length.rs:152:44
|
LL | assert::is_transmutable::<Smaller, Current, Context>();
- | ^^^^^^^ At least one value of `u8` isn't a bit-valid value of `V0usize`
+ | ^^^^^^^ The size of `u8` is smaller than the size of `V0usize`
|
note: required by a bound in `is_transmutable`
--> $DIR/primitive_reprs_should_have_correct_length.rs:12:14
diff --git a/tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.rs b/tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.rs
index ebe34e134..8d19cabc0 100644
--- a/tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.rs
+++ b/tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.rs
@@ -18,5 +18,5 @@ fn should_gracefully_handle_unknown_dst_field() {
struct Context;
#[repr(C)] struct Src;
#[repr(C)] struct Dst(Missing); //~ cannot find type
- assert::is_transmutable::<Src, Dst, Context>();
+ assert::is_transmutable::<Src, Dst, Context>(); //~ ERROR cannot be safely transmuted
}
diff --git a/tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.stderr b/tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.stderr
index 475e6f429..c2df398b8 100644
--- a/tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.stderr
+++ b/tests/ui/transmutability/malformed-program-gracefulness/unknown_src_field.stderr
@@ -4,6 +4,22 @@ error[E0412]: cannot find type `Missing` in this scope
LL | #[repr(C)] struct Dst(Missing);
| ^^^^^^^ not found in this scope
-error: aborting due to previous error
+error[E0277]: `Src` cannot be safely transmuted into `Dst` in the defining scope of `should_gracefully_handle_unknown_dst_field::Context`
+ --> $DIR/unknown_src_field.rs:21:36
+ |
+LL | assert::is_transmutable::<Src, Dst, Context>();
+ | ^^^ `Dst` has an unknown layout
+ |
+note: required by a bound in `is_transmutable`
+ --> $DIR/unknown_src_field.rs:13:14
+ |
+LL | pub fn is_transmutable<Src, Dst, Context>()
+ | --------------- required by a bound in this function
+LL | where
+LL | Dst: BikeshedIntrinsicFrom<Src, Context>
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `is_transmutable`
+
+error: aborting due to 2 previous errors
-For more information about this error, try `rustc --explain E0412`.
+Some errors have detailed explanations: E0277, E0412.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/transmutability/primitives/bool-mut.rs b/tests/ui/transmutability/primitives/bool-mut.rs
new file mode 100644
index 000000000..49dbe90e4
--- /dev/null
+++ b/tests/ui/transmutability/primitives/bool-mut.rs
@@ -0,0 +1,17 @@
+// check-fail
+//[next] compile-flags: -Ztrait-solver=next
+
+#![feature(transmutability)]
+mod assert {
+ use std::mem::{Assume, BikeshedIntrinsicFrom};
+ pub struct Context;
+
+ pub fn is_transmutable<Src, Dst>()
+ where
+ Dst: BikeshedIntrinsicFrom<Src, Context, { Assume::SAFETY }>
+ {}
+}
+
+fn main() {
+ assert::is_transmutable::<&'static mut bool, &'static mut u8>() //~ ERROR cannot be safely transmuted
+}
diff --git a/tests/ui/transmutability/primitives/bool-mut.stderr b/tests/ui/transmutability/primitives/bool-mut.stderr
new file mode 100644
index 000000000..b36991e1c
--- /dev/null
+++ b/tests/ui/transmutability/primitives/bool-mut.stderr
@@ -0,0 +1,18 @@
+error[E0277]: `u8` cannot be safely transmuted into `bool` in the defining scope of `assert::Context`
+ --> $DIR/bool-mut.rs:16:50
+ |
+LL | assert::is_transmutable::<&'static mut bool, &'static mut u8>()
+ | ^^^^^^^^^^^^^^^ At least one value of `u8` isn't a bit-valid value of `bool`
+ |
+note: required by a bound in `is_transmutable`
+ --> $DIR/bool-mut.rs:11:14
+ |
+LL | pub fn is_transmutable<Src, Dst>()
+ | --------------- required by a bound in this function
+LL | where
+LL | Dst: BikeshedIntrinsicFrom<Src, Context, { Assume::SAFETY }>
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `is_transmutable`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/transmutability/primitives/bool.current.stderr b/tests/ui/transmutability/primitives/bool.current.stderr
index 47c8438a2..4b3eb6c51 100644
--- a/tests/ui/transmutability/primitives/bool.current.stderr
+++ b/tests/ui/transmutability/primitives/bool.current.stderr
@@ -1,11 +1,11 @@
error[E0277]: `u8` cannot be safely transmuted into `bool` in the defining scope of `assert::Context`
- --> $DIR/bool.rs:24:35
+ --> $DIR/bool.rs:21:35
|
LL | assert::is_transmutable::<u8, bool>();
| ^^^^ At least one value of `u8` isn't a bit-valid value of `bool`
|
note: required by a bound in `is_transmutable`
- --> $DIR/bool.rs:14:14
+ --> $DIR/bool.rs:11:14
|
LL | pub fn is_transmutable<Src, Dst>()
| --------------- required by a bound in this function
diff --git a/tests/ui/transmutability/primitives/bool.next.stderr b/tests/ui/transmutability/primitives/bool.next.stderr
index 47c8438a2..4b3eb6c51 100644
--- a/tests/ui/transmutability/primitives/bool.next.stderr
+++ b/tests/ui/transmutability/primitives/bool.next.stderr
@@ -1,11 +1,11 @@
error[E0277]: `u8` cannot be safely transmuted into `bool` in the defining scope of `assert::Context`
- --> $DIR/bool.rs:24:35
+ --> $DIR/bool.rs:21:35
|
LL | assert::is_transmutable::<u8, bool>();
| ^^^^ At least one value of `u8` isn't a bit-valid value of `bool`
|
note: required by a bound in `is_transmutable`
- --> $DIR/bool.rs:14:14
+ --> $DIR/bool.rs:11:14
|
LL | pub fn is_transmutable<Src, Dst>()
| --------------- required by a bound in this function
diff --git a/tests/ui/transmutability/primitives/bool.rs b/tests/ui/transmutability/primitives/bool.rs
index de77cfc78..654e7b47e 100644
--- a/tests/ui/transmutability/primitives/bool.rs
+++ b/tests/ui/transmutability/primitives/bool.rs
@@ -1,10 +1,7 @@
// revisions: current next
//[next] compile-flags: -Ztrait-solver=next
-#![crate_type = "lib"]
#![feature(transmutability)]
-#![allow(dead_code)]
-#![allow(incomplete_features)]
mod assert {
use std::mem::{Assume, BikeshedIntrinsicFrom};
pub struct Context;
@@ -20,7 +17,7 @@ mod assert {
{}
}
-fn contrast_with_u8() {
+fn main() {
assert::is_transmutable::<u8, bool>(); //~ ERROR cannot be safely transmuted
assert::is_maybe_transmutable::<u8, bool>();
assert::is_transmutable::<bool, u8>();
diff --git a/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.rs b/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.rs
new file mode 100644
index 000000000..a6e2889d3
--- /dev/null
+++ b/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.rs
@@ -0,0 +1,25 @@
+// check-fail
+#![feature(transmutability)]
+
+mod assert {
+ use std::mem::{Assume, BikeshedIntrinsicFrom};
+ pub struct Context;
+
+ pub fn is_maybe_transmutable<Src, Dst>()
+ where
+ Dst: BikeshedIntrinsicFrom<Src, Context, {
+ Assume {
+ alignment: true,
+ lifetimes: false,
+ safety: true,
+ validity: false,
+ }
+ }>
+ {}
+}
+
+fn main() {
+ #[repr(C)] struct A(bool, &'static A);
+ #[repr(C)] struct B(u8, &'static B);
+ assert::is_maybe_transmutable::<&'static A, &'static mut B>(); //~ ERROR cannot be safely transmuted
+}
diff --git a/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.stderr b/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.stderr
new file mode 100644
index 000000000..4b4d6ad02
--- /dev/null
+++ b/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible-mut.stderr
@@ -0,0 +1,25 @@
+error[E0277]: `&A` cannot be safely transmuted into `&mut B` in the defining scope of `assert::Context`
+ --> $DIR/recursive-wrapper-types-bit-compatible-mut.rs:24:49
+ |
+LL | assert::is_maybe_transmutable::<&'static A, &'static mut B>();
+ | ^^^^^^^^^^^^^^ `&A` is a shared reference, but `&mut B` is a unique reference
+ |
+note: required by a bound in `is_maybe_transmutable`
+ --> $DIR/recursive-wrapper-types-bit-compatible-mut.rs:10:14
+ |
+LL | pub fn is_maybe_transmutable<Src, Dst>()
+ | --------------------- required by a bound in this function
+LL | where
+LL | Dst: BikeshedIntrinsicFrom<Src, Context, {
+ | ______________^
+LL | | Assume {
+LL | | alignment: true,
+LL | | lifetimes: false,
+... |
+LL | | }
+LL | | }>
+ | |__________^ required by this bound in `is_maybe_transmutable`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.rs b/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.rs
new file mode 100644
index 000000000..3ea80173a
--- /dev/null
+++ b/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.rs
@@ -0,0 +1,26 @@
+// check-fail
+// FIXME(bryangarza): Change to check-pass when coinduction is supported for BikeshedIntrinsicFrom
+#![feature(transmutability)]
+
+mod assert {
+ use std::mem::{Assume, BikeshedIntrinsicFrom};
+ pub struct Context;
+
+ pub fn is_maybe_transmutable<Src, Dst>()
+ where
+ Dst: BikeshedIntrinsicFrom<Src, Context, {
+ Assume {
+ alignment: true,
+ lifetimes: false,
+ safety: true,
+ validity: false,
+ }
+ }>
+ {}
+}
+
+fn main() {
+ #[repr(C)] struct A(bool, &'static A);
+ #[repr(C)] struct B(u8, &'static B);
+ assert::is_maybe_transmutable::<&'static A, &'static B>(); //~ ERROR overflow evaluating the requirement
+}
diff --git a/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.stderr b/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.stderr
new file mode 100644
index 000000000..fae332e6a
--- /dev/null
+++ b/tests/ui/transmutability/references/recursive-wrapper-types-bit-compatible.stderr
@@ -0,0 +1,25 @@
+error[E0275]: overflow evaluating the requirement `B: BikeshedIntrinsicFrom<A, assert::Context, Assume { alignment: true, lifetimes: false, safety: true, validity: false }>`
+ --> $DIR/recursive-wrapper-types-bit-compatible.rs:25:5
+ |
+LL | assert::is_maybe_transmutable::<&'static A, &'static B>();
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: required by a bound in `is_maybe_transmutable`
+ --> $DIR/recursive-wrapper-types-bit-compatible.rs:11:14
+ |
+LL | pub fn is_maybe_transmutable<Src, Dst>()
+ | --------------------- required by a bound in this function
+LL | where
+LL | Dst: BikeshedIntrinsicFrom<Src, Context, {
+ | ______________^
+LL | | Assume {
+LL | | alignment: true,
+LL | | lifetimes: false,
+... |
+LL | | }
+LL | | }>
+ | |__________^ required by this bound in `is_maybe_transmutable`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.rs b/tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.rs
new file mode 100644
index 000000000..e8582d2fd
--- /dev/null
+++ b/tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.rs
@@ -0,0 +1,25 @@
+// check-fail
+#![feature(transmutability)]
+
+mod assert {
+ use std::mem::{Assume, BikeshedIntrinsicFrom};
+ pub struct Context;
+
+ pub fn is_maybe_transmutable<Src, Dst>()
+ where
+ Dst: BikeshedIntrinsicFrom<Src, Context, {
+ Assume {
+ alignment: true,
+ lifetimes: false,
+ safety: true,
+ validity: false,
+ }
+ }>
+ {}
+}
+
+fn main() {
+ #[repr(C)] struct A(bool, &'static A);
+ #[repr(C)] struct B(u8, &'static B);
+ assert::is_maybe_transmutable::<&'static B, &'static A>(); //~ ERROR cannot be safely transmuted
+}
diff --git a/tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.stderr b/tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.stderr
new file mode 100644
index 000000000..ecfe48659
--- /dev/null
+++ b/tests/ui/transmutability/references/recursive-wrapper-types-bit-incompatible.stderr
@@ -0,0 +1,25 @@
+error[E0277]: `B` cannot be safely transmuted into `A` in the defining scope of `assert::Context`
+ --> $DIR/recursive-wrapper-types-bit-incompatible.rs:24:49
+ |
+LL | assert::is_maybe_transmutable::<&'static B, &'static A>();
+ | ^^^^^^^^^^ At least one value of `B` isn't a bit-valid value of `A`
+ |
+note: required by a bound in `is_maybe_transmutable`
+ --> $DIR/recursive-wrapper-types-bit-incompatible.rs:10:14
+ |
+LL | pub fn is_maybe_transmutable<Src, Dst>()
+ | --------------------- required by a bound in this function
+LL | where
+LL | Dst: BikeshedIntrinsicFrom<Src, Context, {
+ | ______________^
+LL | | Assume {
+LL | | alignment: true,
+LL | | lifetimes: false,
+... |
+LL | | }
+LL | | }>
+ | |__________^ required by this bound in `is_maybe_transmutable`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/transmutability/references/recursive-wrapper-types.rs b/tests/ui/transmutability/references/recursive-wrapper-types.rs
new file mode 100644
index 000000000..59d1ad84a
--- /dev/null
+++ b/tests/ui/transmutability/references/recursive-wrapper-types.rs
@@ -0,0 +1,27 @@
+// check-fail
+// FIXME(bryangarza): Change to check-pass when coinduction is supported for BikeshedIntrinsicFrom
+#![feature(transmutability)]
+
+mod assert {
+ use std::mem::{Assume, BikeshedIntrinsicFrom};
+ pub struct Context;
+
+ pub fn is_maybe_transmutable<Src, Dst>()
+ where
+ Dst: BikeshedIntrinsicFrom<Src, Context, {
+ Assume {
+ alignment: true,
+ lifetimes: false,
+ safety: true,
+ validity: false,
+ }
+ }>
+ {}
+}
+
+fn main() {
+ #[repr(C)] struct A(&'static B);
+ #[repr(C)] struct B(&'static A);
+ assert::is_maybe_transmutable::<&'static A, &'static B>(); //~ overflow evaluating the requirement
+ assert::is_maybe_transmutable::<&'static B, &'static A>();
+}
diff --git a/tests/ui/transmutability/references.next.stderr b/tests/ui/transmutability/references/recursive-wrapper-types.stderr
index 819c9b92b..35a60c226 100644
--- a/tests/ui/transmutability/references.next.stderr
+++ b/tests/ui/transmutability/references/recursive-wrapper-types.stderr
@@ -1,11 +1,11 @@
-error[E0277]: `&Unit` cannot be safely transmuted into `&Unit` in the defining scope of `assert::Context`
- --> $DIR/references.rs:29:52
+error[E0275]: overflow evaluating the requirement `A: BikeshedIntrinsicFrom<B, assert::Context, Assume { alignment: true, lifetimes: false, safety: true, validity: false }>`
+ --> $DIR/recursive-wrapper-types.rs:25:5
|
-LL | assert::is_maybe_transmutable::<&'static Unit, &'static Unit>();
- | ^^^^^^^^^^^^^ `&Unit` does not have a well-specified layout
+LL | assert::is_maybe_transmutable::<&'static A, &'static B>();
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: required by a bound in `is_maybe_transmutable`
- --> $DIR/references.rs:16:14
+ --> $DIR/recursive-wrapper-types.rs:11:14
|
LL | pub fn is_maybe_transmutable<Src, Dst>()
| --------------------- required by a bound in this function
@@ -14,7 +14,7 @@ LL | Dst: BikeshedIntrinsicFrom<Src, Context, {
| ______________^
LL | | Assume {
LL | | alignment: true,
-LL | | lifetimes: true,
+LL | | lifetimes: false,
... |
LL | | }
LL | | }>
@@ -22,4 +22,4 @@ LL | | }>
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0277`.
+For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/transmutability/references/u8-to-unit.rs b/tests/ui/transmutability/references/u8-to-unit.rs
new file mode 100644
index 000000000..8b37492bd
--- /dev/null
+++ b/tests/ui/transmutability/references/u8-to-unit.rs
@@ -0,0 +1,24 @@
+// check-pass
+#![feature(transmutability)]
+
+mod assert {
+ use std::mem::{Assume, BikeshedIntrinsicFrom};
+ pub struct Context;
+
+ pub fn is_maybe_transmutable<Src, Dst>()
+ where
+ Dst: BikeshedIntrinsicFrom<Src, Context, {
+ Assume {
+ alignment: false,
+ lifetimes: true,
+ safety: true,
+ validity: false,
+ }
+ }>
+ {}
+}
+
+fn main() {
+ #[repr(C)] struct Unit;
+ assert::is_maybe_transmutable::<&'static u8, &'static Unit>();
+}
diff --git a/tests/ui/transmutability/references.rs b/tests/ui/transmutability/references/unit-to-itself.rs
index 8c2b25ebb..04a7e16d7 100644
--- a/tests/ui/transmutability/references.rs
+++ b/tests/ui/transmutability/references/unit-to-itself.rs
@@ -1,11 +1,5 @@
-// revisions: current next
-//[next] compile-flags: -Ztrait-solver=next
-
-//! Transmutations involving references are not yet supported.
-
-#![crate_type = "lib"]
+// check-pass
#![feature(transmutability)]
-#![allow(dead_code, incomplete_features, non_camel_case_types)]
mod assert {
use std::mem::{Assume, BikeshedIntrinsicFrom};
@@ -16,15 +10,15 @@ mod assert {
Dst: BikeshedIntrinsicFrom<Src, Context, {
Assume {
alignment: true,
- lifetimes: true,
+ lifetimes: false,
safety: true,
- validity: true,
+ validity: false,
}
}>
{}
}
-fn not_yet_implemented() {
+fn main() {
#[repr(C)] struct Unit;
- assert::is_maybe_transmutable::<&'static Unit, &'static Unit>(); //~ ERROR cannot be safely transmuted
+ assert::is_maybe_transmutable::<&'static Unit, &'static Unit>();
}
diff --git a/tests/ui/transmutability/references/unit-to-u8.rs b/tests/ui/transmutability/references/unit-to-u8.rs
new file mode 100644
index 000000000..eff516e9a
--- /dev/null
+++ b/tests/ui/transmutability/references/unit-to-u8.rs
@@ -0,0 +1,24 @@
+// check-fail
+#![feature(transmutability)]
+
+mod assert {
+ use std::mem::{Assume, BikeshedIntrinsicFrom};
+ pub struct Context;
+
+ pub fn is_maybe_transmutable<Src, Dst>()
+ where
+ Dst: BikeshedIntrinsicFrom<Src, Context, {
+ Assume {
+ alignment: true,
+ lifetimes: true,
+ safety: true,
+ validity: false,
+ }
+ }>
+ {}
+}
+
+fn main() {
+ #[repr(C)] struct Unit;
+ assert::is_maybe_transmutable::<&'static Unit, &'static u8>(); //~ ERROR cannot be safely transmuted
+}
diff --git a/tests/ui/transmutability/references.current.stderr b/tests/ui/transmutability/references/unit-to-u8.stderr
index 819c9b92b..f2b72357f 100644
--- a/tests/ui/transmutability/references.current.stderr
+++ b/tests/ui/transmutability/references/unit-to-u8.stderr
@@ -1,11 +1,11 @@
-error[E0277]: `&Unit` cannot be safely transmuted into `&Unit` in the defining scope of `assert::Context`
- --> $DIR/references.rs:29:52
+error[E0277]: `Unit` cannot be safely transmuted into `u8` in the defining scope of `assert::Context`
+ --> $DIR/unit-to-u8.rs:23:52
|
-LL | assert::is_maybe_transmutable::<&'static Unit, &'static Unit>();
- | ^^^^^^^^^^^^^ `&Unit` does not have a well-specified layout
+LL | assert::is_maybe_transmutable::<&'static Unit, &'static u8>();
+ | ^^^^^^^^^^^ The size of `Unit` is smaller than the size of `u8`
|
note: required by a bound in `is_maybe_transmutable`
- --> $DIR/references.rs:16:14
+ --> $DIR/unit-to-u8.rs:10:14
|
LL | pub fn is_maybe_transmutable<Src, Dst>()
| --------------------- required by a bound in this function
diff --git a/tests/ui/transmutability/region-infer.stderr b/tests/ui/transmutability/region-infer.stderr
index d6b65e9e4..307d0dfe5 100644
--- a/tests/ui/transmutability/region-infer.stderr
+++ b/tests/ui/transmutability/region-infer.stderr
@@ -2,7 +2,7 @@ error[E0277]: `()` cannot be safely transmuted into `W<'_>` in the defining scop
--> $DIR/region-infer.rs:20:5
|
LL | test();
- | ^^^^ `W<'_>` does not have a well-specified layout
+ | ^^^^ The size of `()` is smaller than the size of `W<'_>`
|
note: required by a bound in `test`
--> $DIR/region-infer.rs:11:12
diff --git a/tests/ui/treat-err-as-bug/panic-causes-oom-112708.rs b/tests/ui/treat-err-as-bug/panic-causes-oom-112708.rs
new file mode 100644
index 000000000..c7d480a77
--- /dev/null
+++ b/tests/ui/treat-err-as-bug/panic-causes-oom-112708.rs
@@ -0,0 +1,10 @@
+// compile-flags: -Ztreat-err-as-bug
+// dont-check-failure-status
+// error-pattern: aborting due to `-Z treat-err-as-bug=1`
+// dont-check-compiler-stderr
+// rustc-env:RUST_BACKTRACE=0
+
+fn main() {
+ #[deny(while_true)]
+ while true {}
+}
diff --git a/tests/ui/treat-err-as-bug/panic-causes-oom-112708.stderr b/tests/ui/treat-err-as-bug/panic-causes-oom-112708.stderr
new file mode 100644
index 000000000..2d49071ac
--- /dev/null
+++ b/tests/ui/treat-err-as-bug/panic-causes-oom-112708.stderr
@@ -0,0 +1,32 @@
+error: denote infinite loops with `loop { ... }`
+ --> $DIR/panic-causes-oom-112708.rs:13:5
+ |
+LL | while true {}
+ | ^^^^^^^^^^ help: use `loop`
+ |
+note: the lint level is defined here
+ --> $DIR/panic-causes-oom-112708.rs:12:12
+ |
+LL | #[deny(while_true)]
+ | ^^^^^^^^^^
+
+
+query stack during panic:
+#0 [early_lint_checks] perform lints prior to macro expansion
+#1 [hir_crate] getting the crate HIR
+end of query stack
+
+error: the compiler unexpectedly panicked. this is a bug.
+
+query stack during panic:
+#0 [early_lint_checks] perform lints prior to macro expansion
+#1 [hir_crate] getting the crate HIR
+end of query stack
+
+error: the compiler unexpectedly panicked. this is a bug.
+
+query stack during panic:
+#0 [early_lint_checks] perform lints prior to macro expansion
+#1 [hir_crate] getting the crate HIR
+end of query stack
+thread caused non-unwinding panic. aborting.
diff --git a/tests/ui/try-block/issue-45124.rs b/tests/ui/try-block/issue-45124.rs
index 942014c91..2cf2ade65 100644
--- a/tests/ui/try-block/issue-45124.rs
+++ b/tests/ui/try-block/issue-45124.rs
@@ -8,7 +8,7 @@ fn main() {
let mut a = 0;
let () = {
let _: Result<(), ()> = try {
- let _ = Err(())?;
+ let () = Err(())?;
return
};
a += 1;
diff --git a/tests/ui/try-trait/bad-interconversion.stderr b/tests/ui/try-trait/bad-interconversion.stderr
index a49630adb..7eb392faa 100644
--- a/tests/ui/try-trait/bad-interconversion.stderr
+++ b/tests/ui/try-trait/bad-interconversion.stderr
@@ -8,8 +8,8 @@ LL | Ok(Err(123_i32)?)
|
= note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
= help: the following other types implement trait `From<T>`:
- <u8 as From<NonZeroU8>>
<u8 as From<bool>>
+ <u8 as From<NonZeroU8>>
= note: required for `Result<u64, u8>` to implement `FromResidual<Result<Infallible, i32>>`
error[E0277]: the `?` operator can only be used on `Result`s, not `Option`s, in a function that returns `Result`
@@ -22,8 +22,8 @@ LL | Some(3)?;
|
= help: the trait `FromResidual<Option<Infallible>>` is not implemented for `Result<u64, String>`
= help: the following other types implement trait `FromResidual<R>`:
- <Result<T, F> as FromResidual<Result<Infallible, E>>>
<Result<T, F> as FromResidual<Yeet<E>>>
+ <Result<T, F> as FromResidual<Result<Infallible, E>>>
error[E0277]: the `?` operator can only be used on `Result`s in a function that returns `Result`
--> $DIR/bad-interconversion.rs:17:31
@@ -35,8 +35,8 @@ LL | Ok(ControlFlow::Break(123)?)
|
= help: the trait `FromResidual<ControlFlow<{integer}, Infallible>>` is not implemented for `Result<u64, String>`
= help: the following other types implement trait `FromResidual<R>`:
- <Result<T, F> as FromResidual<Result<Infallible, E>>>
<Result<T, F> as FromResidual<Yeet<E>>>
+ <Result<T, F> as FromResidual<Result<Infallible, E>>>
error[E0277]: the `?` operator can only be used on `Option`s, not `Result`s, in a function that returns `Option`
--> $DIR/bad-interconversion.rs:22:22
diff --git a/tests/ui/try-trait/option-to-result.stderr b/tests/ui/try-trait/option-to-result.stderr
index fabc1ff2c..1c4d718f1 100644
--- a/tests/ui/try-trait/option-to-result.stderr
+++ b/tests/ui/try-trait/option-to-result.stderr
@@ -9,8 +9,8 @@ LL | a?;
|
= help: the trait `FromResidual<Option<Infallible>>` is not implemented for `Result<(), ()>`
= help: the following other types implement trait `FromResidual<R>`:
- <Result<T, F> as FromResidual<Result<Infallible, E>>>
<Result<T, F> as FromResidual<Yeet<E>>>
+ <Result<T, F> as FromResidual<Result<Infallible, E>>>
error[E0277]: the `?` operator can only be used on `Option`s, not `Result`s, in a function that returns `Option`
--> $DIR/option-to-result.rs:11:6
diff --git a/tests/ui/try-trait/try-on-option.stderr b/tests/ui/try-trait/try-on-option.stderr
index fad6a1fe8..eeb0439df 100644
--- a/tests/ui/try-trait/try-on-option.stderr
+++ b/tests/ui/try-trait/try-on-option.stderr
@@ -9,8 +9,8 @@ LL | x?;
|
= help: the trait `FromResidual<Option<Infallible>>` is not implemented for `Result<u32, ()>`
= help: the following other types implement trait `FromResidual<R>`:
- <Result<T, F> as FromResidual<Result<Infallible, E>>>
<Result<T, F> as FromResidual<Yeet<E>>>
+ <Result<T, F> as FromResidual<Result<Infallible, E>>>
error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `FromResidual`)
--> $DIR/try-on-option.rs:11:6
diff --git a/tests/ui/tuple/index-float.rs b/tests/ui/tuple/index-float.rs
index eda2bf485..53b025c91 100644
--- a/tests/ui/tuple/index-float.rs
+++ b/tests/ui/tuple/index-float.rs
@@ -3,8 +3,8 @@
fn main() {
let tuple = (((),),);
- let _ = tuple. 0.0; // OK, whitespace
- let _ = tuple.0. 0; // OK, whitespace
+ let () = tuple. 0.0; // OK, whitespace
+ let () = tuple.0. 0; // OK, whitespace
- let _ = tuple./*special cases*/0.0; // OK, comment
+ let () = tuple./*special cases*/0.0; // OK, comment
}
diff --git a/tests/ui/type-alias-impl-trait/auto-trait-leakage.rs b/tests/ui/type-alias-impl-trait/auto-trait-leakage.rs
index a1584581e..d9f7c7809 100644
--- a/tests/ui/type-alias-impl-trait/auto-trait-leakage.rs
+++ b/tests/ui/type-alias-impl-trait/auto-trait-leakage.rs
@@ -4,9 +4,9 @@
#![allow(dead_code)]
mod m {
- type Foo = impl std::fmt::Debug;
+ pub(crate) type Foo = impl std::fmt::Debug;
- pub fn foo() -> Foo {
+ pub(crate) fn foo() -> Foo {
22_u32
}
}
diff --git a/tests/ui/type-alias-impl-trait/auto-trait-leakage3.rs b/tests/ui/type-alias-impl-trait/auto-trait-leakage3.rs
index 5fb7a9473..fd3f9c614 100644
--- a/tests/ui/type-alias-impl-trait/auto-trait-leakage3.rs
+++ b/tests/ui/type-alias-impl-trait/auto-trait-leakage3.rs
@@ -4,8 +4,9 @@
// FIXME This should compile, but it currently doesn't
mod m {
- type Foo = impl std::fmt::Debug;
+ pub type Foo = impl std::fmt::Debug;
//~^ ERROR: cycle detected when computing type of `m::Foo::{opaque#0}` [E0391]
+ //~| ERROR: cycle detected when computing type of `m::Foo::{opaque#0}` [E0391]
pub fn foo() -> Foo {
22_u32
@@ -13,6 +14,7 @@ mod m {
pub fn bar() {
is_send(foo());
+ //~^ ERROR: cannot check whether the hidden type of `auto_trait_leakage3[211d]::m::Foo::{opaque#0}
}
fn is_send<T: Send>(_: T) {}
diff --git a/tests/ui/type-alias-impl-trait/auto-trait-leakage3.stderr b/tests/ui/type-alias-impl-trait/auto-trait-leakage3.stderr
index 1e9a45aac..dd56c59bf 100644
--- a/tests/ui/type-alias-impl-trait/auto-trait-leakage3.stderr
+++ b/tests/ui/type-alias-impl-trait/auto-trait-leakage3.stderr
@@ -1,11 +1,11 @@
error[E0391]: cycle detected when computing type of `m::Foo::{opaque#0}`
- --> $DIR/auto-trait-leakage3.rs:7:16
+ --> $DIR/auto-trait-leakage3.rs:7:20
|
-LL | type Foo = impl std::fmt::Debug;
- | ^^^^^^^^^^^^^^^^^^^^
+LL | pub type Foo = impl std::fmt::Debug;
+ | ^^^^^^^^^^^^^^^^^^^^
|
note: ...which requires type-checking `m::bar`...
- --> $DIR/auto-trait-leakage3.rs:15:9
+ --> $DIR/auto-trait-leakage3.rs:16:9
|
LL | is_send(foo());
| ^^^^^^^
@@ -17,6 +17,48 @@ note: cycle used when checking item types in module `m`
LL | mod m {
| ^^^^^
-error: aborting due to previous error
+error[E0391]: cycle detected when computing type of `m::Foo::{opaque#0}`
+ --> $DIR/auto-trait-leakage3.rs:7:20
+ |
+LL | pub type Foo = impl std::fmt::Debug;
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+note: ...which requires type-checking `m::bar`...
+ --> $DIR/auto-trait-leakage3.rs:15:5
+ |
+LL | pub fn bar() {
+ | ^^^^^^^^^^^^
+ = note: ...which again requires computing type of `m::Foo::{opaque#0}`, completing the cycle
+note: cycle used when checking item types in module `m`
+ --> $DIR/auto-trait-leakage3.rs:6:1
+ |
+LL | mod m {
+ | ^^^^^
+
+error: cannot check whether the hidden type of `auto_trait_leakage3[211d]::m::Foo::{opaque#0}` satisfies auto traits
+ --> $DIR/auto-trait-leakage3.rs:16:17
+ |
+LL | is_send(foo());
+ | ------- ^^^^^
+ | |
+ | required by a bound introduced by this call
+ |
+note: opaque type is declared here
+ --> $DIR/auto-trait-leakage3.rs:7:20
+ |
+LL | pub type Foo = impl std::fmt::Debug;
+ | ^^^^^^^^^^^^^^^^^^^^
+note: this item depends on auto traits of the hidden type, but may also be registering the hidden type. This is not supported right now. You can try moving the opaque type and the item that actually registers a hidden type into a new submodule
+ --> $DIR/auto-trait-leakage3.rs:15:12
+ |
+LL | pub fn bar() {
+ | ^^^
+note: required by a bound in `is_send`
+ --> $DIR/auto-trait-leakage3.rs:20:19
+ |
+LL | fn is_send<T: Send>(_: T) {}
+ | ^^^^ required by this bound in `is_send`
+
+error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/type-alias-impl-trait/bound_reduction2.rs b/tests/ui/type-alias-impl-trait/bound_reduction2.rs
index 0bcc9e002..4e9f65d88 100644
--- a/tests/ui/type-alias-impl-trait/bound_reduction2.rs
+++ b/tests/ui/type-alias-impl-trait/bound_reduction2.rs
@@ -13,6 +13,7 @@ trait Trait<U> {}
impl<W> Trait<W> for () {}
fn foo_desugared<T: TraitWithAssoc>(_: T) -> Foo<T::Assoc> {
+ //~^ ERROR non-defining opaque type use
()
//~^ ERROR expected generic type parameter, found `<T as TraitWithAssoc>::Assoc`
}
diff --git a/tests/ui/type-alias-impl-trait/bound_reduction2.stderr b/tests/ui/type-alias-impl-trait/bound_reduction2.stderr
index 3c259bd9e..14f9dbbdb 100644
--- a/tests/ui/type-alias-impl-trait/bound_reduction2.stderr
+++ b/tests/ui/type-alias-impl-trait/bound_reduction2.stderr
@@ -1,5 +1,17 @@
+error[E0792]: non-defining opaque type use in defining scope
+ --> $DIR/bound_reduction2.rs:15:46
+ |
+LL | fn foo_desugared<T: TraitWithAssoc>(_: T) -> Foo<T::Assoc> {
+ | ^^^^^^^^^^^^^ argument `<T as TraitWithAssoc>::Assoc` is not a generic parameter
+ |
+note: for this opaque type
+ --> $DIR/bound_reduction2.rs:9:15
+ |
+LL | type Foo<V> = impl Trait<V>;
+ | ^^^^^^^^^^^^^
+
error[E0792]: expected generic type parameter, found `<T as TraitWithAssoc>::Assoc`
- --> $DIR/bound_reduction2.rs:16:5
+ --> $DIR/bound_reduction2.rs:17:5
|
LL | type Foo<V> = impl Trait<V>;
| - this generic parameter must be used with a generic type parameter
@@ -7,6 +19,6 @@ LL | type Foo<V> = impl Trait<V>;
LL | ()
| ^^
-error: aborting due to previous error
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0792`.
diff --git a/tests/ui/type-alias-impl-trait/bounds-are-checked3.rs b/tests/ui/type-alias-impl-trait/bounds-are-checked3.rs
new file mode 100644
index 000000000..5a9e87c09
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/bounds-are-checked3.rs
@@ -0,0 +1,16 @@
+#![feature(type_alias_impl_trait)]
+
+use std::fmt::{Debug, Display};
+
+struct Struct<V: Display>(Option<V>);
+
+// Make sure that, in contrast to type aliases without opaque types,
+// we actually do a wf check for the aliased type.
+type Foo<T: Debug> = (impl Debug, Struct<T>);
+//~^ ERROR: `T` doesn't implement `std::fmt::Display`
+
+fn foo<U: Debug + Display>() -> Foo<U> {
+ (Vec::<U>::new(), Struct(None))
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/bounds-are-checked3.stderr b/tests/ui/type-alias-impl-trait/bounds-are-checked3.stderr
new file mode 100644
index 000000000..a845cba77
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/bounds-are-checked3.stderr
@@ -0,0 +1,20 @@
+error[E0277]: `T` doesn't implement `std::fmt::Display`
+ --> $DIR/bounds-are-checked3.rs:9:35
+ |
+LL | type Foo<T: Debug> = (impl Debug, Struct<T>);
+ | ^^^^^^^^^ `T` cannot be formatted with the default formatter
+ |
+ = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
+note: required by a bound in `Struct`
+ --> $DIR/bounds-are-checked3.rs:5:18
+ |
+LL | struct Struct<V: Display>(Option<V>);
+ | ^^^^^^^ required by this bound in `Struct`
+help: consider further restricting this bound
+ |
+LL | type Foo<T: Debug + std::fmt::Display> = (impl Debug, Struct<T>);
+ | +++++++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/type-alias-impl-trait/bounds.rs b/tests/ui/type-alias-impl-trait/bounds.rs
new file mode 100644
index 000000000..dc05b70c5
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/bounds.rs
@@ -0,0 +1,16 @@
+#![feature(type_alias_impl_trait)]
+
+// check-pass
+
+use std::fmt::Debug;
+
+// No need to report the `type_alias_bounds` lint, as
+// the moment an opaque type is mentioned, we actually do check
+// type alias bounds.
+type Foo<T: Debug> = (impl Debug, usize);
+
+fn foo<U: Debug>() -> Foo<U> {
+ (Vec::<U>::new(), 1234)
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/closure_args.rs b/tests/ui/type-alias-impl-trait/closure_args.rs
index c5e7af81d..243f9cd6d 100644
--- a/tests/ui/type-alias-impl-trait/closure_args.rs
+++ b/tests/ui/type-alias-impl-trait/closure_args.rs
@@ -11,6 +11,13 @@ fn run<F: FnOnce(Input) -> ()>(f: F, i: Input) {
f(i);
}
-fn main() {
- run(|x: u32| {println!("{x}");}, 0);
+fn bop(_: Input) {
+ run(
+ |x: u32| {
+ println!("{x}");
+ },
+ 0,
+ );
}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/closure_args2.rs b/tests/ui/type-alias-impl-trait/closure_args2.rs
index 82386c280..1dd5c3e40 100644
--- a/tests/ui/type-alias-impl-trait/closure_args2.rs
+++ b/tests/ui/type-alias-impl-trait/closure_args2.rs
@@ -1,10 +1,12 @@
-// run-pass
+// check-pass
#![feature(type_alias_impl_trait)]
trait Foo {
// This was reachable in https://github.com/rust-lang/rust/issues/100800
- fn foo(&self) { unreachable!() }
+ fn foo(&self) {
+ unreachable!()
+ }
}
impl<T> Foo for T {}
@@ -14,10 +16,17 @@ impl B {
}
type Input = impl Foo;
-fn run1<F: FnOnce(Input)>(f: F, i: Input) {f(i)}
-fn run2<F: FnOnce(B)>(f: F, i: B) {f(i)}
+fn run1<F: FnOnce(Input)>(f: F, i: Input) {
+ f(i)
+}
+fn run2<F: FnOnce(B)>(f: F, i: B) {
+ f(i)
+}
-fn main() {
- run1(|x: B| {x.foo()}, B);
- run2(|x: B| {x.foo()}, B);
+fn bop() -> Input {
+ run1(|x: B| x.foo(), B);
+ run2(|x: B| x.foo(), B);
+ panic!()
}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/coherence.stderr b/tests/ui/type-alias-impl-trait/coherence.stderr
index 00b0dbbb5..c923eb08a 100644
--- a/tests/ui/type-alias-impl-trait/coherence.stderr
+++ b/tests/ui/type-alias-impl-trait/coherence.stderr
@@ -4,7 +4,7 @@ error[E0117]: only traits defined in the current crate can be implemented for ar
LL | impl<T> foreign_crate::ForeignTrait for AliasOfForeignType<T> {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------
| | |
- | | type alias impl trait is treated as if it were foreign, because its hidden type could be from a foreign crate
+ | | `AliasOfForeignType<T>` is not defined in the current crate
| impl doesn't use only types from inside the current crate
|
= note: define and implement a trait or new type instead
diff --git a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs b/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs
new file mode 100644
index 000000000..39b3d535a
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs
@@ -0,0 +1,25 @@
+// When checking whether these two impls overlap, we could detect that we
+// would require the hidden type of `TAIT` to be equal to both `u32` and `i32`
+// and therefore accept them as disjoint. That is annoying to implement with
+// the current system because we would have to add the following to each
+// returning branch in coherence.
+//
+// let _ = infcx.take_opaque_types();
+//
+// @lcnr: Because of this I decided to not bother and cause this to fail instead.
+// In the future we can definitely modify the compiler to accept this
+// again.
+#![feature(type_alias_impl_trait)]
+
+trait Trait {}
+
+type TAIT = impl Sized;
+
+impl Trait for (TAIT, TAIT) {}
+
+impl Trait for (u32, i32) {}
+//~^ ERROR conflicting implementations of trait `Trait` for type `(TAIT, TAIT)`
+
+fn define() -> TAIT {}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr b/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr
new file mode 100644
index 000000000..f2aee7986
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `Trait` for type `(TAIT, TAIT)`
+ --> $DIR/coherence_different_hidden_ty.rs:20:1
+ |
+LL | impl Trait for (TAIT, TAIT) {}
+ | --------------------------- first implementation here
+LL |
+LL | impl Trait for (u32, i32) {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(TAIT, TAIT)`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/tests/ui/type-alias-impl-trait/coherence_generalization.rs b/tests/ui/type-alias-impl-trait/coherence_generalization.rs
index 5c9ad9498..679b2b0f1 100644
--- a/tests/ui/type-alias-impl-trait/coherence_generalization.rs
+++ b/tests/ui/type-alias-impl-trait/coherence_generalization.rs
@@ -1,5 +1,7 @@
// check-pass
+// FIXME(type_alias_impl_trait): What does this test? This needs a comment
+// explaining what we're worried about here.
#![feature(type_alias_impl_trait)]
trait Trait {}
type Opaque<T> = impl Sized;
diff --git a/tests/ui/type-alias-impl-trait/cross_inference.rs b/tests/ui/type-alias-impl-trait/cross_inference.rs
index dafaf40a6..5eaf0ddda 100644
--- a/tests/ui/type-alias-impl-trait/cross_inference.rs
+++ b/tests/ui/type-alias-impl-trait/cross_inference.rs
@@ -1,10 +1,12 @@
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
// check-pass
#![feature(type_alias_impl_trait)]
fn main() {
- type T = impl Copy;
- let foo: T = (1u32, 2u32);
+ type Tait = impl Copy;
+ let foo: Tait = (1u32, 2u32);
let x: (_, _) = foo;
println!("{:?}", x);
}
diff --git a/tests/ui/type-alias-impl-trait/debug-ty-with-weak.rs b/tests/ui/type-alias-impl-trait/debug-ty-with-weak.rs
new file mode 100644
index 000000000..44158349f
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/debug-ty-with-weak.rs
@@ -0,0 +1,12 @@
+// compile-flags: --crate-type=lib -Cdebuginfo=2
+// build-pass
+
+#![feature(type_alias_impl_trait)]
+
+type Debuggable = impl core::fmt::Debug;
+
+static mut TEST: Option<Debuggable> = None;
+
+fn foo() -> Debuggable {
+ 0u32
+}
diff --git a/tests/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.stderr b/tests/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.stderr
index fbfa0ccf1..d60f1ffbc 100644
--- a/tests/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.stderr
+++ b/tests/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.stderr
@@ -19,6 +19,11 @@ LL | ""
|
= note: expected opaque type `Boo`
found reference `&'static str`
+note: this item must have the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/declared_but_not_defined_in_scope.rs:10:4
+ |
+LL | fn bomp() -> boo::Boo {
+ | ^^^^
error: aborting due to 2 previous errors
diff --git a/tests/ui/type-alias-impl-trait/defined-by-user-annotation.rs b/tests/ui/type-alias-impl-trait/defined-by-user-annotation.rs
new file mode 100644
index 000000000..5a421ea1d
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/defined-by-user-annotation.rs
@@ -0,0 +1,19 @@
+// User type annotation in fn bodies is a a valid defining site for opaque types.
+// check-pass
+#![feature(type_alias_impl_trait)]
+
+trait Equate { type Proj; }
+impl<T> Equate for T { type Proj = T; }
+
+trait Indirect { type Ty; }
+impl<A, B: Equate<Proj = A>> Indirect for (A, B) { type Ty = (); }
+
+type Opq = impl Sized;
+fn define_1(_: Opq) {
+ let _ = None::<<(Opq, u8) as Indirect>::Ty>;
+}
+fn define_2() -> Opq {
+ 0u8
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/defining-use-submodule.rs b/tests/ui/type-alias-impl-trait/defining-use-submodule.rs
index 8b51f5571..4d84b2cbb 100644
--- a/tests/ui/type-alias-impl-trait/defining-use-submodule.rs
+++ b/tests/ui/type-alias-impl-trait/defining-use-submodule.rs
@@ -11,12 +11,12 @@ type Foo = impl std::fmt::Display;
type Bar = impl std::fmt::Display;
mod foo {
- pub fn foo() -> super::Foo {
+ pub(crate) fn foo() -> super::Foo {
"foo"
}
- pub mod bar {
- pub fn bar() -> crate::Bar {
+ pub(crate) mod bar {
+ pub(crate) fn bar() -> crate::Bar {
1
}
}
diff --git a/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.rs b/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.rs
index e5bfbfdae..b2842df15 100644
--- a/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.rs
+++ b/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.rs
@@ -2,7 +2,7 @@
type Tait<'a> = impl Sized + 'a;
-fn foo<'a, 'b>() {
+fn foo<'a, 'b>() -> Tait<'a> {
if false {
if { return } {
let y: Tait<'b> = 1i32;
@@ -10,6 +10,7 @@ fn foo<'a, 'b>() {
}
}
let x: Tait<'a> = ();
+ x
}
fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.stderr b/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.stderr
index f2eb7bc4d..b138f9d5c 100644
--- a/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.stderr
+++ b/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-2.stderr
@@ -5,10 +5,10 @@ LL | let y: Tait<'b> = 1i32;
| ^^^^ expected `()`, got `i32`
|
note: previous use here
- --> $DIR/different_defining_uses_never_type-2.rs:12:23
+ --> $DIR/different_defining_uses_never_type-2.rs:7:14
|
-LL | let x: Tait<'a> = ();
- | ^^
+LL | if { return } {
+ | ^^^^^^
error: aborting due to previous error
diff --git a/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-3.rs b/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-3.rs
index 2b30a9cd5..a4ac27378 100644
--- a/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-3.rs
+++ b/tests/ui/type-alias-impl-trait/different_defining_uses_never_type-3.rs
@@ -2,7 +2,7 @@
type Tait<T> = impl Sized;
-fn foo<T, U>() {
+fn foo<T, U>() -> Tait<T> {
if false {
if { return } {
let y: Tait<U> = 1i32;
@@ -10,6 +10,7 @@ fn foo<T, U>() {
}
}
let x: Tait<T> = ();
+ x
}
fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs b/tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs
index 9d938a616..14ced3418 100644
--- a/tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs
+++ b/tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs
@@ -9,6 +9,7 @@ impl<'a, T: ?Sized> Captures<'a> for T {}
type Two<'a, 'b> = impl std::fmt::Debug + Captures<'a> + Captures<'b>;
fn one<'a>(t: &'a ()) -> Two<'a, 'a> {
+ //~^ ERROR non-defining opaque type use
t
//~^ ERROR non-defining opaque type use
}
diff --git a/tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.stderr b/tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.stderr
index 72e1ef4b4..4da69a705 100644
--- a/tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.stderr
+++ b/tests/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.stderr
@@ -1,5 +1,17 @@
error: non-defining opaque type use in defining scope
- --> $DIR/generic_duplicate_lifetime_param.rs:12:5
+ --> $DIR/generic_duplicate_lifetime_param.rs:11:26
+ |
+LL | fn one<'a>(t: &'a ()) -> Two<'a, 'a> {
+ | ^^^^^^^^^^^ generic argument `'a` used twice
+ |
+note: for this opaque type
+ --> $DIR/generic_duplicate_lifetime_param.rs:9:20
+ |
+LL | type Two<'a, 'b> = impl std::fmt::Debug + Captures<'a> + Captures<'b>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: non-defining opaque type use in defining scope
+ --> $DIR/generic_duplicate_lifetime_param.rs:13:5
|
LL | t
| ^
@@ -10,5 +22,5 @@ note: lifetime used multiple times
LL | type Two<'a, 'b> = impl std::fmt::Debug + Captures<'a> + Captures<'b>;
| ^^ ^^
-error: aborting due to previous error
+error: aborting due to 2 previous errors
diff --git a/tests/ui/type-alias-impl-trait/generic_duplicate_param_use.rs b/tests/ui/type-alias-impl-trait/generic_duplicate_param_use.rs
index 80462f8ac..1e391b55a 100644
--- a/tests/ui/type-alias-impl-trait/generic_duplicate_param_use.rs
+++ b/tests/ui/type-alias-impl-trait/generic_duplicate_param_use.rs
@@ -1,5 +1,12 @@
#![feature(type_alias_impl_trait)]
+//! This test checks various cases where we are using the same
+//! generic parameter twice in the parameter list of a TAIT.
+//! Within defining scopes that is not legal, because the hidden type
+//! is not fully defined then. This could cause us to have a TAIT
+//! that doesn't have a hidden type for all possible combinations of generic
+//! parameters passed to it.
+
use std::fmt::Debug;
fn main() {}
@@ -7,7 +14,6 @@ fn main() {}
// test that unused generic parameters are ok
type TwoTys<T, U> = impl Debug;
-
pub trait Captures<'a> {}
impl<'a, T: ?Sized> Captures<'a> for T {}
@@ -16,18 +22,20 @@ type TwoLifetimes<'a, 'b> = impl Debug + Captures<'a> + Captures<'b>;
type TwoConsts<const X: usize, const Y: usize> = impl Debug;
-
fn one_ty<T: Debug>(t: T) -> TwoTys<T, T> {
+ //~^ ERROR non-defining opaque type use in defining scope
t
//~^ ERROR non-defining opaque type use in defining scope
}
fn one_lifetime<'a>(t: &'a u32) -> TwoLifetimes<'a, 'a> {
+ //~^ ERROR non-defining opaque type use in defining scope
t
//~^ ERROR non-defining opaque type use in defining scope
}
fn one_const<const N: usize>(t: *mut [u8; N]) -> TwoConsts<N, N> {
+ //~^ ERROR non-defining opaque type use in defining scope
t
//~^ ERROR non-defining opaque type use in defining scope
}
diff --git a/tests/ui/type-alias-impl-trait/generic_duplicate_param_use.stderr b/tests/ui/type-alias-impl-trait/generic_duplicate_param_use.stderr
index 98e4bfea1..d8330771d 100644
--- a/tests/ui/type-alias-impl-trait/generic_duplicate_param_use.stderr
+++ b/tests/ui/type-alias-impl-trait/generic_duplicate_param_use.stderr
@@ -1,38 +1,74 @@
error: non-defining opaque type use in defining scope
- --> $DIR/generic_duplicate_param_use.rs:21:5
+ --> $DIR/generic_duplicate_param_use.rs:25:30
+ |
+LL | fn one_ty<T: Debug>(t: T) -> TwoTys<T, T> {
+ | ^^^^^^^^^^^^ generic argument `T` used twice
+ |
+note: for this opaque type
+ --> $DIR/generic_duplicate_param_use.rs:15:21
+ |
+LL | type TwoTys<T, U> = impl Debug;
+ | ^^^^^^^^^^
+
+error: non-defining opaque type use in defining scope
+ --> $DIR/generic_duplicate_param_use.rs:27:5
|
LL | t
| ^
|
note: type used multiple times
- --> $DIR/generic_duplicate_param_use.rs:8:13
+ --> $DIR/generic_duplicate_param_use.rs:15:13
|
LL | type TwoTys<T, U> = impl Debug;
| ^ ^
error: non-defining opaque type use in defining scope
- --> $DIR/generic_duplicate_param_use.rs:26:5
+ --> $DIR/generic_duplicate_param_use.rs:31:36
+ |
+LL | fn one_lifetime<'a>(t: &'a u32) -> TwoLifetimes<'a, 'a> {
+ | ^^^^^^^^^^^^^^^^^^^^ generic argument `'a` used twice
+ |
+note: for this opaque type
+ --> $DIR/generic_duplicate_param_use.rs:21:29
+ |
+LL | type TwoLifetimes<'a, 'b> = impl Debug + Captures<'a> + Captures<'b>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: non-defining opaque type use in defining scope
+ --> $DIR/generic_duplicate_param_use.rs:33:5
|
LL | t
| ^
|
note: lifetime used multiple times
- --> $DIR/generic_duplicate_param_use.rs:15:19
+ --> $DIR/generic_duplicate_param_use.rs:21:19
|
LL | type TwoLifetimes<'a, 'b> = impl Debug + Captures<'a> + Captures<'b>;
| ^^ ^^
error: non-defining opaque type use in defining scope
- --> $DIR/generic_duplicate_param_use.rs:31:5
+ --> $DIR/generic_duplicate_param_use.rs:37:50
+ |
+LL | fn one_const<const N: usize>(t: *mut [u8; N]) -> TwoConsts<N, N> {
+ | ^^^^^^^^^^^^^^^ generic argument `N` used twice
+ |
+note: for this opaque type
+ --> $DIR/generic_duplicate_param_use.rs:23:50
+ |
+LL | type TwoConsts<const X: usize, const Y: usize> = impl Debug;
+ | ^^^^^^^^^^
+
+error: non-defining opaque type use in defining scope
+ --> $DIR/generic_duplicate_param_use.rs:39:5
|
LL | t
| ^
|
note: constant used multiple times
- --> $DIR/generic_duplicate_param_use.rs:17:16
+ --> $DIR/generic_duplicate_param_use.rs:23:16
|
LL | type TwoConsts<const X: usize, const Y: usize> = impl Debug;
| ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
-error: aborting due to 3 previous errors
+error: aborting due to 6 previous errors
diff --git a/tests/ui/type-alias-impl-trait/generic_nondefining_use.rs b/tests/ui/type-alias-impl-trait/generic_nondefining_use.rs
index e7b8567b9..68f4c6923 100644
--- a/tests/ui/type-alias-impl-trait/generic_nondefining_use.rs
+++ b/tests/ui/type-alias-impl-trait/generic_nondefining_use.rs
@@ -13,16 +13,19 @@ type OneConst<const X: usize> = impl Debug;
// Not defining uses, because they doesn't define *all* possible generics.
fn concrete_ty() -> OneTy<u32> {
+ //~^ ERROR: non-defining opaque type use in defining scope
5u32
- //~^ ERROR expected generic type parameter, found `u32`
+ //~^ ERROR: expected generic type parameter, found `u32`
}
fn concrete_lifetime() -> OneLifetime<'static> {
+ //~^ ERROR: non-defining opaque type use in defining scope
6u32
- //~^ ERROR expected generic lifetime parameter, found `'static`
+ //~^ ERROR: expected generic lifetime parameter, found `'static`
}
fn concrete_const() -> OneConst<{ 123 }> {
+ //~^ ERROR: non-defining opaque type use in defining scope
7u32
- //~^ ERROR expected generic constant parameter, found `123`
+ //~^ ERROR: expected generic constant parameter, found `123`
}
diff --git a/tests/ui/type-alias-impl-trait/generic_nondefining_use.stderr b/tests/ui/type-alias-impl-trait/generic_nondefining_use.stderr
index 966fe823f..e3b7b1a76 100644
--- a/tests/ui/type-alias-impl-trait/generic_nondefining_use.stderr
+++ b/tests/ui/type-alias-impl-trait/generic_nondefining_use.stderr
@@ -1,5 +1,17 @@
+error[E0792]: non-defining opaque type use in defining scope
+ --> $DIR/generic_nondefining_use.rs:15:21
+ |
+LL | fn concrete_ty() -> OneTy<u32> {
+ | ^^^^^^^^^^ argument `u32` is not a generic parameter
+ |
+note: for this opaque type
+ --> $DIR/generic_nondefining_use.rs:7:17
+ |
+LL | type OneTy<T> = impl Debug;
+ | ^^^^^^^^^^
+
error[E0792]: expected generic type parameter, found `u32`
- --> $DIR/generic_nondefining_use.rs:16:5
+ --> $DIR/generic_nondefining_use.rs:17:5
|
LL | type OneTy<T> = impl Debug;
| - this generic parameter must be used with a generic type parameter
@@ -7,8 +19,20 @@ LL | type OneTy<T> = impl Debug;
LL | 5u32
| ^^^^
+error[E0792]: non-defining opaque type use in defining scope
+ --> $DIR/generic_nondefining_use.rs:21:27
+ |
+LL | fn concrete_lifetime() -> OneLifetime<'static> {
+ | ^^^^^^^^^^^^^^^^^^^^ argument `'static` is not a generic parameter
+ |
+note: for this opaque type
+ --> $DIR/generic_nondefining_use.rs:9:24
+ |
+LL | type OneLifetime<'a> = impl Debug;
+ | ^^^^^^^^^^
+
error[E0792]: expected generic lifetime parameter, found `'static`
- --> $DIR/generic_nondefining_use.rs:21:5
+ --> $DIR/generic_nondefining_use.rs:23:5
|
LL | type OneLifetime<'a> = impl Debug;
| -- cannot use static lifetime; use a bound lifetime instead or remove the lifetime parameter from the opaque type
@@ -16,8 +40,20 @@ LL | type OneLifetime<'a> = impl Debug;
LL | 6u32
| ^^^^
+error[E0792]: non-defining opaque type use in defining scope
+ --> $DIR/generic_nondefining_use.rs:27:24
+ |
+LL | fn concrete_const() -> OneConst<{ 123 }> {
+ | ^^^^^^^^^^^^^^^^^ argument `123` is not a generic parameter
+ |
+note: for this opaque type
+ --> $DIR/generic_nondefining_use.rs:11:33
+ |
+LL | type OneConst<const X: usize> = impl Debug;
+ | ^^^^^^^^^^
+
error[E0792]: expected generic constant parameter, found `123`
- --> $DIR/generic_nondefining_use.rs:26:5
+ --> $DIR/generic_nondefining_use.rs:29:5
|
LL | type OneConst<const X: usize> = impl Debug;
| -------------- this generic parameter must be used with a generic constant parameter
@@ -25,6 +61,6 @@ LL | type OneConst<const X: usize> = impl Debug;
LL | 7u32
| ^^^^
-error: aborting due to 3 previous errors
+error: aborting due to 6 previous errors
For more information about this error, try `rustc --explain E0792`.
diff --git a/tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs b/tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs
index cdd8f6f19..c60f5c11c 100644
--- a/tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs
+++ b/tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs
@@ -5,12 +5,12 @@ fn main() {
let x = wrong_generic(&y);
let z: i32 = x;
//~^ ERROR expected generic type parameter, found `&i32`
-}
-type WrongGeneric<T> = impl 'static;
-//~^ ERROR: at least one trait must be specified
+ type WrongGeneric<T> = impl 'static;
+ //~^ ERROR: at least one trait must be specified
-fn wrong_generic<T>(t: T) -> WrongGeneric<T> {
- t
- //~^ ERROR the parameter type `T` may not live long enough
+ fn wrong_generic<T>(t: T) -> WrongGeneric<T> {
+ t
+ //~^ ERROR the parameter type `T` may not live long enough
+ }
}
diff --git a/tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr b/tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr
index fa79e51e9..8c3a25dbf 100644
--- a/tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr
+++ b/tests/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr
@@ -1,8 +1,8 @@
error: at least one trait must be specified
- --> $DIR/generic_type_does_not_live_long_enough.rs:10:24
+ --> $DIR/generic_type_does_not_live_long_enough.rs:9:28
|
-LL | type WrongGeneric<T> = impl 'static;
- | ^^^^^^^^^^^^
+LL | type WrongGeneric<T> = impl 'static;
+ | ^^^^^^^^^^^^
error[E0792]: expected generic type parameter, found `&i32`
--> $DIR/generic_type_does_not_live_long_enough.rs:6:18
@@ -10,19 +10,19 @@ error[E0792]: expected generic type parameter, found `&i32`
LL | let z: i32 = x;
| ^
...
-LL | type WrongGeneric<T> = impl 'static;
- | - this generic parameter must be used with a generic type parameter
+LL | type WrongGeneric<T> = impl 'static;
+ | - this generic parameter must be used with a generic type parameter
error[E0310]: the parameter type `T` may not live long enough
- --> $DIR/generic_type_does_not_live_long_enough.rs:14:5
+ --> $DIR/generic_type_does_not_live_long_enough.rs:13:9
|
-LL | t
- | ^ ...so that the type `T` will meet its required lifetime bounds
+LL | t
+ | ^ ...so that the type `T` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound...
|
-LL | fn wrong_generic<T: 'static>(t: T) -> WrongGeneric<T> {
- | +++++++++
+LL | fn wrong_generic<T: 'static>(t: T) -> WrongGeneric<T> {
+ | +++++++++
error: aborting due to 3 previous errors
diff --git a/tests/ui/type-alias-impl-trait/generic_underconstrained.stderr b/tests/ui/type-alias-impl-trait/generic_underconstrained.stderr
index c73288329..bc9280127 100644
--- a/tests/ui/type-alias-impl-trait/generic_underconstrained.stderr
+++ b/tests/ui/type-alias-impl-trait/generic_underconstrained.stderr
@@ -4,11 +4,11 @@ error[E0277]: the trait bound `T: Trait` is not satisfied
LL | fn underconstrain<T>(_: T) -> Underconstrained<T> {
| ^^^^^^^^^^^^^^^^^^^ the trait `Trait` is not implemented for `T`
|
-note: required by a bound in `Underconstrained`
+note: required by a bound on the type alias `Underconstrained`
--> $DIR/generic_underconstrained.rs:6:26
|
LL | type Underconstrained<T: Trait> = impl Send;
- | ^^^^^ required by this bound in `Underconstrained`
+ | ^^^^^ required by this bound
help: consider restricting type parameter `T`
|
LL | fn underconstrain<T: Trait>(_: T) -> Underconstrained<T> {
diff --git a/tests/ui/type-alias-impl-trait/generic_underconstrained2.stderr b/tests/ui/type-alias-impl-trait/generic_underconstrained2.stderr
index d77d978aa..fdc9ec090 100644
--- a/tests/ui/type-alias-impl-trait/generic_underconstrained2.stderr
+++ b/tests/ui/type-alias-impl-trait/generic_underconstrained2.stderr
@@ -4,11 +4,11 @@ error[E0277]: `U` doesn't implement `Debug`
LL | fn underconstrained<U>(_: U) -> Underconstrained<U> {
| ^^^^^^^^^^^^^^^^^^^ `U` cannot be formatted using `{:?}` because it doesn't implement `Debug`
|
-note: required by a bound in `Underconstrained`
+note: required by a bound on the type alias `Underconstrained`
--> $DIR/generic_underconstrained2.rs:5:26
|
LL | type Underconstrained<T: std::fmt::Debug> = impl Send;
- | ^^^^^^^^^^^^^^^ required by this bound in `Underconstrained`
+ | ^^^^^^^^^^^^^^^ required by this bound
help: consider restricting type parameter `U`
|
LL | fn underconstrained<U: std::fmt::Debug>(_: U) -> Underconstrained<U> {
@@ -20,11 +20,11 @@ error[E0277]: `V` doesn't implement `Debug`
LL | fn underconstrained2<U, V>(_: U, _: V) -> Underconstrained2<V> {
| ^^^^^^^^^^^^^^^^^^^^ `V` cannot be formatted using `{:?}` because it doesn't implement `Debug`
|
-note: required by a bound in `Underconstrained2`
+note: required by a bound on the type alias `Underconstrained2`
--> $DIR/generic_underconstrained2.rs:13:27
|
LL | type Underconstrained2<T: std::fmt::Debug> = impl Send;
- | ^^^^^^^^^^^^^^^ required by this bound in `Underconstrained2`
+ | ^^^^^^^^^^^^^^^ required by this bound
help: consider restricting type parameter `V`
|
LL | fn underconstrained2<U, V: std::fmt::Debug>(_: U, _: V) -> Underconstrained2<V> {
diff --git a/tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.rs b/tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.rs
new file mode 100644
index 000000000..eb19b49c7
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.rs
@@ -0,0 +1,28 @@
+//! This test shows that a field type that is a projection that resolves to an opaque,
+//! is not a defining use. While we could substitute the struct generics, that would
+//! mean we would have to walk all substitutions of an `Foo`, which can quickly
+//! degenerate into looking at an exponential number of types depending on the complexity
+//! of a program.
+
+#![feature(impl_trait_in_assoc_type)]
+
+struct Bar;
+
+trait Trait: Sized {
+ type Assoc;
+ fn foo() -> Foo<Self>;
+}
+
+impl Trait for Bar {
+ type Assoc = impl std::fmt::Debug;
+ fn foo() -> Foo<Bar> {
+ Foo { field: () }
+ //~^ ERROR: mismatched types
+ }
+}
+
+struct Foo<T: Trait> {
+ field: <T as Trait>::Assoc,
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.stderr b/tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.stderr
new file mode 100644
index 000000000..648efd1cb
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/hidden_behind_projection_behind_struct_field.stderr
@@ -0,0 +1,20 @@
+error[E0308]: mismatched types
+ --> $DIR/hidden_behind_projection_behind_struct_field.rs:19:22
+ |
+LL | type Assoc = impl std::fmt::Debug;
+ | -------------------- the expected opaque type
+LL | fn foo() -> Foo<Bar> {
+LL | Foo { field: () }
+ | ^^ expected opaque type, found `()`
+ |
+ = note: expected opaque type `<Bar as Trait>::Assoc`
+ found unit type `()`
+note: this item must have the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/hidden_behind_projection_behind_struct_field.rs:18:8
+ |
+LL | fn foo() -> Foo<Bar> {
+ | ^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/type-alias-impl-trait/hidden_behind_struct_field.rs b/tests/ui/type-alias-impl-trait/hidden_behind_struct_field.rs
new file mode 100644
index 000000000..58778702d
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/hidden_behind_struct_field.rs
@@ -0,0 +1,30 @@
+//! This test shows that the appearance of an opaque type
+//! in the substs of a struct are enough to make it count
+//! for making the function a defining use. It doesn't matter
+//! if the opaque type is actually used in the field.
+
+#![feature(impl_trait_in_assoc_type)]
+// check-pass
+
+use std::marker::PhantomData;
+
+struct Bar;
+
+trait Trait: Sized {
+ type Assoc;
+ fn foo() -> Foo<Self::Assoc>;
+}
+
+impl Trait for Bar {
+ type Assoc = impl std::fmt::Debug;
+ fn foo() -> Foo<Self::Assoc> {
+ let foo: Foo<()> = Foo { field: PhantomData };
+ foo
+ }
+}
+
+struct Foo<T> {
+ field: PhantomData<T>,
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/hidden_behind_struct_field2.rs b/tests/ui/type-alias-impl-trait/hidden_behind_struct_field2.rs
new file mode 100644
index 000000000..e440dce5e
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/hidden_behind_struct_field2.rs
@@ -0,0 +1,26 @@
+//! This test shows that we can even follow projections
+//! into associated types of the same impl if they are
+//! indirectly mentioned in a struct field.
+
+#![feature(impl_trait_in_assoc_type)]
+// check-pass
+
+struct Bar;
+
+trait Trait: Sized {
+ type Assoc;
+ fn foo() -> Foo;
+}
+
+impl Trait for Bar {
+ type Assoc = impl std::fmt::Debug;
+ fn foo() -> Foo {
+ Foo { field: () }
+ }
+}
+
+struct Foo {
+ field: <Bar as Trait>::Assoc,
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/higher_kinded_params.rs b/tests/ui/type-alias-impl-trait/higher_kinded_params.rs
new file mode 100644
index 000000000..db1a3a1c7
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/higher_kinded_params.rs
@@ -0,0 +1,28 @@
+//! This test checks that walking into binders
+//! during opaque type collection does not ICE or raise errors.
+
+// edition: 2021
+
+// check-pass
+
+#![feature(type_alias_impl_trait)]
+
+trait B {
+ type C;
+}
+
+struct A;
+
+impl<'a> B for &'a A {
+ type C = ();
+}
+
+struct Terminator;
+
+type Successors<'a> = impl std::fmt::Debug + 'a;
+
+impl Terminator {
+ fn successors(&self, _: for<'x> fn(&'x ()) -> <&'x A as B>::C) -> Successors<'_> {}
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/higher_kinded_params2.rs b/tests/ui/type-alias-impl-trait/higher_kinded_params2.rs
new file mode 100644
index 000000000..f011e5b21
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/higher_kinded_params2.rs
@@ -0,0 +1,35 @@
+//! This test checks the behaviour of walking into binders
+//! and normalizing something behind them actually works.
+
+// edition: 2021
+
+#![feature(type_alias_impl_trait)]
+
+trait B {
+ type C;
+}
+
+struct A;
+
+impl<'a> B for &'a A {
+ type C = Tait;
+}
+
+type Tait = impl std::fmt::Debug;
+
+struct Terminator;
+
+type Successors<'a> = impl std::fmt::Debug + 'a;
+
+impl Terminator {
+ fn successors(&self, mut f: for<'x> fn(&'x ()) -> <&'x A as B>::C) -> Successors<'_> {
+ f = g;
+ //~^ ERROR item constrains opaque type that is not in its signature
+ }
+}
+
+fn g(_: &()) -> String {
+ String::new()
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/higher_kinded_params2.stderr b/tests/ui/type-alias-impl-trait/higher_kinded_params2.stderr
new file mode 100644
index 000000000..39f584dd4
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/higher_kinded_params2.stderr
@@ -0,0 +1,15 @@
+error: item constrains opaque type that is not in its signature
+ --> $DIR/higher_kinded_params2.rs:26:13
+ |
+LL | f = g;
+ | ^
+ |
+ = note: this item must mention the opaque type in its signature in order to be able to register hidden types
+note: this item must mention the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/higher_kinded_params2.rs:25:8
+ |
+LL | fn successors(&self, mut f: for<'x> fn(&'x ()) -> <&'x A as B>::C) -> Successors<'_> {
+ | ^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/type-alias-impl-trait/higher_kinded_params3.rs b/tests/ui/type-alias-impl-trait/higher_kinded_params3.rs
new file mode 100644
index 000000000..6edfccaf7
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/higher_kinded_params3.rs
@@ -0,0 +1,36 @@
+//! This test checks that we can't actually have an opaque type behind
+//! a binder that references variables from that binder.
+
+// edition: 2021
+
+#![feature(type_alias_impl_trait)]
+
+trait B {
+ type C;
+}
+
+struct A;
+
+impl<'a> B for &'a A {
+ type C = Tait<'a>;
+}
+
+type Tait<'a> = impl std::fmt::Debug + 'a;
+
+struct Terminator;
+
+type Successors<'a> = impl std::fmt::Debug + 'a;
+
+impl Terminator {
+ fn successors(&self, mut f: for<'x> fn(&'x ()) -> <&'x A as B>::C) -> Successors<'_> {
+ f = g;
+ //~^ ERROR mismatched types
+ //~| ERROR item constrains opaque type that is not in its signature
+ }
+}
+
+fn g(x: &()) -> &() {
+ x
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/higher_kinded_params3.stderr b/tests/ui/type-alias-impl-trait/higher_kinded_params3.stderr
new file mode 100644
index 000000000..14372d8f3
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/higher_kinded_params3.stderr
@@ -0,0 +1,28 @@
+error: item constrains opaque type that is not in its signature
+ --> $DIR/higher_kinded_params3.rs:26:13
+ |
+LL | f = g;
+ | ^
+ |
+ = note: this item must mention the opaque type in its signature in order to be able to register hidden types
+note: this item must mention the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/higher_kinded_params3.rs:25:8
+ |
+LL | fn successors(&self, mut f: for<'x> fn(&'x ()) -> <&'x A as B>::C) -> Successors<'_> {
+ | ^^^^^^^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/higher_kinded_params3.rs:26:9
+ |
+LL | type Tait<'a> = impl std::fmt::Debug + 'a;
+ | ------------------------- the expected opaque type
+...
+LL | f = g;
+ | ^^^^^ one type is more general than the other
+ |
+ = note: expected fn pointer `for<'x> fn(&'x ()) -> Tait<'x>`
+ found fn pointer `for<'a> fn(&'a ()) -> &'a ()`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.rs b/tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.rs
new file mode 100644
index 000000000..a3f65146f
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.rs
@@ -0,0 +1,28 @@
+#![feature(impl_trait_in_assoc_type)]
+
+// We weren't checking that the trait and impl generics line up in the
+// normalization-shortcut code in `OpaqueTypeCollector`.
+
+use std::ops::Deref;
+
+trait Foo {
+ type Bar<'a>;
+
+ type Baz<'a>;
+
+ fn test<'a>() -> Self::Bar<'a>;
+}
+
+impl Foo for () {
+ type Bar<'a> = impl Deref<Target = Self::Baz<'a>>;
+
+ type Baz<T> = impl Sized;
+ //~^ ERROR type `Baz` has 1 type parameter but its trait declaration has 0 type parameters
+ //~| ERROR unconstrained opaque type
+
+ fn test<'a>() -> Self::Bar<'a> {
+ &()
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.stderr b/tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.stderr
new file mode 100644
index 000000000..13f5d8b8e
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/impl-trait-in-type-alias-with-bad-substs.stderr
@@ -0,0 +1,20 @@
+error[E0049]: type `Baz` has 1 type parameter but its trait declaration has 0 type parameters
+ --> $DIR/impl-trait-in-type-alias-with-bad-substs.rs:19:14
+ |
+LL | type Baz<'a>;
+ | -- expected 0 type parameters
+...
+LL | type Baz<T> = impl Sized;
+ | ^ found 1 type parameter
+
+error: unconstrained opaque type
+ --> $DIR/impl-trait-in-type-alias-with-bad-substs.rs:19:19
+ |
+LL | type Baz<T> = impl Sized;
+ | ^^^^^^^^^^
+ |
+ = note: `Baz` must be used in combination with a concrete type within the same impl
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0049`.
diff --git a/tests/ui/type-alias-impl-trait/impl_for_weak_alias.rs b/tests/ui/type-alias-impl-trait/impl_for_weak_alias.rs
new file mode 100644
index 000000000..00d1a1a22
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/impl_for_weak_alias.rs
@@ -0,0 +1,14 @@
+#![feature(type_alias_impl_trait)]
+#![feature(auto_traits)]
+
+type Alias = (impl Sized, u8);
+
+auto trait Trait {}
+impl Trait for Alias {}
+//~^ ERROR traits with a default impl, like `Trait`, cannot be implemented for type alias `Alias`
+
+fn _def() -> Alias {
+ (42, 42)
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/impl_for_weak_alias.stderr b/tests/ui/type-alias-impl-trait/impl_for_weak_alias.stderr
new file mode 100644
index 000000000..c312ee7de
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/impl_for_weak_alias.stderr
@@ -0,0 +1,11 @@
+error[E0321]: traits with a default impl, like `Trait`, cannot be implemented for type alias `Alias`
+ --> $DIR/impl_for_weak_alias.rs:7:1
+ |
+LL | impl Trait for Alias {}
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: a trait object implements `Trait` if and only if `Trait` is one of the trait object's trait bounds
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0321`.
diff --git a/tests/ui/type-alias-impl-trait/inference-cycle.rs b/tests/ui/type-alias-impl-trait/inference-cycle.rs
index 79caddf79..20175a4fe 100644
--- a/tests/ui/type-alias-impl-trait/inference-cycle.rs
+++ b/tests/ui/type-alias-impl-trait/inference-cycle.rs
@@ -2,8 +2,9 @@
#![allow(dead_code)]
mod m {
- type Foo = impl std::fmt::Debug;
+ pub type Foo = impl std::fmt::Debug;
//~^ ERROR cycle detected
+ //~| ERROR cycle detected
// Cycle: error today, but it'd be nice if it eventually worked
@@ -13,10 +14,11 @@ mod m {
pub fn bar() {
is_send(foo()); // Today: error
+ //~^ ERROR: cannot check whether the hidden type of `inference_cycle[4ecc]::m::Foo::{opaque#0}` satisfies auto traits
}
- fn baz() {
- let f: Foo = 22_u32;
+ fn baz() -> Foo {
+ ()
}
fn is_send<T: Send>(_: T) {}
diff --git a/tests/ui/type-alias-impl-trait/inference-cycle.stderr b/tests/ui/type-alias-impl-trait/inference-cycle.stderr
index b9d646b92..4d5f36747 100644
--- a/tests/ui/type-alias-impl-trait/inference-cycle.stderr
+++ b/tests/ui/type-alias-impl-trait/inference-cycle.stderr
@@ -1,11 +1,11 @@
error[E0391]: cycle detected when computing type of `m::Foo::{opaque#0}`
- --> $DIR/inference-cycle.rs:5:16
+ --> $DIR/inference-cycle.rs:5:20
|
-LL | type Foo = impl std::fmt::Debug;
- | ^^^^^^^^^^^^^^^^^^^^
+LL | pub type Foo = impl std::fmt::Debug;
+ | ^^^^^^^^^^^^^^^^^^^^
|
note: ...which requires type-checking `m::bar`...
- --> $DIR/inference-cycle.rs:15:9
+ --> $DIR/inference-cycle.rs:16:9
|
LL | is_send(foo()); // Today: error
| ^^^^^^^
@@ -17,6 +17,48 @@ note: cycle used when checking item types in module `m`
LL | mod m {
| ^^^^^
-error: aborting due to previous error
+error[E0391]: cycle detected when computing type of `m::Foo::{opaque#0}`
+ --> $DIR/inference-cycle.rs:5:20
+ |
+LL | pub type Foo = impl std::fmt::Debug;
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+note: ...which requires type-checking `m::bar`...
+ --> $DIR/inference-cycle.rs:15:5
+ |
+LL | pub fn bar() {
+ | ^^^^^^^^^^^^
+ = note: ...which again requires computing type of `m::Foo::{opaque#0}`, completing the cycle
+note: cycle used when checking item types in module `m`
+ --> $DIR/inference-cycle.rs:4:1
+ |
+LL | mod m {
+ | ^^^^^
+
+error: cannot check whether the hidden type of `inference_cycle[4ecc]::m::Foo::{opaque#0}` satisfies auto traits
+ --> $DIR/inference-cycle.rs:16:17
+ |
+LL | is_send(foo()); // Today: error
+ | ------- ^^^^^
+ | |
+ | required by a bound introduced by this call
+ |
+note: opaque type is declared here
+ --> $DIR/inference-cycle.rs:5:20
+ |
+LL | pub type Foo = impl std::fmt::Debug;
+ | ^^^^^^^^^^^^^^^^^^^^
+note: this item depends on auto traits of the hidden type, but may also be registering the hidden type. This is not supported right now. You can try moving the opaque type and the item that actually registers a hidden type into a new submodule
+ --> $DIR/inference-cycle.rs:15:12
+ |
+LL | pub fn bar() {
+ | ^^^
+note: required by a bound in `is_send`
+ --> $DIR/inference-cycle.rs:24:19
+ |
+LL | fn is_send<T: Send>(_: T) {}
+ | ^^^^ required by this bound in `is_send`
+
+error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/type-alias-impl-trait/invalid_impl_trait_in_assoc_ty.stderr b/tests/ui/type-alias-impl-trait/invalid_impl_trait_in_assoc_ty.stderr
index 2beed73cb..6ec5d13f8 100644
--- a/tests/ui/type-alias-impl-trait/invalid_impl_trait_in_assoc_ty.stderr
+++ b/tests/ui/type-alias-impl-trait/invalid_impl_trait_in_assoc_ty.stderr
@@ -12,10 +12,10 @@ LL | let x: Self::Foo = ();
= note: expected opaque type `<() as Foo>::Foo`
found unit type `()`
note: this item must have the opaque type in its signature in order to be able to register hidden types
- --> $DIR/invalid_impl_trait_in_assoc_ty.rs:10:5
+ --> $DIR/invalid_impl_trait_in_assoc_ty.rs:10:8
|
LL | fn bar() {
- | ^^^^^^^^
+ | ^^^
error: aborting due to previous error
diff --git a/tests/ui/type-alias-impl-trait/issue-109054.rs b/tests/ui/type-alias-impl-trait/issue-109054.rs
new file mode 100644
index 000000000..1fbec47b1
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/issue-109054.rs
@@ -0,0 +1,22 @@
+// edition:2021
+
+#![feature(type_alias_impl_trait)]
+
+struct CallMe;
+
+type ReturnType<'a> = impl std::future::Future<Output = u32> + 'a;
+type FnType = impl Fn(&u32) -> ReturnType;
+
+impl std::ops::Deref for CallMe {
+ type Target = FnType;
+
+ fn deref(&self) -> &Self::Target {
+ fn inner(val: &u32) -> ReturnType {
+ async move { *val * 2 }
+ }
+
+ &inner //~ ERROR: expected generic lifetime parameter, found `'_`
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/issue-109054.stderr b/tests/ui/type-alias-impl-trait/issue-109054.stderr
new file mode 100644
index 000000000..a611b9fe4
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/issue-109054.stderr
@@ -0,0 +1,12 @@
+error[E0792]: expected generic lifetime parameter, found `'_`
+ --> $DIR/issue-109054.rs:18:9
+ |
+LL | type ReturnType<'a> = impl std::future::Future<Output = u32> + 'a;
+ | -- this generic parameter must be used with a generic lifetime parameter
+...
+LL | &inner
+ | ^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0792`.
diff --git a/tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs b/tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs
index 4a11bb502..b89c3e459 100644
--- a/tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs
+++ b/tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs
@@ -1,9 +1,10 @@
#![feature(type_alias_impl_trait)]
+// check-pass
+
type Foo = impl Fn() -> Foo;
fn foo() -> Foo {
-//~^ ERROR: overflow evaluating the requirement
foo
}
diff --git a/tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr b/tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr
deleted file mode 100644
index 0a34e8486..000000000
--- a/tests/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0275]: overflow evaluating the requirement `Foo: Sized`
- --> $DIR/issue-53398-cyclic-types.rs:5:13
- |
-LL | fn foo() -> Foo {
- | ^^^
- |
- = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_53398_cyclic_types`)
- = note: required because it appears within the type `fn() -> Foo {foo}`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0275`.
diff --git a/tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs b/tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs
index a3f126d56..a213dbba4 100644
--- a/tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs
+++ b/tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs
@@ -1,19 +1,22 @@
#![feature(generators, generator_trait, rustc_attrs)]
#![feature(type_alias_impl_trait)]
-use std::ops::Generator;
+// check-pass
-type GenOnce<Y, R> = impl Generator<Yield = Y, Return = R>;
+mod gen {
+ use std::ops::Generator;
-const fn const_generator<Y, R>(yielding: Y, returning: R) -> GenOnce<Y, R> {
- move || {
- yield yielding;
+ pub type GenOnce<Y, R> = impl Generator<Yield = Y, Return = R>;
- return returning;
+ pub const fn const_generator<Y, R>(yielding: Y, returning: R) -> GenOnce<Y, R> {
+ move || {
+ yield yielding;
+
+ return returning;
+ }
}
}
-const FOO: GenOnce<usize, usize> = const_generator(10, 100);
+const FOO: gen::GenOnce<usize, usize> = gen::const_generator(10, 100);
-#[rustc_error]
-fn main() {} //~ ERROR
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.stderr b/tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.stderr
deleted file mode 100644
index eb1c9603a..000000000
--- a/tests/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.stderr
+++ /dev/null
@@ -1,8 +0,0 @@
-error: fatal error triggered by #[rustc_error]
- --> $DIR/issue-53678-generator-and-const-fn.rs:19:1
- |
-LL | fn main() {}
- | ^^^^^^^^^
-
-error: aborting due to previous error
-
diff --git a/tests/ui/type-alias-impl-trait/issue-57961.rs b/tests/ui/type-alias-impl-trait/issue-57961.rs
index 4aa5966ff..61af7a0f6 100644
--- a/tests/ui/type-alias-impl-trait/issue-57961.rs
+++ b/tests/ui/type-alias-impl-trait/issue-57961.rs
@@ -11,8 +11,8 @@ impl Foo for () {
//~^ ERROR expected `IntoIter<u32>` to be an iterator that yields `X`, but it yields `u32`
}
-fn incoherent() {
- let f: X = 22_i32;
+fn incoherent() -> X {
+ 22_i32
}
fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/issue-60564.rs b/tests/ui/type-alias-impl-trait/issue-60564.rs
index c2f4c3708..48bd70bcc 100644
--- a/tests/ui/type-alias-impl-trait/issue-60564.rs
+++ b/tests/ui/type-alias-impl-trait/issue-60564.rs
@@ -17,6 +17,7 @@ where
{
type BitsIter = IterBitsIter<T, E, u8>;
fn iter_bits(self, n: u8) -> Self::BitsIter {
+ //~^ ERROR non-defining opaque type use
(0u8..n).rev().map(move |shift| ((self >> T::from(shift)) & T::from(1)).try_into().unwrap())
//~^ ERROR expected generic type parameter, found `u8`
}
diff --git a/tests/ui/type-alias-impl-trait/issue-60564.stderr b/tests/ui/type-alias-impl-trait/issue-60564.stderr
index f8fdb004d..d42495e93 100644
--- a/tests/ui/type-alias-impl-trait/issue-60564.stderr
+++ b/tests/ui/type-alias-impl-trait/issue-60564.stderr
@@ -1,5 +1,17 @@
+error[E0792]: non-defining opaque type use in defining scope
+ --> $DIR/issue-60564.rs:19:34
+ |
+LL | fn iter_bits(self, n: u8) -> Self::BitsIter {
+ | ^^^^^^^^^^^^^^ argument `u8` is not a generic parameter
+ |
+note: for this opaque type
+ --> $DIR/issue-60564.rs:8:30
+ |
+LL | type IterBitsIter<T, E, I> = impl std::iter::Iterator<Item = I>;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
error[E0792]: expected generic type parameter, found `u8`
- --> $DIR/issue-60564.rs:20:9
+ --> $DIR/issue-60564.rs:21:9
|
LL | type IterBitsIter<T, E, I> = impl std::iter::Iterator<Item = I>;
| - this generic parameter must be used with a generic type parameter
@@ -7,6 +19,6 @@ LL | type IterBitsIter<T, E, I> = impl std::iter::Iterator<Item = I>;
LL | (0u8..n).rev().map(move |shift| ((self >> T::from(shift)) & T::from(1)).try_into().unwrap())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-error: aborting due to previous error
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0792`.
diff --git a/tests/ui/type-alias-impl-trait/issue-63263-closure-return.rs b/tests/ui/type-alias-impl-trait/issue-63263-closure-return.rs
index 7414611a7..ddea7aeb6 100644
--- a/tests/ui/type-alias-impl-trait/issue-63263-closure-return.rs
+++ b/tests/ui/type-alias-impl-trait/issue-63263-closure-return.rs
@@ -8,6 +8,9 @@
pub type Closure = impl FnOnce();
-fn main() {
+fn bop() -> Closure {
|| -> Closure { || () };
+ panic!()
}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs b/tests/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs
index b91cbce37..7b3e9e124 100644
--- a/tests/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs
+++ b/tests/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs
@@ -11,7 +11,9 @@ type T = impl Sized;
fn take(_: fn() -> T) {}
-fn main() {
+fn bop(_: T) {
take(|| {});
take(|| {});
}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.rs b/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.rs
index 5e0a82a72..9dcdb5785 100644
--- a/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.rs
+++ b/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.rs
@@ -7,7 +7,8 @@ trait Trait<T> {}
type Alias<'a, U> = impl Trait<U>;
fn f<'a>() -> Alias<'a, ()> {}
-//~^ ERROR expected generic type parameter, found `()`
+//~^ ERROR non-defining opaque type use
+//~| ERROR expected generic type parameter, found `()`
fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.stderr b/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.stderr
index 271743a40..085bffe90 100644
--- a/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.stderr
+++ b/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use-2.stderr
@@ -1,3 +1,15 @@
+error[E0792]: non-defining opaque type use in defining scope
+ --> $DIR/issue-68368-non-defining-use-2.rs:9:15
+ |
+LL | fn f<'a>() -> Alias<'a, ()> {}
+ | ^^^^^^^^^^^^^ argument `()` is not a generic parameter
+ |
+note: for this opaque type
+ --> $DIR/issue-68368-non-defining-use-2.rs:7:21
+ |
+LL | type Alias<'a, U> = impl Trait<U>;
+ | ^^^^^^^^^^^^^
+
error[E0792]: expected generic type parameter, found `()`
--> $DIR/issue-68368-non-defining-use-2.rs:9:29
|
@@ -7,6 +19,6 @@ LL |
LL | fn f<'a>() -> Alias<'a, ()> {}
| ^^
-error: aborting due to previous error
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0792`.
diff --git a/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs b/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs
index 3b32260c9..dfe2ee820 100644
--- a/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs
+++ b/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs
@@ -8,6 +8,7 @@ type Alias<'a, U> = impl Trait<U>;
fn f<'a>() -> Alias<'a, ()> {}
//~^ ERROR expected generic type parameter, found `()`
+//~| ERROR non-defining opaque type use
fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.stderr b/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.stderr
index 4d9a8d6ee..ea704ffff 100644
--- a/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.stderr
+++ b/tests/ui/type-alias-impl-trait/issue-68368-non-defining-use.stderr
@@ -1,3 +1,15 @@
+error[E0792]: non-defining opaque type use in defining scope
+ --> $DIR/issue-68368-non-defining-use.rs:9:15
+ |
+LL | fn f<'a>() -> Alias<'a, ()> {}
+ | ^^^^^^^^^^^^^ argument `()` is not a generic parameter
+ |
+note: for this opaque type
+ --> $DIR/issue-68368-non-defining-use.rs:7:21
+ |
+LL | type Alias<'a, U> = impl Trait<U>;
+ | ^^^^^^^^^^^^^
+
error[E0792]: expected generic type parameter, found `()`
--> $DIR/issue-68368-non-defining-use.rs:9:29
|
@@ -7,6 +19,6 @@ LL |
LL | fn f<'a>() -> Alias<'a, ()> {}
| ^^
-error: aborting due to previous error
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0792`.
diff --git a/tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs b/tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs
index 7657fe2fb..a0f8e48e2 100644
--- a/tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs
+++ b/tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs
@@ -1,4 +1,6 @@
-// Regression test for #69136
+//! Regression test for #69136
+//! This test checks that the unknown lifetime `'a` doesn't cause
+//! ICEs after emitting the error.
#![feature(type_alias_impl_trait)]
@@ -17,7 +19,6 @@ impl<T> WithAssoc<T> for () {
type Return<A> = impl WithAssoc<A, AssocType = impl SomeTrait + 'a>;
//~^ ERROR use of undeclared lifetime name `'a`
-fn my_fun() -> Return<()> {}
-//~^ ERROR expected generic type parameter, found `()`
+fn my_fun<T>() -> Return<T> {}
fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.stderr b/tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.stderr
index d1250786d..b7af3f06d 100644
--- a/tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.stderr
+++ b/tests/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.stderr
@@ -1,5 +1,5 @@
error[E0261]: use of undeclared lifetime name `'a`
- --> $DIR/issue-69136-inner-lifetime-resolve-error.rs:17:65
+ --> $DIR/issue-69136-inner-lifetime-resolve-error.rs:19:65
|
LL | type Return<A> = impl WithAssoc<A, AssocType = impl SomeTrait + 'a>;
| ^^ undeclared lifetime
@@ -14,16 +14,6 @@ help: consider introducing lifetime `'a` here
LL | type Return<'a, A> = impl WithAssoc<A, AssocType = impl SomeTrait + 'a>;
| +++
-error[E0792]: expected generic type parameter, found `()`
- --> $DIR/issue-69136-inner-lifetime-resolve-error.rs:20:27
- |
-LL | type Return<A> = impl WithAssoc<A, AssocType = impl SomeTrait + 'a>;
- | - this generic parameter must be used with a generic type parameter
-...
-LL | fn my_fun() -> Return<()> {}
- | ^^
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
-Some errors have detailed explanations: E0261, E0792.
-For more information about an error, try `rustc --explain E0261`.
+For more information about this error, try `rustc --explain E0261`.
diff --git a/tests/ui/type-alias-impl-trait/issue-70121.rs b/tests/ui/type-alias-impl-trait/issue-70121.rs
index dff0d89d4..bfd8d8872 100644
--- a/tests/ui/type-alias-impl-trait/issue-70121.rs
+++ b/tests/ui/type-alias-impl-trait/issue-70121.rs
@@ -1,5 +1,3 @@
-// check-pass
-
#![feature(type_alias_impl_trait)]
pub type Successors<'a> = impl Iterator<Item = &'a ()>;
@@ -17,6 +15,7 @@ impl<'a> Tr for &'a () {
}
pub fn kazusa<'a>() -> <&'a () as Tr>::Item {
+ //~^ ERROR item constrains opaque type that is not in its signature
None.into_iter()
}
diff --git a/tests/ui/type-alias-impl-trait/issue-70121.stderr b/tests/ui/type-alias-impl-trait/issue-70121.stderr
new file mode 100644
index 000000000..30c3ddd86
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/issue-70121.stderr
@@ -0,0 +1,15 @@
+error: item constrains opaque type that is not in its signature
+ --> $DIR/issue-70121.rs:17:24
+ |
+LL | pub fn kazusa<'a>() -> <&'a () as Tr>::Item {
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: this item must mention the opaque type in its signature in order to be able to register hidden types
+note: this item must mention the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/issue-70121.rs:17:8
+ |
+LL | pub fn kazusa<'a>() -> <&'a () as Tr>::Item {
+ | ^^^^^^
+
+error: aborting due to previous error
+
diff --git a/tests/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs b/tests/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs
index b97e444c6..386b77d4d 100644
--- a/tests/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs
+++ b/tests/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs
@@ -1,6 +1,8 @@
// Regression test for issue #76202
// Tests that we don't ICE when we have a trait impl on a TAIT.
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
// check-pass
#![feature(type_alias_impl_trait)]
diff --git a/tests/ui/type-alias-impl-trait/issue-77179.rs b/tests/ui/type-alias-impl-trait/issue-77179.rs
index 8d818d4a3..e7b04a489 100644
--- a/tests/ui/type-alias-impl-trait/issue-77179.rs
+++ b/tests/ui/type-alias-impl-trait/issue-77179.rs
@@ -2,7 +2,7 @@
#![feature(type_alias_impl_trait)]
-type Pointer<T> = impl std::ops::Deref<Target=T>;
+type Pointer<T> = impl std::ops::Deref<Target = T>;
fn test() -> Pointer<_> {
//~^ ERROR: the placeholder `_` is not allowed within types
diff --git a/tests/ui/type-alias-impl-trait/multi-error.rs b/tests/ui/type-alias-impl-trait/multi-error.rs
new file mode 100644
index 000000000..b5ff06572
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/multi-error.rs
@@ -0,0 +1,23 @@
+//! This test checks that we don't follow up
+//! with type mismatch errors of opaque types
+//! with their hidden types if we failed the
+//! defining scope check at the signature level.
+
+#![feature(impl_trait_in_assoc_type)]
+
+trait Foo {
+ type Bar<T>;
+ type Baz;
+ fn foo() -> (Self::Bar<u32>, Self::Baz);
+}
+
+impl Foo for () {
+ type Bar<T> = impl Sized;
+ type Baz = impl Sized;
+ fn foo() -> (Self::Bar<u32>, Self::Baz) {
+ //~^ ERROR non-defining opaque type use
+ ((), ())
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/multi-error.stderr b/tests/ui/type-alias-impl-trait/multi-error.stderr
new file mode 100644
index 000000000..b2de2effe
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/multi-error.stderr
@@ -0,0 +1,15 @@
+error[E0792]: non-defining opaque type use in defining scope
+ --> $DIR/multi-error.rs:17:17
+ |
+LL | fn foo() -> (Self::Bar<u32>, Self::Baz) {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ argument `u32` is not a generic parameter
+ |
+note: for this opaque type
+ --> $DIR/multi-error.rs:15:19
+ |
+LL | type Bar<T> = impl Sized;
+ | ^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0792`.
diff --git a/tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs b/tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs
index 9ae2c34b9..da845e861 100644
--- a/tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs
+++ b/tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs
@@ -8,7 +8,6 @@ type X<A, B> = impl Into<&'static A>;
fn f<A, B: 'static>(a: &'static A, b: B) -> (X<A, B>, X<B, A>) {
//~^ ERROR the trait bound `&'static B: From<&A>` is not satisfied
- //~| ERROR concrete type differs from previous defining opaque type use
(a, a)
}
diff --git a/tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr b/tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr
index 0d24d42ba..66a6b0bbf 100644
--- a/tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr
+++ b/tests/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr
@@ -10,15 +10,6 @@ help: consider introducing a `where` clause, but there might be an alternative b
LL | fn f<A, B: 'static>(a: &'static A, b: B) -> (X<A, B>, X<B, A>) where &'static B: From<&A> {
| ++++++++++++++++++++++++++
-error: concrete type differs from previous defining opaque type use
- --> $DIR/multiple-def-uses-in-one-fn.rs:9:45
- |
-LL | fn f<A, B: 'static>(a: &'static A, b: B) -> (X<A, B>, X<B, A>) {
- | ^^^^^^^^^^^^^^^^^^
- | |
- | expected `&B`, got `&A`
- | this expression supplies two conflicting concrete types for the same opaque type
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/type-alias-impl-trait/nested-tait-inference2.stderr b/tests/ui/type-alias-impl-trait/nested-tait-inference2.stderr
index f4d96038d..dccf84362 100644
--- a/tests/ui/type-alias-impl-trait/nested-tait-inference2.stderr
+++ b/tests/ui/type-alias-impl-trait/nested-tait-inference2.stderr
@@ -8,8 +8,8 @@ LL | ()
| -- return type was inferred to be `()` here
|
= help: the following other types implement trait `Foo<A>`:
- <() as Foo<()>>
<() as Foo<u32>>
+ <() as Foo<()>>
error: aborting due to previous error
diff --git a/tests/ui/type-alias-impl-trait/nested_in_closure.rs b/tests/ui/type-alias-impl-trait/nested_in_closure.rs
new file mode 100644
index 000000000..362f3d53e
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/nested_in_closure.rs
@@ -0,0 +1,17 @@
+#![feature(type_alias_impl_trait)]
+// check-pass
+
+fn main() {
+ let x = || {
+ type Tait = impl Sized;
+ let y: Tait = ();
+ };
+
+ let y = || {
+ type Tait = impl std::fmt::Debug;
+ let y: Tait = ();
+ y
+ };
+ let mut z = y();
+ z = ();
+}
diff --git a/tests/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs b/tests/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs
index 60b6e1aac..07607516c 100644
--- a/tests/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs
+++ b/tests/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs
@@ -10,11 +10,11 @@ mod my_mod {
5i32
}
- pub fn get_foot() -> Foot {
+ pub fn get_foot(_: Foo) -> Foot {
get_foo() //~ ERROR opaque type's hidden type cannot be another opaque type
}
}
fn main() {
- let _: my_mod::Foot = my_mod::get_foot();
+ let _: my_mod::Foot = my_mod::get_foot(my_mod::get_foo());
}
diff --git a/tests/ui/type-alias-impl-trait/no_revealing_outside_defining_module.stderr b/tests/ui/type-alias-impl-trait/no_revealing_outside_defining_module.stderr
index ae03a5b3e..863282a0f 100644
--- a/tests/ui/type-alias-impl-trait/no_revealing_outside_defining_module.stderr
+++ b/tests/ui/type-alias-impl-trait/no_revealing_outside_defining_module.stderr
@@ -11,6 +11,11 @@ LL | let _: &str = bomp();
|
= note: expected reference `&str`
found opaque type `Boo`
+note: this item must have the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/no_revealing_outside_defining_module.rs:14:4
+ |
+LL | fn bomp2() {
+ | ^^^^^
error[E0308]: mismatched types
--> $DIR/no_revealing_outside_defining_module.rs:19:5
@@ -25,6 +30,11 @@ LL | ""
|
= note: expected opaque type `Boo`
found reference `&'static str`
+note: this item must have the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/no_revealing_outside_defining_module.rs:18:4
+ |
+LL | fn bomp() -> boo::Boo {
+ | ^^^^
error: aborting due to 2 previous errors
diff --git a/tests/ui/type-alias-impl-trait/non-defining-method.rs b/tests/ui/type-alias-impl-trait/non-defining-method.rs
new file mode 100644
index 000000000..2f4a7052f
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/non-defining-method.rs
@@ -0,0 +1,21 @@
+//! This test checks that we don't follow up
+//! with type mismatch errors of opaque types
+//! with their hidden types if we failed the
+//! defining scope check at the signature level.
+
+#![feature(impl_trait_in_assoc_type)]
+
+trait Foo {
+ type Bar<T>;
+ fn foo() -> Self::Bar<u32>;
+ fn bar<T>() -> Self::Bar<T>;
+}
+
+impl Foo for () {
+ type Bar<T> = impl Sized;
+ fn foo() -> Self::Bar<u32> {}
+ //~^ ERROR non-defining opaque type use
+ fn bar<T>() -> Self::Bar<T> {}
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/non-defining-method.stderr b/tests/ui/type-alias-impl-trait/non-defining-method.stderr
new file mode 100644
index 000000000..ed5590f9d
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/non-defining-method.stderr
@@ -0,0 +1,15 @@
+error[E0792]: non-defining opaque type use in defining scope
+ --> $DIR/non-defining-method.rs:16:17
+ |
+LL | fn foo() -> Self::Bar<u32> {}
+ | ^^^^^^^^^^^^^^ argument `u32` is not a generic parameter
+ |
+note: for this opaque type
+ --> $DIR/non-defining-method.rs:15:19
+ |
+LL | type Bar<T> = impl Sized;
+ | ^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0792`.
diff --git a/tests/ui/type-alias-impl-trait/normalize-hidden-types.current.stderr b/tests/ui/type-alias-impl-trait/normalize-hidden-types.current.stderr
new file mode 100644
index 000000000..dd2737c70
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/normalize-hidden-types.current.stderr
@@ -0,0 +1,55 @@
+error: concrete type differs from previous defining opaque type use
+ --> $DIR/normalize-hidden-types.rs:25:20
+ |
+LL | fn define() -> Opaque {
+ | ^^^^^^ expected `*const (dyn FnOnce(()) + 'static)`, got `*const dyn for<'a> FnOnce(<u8 as Trait>::Gat<'a>)`
+ |
+note: previous use here
+ --> $DIR/normalize-hidden-types.rs:27:9
+ |
+LL | dyn_hoops::<_>(0)
+ | ^^^^^^^^^^^^^^^^^
+
+error: concrete type differs from previous defining opaque type use
+ --> $DIR/normalize-hidden-types.rs:34:22
+ |
+LL | fn define_1() -> Opaque { dyn_hoops::<_>(0) }
+ | ^^^^^^ expected `*const (dyn FnOnce(()) + 'static)`, got `*const dyn for<'a> FnOnce(<u8 as Trait>::Gat<'a>)`
+ |
+note: previous use here
+ --> $DIR/normalize-hidden-types.rs:34:31
+ |
+LL | fn define_1() -> Opaque { dyn_hoops::<_>(0) }
+ | ^^^^^^^^^^^^^^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/normalize-hidden-types.rs:44:25
+ |
+LL | type Opaque = impl Sized;
+ | ---------- the expected opaque type
+...
+LL | let _: Opaque = dyn_hoops::<u8>(0);
+ | ------ ^^^^^^^^^^^^^^^^^^ expected opaque type, found `*const dyn FnOnce(())`
+ | |
+ | expected due to this
+ |
+ = note: expected opaque type `typeck::Opaque`
+ found raw pointer `*const (dyn FnOnce(()) + 'static)`
+ = help: consider constraining the associated type `<u8 as Trait>::Gat<'_>` to `()` or calling a method that returns `<u8 as Trait>::Gat<'_>`
+ = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
+
+error: concrete type differs from previous defining opaque type use
+ --> $DIR/normalize-hidden-types.rs:54:25
+ |
+LL | let _: Opaque = dyn_hoops::<_>(0);
+ | ^^^^^^^^^^^^^^^^^ expected `*const (dyn FnOnce(()) + 'static)`, got `*const dyn for<'a> FnOnce(<u8 as Trait>::Gat<'a>)`
+ |
+note: previous use here
+ --> $DIR/normalize-hidden-types.rs:56:9
+ |
+LL | None
+ | ^^^^
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/type-alias-impl-trait/normalize-hidden-types.rs b/tests/ui/type-alias-impl-trait/normalize-hidden-types.rs
new file mode 100644
index 000000000..8d8054644
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/normalize-hidden-types.rs
@@ -0,0 +1,60 @@
+// Regression test for #112691
+//
+// revisions: current next
+// [next] compile-flags: -Ztrait-solver=next
+// [next] check-pass
+// [current]: known-bug: #112691
+
+#![feature(type_alias_impl_trait)]
+
+trait Trait {
+ type Gat<'lt>;
+}
+
+impl Trait for u8 {
+ type Gat<'lt> = ();
+}
+
+fn dyn_hoops<T: Trait>(_: T) -> *const dyn FnOnce(T::Gat<'_>) {
+ loop {}
+}
+
+mod typeof_1 {
+ use super::*;
+ type Opaque = impl Sized;
+ fn define() -> Opaque {
+ //[current]~^ ERROR concrete type differs
+ dyn_hoops::<_>(0)
+ }
+}
+
+mod typeof_2 {
+ use super::*;
+ type Opaque = impl Sized;
+ fn define_1() -> Opaque { dyn_hoops::<_>(0) }
+ //[current]~^ ERROR concrete type differs
+ fn define_2() -> Opaque { dyn_hoops::<u8>(0) }
+}
+
+mod typeck {
+ use super::*;
+ type Opaque = impl Sized;
+ fn define() -> Option<Opaque> {
+ let _: Opaque = dyn_hoops::<_>(0);
+ let _: Opaque = dyn_hoops::<u8>(0);
+ //[current]~^ ERROR mismatched types
+ None
+ }
+}
+
+mod borrowck {
+ use super::*;
+ type Opaque = impl Sized;
+ fn define() -> Option<Opaque> {
+ let _: Opaque = dyn_hoops::<_>(0);
+ //[current]~^ ERROR concrete type differs
+ None
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.rs b/tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.rs
new file mode 100644
index 000000000..131f8d999
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.rs
@@ -0,0 +1,33 @@
+#![feature(impl_trait_in_assoc_type)]
+
+trait Foo<T> {
+ type Assoc;
+
+ fn test() -> u32;
+}
+
+struct DefinesOpaque;
+impl Foo<DefinesOpaque> for () {
+ type Assoc = impl Sized;
+
+ // This test's return type is `u32`, *not* the opaque that is defined above.
+ // Previously we were only checking that the self type of the assoc matched,
+ // but this doesn't account for other impls with different trait substs.
+ fn test() -> <() as Foo<NoOpaques>>::Assoc {
+ let _: <Self as Foo<DefinesOpaque>>::Assoc = "";
+ //~^ ERROR mismatched types
+
+ 1
+ }
+}
+
+struct NoOpaques;
+impl Foo<NoOpaques> for () {
+ type Assoc = u32;
+
+ fn test() -> u32 {
+ 1
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.stderr b/tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.stderr
new file mode 100644
index 000000000..a621bb519
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/not-matching-trait-refs-isnt-defining.stderr
@@ -0,0 +1,22 @@
+error[E0308]: mismatched types
+ --> $DIR/not-matching-trait-refs-isnt-defining.rs:17:54
+ |
+LL | type Assoc = impl Sized;
+ | ---------- the expected opaque type
+...
+LL | let _: <Self as Foo<DefinesOpaque>>::Assoc = "";
+ | ----------------------------------- ^^ expected opaque type, found `&str`
+ | |
+ | expected due to this
+ |
+ = note: expected opaque type `<() as Foo<DefinesOpaque>>::Assoc`
+ found reference `&'static str`
+note: this item must have the opaque type in its signature in order to be able to register hidden types
+ --> $DIR/not-matching-trait-refs-isnt-defining.rs:16:8
+ |
+LL | fn test() -> <() as Foo<NoOpaques>>::Assoc {
+ | ^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/type-alias-impl-trait/obligation_ice.rs b/tests/ui/type-alias-impl-trait/obligation_ice.rs
new file mode 100644
index 000000000..5aef04ff1
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/obligation_ice.rs
@@ -0,0 +1,17 @@
+#![feature(type_alias_impl_trait)]
+// check-pass
+
+use std::iter::{once, Chain};
+
+trait Trait<'a, 'b: 'a> {}
+
+impl<'a, 'b: 'a, T> Trait<'a, 'b> for std::iter::Cloned<T> {}
+
+type I<'a, 'b: 'a, A: Trait<'a, 'b>> = Chain<A, impl Iterator<Item = &'static str>>;
+fn test2<'a, 'b, A: Trait<'a, 'b> + Iterator<Item = &'static str>>(x: A) -> I<'a, 'b, A> {
+ x.chain(once("5"))
+}
+
+fn main() {
+ assert_eq!(vec!["1", "3", "5"], test2(["1", "3"].iter().cloned()).collect::<Vec<_>>());
+}
diff --git a/tests/ui/type-alias-impl-trait/privacy.rs b/tests/ui/type-alias-impl-trait/privacy.rs
new file mode 100644
index 000000000..aa092f6f8
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/privacy.rs
@@ -0,0 +1,8 @@
+#![feature(type_alias_impl_trait)]
+
+type Foo = (impl Sized, u8);
+pub fn foo() -> Foo {
+ //~^ ERROR private type alias `Foo` in public interface
+ (42, 42)
+}
+fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/privacy.stderr b/tests/ui/type-alias-impl-trait/privacy.stderr
new file mode 100644
index 000000000..e8c6039cd
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/privacy.stderr
@@ -0,0 +1,11 @@
+error[E0446]: private type alias `Foo` in public interface
+ --> $DIR/privacy.rs:4:1
+ |
+LL | type Foo = (impl Sized, u8);
+ | -------- `Foo` declared as private
+LL | pub fn foo() -> Foo {
+ | ^^^^^^^^^^^^^^^^^^^ can't leak private type alias
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0446`.
diff --git a/tests/ui/type-alias-impl-trait/reveal_local.rs b/tests/ui/type-alias-impl-trait/reveal_local.rs
index 7ecb55353..7943bb240 100644
--- a/tests/ui/type-alias-impl-trait/reveal_local.rs
+++ b/tests/ui/type-alias-impl-trait/reveal_local.rs
@@ -4,22 +4,28 @@ use std::fmt::Debug;
type Foo = impl Debug;
//~^ ERROR cycle detected
+//~| ERROR cycle detected
+//~| ERROR cycle detected
-fn is_send<T: Send>() { }
+fn is_send<T: Send>() {}
fn not_good() {
// Error: this function does not constrain `Foo` to any particular
// hidden type, so it cannot rely on `Send` being true.
is_send::<Foo>();
+ //~^ ERROR: cannot check whether the hidden type of `reveal_local[9507]::Foo::{opaque#0}` satisfies auto traits
}
-fn not_gooder() {
+fn not_gooder() -> Foo {
// Constrain `Foo = u32`
let x: Foo = 22_u32;
// while we could know this from the hidden type, it would
// need extra roundabout logic to support it.
is_send::<Foo>();
+ //~^ ERROR: cannot check whether the hidden type of `reveal_local[9507]::Foo::{opaque#0}` satisfies auto traits
+
+ x
}
fn main() {}
diff --git a/tests/ui/type-alias-impl-trait/reveal_local.stderr b/tests/ui/type-alias-impl-trait/reveal_local.stderr
index 27fded333..0c5ef4a6f 100644
--- a/tests/ui/type-alias-impl-trait/reveal_local.stderr
+++ b/tests/ui/type-alias-impl-trait/reveal_local.stderr
@@ -5,7 +5,7 @@ LL | type Foo = impl Debug;
| ^^^^^^^^^^
|
note: ...which requires type-checking `not_good`...
- --> $DIR/reveal_local.rs:13:5
+ --> $DIR/reveal_local.rs:15:5
|
LL | is_send::<Foo>();
| ^^^^^^^^^^^^^^
@@ -23,6 +23,98 @@ LL | |
LL | | fn main() {}
| |____________^
-error: aborting due to previous error
+error[E0391]: cycle detected when computing type of `Foo::{opaque#0}`
+ --> $DIR/reveal_local.rs:5:12
+ |
+LL | type Foo = impl Debug;
+ | ^^^^^^^^^^
+ |
+note: ...which requires type-checking `not_good`...
+ --> $DIR/reveal_local.rs:12:1
+ |
+LL | fn not_good() {
+ | ^^^^^^^^^^^^^
+ = note: ...which again requires computing type of `Foo::{opaque#0}`, completing the cycle
+note: cycle used when checking item types in top-level module
+ --> $DIR/reveal_local.rs:1:1
+ |
+LL | / #![feature(type_alias_impl_trait)]
+LL | |
+LL | | use std::fmt::Debug;
+LL | |
+... |
+LL | |
+LL | | fn main() {}
+ | |____________^
+
+error: cannot check whether the hidden type of `reveal_local[9507]::Foo::{opaque#0}` satisfies auto traits
+ --> $DIR/reveal_local.rs:15:15
+ |
+LL | is_send::<Foo>();
+ | ^^^
+ |
+note: opaque type is declared here
+ --> $DIR/reveal_local.rs:5:12
+ |
+LL | type Foo = impl Debug;
+ | ^^^^^^^^^^
+note: this item depends on auto traits of the hidden type, but may also be registering the hidden type. This is not supported right now. You can try moving the opaque type and the item that actually registers a hidden type into a new submodule
+ --> $DIR/reveal_local.rs:12:4
+ |
+LL | fn not_good() {
+ | ^^^^^^^^
+note: required by a bound in `is_send`
+ --> $DIR/reveal_local.rs:10:15
+ |
+LL | fn is_send<T: Send>() {}
+ | ^^^^ required by this bound in `is_send`
+
+error[E0391]: cycle detected when computing type of `Foo::{opaque#0}`
+ --> $DIR/reveal_local.rs:5:12
+ |
+LL | type Foo = impl Debug;
+ | ^^^^^^^^^^
+ |
+note: ...which requires type-checking `not_gooder`...
+ --> $DIR/reveal_local.rs:19:1
+ |
+LL | fn not_gooder() -> Foo {
+ | ^^^^^^^^^^^^^^^^^^^^^^
+ = note: ...which again requires computing type of `Foo::{opaque#0}`, completing the cycle
+note: cycle used when checking item types in top-level module
+ --> $DIR/reveal_local.rs:1:1
+ |
+LL | / #![feature(type_alias_impl_trait)]
+LL | |
+LL | | use std::fmt::Debug;
+LL | |
+... |
+LL | |
+LL | | fn main() {}
+ | |____________^
+
+error: cannot check whether the hidden type of `reveal_local[9507]::Foo::{opaque#0}` satisfies auto traits
+ --> $DIR/reveal_local.rs:25:15
+ |
+LL | is_send::<Foo>();
+ | ^^^
+ |
+note: opaque type is declared here
+ --> $DIR/reveal_local.rs:5:12
+ |
+LL | type Foo = impl Debug;
+ | ^^^^^^^^^^
+note: this item depends on auto traits of the hidden type, but may also be registering the hidden type. This is not supported right now. You can try moving the opaque type and the item that actually registers a hidden type into a new submodule
+ --> $DIR/reveal_local.rs:19:4
+ |
+LL | fn not_gooder() -> Foo {
+ | ^^^^^^^^^^
+note: required by a bound in `is_send`
+ --> $DIR/reveal_local.rs:10:15
+ |
+LL | fn is_send<T: Send>() {}
+ | ^^^^ required by this bound in `is_send`
+
+error: aborting due to 5 previous errors
For more information about this error, try `rustc --explain E0391`.
diff --git a/tests/ui/type-alias-impl-trait/self-referential-3.rs b/tests/ui/type-alias-impl-trait/self-referential-3.rs
index d40715717..18f09b548 100644
--- a/tests/ui/type-alias-impl-trait/self-referential-3.rs
+++ b/tests/ui/type-alias-impl-trait/self-referential-3.rs
@@ -1,9 +1,9 @@
-// run-pass
#![feature(type_alias_impl_trait)]
type Bar<'a, 'b> = impl PartialEq<Bar<'a, 'b>> + std::fmt::Debug;
fn bar<'a, 'b>(i: &'a i32) -> Bar<'a, 'b> {
+ //~^ ERROR can't compare `&i32` with `Bar<'a, 'b>`
i
}
diff --git a/tests/ui/type-alias-impl-trait/self-referential-3.stderr b/tests/ui/type-alias-impl-trait/self-referential-3.stderr
new file mode 100644
index 000000000..4155a114b
--- /dev/null
+++ b/tests/ui/type-alias-impl-trait/self-referential-3.stderr
@@ -0,0 +1,15 @@
+error[E0277]: can't compare `&i32` with `Bar<'a, 'b>`
+ --> $DIR/self-referential-3.rs:5:31
+ |
+LL | fn bar<'a, 'b>(i: &'a i32) -> Bar<'a, 'b> {
+ | ^^^^^^^^^^^ no implementation for `&i32 == Bar<'a, 'b>`
+LL |
+LL | i
+ | - return type was inferred to be `&i32` here
+ |
+ = help: the trait `PartialEq<Bar<'a, 'b>>` is not implemented for `&i32`
+ = help: the trait `PartialEq` is implemented for `i32`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/type-alias-impl-trait/self-referential.rs b/tests/ui/type-alias-impl-trait/self-referential.rs
index 3ff5406a3..34b7c24df 100644
--- a/tests/ui/type-alias-impl-trait/self-referential.rs
+++ b/tests/ui/type-alias-impl-trait/self-referential.rs
@@ -10,7 +10,7 @@ fn bar<'a, 'b>(i: &'a i32) -> Bar<'a, 'b> {
type Foo<'a, 'b> = (i32, impl PartialEq<Foo<'a, 'b>> + std::fmt::Debug);
fn foo<'a, 'b>(i: &'a i32) -> Foo<'a, 'b> {
- //~^ ERROR can't compare `&i32` with `(i32, &i32)`
+ //~^ ERROR can't compare `&i32` with `(i32, Foo<'a, 'b>::{opaque#0})`
(42, i)
}
diff --git a/tests/ui/type-alias-impl-trait/self-referential.stderr b/tests/ui/type-alias-impl-trait/self-referential.stderr
index aff489d70..9a17d495b 100644
--- a/tests/ui/type-alias-impl-trait/self-referential.stderr
+++ b/tests/ui/type-alias-impl-trait/self-referential.stderr
@@ -10,16 +10,16 @@ LL | i
= help: the trait `PartialEq<Bar<'b, 'a>>` is not implemented for `&i32`
= help: the trait `PartialEq` is implemented for `i32`
-error[E0277]: can't compare `&i32` with `(i32, &i32)`
+error[E0277]: can't compare `&i32` with `(i32, Foo<'a, 'b>::{opaque#0})`
--> $DIR/self-referential.rs:12:31
|
LL | fn foo<'a, 'b>(i: &'a i32) -> Foo<'a, 'b> {
- | ^^^^^^^^^^^ no implementation for `&i32 == (i32, &i32)`
+ | ^^^^^^^^^^^ no implementation for `&i32 == (i32, Foo<'a, 'b>::{opaque#0})`
LL |
LL | (42, i)
| ------- return type was inferred to be `(i32, &i32)` here
|
- = help: the trait `PartialEq<(i32, &i32)>` is not implemented for `&i32`
+ = help: the trait `PartialEq<(i32, Foo<'a, 'b>::{opaque#0})>` is not implemented for `&i32`
= help: the trait `PartialEq` is implemented for `i32`
error[E0277]: can't compare `&i32` with `(i32, Moo<'b, 'a>::{opaque#0})`
diff --git a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs
index 07c891f06..4e7388517 100644
--- a/tests/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs
+++ b/tests/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs
@@ -4,20 +4,20 @@
// Regression test for issue #61863
-pub trait MyTrait {}
+trait MyTrait {}
#[derive(Debug)]
-pub struct MyStruct {
+struct MyStruct {
v: u64,
}
impl MyTrait for MyStruct {}
-pub fn bla() -> TE {
+fn bla() -> TE {
return MyStruct { v: 1 };
}
-pub fn bla2() -> TE {
+fn bla2() -> TE {
bla()
}
diff --git a/tests/ui/type-alias-impl-trait/type_of_a_let.rs b/tests/ui/type-alias-impl-trait/type_of_a_let.rs
index 4e9d1788b..361611715 100644
--- a/tests/ui/type-alias-impl-trait/type_of_a_let.rs
+++ b/tests/ui/type-alias-impl-trait/type_of_a_let.rs
@@ -5,16 +5,16 @@ use std::fmt::Debug;
type Foo = impl Debug;
-fn foo1() -> u32 {
+fn foo1() -> (u32, Foo) {
let x: Foo = 22_u32;
- x
+ (x, todo!())
}
-fn foo2() -> u32 {
+fn foo2() -> (u32, Foo) {
let x: Foo = 22_u32;
let y: Foo = x;
same_type((x, y)); //~ ERROR use of moved value
- y //~ ERROR use of moved value
+ (y, todo!()) //~ ERROR use of moved value
}
fn same_type<T>(x: (T, T)) {}
diff --git a/tests/ui/type-alias-impl-trait/type_of_a_let.stderr b/tests/ui/type-alias-impl-trait/type_of_a_let.stderr
index 1dabe4586..7d7cad874 100644
--- a/tests/ui/type-alias-impl-trait/type_of_a_let.stderr
+++ b/tests/ui/type-alias-impl-trait/type_of_a_let.stderr
@@ -9,14 +9,14 @@ LL | same_type((x, y));
| ^ value used here after move
error[E0382]: use of moved value: `y`
- --> $DIR/type_of_a_let.rs:17:5
+ --> $DIR/type_of_a_let.rs:17:6
|
LL | let y: Foo = x;
| - move occurs because `y` has type `Foo`, which does not implement the `Copy` trait
LL | same_type((x, y));
| - value moved here
-LL | y
- | ^ value used here after move
+LL | (y, todo!())
+ | ^ value used here after move
error: aborting due to 2 previous errors
diff --git a/tests/ui/type-inference/issue-113283-alllocator-trait-eq.rs b/tests/ui/type-inference/issue-113283-alllocator-trait-eq.rs
new file mode 100644
index 000000000..5d0e456d9
--- /dev/null
+++ b/tests/ui/type-inference/issue-113283-alllocator-trait-eq.rs
@@ -0,0 +1,18 @@
+// run-pass
+// Verify that PartialEq implementations do not break type inference when
+// accepting types with different allocators
+
+use std::rc::Rc;
+use std::sync::Arc;
+
+
+fn main() {
+ let boxed: Vec<Box<i32>> = vec![];
+ assert_eq!(boxed, vec![]);
+
+ let rc: Vec<Rc<i32>> = vec![];
+ assert_eq!(rc, vec![]);
+
+ let arc: Vec<Arc<i32>> = vec![];
+ assert_eq!(arc, vec![]);
+}
diff --git a/tests/ui/type/type-check-defaults.stderr b/tests/ui/type/type-check-defaults.stderr
index 9ba63ffe9..10d600cbf 100644
--- a/tests/ui/type/type-check-defaults.stderr
+++ b/tests/ui/type/type-check-defaults.stderr
@@ -66,10 +66,10 @@ LL | trait ProjectionPred<T:Iterator = IntoIter<i32>> where T::Item : Add<u8> {}
|
= help: the trait `Add<u8>` is not implemented for `i32`
= help: the following other types implement trait `Add<Rhs>`:
+ <i32 as Add>
+ <i32 as Add<&i32>>
<&'a i32 as Add<i32>>
<&i32 as Add<&i32>>
- <i32 as Add<&i32>>
- <i32 as Add>
error: aborting due to 7 previous errors
diff --git a/tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.rs b/tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.rs
new file mode 100644
index 000000000..0c2d71707
--- /dev/null
+++ b/tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.rs
@@ -0,0 +1,29 @@
+pub trait NSWindow: Sized {
+ fn frame(self) -> () {
+ unimplemented!()
+ }
+ fn setFrame_display_(self, display: ()) {}
+}
+impl NSWindow for () {}
+
+pub struct NSRect {}
+
+use std::ops::Deref;
+struct MainThreadSafe<T = ()>(T);
+impl<T> Deref for MainThreadSafe<T> {
+ type Target = T;
+
+ fn deref(&self) -> &T {
+ unimplemented!()
+ }
+}
+
+fn main() {
+ || {
+ let ns_window = MainThreadSafe(());
+ // Don't record adjustments twice for `*ns_window`
+ (*ns_window).frame();
+ ns_window.setFrame_display_(0);
+ //~^ ERROR mismatched types
+ };
+}
diff --git a/tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.stderr b/tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.stderr
new file mode 100644
index 000000000..02e87d701
--- /dev/null
+++ b/tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.stderr
@@ -0,0 +1,17 @@
+error[E0308]: mismatched types
+ --> $DIR/dont-record-adjustments-when-pointing-at-arg.rs:26:37
+ |
+LL | ns_window.setFrame_display_(0);
+ | ----------------- ^ expected `()`, found integer
+ | |
+ | arguments to this method are incorrect
+ |
+note: method defined here
+ --> $DIR/dont-record-adjustments-when-pointing-at-arg.rs:5:8
+ |
+LL | fn setFrame_display_(self, display: ()) {}
+ | ^^^^^^^^^^^^^^^^^ -----------
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/typeck/issue-106929.rs b/tests/ui/typeck/issue-106929.rs
new file mode 100644
index 000000000..91342229a
--- /dev/null
+++ b/tests/ui/typeck/issue-106929.rs
@@ -0,0 +1,13 @@
+struct Client;
+
+impl Client {
+ fn post<T: std::ops::Add>(&self, _: T, _: T) {}
+}
+
+fn f() {
+ let c = Client;
+ post(c, ());
+ //~^ ERROR cannot find function `post` in this scope
+}
+
+fn main() {}
diff --git a/tests/ui/typeck/issue-106929.stderr b/tests/ui/typeck/issue-106929.stderr
new file mode 100644
index 000000000..f744e5a41
--- /dev/null
+++ b/tests/ui/typeck/issue-106929.stderr
@@ -0,0 +1,15 @@
+error[E0425]: cannot find function `post` in this scope
+ --> $DIR/issue-106929.rs:9:5
+ |
+LL | post(c, ());
+ | ^^^^ not found in this scope
+ |
+help: use the `.` operator to call the method `post` on `&Client`
+ |
+LL - post(c, ());
+LL + c.post(());
+ |
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/typeck/issue-112252-ptr-arithmetics-help.fixed b/tests/ui/typeck/issue-112252-ptr-arithmetics-help.fixed
new file mode 100644
index 000000000..bdb884f54
--- /dev/null
+++ b/tests/ui/typeck/issue-112252-ptr-arithmetics-help.fixed
@@ -0,0 +1,10 @@
+// run-rustfix
+
+fn main() {
+ let _ptr1: *const u32 = std::ptr::null();
+ let _ptr2: *const u32 = std::ptr::null();
+ let _a = _ptr1.wrapping_add(5); //~ ERROR cannot add
+ let _b = _ptr1.wrapping_sub(5); //~ ERROR cannot subtract
+ let _c = unsafe { _ptr2.offset_from(_ptr1) }; //~ ERROR cannot subtract
+ let _d = _ptr1.wrapping_add(5); //~ ERROR cannot index
+}
diff --git a/tests/ui/typeck/issue-112252-ptr-arithmetics-help.rs b/tests/ui/typeck/issue-112252-ptr-arithmetics-help.rs
new file mode 100644
index 000000000..cf68850cc
--- /dev/null
+++ b/tests/ui/typeck/issue-112252-ptr-arithmetics-help.rs
@@ -0,0 +1,10 @@
+// run-rustfix
+
+fn main() {
+ let _ptr1: *const u32 = std::ptr::null();
+ let _ptr2: *const u32 = std::ptr::null();
+ let _a = _ptr1 + 5; //~ ERROR cannot add
+ let _b = _ptr1 - 5; //~ ERROR cannot subtract
+ let _c = _ptr2 - _ptr1; //~ ERROR cannot subtract
+ let _d = _ptr1[5]; //~ ERROR cannot index
+}
diff --git a/tests/ui/typeck/issue-112252-ptr-arithmetics-help.stderr b/tests/ui/typeck/issue-112252-ptr-arithmetics-help.stderr
new file mode 100644
index 000000000..c55930da2
--- /dev/null
+++ b/tests/ui/typeck/issue-112252-ptr-arithmetics-help.stderr
@@ -0,0 +1,54 @@
+error[E0369]: cannot add `{integer}` to `*const u32`
+ --> $DIR/issue-112252-ptr-arithmetics-help.rs:6:20
+ |
+LL | let _a = _ptr1 + 5;
+ | ----- ^ - {integer}
+ | |
+ | *const u32
+ |
+help: consider using `wrapping_add` or `add` for pointer + {integer}
+ |
+LL | let _a = _ptr1.wrapping_add(5);
+ | ~~~~~~~~~~~~~~ +
+
+error[E0369]: cannot subtract `{integer}` from `*const u32`
+ --> $DIR/issue-112252-ptr-arithmetics-help.rs:7:20
+ |
+LL | let _b = _ptr1 - 5;
+ | ----- ^ - {integer}
+ | |
+ | *const u32
+ |
+help: consider using `wrapping_sub` or `sub` for pointer - {integer}
+ |
+LL | let _b = _ptr1.wrapping_sub(5);
+ | ~~~~~~~~~~~~~~ +
+
+error[E0369]: cannot subtract `*const u32` from `*const u32`
+ --> $DIR/issue-112252-ptr-arithmetics-help.rs:8:20
+ |
+LL | let _c = _ptr2 - _ptr1;
+ | ----- ^ ----- *const u32
+ | |
+ | *const u32
+ |
+help: consider using `offset_from` for pointer - pointer if the pointers point to the same allocation
+ |
+LL | let _c = unsafe { _ptr2.offset_from(_ptr1) };
+ | ++++++++ ~~~~~~~~~~~~~ +++
+
+error[E0608]: cannot index into a value of type `*const u32`
+ --> $DIR/issue-112252-ptr-arithmetics-help.rs:9:14
+ |
+LL | let _d = _ptr1[5];
+ | ^^^^^^^^
+ |
+help: consider using `wrapping_add` or `add` for indexing into raw pointer
+ |
+LL | let _d = _ptr1.wrapping_add(5);
+ | ~~~~~~~~~~~~~~ ~
+
+error: aborting due to 4 previous errors
+
+Some errors have detailed explanations: E0369, E0608.
+For more information about an error, try `rustc --explain E0369`.
diff --git a/tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.rs b/tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.rs
new file mode 100644
index 000000000..3cb011dc0
--- /dev/null
+++ b/tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.rs
@@ -0,0 +1,9 @@
+// Previously, the while loop with an assignment statement (mistakenly) as the condition
+// which has a place expr as the LHS would trigger an ICE in typeck.
+// Reduced from https://github.com/rust-lang/rust/issues/112385.
+
+fn main() {
+ let foo = Some(());
+ while Some(foo) = None {}
+ //~^ ERROR mismatched types
+}
diff --git a/tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.stderr b/tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.stderr
new file mode 100644
index 000000000..cf2648d08
--- /dev/null
+++ b/tests/ui/typeck/issue-112385-while-assign-lhs-place-expr-ice.stderr
@@ -0,0 +1,14 @@
+error[E0308]: mismatched types
+ --> $DIR/issue-112385-while-assign-lhs-place-expr-ice.rs:7:11
+ |
+LL | while Some(foo) = None {}
+ | ^^^^^^^^^^^^^^^^ expected `bool`, found `()`
+ |
+help: consider adding `let`
+ |
+LL | while let Some(foo) = None {}
+ | +++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/issues/issue-1871.rs b/tests/ui/typeck/issue-1871.rs
index f7a2bdd56..f7a2bdd56 100644
--- a/tests/ui/issues/issue-1871.rs
+++ b/tests/ui/typeck/issue-1871.rs
diff --git a/tests/ui/issues/issue-1871.stderr b/tests/ui/typeck/issue-1871.stderr
index b774ca22d..b774ca22d 100644
--- a/tests/ui/issues/issue-1871.stderr
+++ b/tests/ui/typeck/issue-1871.stderr
diff --git a/tests/ui/issues/issue-2063-resource.rs b/tests/ui/typeck/issue-2063-resource.rs
index 1d0527447..1d0527447 100644
--- a/tests/ui/issues/issue-2063-resource.rs
+++ b/tests/ui/typeck/issue-2063-resource.rs
diff --git a/tests/ui/issues/issue-2063.rs b/tests/ui/typeck/issue-2063.rs
index f08f9d4cf..f08f9d4cf 100644
--- a/tests/ui/issues/issue-2063.rs
+++ b/tests/ui/typeck/issue-2063.rs
diff --git a/tests/ui/typeck/issue-81293.stderr b/tests/ui/typeck/issue-81293.stderr
index 6976be711..292c63070 100644
--- a/tests/ui/typeck/issue-81293.stderr
+++ b/tests/ui/typeck/issue-81293.stderr
@@ -21,10 +21,10 @@ LL | a = c + b * 5;
|
= help: the trait `Add<u16>` is not implemented for `usize`
= help: the following other types implement trait `Add<Rhs>`:
+ <usize as Add>
+ <usize as Add<&usize>>
<&'a usize as Add<usize>>
<&usize as Add<&usize>>
- <usize as Add<&usize>>
- <usize as Add>
error: aborting due to 3 previous errors
diff --git a/tests/ui/typeck/issue-86721-return-expr-ice.rs b/tests/ui/typeck/issue-86721-return-expr-ice.rs
index cd7135f18..4f882f7a3 100644
--- a/tests/ui/typeck/issue-86721-return-expr-ice.rs
+++ b/tests/ui/typeck/issue-86721-return-expr-ice.rs
@@ -2,7 +2,7 @@
// revisions: rev1 rev2
#![cfg_attr(any(), rev1, rev2)]
-#![crate_type="lib"]
+#![crate_type = "lib"]
#[cfg(any(rev1))]
trait T {
diff --git a/tests/ui/typeck/issue-89856.stderr b/tests/ui/typeck/issue-89856.stderr
index bd76f1724..0db3e67ed 100644
--- a/tests/ui/typeck/issue-89856.stderr
+++ b/tests/ui/typeck/issue-89856.stderr
@@ -13,7 +13,7 @@ note: function defined here
|
LL | fn take_str_maybe(_: Option<&str>) { }
| ^^^^^^^^^^^^^^ ---------------
-help: try converting the passed type into a `&str`
+help: try using `.as_deref()` to convert `Option<String>` to `Option<&str>`
|
LL | take_str_maybe(option.as_deref());
| +++++++++++
diff --git a/tests/ui/typeck/issue-90101.stderr b/tests/ui/typeck/issue-90101.stderr
index d2729d853..484089f9e 100644
--- a/tests/ui/typeck/issue-90101.stderr
+++ b/tests/ui/typeck/issue-90101.stderr
@@ -7,11 +7,11 @@ LL | func(Path::new("hello").to_path_buf().to_string_lossy(), "world")
| required by a bound introduced by this call
|
= help: the following other types implement trait `From<T>`:
- <PathBuf as From<&T>>
<PathBuf as From<Box<Path>>>
<PathBuf as From<Cow<'a, Path>>>
<PathBuf as From<OsString>>
<PathBuf as From<String>>
+ <PathBuf as From<&T>>
= note: required for `Cow<'_, str>` to implement `Into<PathBuf>`
note: required by a bound in `func`
--> $DIR/issue-90101.rs:3:20
diff --git a/tests/ui/typeck/ptr-null-mutability-suggestions.fixed b/tests/ui/typeck/ptr-null-mutability-suggestions.fixed
new file mode 100644
index 000000000..d00536b29
--- /dev/null
+++ b/tests/ui/typeck/ptr-null-mutability-suggestions.fixed
@@ -0,0 +1,11 @@
+// run-rustfix
+
+#[allow(unused_imports)]
+use std::ptr;
+
+fn expecting_null_mut(_: *mut u8) {}
+
+fn main() {
+ expecting_null_mut(core::ptr::null_mut());
+ //~^ ERROR mismatched types
+}
diff --git a/tests/ui/typeck/ptr-null-mutability-suggestions.rs b/tests/ui/typeck/ptr-null-mutability-suggestions.rs
new file mode 100644
index 000000000..ea3066d22
--- /dev/null
+++ b/tests/ui/typeck/ptr-null-mutability-suggestions.rs
@@ -0,0 +1,11 @@
+// run-rustfix
+
+#[allow(unused_imports)]
+use std::ptr;
+
+fn expecting_null_mut(_: *mut u8) {}
+
+fn main() {
+ expecting_null_mut(ptr::null());
+ //~^ ERROR mismatched types
+}
diff --git a/tests/ui/typeck/ptr-null-mutability-suggestions.stderr b/tests/ui/typeck/ptr-null-mutability-suggestions.stderr
new file mode 100644
index 000000000..705b029bd
--- /dev/null
+++ b/tests/ui/typeck/ptr-null-mutability-suggestions.stderr
@@ -0,0 +1,21 @@
+error[E0308]: mismatched types
+ --> $DIR/ptr-null-mutability-suggestions.rs:9:24
+ |
+LL | expecting_null_mut(ptr::null());
+ | ------------------ ^^^^^^^^^^^
+ | | |
+ | | types differ in mutability
+ | | help: consider using `core::ptr::null_mut` instead: `core::ptr::null_mut()`
+ | arguments to this function are incorrect
+ |
+ = note: expected raw pointer `*mut u8`
+ found raw pointer `*const _`
+note: function defined here
+ --> $DIR/ptr-null-mutability-suggestions.rs:6:4
+ |
+LL | fn expecting_null_mut(_: *mut u8) {}
+ | ^^^^^^^^^^^^^^^^^^ ----------
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/typeck/return-dyn-type-mismatch-2.rs b/tests/ui/typeck/return-dyn-type-mismatch-2.rs
new file mode 100644
index 000000000..328f154dc
--- /dev/null
+++ b/tests/ui/typeck/return-dyn-type-mismatch-2.rs
@@ -0,0 +1,11 @@
+trait Trait<T> {}
+
+fn foo<T>() -> dyn Trait<T>
+where
+ dyn Trait<T>: Sized, // pesky sized predicate
+{
+ 42
+ //~^ ERROR mismatched types
+}
+
+fn main() {}
diff --git a/tests/ui/typeck/return-dyn-type-mismatch-2.stderr b/tests/ui/typeck/return-dyn-type-mismatch-2.stderr
new file mode 100644
index 000000000..9c368e838
--- /dev/null
+++ b/tests/ui/typeck/return-dyn-type-mismatch-2.stderr
@@ -0,0 +1,15 @@
+error[E0308]: mismatched types
+ --> $DIR/return-dyn-type-mismatch-2.rs:7:5
+ |
+LL | fn foo<T>() -> dyn Trait<T>
+ | ------------ expected `(dyn Trait<T> + 'static)` because of return type
+...
+LL | 42
+ | ^^ expected `dyn Trait`, found integer
+ |
+ = note: expected trait object `(dyn Trait<T> + 'static)`
+ found type `{integer}`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/typeck/return-dyn-type-mismatch.rs b/tests/ui/typeck/return-dyn-type-mismatch.rs
new file mode 100644
index 000000000..93718f70f
--- /dev/null
+++ b/tests/ui/typeck/return-dyn-type-mismatch.rs
@@ -0,0 +1,21 @@
+pub trait TestTrait {
+ type MyType;
+
+ fn func() -> Option<Self>
+ where
+ Self: Sized;
+}
+
+impl<T> dyn TestTrait<MyType = T>
+where
+ Self: Sized, // pesky sized predicate
+{
+ fn other_func() -> dyn TestTrait<MyType = T> {
+ match Self::func() {
+ None => None,
+ //~^ ERROR mismatched types
+ }
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/typeck/return-dyn-type-mismatch.stderr b/tests/ui/typeck/return-dyn-type-mismatch.stderr
new file mode 100644
index 000000000..9d0a609d8
--- /dev/null
+++ b/tests/ui/typeck/return-dyn-type-mismatch.stderr
@@ -0,0 +1,15 @@
+error[E0308]: mismatched types
+ --> $DIR/return-dyn-type-mismatch.rs:15:21
+ |
+LL | fn other_func() -> dyn TestTrait<MyType = T> {
+ | ------------------------- expected `(dyn TestTrait<MyType = T> + 'static)` because of return type
+LL | match Self::func() {
+LL | None => None,
+ | ^^^^ expected `dyn TestTrait`, found `Option<_>`
+ |
+ = note: expected trait object `(dyn TestTrait<MyType = T> + 'static)`
+ found enum `Option<_>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/typeck/type-placeholder-fn-in-const.rs b/tests/ui/typeck/type-placeholder-fn-in-const.rs
index ab2e2d8c5..bbb95a579 100644
--- a/tests/ui/typeck/type-placeholder-fn-in-const.rs
+++ b/tests/ui/typeck/type-placeholder-fn-in-const.rs
@@ -3,12 +3,13 @@ struct MyStruct;
trait Test {
const TEST: fn() -> _;
//~^ ERROR: the placeholder `_` is not allowed within types on item signatures for functions [E0121]
- //~| ERROR: the placeholder `_` is not allowed within types on item signatures for constants [E0121]
+ //~| ERROR: the placeholder `_` is not allowed within types on item signatures for associated constants [E0121]
}
impl Test for MyStruct {
const TEST: fn() -> _ = 42;
//~^ ERROR: the placeholder `_` is not allowed within types on item signatures for functions [E0121]
+ //~| ERROR: the placeholder `_` is not allowed within types on item signatures for associated constants [E0121]
}
fn main() {}
diff --git a/tests/ui/typeck/type-placeholder-fn-in-const.stderr b/tests/ui/typeck/type-placeholder-fn-in-const.stderr
index e7b2e554a..302359d25 100644
--- a/tests/ui/typeck/type-placeholder-fn-in-const.stderr
+++ b/tests/ui/typeck/type-placeholder-fn-in-const.stderr
@@ -4,7 +4,7 @@ error[E0121]: the placeholder `_` is not allowed within types on item signatures
LL | const TEST: fn() -> _;
| ^ not allowed in type signatures
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/type-placeholder-fn-in-const.rs:4:25
|
LL | const TEST: fn() -> _;
@@ -16,6 +16,12 @@ error[E0121]: the placeholder `_` is not allowed within types on item signatures
LL | const TEST: fn() -> _ = 42;
| ^ not allowed in type signatures
-error: aborting due to 3 previous errors
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
+ --> $DIR/type-placeholder-fn-in-const.rs:10:25
+ |
+LL | const TEST: fn() -> _ = 42;
+ | ^ not allowed in type signatures
+
+error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0121`.
diff --git a/tests/ui/typeck/typeck_type_placeholder_item.rs b/tests/ui/typeck/typeck_type_placeholder_item.rs
index 46aed0f60..4eba14f5a 100644
--- a/tests/ui/typeck/typeck_type_placeholder_item.rs
+++ b/tests/ui/typeck/typeck_type_placeholder_item.rs
@@ -190,9 +190,9 @@ trait Qux {
type B = _;
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated types
const C: _;
- //~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
const D: _ = 42;
- //~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
// type E: _; // FIXME: make the parser propagate the existence of `B`
type F: std::ops::Fn(_);
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated types
@@ -203,10 +203,10 @@ impl Qux for Struct {
type B = _;
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated types
const C: _;
- //~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
//~| ERROR associated constant in `impl` without body
const D: _ = 42;
- //~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
}
fn map<T>(_: fn() -> Option<&'static T>) -> Option<T> {
diff --git a/tests/ui/typeck/typeck_type_placeholder_item.stderr b/tests/ui/typeck/typeck_type_placeholder_item.stderr
index bc02547c6..0c5e7e3ce 100644
--- a/tests/ui/typeck/typeck_type_placeholder_item.stderr
+++ b/tests/ui/typeck/typeck_type_placeholder_item.stderr
@@ -525,13 +525,13 @@ error[E0121]: the placeholder `_` is not allowed within types on item signatures
LL | type B = _;
| ^ not allowed in type signatures
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/typeck_type_placeholder_item.rs:192:14
|
LL | const C: _;
| ^ not allowed in type signatures
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/typeck_type_placeholder_item.rs:194:14
|
LL | const D: _ = 42;
@@ -642,13 +642,13 @@ error[E0121]: the placeholder `_` is not allowed within types on item signatures
LL | type B = _;
| ^ not allowed in type signatures
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/typeck_type_placeholder_item.rs:205:14
|
LL | const C: _;
| ^ not allowed in type signatures
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/typeck_type_placeholder_item.rs:208:14
|
LL | const D: _ = 42;
diff --git a/tests/ui/typeck/typeck_type_placeholder_item_help.rs b/tests/ui/typeck/typeck_type_placeholder_item_help.rs
index c459d8c3c..914f8a2b2 100644
--- a/tests/ui/typeck/typeck_type_placeholder_item_help.rs
+++ b/tests/ui/typeck/typeck_type_placeholder_item_help.rs
@@ -16,14 +16,14 @@ const TEST4: fn() -> _ = 42;
trait Test5 {
const TEST5: _ = 42;
- //~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
}
struct Test6;
impl Test6 {
const TEST6: _ = 13;
- //~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
+ //~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated constants
}
pub fn main() {
diff --git a/tests/ui/typeck/typeck_type_placeholder_item_help.stderr b/tests/ui/typeck/typeck_type_placeholder_item_help.stderr
index 07a5dbd93..ed6f40880 100644
--- a/tests/ui/typeck/typeck_type_placeholder_item_help.stderr
+++ b/tests/ui/typeck/typeck_type_placeholder_item_help.stderr
@@ -37,7 +37,7 @@ error[E0121]: the placeholder `_` is not allowed within types on item signatures
LL | const TEST4: fn() -> _ = 42;
| ^ not allowed in type signatures
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/typeck_type_placeholder_item_help.rs:18:18
|
LL | const TEST5: _ = 42;
@@ -46,7 +46,7 @@ LL | const TEST5: _ = 42;
| not allowed in type signatures
| help: replace with the correct type: `i32`
-error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
+error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated constants
--> $DIR/typeck_type_placeholder_item_help.rs:25:18
|
LL | const TEST6: _ = 13;
diff --git a/tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr b/tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr
index 96ac43216..85adf7751 100644
--- a/tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr
+++ b/tests/ui/ufcs/ufcs-qpath-self-mismatch.stderr
@@ -8,10 +8,10 @@ LL | <i32 as Add<u32>>::add(1, 2);
|
= help: the trait `Add<u32>` is not implemented for `i32`
= help: the following other types implement trait `Add<Rhs>`:
+ <i32 as Add>
+ <i32 as Add<&i32>>
<&'a i32 as Add<i32>>
<&i32 as Add<&i32>>
- <i32 as Add<&i32>>
- <i32 as Add>
error[E0308]: mismatched types
--> $DIR/ufcs-qpath-self-mismatch.rs:7:28
@@ -65,10 +65,10 @@ LL | <i32 as Add<u32>>::add(1, 2);
|
= help: the trait `Add<u32>` is not implemented for `i32`
= help: the following other types implement trait `Add<Rhs>`:
+ <i32 as Add>
+ <i32 as Add<&i32>>
<&'a i32 as Add<i32>>
<&i32 as Add<&i32>>
- <i32 as Add<&i32>>
- <i32 as Add>
error: aborting due to 4 previous errors
diff --git a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.fixed b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.fixed
new file mode 100644
index 000000000..5be6ff8e7
--- /dev/null
+++ b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.fixed
@@ -0,0 +1,17 @@
+// run-rustfix
+
+trait WithType<T> {}
+trait WithRegion<'a> { }
+
+#[allow(dead_code)]
+struct Foo<T> {
+ t: T
+}
+
+impl<T> Foo<T>
+where
+ T: for<'a> WithType<&'a u32>
+//~^ ERROR `&` without an explicit lifetime name cannot be used here
+{ }
+
+fn main() {}
diff --git a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.rs b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.rs
new file mode 100644
index 000000000..d7072aa11
--- /dev/null
+++ b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.rs
@@ -0,0 +1,17 @@
+// run-rustfix
+
+trait WithType<T> {}
+trait WithRegion<'a> { }
+
+#[allow(dead_code)]
+struct Foo<T> {
+ t: T
+}
+
+impl<T> Foo<T>
+where
+ T: WithType<&u32>
+//~^ ERROR `&` without an explicit lifetime name cannot be used here
+{ }
+
+fn main() {}
diff --git a/tests/ui/underscore-lifetime/where-clause-trait-impl-region.rust2018.stderr b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.stderr
index 63fc1a19b..3e197dc9a 100644
--- a/tests/ui/underscore-lifetime/where-clause-trait-impl-region.rust2018.stderr
+++ b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2015.stderr
@@ -1,14 +1,13 @@
error[E0637]: `&` without an explicit lifetime name cannot be used here
- --> $DIR/where-clause-trait-impl-region.rs:11:17
+ --> $DIR/where-clause-inherent-impl-ampersand-rust2015.rs:13:17
|
LL | T: WithType<&u32>
| ^ explicit lifetime name needed here
|
-help: consider introducing a higher-ranked lifetime here with `for<'a>`
- --> $DIR/where-clause-trait-impl-region.rs:11:8
+help: consider introducing a higher-ranked lifetime here
|
-LL | T: WithType<&u32>
- | ^
+LL | T: for<'a> WithType<&'a u32>
+ | +++++++ ++
error: aborting due to previous error
diff --git a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.fixed b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.fixed
new file mode 100644
index 000000000..0f1be5865
--- /dev/null
+++ b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.fixed
@@ -0,0 +1,18 @@
+// edition:2018
+// run-rustfix
+
+trait WithType<T> {}
+trait WithRegion<'a> { }
+
+#[allow(dead_code)]
+struct Foo<T> {
+ t: T
+}
+
+impl<T> Foo<T>
+where
+ T: for<'a> WithType<&'a u32>
+//~^ ERROR `&` without an explicit lifetime name cannot be used here
+{ }
+
+fn main() {}
diff --git a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.rs b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.rs
new file mode 100644
index 000000000..59f7e472e
--- /dev/null
+++ b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.rs
@@ -0,0 +1,18 @@
+// edition:2018
+// run-rustfix
+
+trait WithType<T> {}
+trait WithRegion<'a> { }
+
+#[allow(dead_code)]
+struct Foo<T> {
+ t: T
+}
+
+impl<T> Foo<T>
+where
+ T: WithType<&u32>
+//~^ ERROR `&` without an explicit lifetime name cannot be used here
+{ }
+
+fn main() {}
diff --git a/tests/ui/underscore-lifetime/where-clause-trait-impl-region.rust2015.stderr b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.stderr
index 63fc1a19b..08b4268e5 100644
--- a/tests/ui/underscore-lifetime/where-clause-trait-impl-region.rust2015.stderr
+++ b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand-rust2018.stderr
@@ -1,14 +1,13 @@
error[E0637]: `&` without an explicit lifetime name cannot be used here
- --> $DIR/where-clause-trait-impl-region.rs:11:17
+ --> $DIR/where-clause-inherent-impl-ampersand-rust2018.rs:14:17
|
LL | T: WithType<&u32>
| ^ explicit lifetime name needed here
|
-help: consider introducing a higher-ranked lifetime here with `for<'a>`
- --> $DIR/where-clause-trait-impl-region.rs:11:8
+help: consider introducing a higher-ranked lifetime here
|
-LL | T: WithType<&u32>
- | ^
+LL | T: for<'a> WithType<&'a u32>
+ | +++++++ ++
error: aborting due to previous error
diff --git a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rs b/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rs
deleted file mode 100644
index 43de30944..000000000
--- a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// revisions: rust2015 rust2018
-//[rust2018] edition:2018
-
-trait WithType<T> {}
-trait WithRegion<'a> { }
-
-struct Foo<T> {
- t: T
-}
-
-impl<T> Foo<T>
-where
- T: WithType<&u32>
-//[rust2015]~^ ERROR `&` without an explicit lifetime name cannot be used here
-//[rust2018]~^^ ERROR `&` without an explicit lifetime name cannot be used here
-{ }
-
-fn main() {}
diff --git a/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.fixed b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.fixed
new file mode 100644
index 000000000..55c747096
--- /dev/null
+++ b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.fixed
@@ -0,0 +1,14 @@
+// run-rustfix
+
+trait WithType<T> {}
+trait WithRegion<'a> { }
+
+trait Foo { }
+
+impl<T> Foo for Vec<T>
+where
+ T: for<'a> WithType<&'a u32>
+//~^ ERROR `&` without an explicit lifetime name cannot be used here
+{ }
+
+fn main() {}
diff --git a/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.rs b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.rs
new file mode 100644
index 000000000..42a35b021
--- /dev/null
+++ b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.rs
@@ -0,0 +1,14 @@
+// run-rustfix
+
+trait WithType<T> {}
+trait WithRegion<'a> { }
+
+trait Foo { }
+
+impl<T> Foo for Vec<T>
+where
+ T: WithType<&u32>
+//~^ ERROR `&` without an explicit lifetime name cannot be used here
+{ }
+
+fn main() {}
diff --git a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rust2018.stderr b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.stderr
index f4d14b5f8..8c5bbb631 100644
--- a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rust2018.stderr
+++ b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2015.stderr
@@ -1,14 +1,13 @@
error[E0637]: `&` without an explicit lifetime name cannot be used here
- --> $DIR/where-clause-inherent-impl-ampersand.rs:13:17
+ --> $DIR/where-clause-trait-impl-region-2015.rs:10:17
|
LL | T: WithType<&u32>
| ^ explicit lifetime name needed here
|
-help: consider introducing a higher-ranked lifetime here with `for<'a>`
- --> $DIR/where-clause-inherent-impl-ampersand.rs:13:8
+help: consider introducing a higher-ranked lifetime here
|
-LL | T: WithType<&u32>
- | ^
+LL | T: for<'a> WithType<&'a u32>
+ | +++++++ ++
error: aborting due to previous error
diff --git a/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.fixed b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.fixed
new file mode 100644
index 000000000..09b96fe5e
--- /dev/null
+++ b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.fixed
@@ -0,0 +1,15 @@
+// run-rustfix
+// edition:2018
+
+trait WithType<T> {}
+trait WithRegion<'a> { }
+
+trait Foo { }
+
+impl<T> Foo for Vec<T>
+where
+ T: for<'a> WithType<&'a u32>
+//~^ ERROR `&` without an explicit lifetime name cannot be used here
+{ }
+
+fn main() {}
diff --git a/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.rs b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.rs
new file mode 100644
index 000000000..445f38cbe
--- /dev/null
+++ b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.rs
@@ -0,0 +1,15 @@
+// run-rustfix
+// edition:2018
+
+trait WithType<T> {}
+trait WithRegion<'a> { }
+
+trait Foo { }
+
+impl<T> Foo for Vec<T>
+where
+ T: WithType<&u32>
+//~^ ERROR `&` without an explicit lifetime name cannot be used here
+{ }
+
+fn main() {}
diff --git a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rust2015.stderr b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.stderr
index f4d14b5f8..0268c59fa 100644
--- a/tests/ui/underscore-lifetime/where-clause-inherent-impl-ampersand.rust2015.stderr
+++ b/tests/ui/underscore-lifetime/where-clause-trait-impl-region-2018.stderr
@@ -1,14 +1,13 @@
error[E0637]: `&` without an explicit lifetime name cannot be used here
- --> $DIR/where-clause-inherent-impl-ampersand.rs:13:17
+ --> $DIR/where-clause-trait-impl-region-2018.rs:11:17
|
LL | T: WithType<&u32>
| ^ explicit lifetime name needed here
|
-help: consider introducing a higher-ranked lifetime here with `for<'a>`
- --> $DIR/where-clause-inherent-impl-ampersand.rs:13:8
+help: consider introducing a higher-ranked lifetime here
|
-LL | T: WithType<&u32>
- | ^
+LL | T: for<'a> WithType<&'a u32>
+ | +++++++ ++
error: aborting due to previous error
diff --git a/tests/ui/underscore-lifetime/where-clause-trait-impl-region.rs b/tests/ui/underscore-lifetime/where-clause-trait-impl-region.rs
deleted file mode 100644
index 09e5bbd84..000000000
--- a/tests/ui/underscore-lifetime/where-clause-trait-impl-region.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// revisions: rust2015 rust2018
-//[rust2018] edition:2018
-
-trait WithType<T> {}
-trait WithRegion<'a> { }
-
-trait Foo { }
-
-impl<T> Foo for Vec<T>
-where
- T: WithType<&u32>
-//[rust2015,rust2018]~^ ERROR `&` without an explicit lifetime name cannot be used here
-{ }
-
-fn main() {}
diff --git a/tests/ui/uninhabited/projection.rs b/tests/ui/uninhabited/projection.rs
new file mode 100644
index 000000000..be0d3ff7d
--- /dev/null
+++ b/tests/ui/uninhabited/projection.rs
@@ -0,0 +1,32 @@
+// check-pass
+
+#![feature(never_type, exhaustive_patterns)]
+
+trait Tag {
+ type TagType;
+}
+
+enum Keep {}
+enum Erase {}
+
+impl Tag for Keep {
+ type TagType = ();
+}
+
+impl Tag for Erase {
+ type TagType = !;
+}
+
+enum TagInt<T: Tag> {
+ Untagged(i32),
+ Tagged(T::TagType, i32)
+}
+
+fn test(keep: TagInt<Keep>, erase: TagInt<Erase>) {
+ match erase {
+ TagInt::Untagged(_) => (),
+ TagInt::Tagged(_, _) => ()
+ };
+}
+
+fn main() {}
diff --git a/tests/ui/union/union-fields-2.mirunsafeck.stderr b/tests/ui/union/union-fields-2.mirunsafeck.stderr
index 90ad16402..1157f0c2a 100644
--- a/tests/ui/union/union-fields-2.mirunsafeck.stderr
+++ b/tests/ui/union/union-fields-2.mirunsafeck.stderr
@@ -16,7 +16,7 @@ error[E0560]: union `U` has no field named `c`
LL | let u = U { a: 0, b: 1, c: 2 };
| ^ `U` does not have this field
|
- = note: available fields are: `a`, `b`
+ = note: all struct fields are already assigned
error[E0784]: union expressions should have exactly one field
--> $DIR/union-fields-2.rs:13:13
diff --git a/tests/ui/union/union-fields-2.thirunsafeck.stderr b/tests/ui/union/union-fields-2.thirunsafeck.stderr
index 90ad16402..1157f0c2a 100644
--- a/tests/ui/union/union-fields-2.thirunsafeck.stderr
+++ b/tests/ui/union/union-fields-2.thirunsafeck.stderr
@@ -16,7 +16,7 @@ error[E0560]: union `U` has no field named `c`
LL | let u = U { a: 0, b: 1, c: 2 };
| ^ `U` does not have this field
|
- = note: available fields are: `a`, `b`
+ = note: all struct fields are already assigned
error[E0784]: union expressions should have exactly one field
--> $DIR/union-fields-2.rs:13:13
diff --git a/tests/ui/union/union-sized-field.stderr b/tests/ui/union/union-sized-field.stderr
index bf1ff9c8b..0a79f8bba 100644
--- a/tests/ui/union/union-sized-field.stderr
+++ b/tests/ui/union/union-sized-field.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
--> $DIR/union-sized-field.rs:4:12
|
LL | union Foo<T: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | value: ManuallyDrop<T>,
| ^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
@@ -28,7 +28,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
--> $DIR/union-sized-field.rs:9:12
|
LL | struct Foo2<T: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | value: ManuallyDrop<T>,
| ^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
@@ -54,7 +54,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
--> $DIR/union-sized-field.rs:15:11
|
LL | enum Foo3<T: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | Value(ManuallyDrop<T>),
| ^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
diff --git a/tests/ui/unsafe/auxiliary/external_unsafe_macro.rs b/tests/ui/unsafe/auxiliary/external_unsafe_macro.rs
new file mode 100644
index 000000000..b3837338b
--- /dev/null
+++ b/tests/ui/unsafe/auxiliary/external_unsafe_macro.rs
@@ -0,0 +1,4 @@
+pub unsafe fn unsf() {}
+
+#[macro_export]
+macro_rules! unsafe_macro { () => ($crate::unsf()) }
diff --git a/tests/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.mir.stderr b/tests/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.mir.stderr
index 6f005fe89..0c0826c1c 100644
--- a/tests/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.mir.stderr
+++ b/tests/ui/unsafe/rfc-2585-unsafe_op_in_unsafe_fn.mir.stderr
@@ -5,6 +5,11 @@ LL | unsf();
| ^^^^^^ call to unsafe function
|
= note: consult the function's documentation for information on how to avoid undefined behavior
+note: an unsafe function restricts its caller, but its body is safe by default
+ --> $DIR/rfc-2585-unsafe_op_in_unsafe_fn.rs:11:1
+ |
+LL | unsafe fn deny_level() {
+ | ^^^^^^^^^^^^^^^^^^^^^^
note: the lint level is defined here
--> $DIR/rfc-2585-unsafe_op_in_unsafe_fn.rs:4:9
|
@@ -46,6 +51,11 @@ LL | unsf();
| ^^^^^^ call to unsafe function
|
= note: consult the function's documentation for information on how to avoid undefined behavior
+note: an unsafe function restricts its caller, but its body is safe by default
+ --> $DIR/rfc-2585-unsafe_op_in_unsafe_fn.rs:27:1
+ |
+LL | unsafe fn warning_level() {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
note: the lint level is defined here
--> $DIR/rfc-2585-unsafe_op_in_unsafe_fn.rs:26:8
|
diff --git a/tests/ui/unsafe/wrapping-unsafe-block-sugg.fixed b/tests/ui/unsafe/wrapping-unsafe-block-sugg.fixed
new file mode 100644
index 000000000..db1c10221
--- /dev/null
+++ b/tests/ui/unsafe/wrapping-unsafe-block-sugg.fixed
@@ -0,0 +1,66 @@
+// run-rustfix
+// aux-build:external_unsafe_macro.rs
+
+#![deny(unsafe_op_in_unsafe_fn)] //~ NOTE
+
+extern crate external_unsafe_macro;
+
+unsafe fn unsf() {}
+
+pub unsafe fn foo() { unsafe {
+ //~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ unsf(); //~ ERROR call to unsafe function is unsafe
+ //~^ NOTE
+ //~| NOTE
+ unsf(); //~ ERROR call to unsafe function is unsafe
+ //~^ NOTE
+ //~| NOTE
+}}
+
+pub unsafe fn bar(x: *const i32) -> i32 { unsafe {
+ //~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ let y = *x; //~ ERROR dereference of raw pointer is unsafe and requires unsafe block
+ //~^ NOTE
+ //~| NOTE
+ y + *x //~ ERROR dereference of raw pointer is unsafe and requires unsafe block
+ //~^ NOTE
+ //~| NOTE
+}}
+
+static mut BAZ: i32 = 0;
+pub unsafe fn baz() -> i32 { unsafe {
+ //~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ let y = BAZ; //~ ERROR use of mutable static is unsafe and requires unsafe block
+ //~^ NOTE
+ //~| NOTE
+ y + BAZ //~ ERROR use of mutable static is unsafe and requires unsafe block
+ //~^ NOTE
+ //~| NOTE
+}}
+
+macro_rules! unsafe_macro { () => (unsf()) }
+//~^ ERROR call to unsafe function is unsafe
+//~| NOTE
+//~| NOTE
+//~| ERROR call to unsafe function is unsafe
+//~| NOTE
+//~| NOTE
+
+pub unsafe fn unsafe_in_macro() { unsafe {
+ //~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ unsafe_macro!();
+ //~^ NOTE
+ //~| NOTE
+ unsafe_macro!();
+ //~^ NOTE
+ //~| NOTE
+}}
+
+pub unsafe fn unsafe_in_external_macro() {
+ // FIXME: https://github.com/rust-lang/rust/issues/112504
+ // FIXME: ~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ external_unsafe_macro::unsafe_macro!();
+ external_unsafe_macro::unsafe_macro!();
+}
+
+fn main() {}
diff --git a/tests/ui/unsafe/wrapping-unsafe-block-sugg.rs b/tests/ui/unsafe/wrapping-unsafe-block-sugg.rs
new file mode 100644
index 000000000..9c6be4589
--- /dev/null
+++ b/tests/ui/unsafe/wrapping-unsafe-block-sugg.rs
@@ -0,0 +1,66 @@
+// run-rustfix
+// aux-build:external_unsafe_macro.rs
+
+#![deny(unsafe_op_in_unsafe_fn)] //~ NOTE
+
+extern crate external_unsafe_macro;
+
+unsafe fn unsf() {}
+
+pub unsafe fn foo() {
+ //~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ unsf(); //~ ERROR call to unsafe function is unsafe
+ //~^ NOTE
+ //~| NOTE
+ unsf(); //~ ERROR call to unsafe function is unsafe
+ //~^ NOTE
+ //~| NOTE
+}
+
+pub unsafe fn bar(x: *const i32) -> i32 {
+ //~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ let y = *x; //~ ERROR dereference of raw pointer is unsafe and requires unsafe block
+ //~^ NOTE
+ //~| NOTE
+ y + *x //~ ERROR dereference of raw pointer is unsafe and requires unsafe block
+ //~^ NOTE
+ //~| NOTE
+}
+
+static mut BAZ: i32 = 0;
+pub unsafe fn baz() -> i32 {
+ //~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ let y = BAZ; //~ ERROR use of mutable static is unsafe and requires unsafe block
+ //~^ NOTE
+ //~| NOTE
+ y + BAZ //~ ERROR use of mutable static is unsafe and requires unsafe block
+ //~^ NOTE
+ //~| NOTE
+}
+
+macro_rules! unsafe_macro { () => (unsf()) }
+//~^ ERROR call to unsafe function is unsafe
+//~| NOTE
+//~| NOTE
+//~| ERROR call to unsafe function is unsafe
+//~| NOTE
+//~| NOTE
+
+pub unsafe fn unsafe_in_macro() {
+ //~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ unsafe_macro!();
+ //~^ NOTE
+ //~| NOTE
+ unsafe_macro!();
+ //~^ NOTE
+ //~| NOTE
+}
+
+pub unsafe fn unsafe_in_external_macro() {
+ // FIXME: https://github.com/rust-lang/rust/issues/112504
+ // FIXME: ~^ NOTE an unsafe function restricts its caller, but its body is safe by default
+ external_unsafe_macro::unsafe_macro!();
+ external_unsafe_macro::unsafe_macro!();
+}
+
+fn main() {}
diff --git a/tests/ui/unsafe/wrapping-unsafe-block-sugg.stderr b/tests/ui/unsafe/wrapping-unsafe-block-sugg.stderr
new file mode 100644
index 000000000..43f619c27
--- /dev/null
+++ b/tests/ui/unsafe/wrapping-unsafe-block-sugg.stderr
@@ -0,0 +1,99 @@
+error: call to unsafe function is unsafe and requires unsafe block (error E0133)
+ --> $DIR/wrapping-unsafe-block-sugg.rs:12:5
+ |
+LL | unsf();
+ | ^^^^^^ call to unsafe function
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+note: an unsafe function restricts its caller, but its body is safe by default
+ --> $DIR/wrapping-unsafe-block-sugg.rs:10:1
+ |
+LL | pub unsafe fn foo() {
+ | ^^^^^^^^^^^^^^^^^^^
+note: the lint level is defined here
+ --> $DIR/wrapping-unsafe-block-sugg.rs:4:9
+ |
+LL | #![deny(unsafe_op_in_unsafe_fn)]
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+error: call to unsafe function is unsafe and requires unsafe block (error E0133)
+ --> $DIR/wrapping-unsafe-block-sugg.rs:15:5
+ |
+LL | unsf();
+ | ^^^^^^ call to unsafe function
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+
+error: dereference of raw pointer is unsafe and requires unsafe block (error E0133)
+ --> $DIR/wrapping-unsafe-block-sugg.rs:22:13
+ |
+LL | let y = *x;
+ | ^^ dereference of raw pointer
+ |
+ = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
+note: an unsafe function restricts its caller, but its body is safe by default
+ --> $DIR/wrapping-unsafe-block-sugg.rs:20:1
+ |
+LL | pub unsafe fn bar(x: *const i32) -> i32 {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: dereference of raw pointer is unsafe and requires unsafe block (error E0133)
+ --> $DIR/wrapping-unsafe-block-sugg.rs:25:9
+ |
+LL | y + *x
+ | ^^ dereference of raw pointer
+ |
+ = note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
+
+error: use of mutable static is unsafe and requires unsafe block (error E0133)
+ --> $DIR/wrapping-unsafe-block-sugg.rs:33:13
+ |
+LL | let y = BAZ;
+ | ^^^ use of mutable static
+ |
+ = note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
+note: an unsafe function restricts its caller, but its body is safe by default
+ --> $DIR/wrapping-unsafe-block-sugg.rs:31:1
+ |
+LL | pub unsafe fn baz() -> i32 {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: use of mutable static is unsafe and requires unsafe block (error E0133)
+ --> $DIR/wrapping-unsafe-block-sugg.rs:36:9
+ |
+LL | y + BAZ
+ | ^^^ use of mutable static
+ |
+ = note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
+
+error: call to unsafe function is unsafe and requires unsafe block (error E0133)
+ --> $DIR/wrapping-unsafe-block-sugg.rs:41:36
+ |
+LL | macro_rules! unsafe_macro { () => (unsf()) }
+ | ^^^^^^ call to unsafe function
+...
+LL | unsafe_macro!();
+ | --------------- in this macro invocation
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+note: an unsafe function restricts its caller, but its body is safe by default
+ --> $DIR/wrapping-unsafe-block-sugg.rs:49:1
+ |
+LL | pub unsafe fn unsafe_in_macro() {
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: this error originates in the macro `unsafe_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: call to unsafe function is unsafe and requires unsafe block (error E0133)
+ --> $DIR/wrapping-unsafe-block-sugg.rs:41:36
+ |
+LL | macro_rules! unsafe_macro { () => (unsf()) }
+ | ^^^^^^ call to unsafe function
+...
+LL | unsafe_macro!();
+ | --------------- in this macro invocation
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+ = note: this error originates in the macro `unsafe_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 8 previous errors
+
diff --git a/tests/ui/unsized-locals/issue-67981.stderr b/tests/ui/unsized-locals/issue-67981.stderr
index a4b179ae2..13fdc037a 100644
--- a/tests/ui/unsized-locals/issue-67981.stderr
+++ b/tests/ui/unsized-locals/issue-67981.stderr
@@ -5,10 +5,7 @@ LL | let f: fn([u8]) = |_| {};
| ^ doesn't have a size known at compile-time
|
= help: the trait `Sized` is not implemented for `[u8]`
-help: function arguments must have a statically known size, borrowed types always have a known size
- |
-LL | let f: fn([u8]) = |&_| {};
- | +
+ = note: all function arguments must have a statically known size
error: aborting due to previous error
diff --git a/tests/ui/unsized-locals/rust-call.rs b/tests/ui/unsized-locals/rust-call.rs
new file mode 100644
index 000000000..ff4075aa4
--- /dev/null
+++ b/tests/ui/unsized-locals/rust-call.rs
@@ -0,0 +1,12 @@
+#![feature(unsized_tuple_coercion)]
+#![feature(unboxed_closures)]
+#![feature(unsized_fn_params)]
+
+fn bad() -> extern "rust-call" fn(([u8],)) { todo!() }
+
+fn main() {
+ let f = bad();
+ let slice: Box<([u8],)> = Box::new(([1; 8],));
+ f(*slice);
+ //~^ ERROR the size for values of type `[u8]` cannot be known at compilation time
+}
diff --git a/tests/ui/unsized-locals/rust-call.stderr b/tests/ui/unsized-locals/rust-call.stderr
new file mode 100644
index 000000000..fff7ef75b
--- /dev/null
+++ b/tests/ui/unsized-locals/rust-call.stderr
@@ -0,0 +1,13 @@
+error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
+ --> $DIR/rust-call.rs:10:7
+ |
+LL | f(*slice);
+ | ^^^^^^ doesn't have a size known at compile-time
+ |
+ = help: within `([u8],)`, the trait `Sized` is not implemented for `[u8]`
+ = note: required because it appears within the type `([u8],)`
+ = note: argument required to be sized due to `extern "rust-call"` ABI
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/unsized/issue-71659.stderr b/tests/ui/unsized/issue-71659.current.stderr
index b57b3015e..6b982a739 100644
--- a/tests/ui/unsized/issue-71659.stderr
+++ b/tests/ui/unsized/issue-71659.current.stderr
@@ -1,11 +1,11 @@
error[E0277]: the trait bound `dyn Foo: CastTo<[i32]>` is not satisfied
- --> $DIR/issue-71659.rs:30:15
+ --> $DIR/issue-71659.rs:33:15
|
LL | let x = x.cast::<[i32]>();
| ^^^^ the trait `CastTo<[i32]>` is not implemented for `dyn Foo`
|
note: required by a bound in `Cast::cast`
- --> $DIR/issue-71659.rs:19:15
+ --> $DIR/issue-71659.rs:22:15
|
LL | fn cast<T: ?Sized>(&self) -> &T
| ---- required by a bound in this associated function
diff --git a/tests/ui/unsized/issue-71659.next.stderr b/tests/ui/unsized/issue-71659.next.stderr
new file mode 100644
index 000000000..6b982a739
--- /dev/null
+++ b/tests/ui/unsized/issue-71659.next.stderr
@@ -0,0 +1,18 @@
+error[E0277]: the trait bound `dyn Foo: CastTo<[i32]>` is not satisfied
+ --> $DIR/issue-71659.rs:33:15
+ |
+LL | let x = x.cast::<[i32]>();
+ | ^^^^ the trait `CastTo<[i32]>` is not implemented for `dyn Foo`
+ |
+note: required by a bound in `Cast::cast`
+ --> $DIR/issue-71659.rs:22:15
+ |
+LL | fn cast<T: ?Sized>(&self) -> &T
+ | ---- required by a bound in this associated function
+LL | where
+LL | Self: CastTo<T>,
+ | ^^^^^^^^^ required by this bound in `Cast::cast`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/unsized/issue-71659.rs b/tests/ui/unsized/issue-71659.rs
index 3524ca02b..db5c2e205 100644
--- a/tests/ui/unsized/issue-71659.rs
+++ b/tests/ui/unsized/issue-71659.rs
@@ -1,3 +1,6 @@
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
+
#![feature(unsize)]
use std::marker::Unsize;
diff --git a/tests/ui/unsized/unsized-bare-typaram.stderr b/tests/ui/unsized/unsized-bare-typaram.stderr
index 1eff14be8..daef98440 100644
--- a/tests/ui/unsized/unsized-bare-typaram.stderr
+++ b/tests/ui/unsized/unsized-bare-typaram.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
LL | fn foo<T: ?Sized>() { bar::<T>() }
| - ^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `bar`
--> $DIR/unsized-bare-typaram.rs:1:8
diff --git a/tests/ui/unsized/unsized-enum.stderr b/tests/ui/unsized/unsized-enum.stderr
index 5f2e22430..9e6408e81 100644
--- a/tests/ui/unsized/unsized-enum.stderr
+++ b/tests/ui/unsized/unsized-enum.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
LL | fn foo2<T: ?Sized>() { not_sized::<Foo<T>>() }
| - ^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Foo`
--> $DIR/unsized-enum.rs:4:10
diff --git a/tests/ui/unsized/unsized-enum2.stderr b/tests/ui/unsized/unsized-enum2.stderr
index 00b80327c..71cf78212 100644
--- a/tests/ui/unsized/unsized-enum2.stderr
+++ b/tests/ui/unsized/unsized-enum2.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `W` cannot be known at compilation tim
--> $DIR/unsized-enum2.rs:23:8
|
LL | enum E<W: ?Sized, X: ?Sized, Y: ?Sized, Z: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | // parameter
LL | VA(W),
| ^ doesn't have a size known at compile-time
@@ -27,7 +27,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized-enum2.rs:25:11
|
LL | enum E<W: ?Sized, X: ?Sized, Y: ?Sized, Z: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | VB{x: X},
| ^ doesn't have a size known at compile-time
@@ -52,7 +52,7 @@ error[E0277]: the size for values of type `Y` cannot be known at compilation tim
--> $DIR/unsized-enum2.rs:27:15
|
LL | enum E<W: ?Sized, X: ?Sized, Y: ?Sized, Z: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | VC(isize, Y),
| ^ doesn't have a size known at compile-time
@@ -77,7 +77,7 @@ error[E0277]: the size for values of type `Z` cannot be known at compilation tim
--> $DIR/unsized-enum2.rs:29:21
|
LL | enum E<W: ?Sized, X: ?Sized, Y: ?Sized, Z: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | VD{u: isize, x: Z},
| ^ doesn't have a size known at compile-time
diff --git a/tests/ui/unsized/unsized-fn-arg.stderr b/tests/ui/unsized/unsized-fn-arg.stderr
index 404fa5291..0f6fadde1 100644
--- a/tests/ui/unsized/unsized-fn-arg.stderr
+++ b/tests/ui/unsized/unsized-fn-arg.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
LL | fn f<T: ?Sized>(t: T) {}
| - ^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
= help: unsized fn params are gated as an unstable feature
help: consider removing the `?Sized` bound to make the type parameter `Sized`
diff --git a/tests/ui/unsized/unsized-inherent-impl-self-type.stderr b/tests/ui/unsized/unsized-inherent-impl-self-type.stderr
index a952aa063..9e5ad92eb 100644
--- a/tests/ui/unsized/unsized-inherent-impl-self-type.stderr
+++ b/tests/ui/unsized/unsized-inherent-impl-self-type.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
LL | impl<X: ?Sized> S5<X> {
| - ^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `S5`
--> $DIR/unsized-inherent-impl-self-type.rs:5:11
diff --git a/tests/ui/unsized/unsized-struct.stderr b/tests/ui/unsized/unsized-struct.stderr
index dff1b0a51..4e7cb09f0 100644
--- a/tests/ui/unsized/unsized-struct.stderr
+++ b/tests/ui/unsized/unsized-struct.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
LL | fn foo2<T: ?Sized>() { not_sized::<Foo<T>>() }
| - ^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `Foo`
--> $DIR/unsized-struct.rs:4:12
@@ -30,7 +30,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
LL | fn bar2<T: ?Sized>() { is_sized::<Bar<T>>() }
| - ^^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required because it appears within the type `Bar<T>`
--> $DIR/unsized-struct.rs:11:8
diff --git a/tests/ui/unsized/unsized-trait-impl-self-type.stderr b/tests/ui/unsized/unsized-trait-impl-self-type.stderr
index f6ba9a80c..4955d463f 100644
--- a/tests/ui/unsized/unsized-trait-impl-self-type.stderr
+++ b/tests/ui/unsized/unsized-trait-impl-self-type.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
LL | impl<X: ?Sized> T3<X> for S5<X> {
| - ^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `S5`
--> $DIR/unsized-trait-impl-self-type.rs:8:11
diff --git a/tests/ui/unsized/unsized-trait-impl-trait-arg.stderr b/tests/ui/unsized/unsized-trait-impl-trait-arg.stderr
index f81487d52..8761c293a 100644
--- a/tests/ui/unsized/unsized-trait-impl-trait-arg.stderr
+++ b/tests/ui/unsized/unsized-trait-impl-trait-arg.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
LL | impl<X: ?Sized> T2<X> for S4<X> {
| - ^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `T2`
--> $DIR/unsized-trait-impl-trait-arg.rs:4:10
diff --git a/tests/ui/unsized/unsized3.stderr b/tests/ui/unsized/unsized3.stderr
index 9ad1ac6b4..3ef9a8753 100644
--- a/tests/ui/unsized/unsized3.stderr
+++ b/tests/ui/unsized/unsized3.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized3.rs:7:13
|
LL | fn f1<X: ?Sized>(x: &X) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | f2::<X>(x);
| ------- ^ doesn't have a size known at compile-time
| |
@@ -27,7 +27,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized3.rs:18:13
|
LL | fn f3<X: ?Sized + T>(x: &X) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | f4::<X>(x);
| ------- ^ doesn't have a size known at compile-time
| |
@@ -52,7 +52,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized3.rs:33:8
|
LL | fn f8<X: ?Sized>(x1: &S<X>, x2: &S<X>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | f5(x1);
| -- ^^ doesn't have a size known at compile-time
| |
@@ -82,7 +82,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized3.rs:40:5
|
LL | fn f9<X: ?Sized>(x1: Box<S<X>>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | f5(&(*x1, 34));
| ^^ doesn't have a size known at compile-time
|
@@ -102,7 +102,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized3.rs:45:9
|
LL | fn f10<X: ?Sized>(x1: Box<S<X>>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | f5(&(32, *x1));
| ^^^^^^^^^ doesn't have a size known at compile-time
|
@@ -123,7 +123,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized3.rs:45:8
|
LL | fn f10<X: ?Sized>(x1: Box<S<X>>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | f5(&(32, *x1));
| -- ^^^^^^^^^^ doesn't have a size known at compile-time
| |
diff --git a/tests/ui/unsized/unsized5.stderr b/tests/ui/unsized/unsized5.stderr
index 03ed0c457..53e7fc17e 100644
--- a/tests/ui/unsized/unsized5.stderr
+++ b/tests/ui/unsized/unsized5.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized5.rs:4:9
|
LL | struct S1<X: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | f1: X,
| ^ doesn't have a size known at compile-time
|
@@ -26,7 +26,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized5.rs:10:8
|
LL | struct S2<X: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | f: isize,
LL | g: X,
| ^ doesn't have a size known at compile-time
@@ -87,7 +87,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized5.rs:25:8
|
LL | enum E<X: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | V1(X, isize),
| ^ doesn't have a size known at compile-time
|
@@ -111,7 +111,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized5.rs:29:12
|
LL | enum F<X: ?Sized> {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | V2{f1: X, f: isize},
| ^ doesn't have a size known at compile-time
|
diff --git a/tests/ui/unsized/unsized6.stderr b/tests/ui/unsized/unsized6.stderr
index 18ac1ea18..56e7f60f9 100644
--- a/tests/ui/unsized/unsized6.stderr
+++ b/tests/ui/unsized/unsized6.stderr
@@ -2,7 +2,7 @@ error[E0277]: the size for values of type `Y` cannot be known at compilation tim
--> $DIR/unsized6.rs:9:9
|
LL | fn f1<W: ?Sized, X: ?Sized, Y: ?Sized, Z: ?Sized>(x: &X) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | let y: Y;
| ^ doesn't have a size known at compile-time
@@ -23,7 +23,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized6.rs:7:12
|
LL | fn f1<W: ?Sized, X: ?Sized, Y: ?Sized, Z: ?Sized>(x: &X) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | let _: W; // <-- this is OK, no bindings created, no initializer.
LL | let _: (isize, (X, isize));
| ^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
@@ -39,7 +39,7 @@ error[E0277]: the size for values of type `Z` cannot be known at compilation tim
--> $DIR/unsized6.rs:11:12
|
LL | fn f1<W: ?Sized, X: ?Sized, Y: ?Sized, Z: ?Sized>(x: &X) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | let y: (isize, (Z, usize));
| ^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
@@ -55,7 +55,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized6.rs:15:9
|
LL | fn f2<X: ?Sized, Y: ?Sized>(x: &X) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | let y: X;
| ^ doesn't have a size known at compile-time
|
@@ -75,7 +75,7 @@ error[E0277]: the size for values of type `Y` cannot be known at compilation tim
--> $DIR/unsized6.rs:17:12
|
LL | fn f2<X: ?Sized, Y: ?Sized>(x: &X) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | let y: (isize, (Y, isize));
| ^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
@@ -91,7 +91,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized6.rs:22:9
|
LL | fn f3<X: ?Sized>(x1: Box<X>, x2: Box<X>, x3: Box<X>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | let y: X = *x1;
| ^ doesn't have a size known at compile-time
|
@@ -111,7 +111,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized6.rs:24:9
|
LL | fn f3<X: ?Sized>(x1: Box<X>, x2: Box<X>, x3: Box<X>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | let y = *x2;
| ^ doesn't have a size known at compile-time
@@ -128,7 +128,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized6.rs:26:10
|
LL | fn f3<X: ?Sized>(x1: Box<X>, x2: Box<X>, x3: Box<X>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | let (y, z) = (*x3, 4);
| ^ doesn't have a size known at compile-time
@@ -145,7 +145,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized6.rs:30:9
|
LL | fn f4<X: ?Sized + T>(x1: Box<X>, x2: Box<X>, x3: Box<X>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
LL | let y: X = *x1;
| ^ doesn't have a size known at compile-time
|
@@ -165,7 +165,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized6.rs:32:9
|
LL | fn f4<X: ?Sized + T>(x1: Box<X>, x2: Box<X>, x3: Box<X>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | let y = *x2;
| ^ doesn't have a size known at compile-time
@@ -182,7 +182,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
--> $DIR/unsized6.rs:34:10
|
LL | fn f4<X: ?Sized + T>(x1: Box<X>, x2: Box<X>, x3: Box<X>) {
- | - this type parameter needs to be `std::marker::Sized`
+ | - this type parameter needs to be `Sized`
...
LL | let (y, z) = (*x3, 4);
| ^ doesn't have a size known at compile-time
@@ -201,7 +201,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
LL | fn g1<X: ?Sized>(x: X) {}
| - ^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
= help: unsized fn params are gated as an unstable feature
help: consider removing the `?Sized` bound to make the type parameter `Sized`
@@ -220,7 +220,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
LL | fn g2<X: ?Sized + T>(x: X) {}
| - ^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
= help: unsized fn params are gated as an unstable feature
help: consider removing the `?Sized` bound to make the type parameter `Sized`
diff --git a/tests/ui/unsized/unsized7.stderr b/tests/ui/unsized/unsized7.stderr
index 1555b9df4..c313a2724 100644
--- a/tests/ui/unsized/unsized7.stderr
+++ b/tests/ui/unsized/unsized7.stderr
@@ -4,7 +4,7 @@ error[E0277]: the size for values of type `X` cannot be known at compilation tim
LL | impl<X: ?Sized + T> T1<X> for S3<X> {
| - ^^^^^ doesn't have a size known at compile-time
| |
- | this type parameter needs to be `std::marker::Sized`
+ | this type parameter needs to be `Sized`
|
note: required by a bound in `T1`
--> $DIR/unsized7.rs:7:10
diff --git a/tests/ui/use/use-keyword.rs b/tests/ui/use/use-keyword.rs
index c30c2e06c..840cddcb9 100644
--- a/tests/ui/use/use-keyword.rs
+++ b/tests/ui/use/use-keyword.rs
@@ -1,4 +1,4 @@
-// Check that imports with nakes super and self don't fail during parsing
+// Check that imports with naked super and self don't fail during parsing
// FIXME: this shouldn't fail during name resolution either
mod a {
diff --git a/tests/ui/weird-exprs.rs b/tests/ui/weird-exprs.rs
index c4fa850a4..892b28135 100644
--- a/tests/ui/weird-exprs.rs
+++ b/tests/ui/weird-exprs.rs
@@ -1,7 +1,6 @@
// run-pass
#![feature(generators)]
-#![feature(unboxed_closures, fn_traits)]
#![allow(non_camel_case_types)]
#![allow(dead_code)]
@@ -17,6 +16,7 @@
extern crate core;
use std::cell::Cell;
use std::mem::swap;
+use std::ops::Deref;
// Just a grab bag of stuff that you wouldn't want to actually write.
@@ -81,7 +81,7 @@ fn angrydome() {
break; }
}
-fn evil_lincoln() { let _evil = println!("lincoln"); }
+fn evil_lincoln() { let _evil: () = println!("lincoln"); }
fn dots() {
assert_eq!(String::from(".................................................."),
@@ -137,7 +137,7 @@ fn punch_card() -> impl std::fmt::Debug {
}
fn r#match() {
- let val = match match match match match () {
+ let val: () = match match match match match () {
() => ()
} {
() => ()
@@ -166,7 +166,7 @@ fn match_nested_if() {
}
fn monkey_barrel() {
- let val = ()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=();
+ let val: () = ()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=();
assert_eq!(val, ());
}
@@ -183,10 +183,10 @@ fn 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎() {
fn function() {
struct foo;
- impl FnOnce<()> for foo {
- type Output = foo;
- extern "rust-call" fn call_once(self, _args: ()) -> Self::Output {
- foo
+ impl Deref for foo {
+ type Target = fn() -> Self;
+ fn deref(&self) -> &Self::Target {
+ &((|| foo) as _)
}
}
let foo = foo () ()() ()()() ()()()() ()()()()();
diff --git a/tests/ui/issues/issue-50825-1.rs b/tests/ui/where-clauses/issue-50825-1.rs
index ee4316029..ee4316029 100644
--- a/tests/ui/issues/issue-50825-1.rs
+++ b/tests/ui/where-clauses/issue-50825-1.rs
diff --git a/tests/ui/issues/issue-50825.rs b/tests/ui/where-clauses/issue-50825.rs
index 1ece2e9fc..1ece2e9fc 100644
--- a/tests/ui/issues/issue-50825.rs
+++ b/tests/ui/where-clauses/issue-50825.rs
diff --git a/tests/ui/xcrate/xcrate-private-by-default.stderr b/tests/ui/xcrate/xcrate-private-by-default.stderr
index 0bdd4002f..25bbbf5f6 100644
--- a/tests/ui/xcrate/xcrate-private-by-default.stderr
+++ b/tests/ui/xcrate/xcrate-private-by-default.stderr
@@ -62,7 +62,9 @@ error[E0603]: module `foo` is private
--> $DIR/xcrate-private-by-default.rs:35:29
|
LL | static_priv_by_default::foo::a;
- | ^^^ private module
+ | ^^^ - static `a` is not publicly re-exported
+ | |
+ | private module
|
note: the module `foo` is defined here
--> $DIR/auxiliary/static_priv_by_default.rs:12:1
@@ -74,7 +76,9 @@ error[E0603]: module `foo` is private
--> $DIR/xcrate-private-by-default.rs:37:29
|
LL | static_priv_by_default::foo::b;
- | ^^^ private module
+ | ^^^ - function `b` is not publicly re-exported
+ | |
+ | private module
|
note: the module `foo` is defined here
--> $DIR/auxiliary/static_priv_by_default.rs:12:1
@@ -86,7 +90,9 @@ error[E0603]: module `foo` is private
--> $DIR/xcrate-private-by-default.rs:39:29
|
LL | static_priv_by_default::foo::c;
- | ^^^ private module
+ | ^^^ - unit struct `c` is not publicly re-exported
+ | |
+ | private module
|
note: the module `foo` is defined here
--> $DIR/auxiliary/static_priv_by_default.rs:12:1
@@ -98,7 +104,9 @@ error[E0603]: module `foo` is private
--> $DIR/xcrate-private-by-default.rs:41:35
|
LL | foo::<static_priv_by_default::foo::d>();
- | ^^^ private module
+ | ^^^ - enum `d` is not publicly re-exported
+ | |
+ | private module
|
note: the module `foo` is defined here
--> $DIR/auxiliary/static_priv_by_default.rs:12:1
@@ -110,7 +118,9 @@ error[E0603]: module `foo` is private
--> $DIR/xcrate-private-by-default.rs:43:35
|
LL | foo::<static_priv_by_default::foo::e>();
- | ^^^ private module
+ | ^^^ - type alias `e` is not publicly re-exported
+ | |
+ | private module
|
note: the module `foo` is defined here
--> $DIR/auxiliary/static_priv_by_default.rs:12:1