summaryrefslogtreecommitdiffstats
path: root/src/test/ui/nll
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/nll')
-rw-r--r--src/test/ui/nll/assign-while-to-immutable.rs11
-rw-r--r--src/test/ui/nll/borrow-use-issue-46875.rs18
-rw-r--r--src/test/ui/nll/borrowck-thread-local-static-mut-borrow-outlives-fn.rs25
-rw-r--r--src/test/ui/nll/borrowed-local-error.rs12
-rw-r--r--src/test/ui/nll/borrowed-local-error.stderr15
-rw-r--r--src/test/ui/nll/borrowed-match-issue-45045.rs18
-rw-r--r--src/test/ui/nll/borrowed-match-issue-45045.stderr15
-rw-r--r--src/test/ui/nll/borrowed-referent-issue-38899.rs17
-rw-r--r--src/test/ui/nll/borrowed-referent-issue-38899.stderr15
-rw-r--r--src/test/ui/nll/borrowed-temporary-error.rs12
-rw-r--r--src/test/ui/nll/borrowed-temporary-error.stderr16
-rw-r--r--src/test/ui/nll/borrowed-universal-error-2.rs7
-rw-r--r--src/test/ui/nll/borrowed-universal-error-2.stderr9
-rw-r--r--src/test/ui/nll/borrowed-universal-error.rs11
-rw-r--r--src/test/ui/nll/borrowed-universal-error.stderr12
-rw-r--r--src/test/ui/nll/cannot-move-block-spans.rs22
-rw-r--r--src/test/ui/nll/cannot-move-block-spans.stderr88
-rw-r--r--src/test/ui/nll/capture-mut-ref.fixed16
-rw-r--r--src/test/ui/nll/capture-mut-ref.rs16
-rw-r--r--src/test/ui/nll/capture-mut-ref.stderr16
-rw-r--r--src/test/ui/nll/capture-ref-in-struct.rs36
-rw-r--r--src/test/ui/nll/capture-ref-in-struct.stderr15
-rw-r--r--src/test/ui/nll/closure-access-spans.rs56
-rw-r--r--src/test/ui/nll/closure-access-spans.stderr120
-rw-r--r--src/test/ui/nll/closure-borrow-spans.rs100
-rw-r--r--src/test/ui/nll/closure-borrow-spans.stderr172
-rw-r--r--src/test/ui/nll/closure-captures.rs55
-rw-r--r--src/test/ui/nll/closure-captures.stderr148
-rw-r--r--src/test/ui/nll/closure-malformed-projection-input-issue-102800.rs31
-rw-r--r--src/test/ui/nll/closure-malformed-projection-input-issue-102800.stderr104
-rw-r--r--src/test/ui/nll/closure-move-spans.rs21
-rw-r--r--src/test/ui/nll/closure-move-spans.stderr39
-rw-r--r--src/test/ui/nll/closure-requirements/escape-argument-callee.rs42
-rw-r--r--src/test/ui/nll/closure-requirements/escape-argument-callee.stderr31
-rw-r--r--src/test/ui/nll/closure-requirements/escape-argument.rs42
-rw-r--r--src/test/ui/nll/closure-requirements/escape-argument.stderr35
-rw-r--r--src/test/ui/nll/closure-requirements/escape-upvar-nested.rs33
-rw-r--r--src/test/ui/nll/closure-requirements/escape-upvar-nested.stderr53
-rw-r--r--src/test/ui/nll/closure-requirements/escape-upvar-ref.rs33
-rw-r--r--src/test/ui/nll/closure-requirements/escape-upvar-ref.stderr39
-rw-r--r--src/test/ui/nll/closure-requirements/issue-58127-mutliple-requirements.rs36
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.rs51
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr36
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs50
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr39
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-comparing-against-free.rs40
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-comparing-against-free.stderr69
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-no-bound.rs40
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-no-bound.stderr49
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-wrong-bound.rs43
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-wrong-bound.stderr49
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-val.rs43
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr39
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-despite-same-free-region.rs50
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-despite-same-free-region.stderr23
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.rs42
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr35
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.rs46
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr35
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-from-trait-match.rs48
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-from-trait-match.stderr38
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-multiple-requirements.rs23
-rw-r--r--src/test/ui/nll/closure-requirements/propagate-multiple-requirements.stderr17
-rw-r--r--src/test/ui/nll/closure-requirements/region-lbr-anon-does-not-outlive-static.rs13
-rw-r--r--src/test/ui/nll/closure-requirements/region-lbr-anon-does-not-outlive-static.stderr10
-rw-r--r--src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.rs13
-rw-r--r--src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr10
-rw-r--r--src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs13
-rw-r--r--src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr14
-rw-r--r--src/test/ui/nll/closure-requirements/region-lbr1-does-outlive-lbr2-because-implied-bound.rs11
-rw-r--r--src/test/ui/nll/closure-requirements/return-wrong-bound-region.rs23
-rw-r--r--src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr31
-rw-r--r--src/test/ui/nll/closure-use-spans.rs21
-rw-r--r--src/test/ui/nll/closure-use-spans.stderr33
-rw-r--r--src/test/ui/nll/closures-in-loops.rs24
-rw-r--r--src/test/ui/nll/closures-in-loops.stderr35
-rw-r--r--src/test/ui/nll/constant-thread-locals-issue-47053.rs10
-rw-r--r--src/test/ui/nll/constant-thread-locals-issue-47053.stderr9
-rw-r--r--src/test/ui/nll/constant.rs10
-rw-r--r--src/test/ui/nll/continue-after-missing-main.rs29
-rw-r--r--src/test/ui/nll/continue-after-missing-main.stderr9
-rw-r--r--src/test/ui/nll/decl-macro-illegal-copy.rs28
-rw-r--r--src/test/ui/nll/decl-macro-illegal-copy.stderr14
-rw-r--r--src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy-proj.rs12
-rw-r--r--src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy-proj.stderr14
-rw-r--r--src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy.rs11
-rw-r--r--src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy.stderr14
-rw-r--r--src/test/ui/nll/dont-print-desugared.rs21
-rw-r--r--src/test/ui/nll/dont-print-desugared.stderr24
-rw-r--r--src/test/ui/nll/drop-may-dangle.rs34
-rw-r--r--src/test/ui/nll/drop-no-may-dangle.rs30
-rw-r--r--src/test/ui/nll/drop-no-may-dangle.stderr26
-rw-r--r--src/test/ui/nll/empty-type-predicate-2.rs18
-rw-r--r--src/test/ui/nll/empty-type-predicate.rs11
-rw-r--r--src/test/ui/nll/enum-drop-access.rs49
-rw-r--r--src/test/ui/nll/enum-drop-access.stderr31
-rw-r--r--src/test/ui/nll/extra-unused-mut.rs66
-rw-r--r--src/test/ui/nll/generator-distinct-lifetime.rs25
-rw-r--r--src/test/ui/nll/generator-upvar-mutability.rs14
-rw-r--r--src/test/ui/nll/generator-upvar-mutability.stderr12
-rw-r--r--src/test/ui/nll/get_default.polonius.stderr18
-rw-r--r--src/test/ui/nll/get_default.rs44
-rw-r--r--src/test/ui/nll/get_default.stderr48
-rw-r--r--src/test/ui/nll/guarantor-issue-46974.rs19
-rw-r--r--src/test/ui/nll/guarantor-issue-46974.stderr23
-rw-r--r--src/test/ui/nll/issue-16223.rs52
-rw-r--r--src/test/ui/nll/issue-21114-ebfull.rs18
-rw-r--r--src/test/ui/nll/issue-21114-kixunil.rs17
-rw-r--r--src/test/ui/nll/issue-21232-partial-init-and-erroneous-use.rs60
-rw-r--r--src/test/ui/nll/issue-21232-partial-init-and-erroneous-use.stderr64
-rw-r--r--src/test/ui/nll/issue-21232-partial-init-and-use.rs297
-rw-r--r--src/test/ui/nll/issue-21232-partial-init-and-use.stderr260
-rw-r--r--src/test/ui/nll/issue-22323-temp-destruction.rs30
-rw-r--r--src/test/ui/nll/issue-24535-allow-mutable-borrow-in-match-guard.rs55
-rw-r--r--src/test/ui/nll/issue-27282-move-match-input-into-guard.rs20
-rw-r--r--src/test/ui/nll/issue-27282-move-match-input-into-guard.stderr16
-rw-r--r--src/test/ui/nll/issue-27282-move-ref-mut-into-guard.rs13
-rw-r--r--src/test/ui/nll/issue-27282-move-ref-mut-into-guard.stderr13
-rw-r--r--src/test/ui/nll/issue-27282-mutate-before-diverging-arm-1.rs31
-rw-r--r--src/test/ui/nll/issue-27282-mutate-before-diverging-arm-1.stderr14
-rw-r--r--src/test/ui/nll/issue-27282-mutate-before-diverging-arm-2.rs40
-rw-r--r--src/test/ui/nll/issue-27282-mutate-before-diverging-arm-2.stderr14
-rw-r--r--src/test/ui/nll/issue-27282-mutate-before-diverging-arm-3.rs30
-rw-r--r--src/test/ui/nll/issue-27282-mutate-before-diverging-arm-3.stderr14
-rw-r--r--src/test/ui/nll/issue-27282-mutation-in-guard.rs13
-rw-r--r--src/test/ui/nll/issue-27282-mutation-in-guard.stderr13
-rw-r--r--src/test/ui/nll/issue-27282-reborrow-ref-mut-in-guard.rs18
-rw-r--r--src/test/ui/nll/issue-27282-reborrow-ref-mut-in-guard.stderr13
-rw-r--r--src/test/ui/nll/issue-27868.rs28
-rw-r--r--src/test/ui/nll/issue-27868.stderr18
-rw-r--r--src/test/ui/nll/issue-30104.rs40
-rw-r--r--src/test/ui/nll/issue-31567.rs25
-rw-r--r--src/test/ui/nll/issue-31567.stderr16
-rw-r--r--src/test/ui/nll/issue-32382-index-assoc-type-with-lifetime.rs41
-rw-r--r--src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.rs11
-rw-r--r--src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.stderr26
-rw-r--r--src/test/ui/nll/issue-43058.rs26
-rw-r--r--src/test/ui/nll/issue-45157.rs31
-rw-r--r--src/test/ui/nll/issue-45157.stderr17
-rw-r--r--src/test/ui/nll/issue-45696-long-live-borrows-in-boxes.rs114
-rw-r--r--src/test/ui/nll/issue-45696-no-variant-box-recur.rs47
-rw-r--r--src/test/ui/nll/issue-45696-scribble-on-boxed-borrow.rs67
-rw-r--r--src/test/ui/nll/issue-45696-scribble-on-boxed-borrow.stderr33
-rw-r--r--src/test/ui/nll/issue-46023.rs8
-rw-r--r--src/test/ui/nll/issue-46023.stderr12
-rw-r--r--src/test/ui/nll/issue-46036.rs12
-rw-r--r--src/test/ui/nll/issue-46036.stderr15
-rw-r--r--src/test/ui/nll/issue-46589.rs31
-rw-r--r--src/test/ui/nll/issue-46589.stderr15
-rw-r--r--src/test/ui/nll/issue-47022.rs33
-rw-r--r--src/test/ui/nll/issue-47153-generic-const.rs18
-rw-r--r--src/test/ui/nll/issue-47388.rs10
-rw-r--r--src/test/ui/nll/issue-47388.stderr11
-rw-r--r--src/test/ui/nll/issue-47470.rs22
-rw-r--r--src/test/ui/nll/issue-47470.stderr9
-rw-r--r--src/test/ui/nll/issue-47589.rs23
-rw-r--r--src/test/ui/nll/issue-48070.rs22
-rw-r--r--src/test/ui/nll/issue-48238.rs10
-rw-r--r--src/test/ui/nll/issue-48238.stderr13
-rw-r--r--src/test/ui/nll/issue-48623-closure.rs16
-rw-r--r--src/test/ui/nll/issue-48623-generator.rs18
-rw-r--r--src/test/ui/nll/issue-48623-generator.stderr11
-rw-r--r--src/test/ui/nll/issue-48697.rs10
-rw-r--r--src/test/ui/nll/issue-48697.stderr11
-rw-r--r--src/test/ui/nll/issue-48803.rs13
-rw-r--r--src/test/ui/nll/issue-48803.stderr15
-rw-r--r--src/test/ui/nll/issue-50343.rs8
-rw-r--r--src/test/ui/nll/issue-50461-used-mut-from-moves.rs17
-rw-r--r--src/test/ui/nll/issue-50716-1.rs10
-rw-r--r--src/test/ui/nll/issue-50716.rs17
-rw-r--r--src/test/ui/nll/issue-50716.stderr11
-rw-r--r--src/test/ui/nll/issue-51191.rs34
-rw-r--r--src/test/ui/nll/issue-51191.stderr69
-rw-r--r--src/test/ui/nll/issue-51244.rs5
-rw-r--r--src/test/ui/nll/issue-51244.stderr11
-rw-r--r--src/test/ui/nll/issue-51268.rs21
-rw-r--r--src/test/ui/nll/issue-51268.stderr17
-rw-r--r--src/test/ui/nll/issue-51345-2.rs8
-rw-r--r--src/test/ui/nll/issue-51351.rs21
-rw-r--r--src/test/ui/nll/issue-51512.rs6
-rw-r--r--src/test/ui/nll/issue-51512.stderr18
-rw-r--r--src/test/ui/nll/issue-51770.rs19
-rw-r--r--src/test/ui/nll/issue-52057.rs22
-rw-r--r--src/test/ui/nll/issue-52059-report-when-borrow-and-drop-conflict.rs30
-rw-r--r--src/test/ui/nll/issue-52059-report-when-borrow-and-drop-conflict.stderr44
-rw-r--r--src/test/ui/nll/issue-52078.rs24
-rw-r--r--src/test/ui/nll/issue-52086.rs14
-rw-r--r--src/test/ui/nll/issue-52086.stderr15
-rw-r--r--src/test/ui/nll/issue-52113.rs35
-rw-r--r--src/test/ui/nll/issue-52113.stderr15
-rw-r--r--src/test/ui/nll/issue-52213.rs15
-rw-r--r--src/test/ui/nll/issue-52213.stderr15
-rw-r--r--src/test/ui/nll/issue-52533-1.rs11
-rw-r--r--src/test/ui/nll/issue-52533-1.stderr11
-rw-r--r--src/test/ui/nll/issue-52534-1.rs48
-rw-r--r--src/test/ui/nll/issue-52534-1.stderr57
-rw-r--r--src/test/ui/nll/issue-52534-2.rs14
-rw-r--r--src/test/ui/nll/issue-52534-2.stderr15
-rw-r--r--src/test/ui/nll/issue-52534.rs19
-rw-r--r--src/test/ui/nll/issue-52534.stderr31
-rw-r--r--src/test/ui/nll/issue-52663-span-decl-captured-variable.rs11
-rw-r--r--src/test/ui/nll/issue-52663-span-decl-captured-variable.stderr13
-rw-r--r--src/test/ui/nll/issue-52663-trait-object.rs16
-rw-r--r--src/test/ui/nll/issue-52663-trait-object.stderr13
-rw-r--r--src/test/ui/nll/issue-52669.rs17
-rw-r--r--src/test/ui/nll/issue-52669.stderr14
-rw-r--r--src/test/ui/nll/issue-52742.rs17
-rw-r--r--src/test/ui/nll/issue-52742.stderr12
-rw-r--r--src/test/ui/nll/issue-52992.rs25
-rw-r--r--src/test/ui/nll/issue-53040.rs5
-rw-r--r--src/test/ui/nll/issue-53040.stderr17
-rw-r--r--src/test/ui/nll/issue-53119.rs23
-rw-r--r--src/test/ui/nll/issue-53123-raw-pointer-cast.rs26
-rw-r--r--src/test/ui/nll/issue-53570.rs32
-rw-r--r--src/test/ui/nll/issue-53773.rs47
-rw-r--r--src/test/ui/nll/issue-53773.stderr14
-rw-r--r--src/test/ui/nll/issue-53807.rs8
-rw-r--r--src/test/ui/nll/issue-53807.stderr15
-rw-r--r--src/test/ui/nll/issue-54382-use-span-of-tail-of-block.rs29
-rw-r--r--src/test/ui/nll/issue-54382-use-span-of-tail-of-block.stderr23
-rw-r--r--src/test/ui/nll/issue-54556-niconii.rs31
-rw-r--r--src/test/ui/nll/issue-54556-niconii.stderr23
-rw-r--r--src/test/ui/nll/issue-54556-stephaneyfx.rs35
-rw-r--r--src/test/ui/nll/issue-54556-stephaneyfx.stderr24
-rw-r--r--src/test/ui/nll/issue-54556-temps-in-tail-diagnostic.rs23
-rw-r--r--src/test/ui/nll/issue-54556-temps-in-tail-diagnostic.stderr22
-rw-r--r--src/test/ui/nll/issue-54556-used-vs-unused-tails.rs56
-rw-r--r--src/test/ui/nll/issue-54556-used-vs-unused-tails.stderr146
-rw-r--r--src/test/ui/nll/issue-54556-wrap-it-up.rs28
-rw-r--r--src/test/ui/nll/issue-54556-wrap-it-up.stderr14
-rw-r--r--src/test/ui/nll/issue-54779-anon-static-lifetime.rs49
-rw-r--r--src/test/ui/nll/issue-54779-anon-static-lifetime.stderr11
-rw-r--r--src/test/ui/nll/issue-54943-3.rs19
-rw-r--r--src/test/ui/nll/issue-54943.rs10
-rw-r--r--src/test/ui/nll/issue-54943.stderr11
-rw-r--r--src/test/ui/nll/issue-55288.rs9
-rw-r--r--src/test/ui/nll/issue-55344.rs14
-rw-r--r--src/test/ui/nll/issue-55394.rs13
-rw-r--r--src/test/ui/nll/issue-55394.stderr12
-rw-r--r--src/test/ui/nll/issue-55401.rs6
-rw-r--r--src/test/ui/nll/issue-55401.stderr11
-rw-r--r--src/test/ui/nll/issue-55511.rs19
-rw-r--r--src/test/ui/nll/issue-55511.stderr15
-rw-r--r--src/test/ui/nll/issue-55651.rs28
-rw-r--r--src/test/ui/nll/issue-55825-const-fn.rs8
-rw-r--r--src/test/ui/nll/issue-55850.rs35
-rw-r--r--src/test/ui/nll/issue-55850.stderr19
-rw-r--r--src/test/ui/nll/issue-57100.rs67
-rw-r--r--src/test/ui/nll/issue-57100.stderr31
-rw-r--r--src/test/ui/nll/issue-57265-return-type-wf-check.rs24
-rw-r--r--src/test/ui/nll/issue-57265-return-type-wf-check.stderr12
-rw-r--r--src/test/ui/nll/issue-57280-1-flipped.rs23
-rw-r--r--src/test/ui/nll/issue-57280-1-flipped.stderr11
-rw-r--r--src/test/ui/nll/issue-57280-1.rs19
-rw-r--r--src/test/ui/nll/issue-57280.rs20
-rw-r--r--src/test/ui/nll/issue-57642-higher-ranked-subtype.rs38
-rw-r--r--src/test/ui/nll/issue-57642-higher-ranked-subtype.stderr31
-rw-r--r--src/test/ui/nll/issue-57843.rs26
-rw-r--r--src/test/ui/nll/issue-57843.stderr11
-rw-r--r--src/test/ui/nll/issue-57960.rs38
-rw-r--r--src/test/ui/nll/issue-57989.rs10
-rw-r--r--src/test/ui/nll/issue-57989.stderr24
-rw-r--r--src/test/ui/nll/issue-58053.rs11
-rw-r--r--src/test/ui/nll/issue-58053.stderr20
-rw-r--r--src/test/ui/nll/issue-58299.rs27
-rw-r--r--src/test/ui/nll/issue-58299.stderr20
-rw-r--r--src/test/ui/nll/issue-61311-normalize.rs34
-rw-r--r--src/test/ui/nll/issue-61320-normalize.rs160
-rw-r--r--src/test/ui/nll/issue-61424.fixed9
-rw-r--r--src/test/ui/nll/issue-61424.rs9
-rw-r--r--src/test/ui/nll/issue-61424.stderr16
-rw-r--r--src/test/ui/nll/issue-62007-assign-const-index.rs32
-rw-r--r--src/test/ui/nll/issue-62007-assign-const-index.stderr27
-rw-r--r--src/test/ui/nll/issue-62007-assign-differing-fields.rs25
-rw-r--r--src/test/ui/nll/issue-62007-assign-differing-fields.stderr27
-rw-r--r--src/test/ui/nll/issue-63154-normalize.rs34
-rw-r--r--src/test/ui/nll/issue-67007-escaping-data.rs24
-rw-r--r--src/test/ui/nll/issue-67007-escaping-data.stderr14
-rw-r--r--src/test/ui/nll/issue-68550.rs15
-rw-r--r--src/test/ui/nll/issue-68550.stderr16
-rw-r--r--src/test/ui/nll/issue-69114-static-mut-ty.rs30
-rw-r--r--src/test/ui/nll/issue-69114-static-mut-ty.stderr27
-rw-r--r--src/test/ui/nll/issue-69114-static-ty.rs9
-rw-r--r--src/test/ui/nll/issue-69114-static-ty.stderr15
-rw-r--r--src/test/ui/nll/issue-73159-rpit-static.rs13
-rw-r--r--src/test/ui/nll/issue-73159-rpit-static.stderr12
-rw-r--r--src/test/ui/nll/issue-78561.rs23
-rw-r--r--src/test/ui/nll/issue-95272.rs15
-rw-r--r--src/test/ui/nll/issue-95272.stderr17
-rw-r--r--src/test/ui/nll/issue-97997.rs16
-rw-r--r--src/test/ui/nll/issue-97997.stderr20
-rw-r--r--src/test/ui/nll/issue-98170.rs25
-rw-r--r--src/test/ui/nll/issue-98170.stderr44
-rw-r--r--src/test/ui/nll/issue-98589-closures-relate-named-regions.rs36
-rw-r--r--src/test/ui/nll/issue-98589-closures-relate-named-regions.stderr61
-rw-r--r--src/test/ui/nll/issue-98693.rs21
-rw-r--r--src/test/ui/nll/issue-98693.stderr14
-rw-r--r--src/test/ui/nll/lint-no-err.rs21
-rw-r--r--src/test/ui/nll/loan_ends_mid_block_pair.rs29
-rw-r--r--src/test/ui/nll/loan_ends_mid_block_pair.stderr15
-rw-r--r--src/test/ui/nll/loan_ends_mid_block_vec.rs30
-rw-r--r--src/test/ui/nll/loan_ends_mid_block_vec.stderr39
-rw-r--r--src/test/ui/nll/local-outlives-static-via-hrtb.rs26
-rw-r--r--src/test/ui/nll/local-outlives-static-via-hrtb.stderr38
-rw-r--r--src/test/ui/nll/lub-if.rs44
-rw-r--r--src/test/ui/nll/lub-if.stderr20
-rw-r--r--src/test/ui/nll/lub-match.rs47
-rw-r--r--src/test/ui/nll/lub-match.stderr20
-rw-r--r--src/test/ui/nll/match-cfg-fake-edges.rs42
-rw-r--r--src/test/ui/nll/match-cfg-fake-edges.stderr38
-rw-r--r--src/test/ui/nll/match-cfg-fake-edges2.rs18
-rw-r--r--src/test/ui/nll/match-cfg-fake-edges2.stderr15
-rw-r--r--src/test/ui/nll/match-guards-always-borrow.rs41
-rw-r--r--src/test/ui/nll/match-guards-always-borrow.stderr13
-rw-r--r--src/test/ui/nll/match-guards-partially-borrow.rs169
-rw-r--r--src/test/ui/nll/match-guards-partially-borrow.stderr87
-rw-r--r--src/test/ui/nll/match-on-borrowed.rs96
-rw-r--r--src/test/ui/nll/match-on-borrowed.stderr52
-rw-r--r--src/test/ui/nll/maybe-initialized-drop-implicit-fragment-drop.rs19
-rw-r--r--src/test/ui/nll/maybe-initialized-drop-implicit-fragment-drop.stderr15
-rw-r--r--src/test/ui/nll/maybe-initialized-drop-uninitialized.rs18
-rw-r--r--src/test/ui/nll/maybe-initialized-drop-with-fragment.rs20
-rw-r--r--src/test/ui/nll/maybe-initialized-drop-with-fragment.stderr14
-rw-r--r--src/test/ui/nll/maybe-initialized-drop-with-uninitialized-fragments.rs22
-rw-r--r--src/test/ui/nll/maybe-initialized-drop-with-uninitialized-fragments.stderr15
-rw-r--r--src/test/ui/nll/maybe-initialized-drop.rs15
-rw-r--r--src/test/ui/nll/maybe-initialized-drop.stderr13
-rw-r--r--src/test/ui/nll/mir_check_cast_closure.rs9
-rw-r--r--src/test/ui/nll/mir_check_cast_closure.stderr15
-rw-r--r--src/test/ui/nll/mir_check_cast_reify.rs39
-rw-r--r--src/test/ui/nll/mir_check_cast_reify.stderr11
-rw-r--r--src/test/ui/nll/mir_check_cast_unsafe_fn.rs11
-rw-r--r--src/test/ui/nll/mir_check_cast_unsafe_fn.stderr11
-rw-r--r--src/test/ui/nll/mir_check_cast_unsize.rs10
-rw-r--r--src/test/ui/nll/mir_check_cast_unsize.stderr15
-rw-r--r--src/test/ui/nll/move-errors.rs117
-rw-r--r--src/test/ui/nll/move-errors.stderr152
-rw-r--r--src/test/ui/nll/move-subpaths-moves-root.rs5
-rw-r--r--src/test/ui/nll/move-subpaths-moves-root.stderr13
-rw-r--r--src/test/ui/nll/mutating_references.rs24
-rw-r--r--src/test/ui/nll/normalization-bounds-error.rs15
-rw-r--r--src/test/ui/nll/normalization-bounds-error.stderr27
-rw-r--r--src/test/ui/nll/normalization-bounds.rs15
-rw-r--r--src/test/ui/nll/outlives-suggestion-more.rs26
-rw-r--r--src/test/ui/nll/outlives-suggestion-more.stderr96
-rw-r--r--src/test/ui/nll/outlives-suggestion-simple.polonius.stderr124
-rw-r--r--src/test/ui/nll/outlives-suggestion-simple.rs75
-rw-r--r--src/test/ui/nll/outlives-suggestion-simple.stderr104
-rw-r--r--src/test/ui/nll/polonius/assignment-kills-loans.rs87
-rw-r--r--src/test/ui/nll/polonius/assignment-to-differing-field.rs49
-rw-r--r--src/test/ui/nll/polonius/assignment-to-differing-field.stderr51
-rw-r--r--src/test/ui/nll/polonius/call-kills-loans.rs23
-rw-r--r--src/test/ui/nll/polonius/issue-46589.rs31
-rw-r--r--src/test/ui/nll/polonius/polonius-smoke-test.rs46
-rw-r--r--src/test/ui/nll/polonius/polonius-smoke-test.stderr43
-rw-r--r--src/test/ui/nll/polonius/storagedead-kills-loans.rs28
-rw-r--r--src/test/ui/nll/polonius/subset-relations.rs29
-rw-r--r--src/test/ui/nll/polonius/subset-relations.stderr14
-rw-r--r--src/test/ui/nll/process_or_insert_default.rs27
-rw-r--r--src/test/ui/nll/projection-return.rs17
-rw-r--r--src/test/ui/nll/promotable-mutable-zst-doesnt-conflict.rs11
-rw-r--r--src/test/ui/nll/promoted-bounds.rs25
-rw-r--r--src/test/ui/nll/promoted-bounds.stderr15
-rw-r--r--src/test/ui/nll/promoted-closure-pair.rs10
-rw-r--r--src/test/ui/nll/promoted-closure-pair.stderr12
-rw-r--r--src/test/ui/nll/promoted-liveness.rs8
-rw-r--r--src/test/ui/nll/rc-loop.rs28
-rw-r--r--src/test/ui/nll/ref-suggestion.rs17
-rw-r--r--src/test/ui/nll/ref-suggestion.stderr48
-rw-r--r--src/test/ui/nll/reference-carried-through-struct-field.rs10
-rw-r--r--src/test/ui/nll/reference-carried-through-struct-field.stderr13
-rw-r--r--src/test/ui/nll/region-ends-after-if-condition.rs32
-rw-r--r--src/test/ui/nll/region-ends-after-if-condition.stderr15
-rw-r--r--src/test/ui/nll/relate_tys/fn-subtype.rs8
-rw-r--r--src/test/ui/nll/relate_tys/fn-subtype.stderr12
-rw-r--r--src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.rs24
-rw-r--r--src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.stderr21
-rw-r--r--src/test/ui/nll/relate_tys/hr-fn-aau-eq-abu.rs23
-rw-r--r--src/test/ui/nll/relate_tys/hr-fn-aba-as-aaa.rs15
-rw-r--r--src/test/ui/nll/relate_tys/impl-fn-ignore-binder-via-bottom.rs34
-rw-r--r--src/test/ui/nll/relate_tys/impl-fn-ignore-binder-via-bottom.stderr29
-rw-r--r--src/test/ui/nll/relate_tys/issue-48071.rs24
-rw-r--r--src/test/ui/nll/relate_tys/opaque-hrtb.rs14
-rw-r--r--src/test/ui/nll/relate_tys/opaque-hrtb.stderr11
-rw-r--r--src/test/ui/nll/relate_tys/trait-hrtb.rs14
-rw-r--r--src/test/ui/nll/relate_tys/trait-hrtb.stderr12
-rw-r--r--src/test/ui/nll/relate_tys/universe-violation.rs15
-rw-r--r--src/test/ui/nll/relate_tys/universe-violation.stderr12
-rw-r--r--src/test/ui/nll/relate_tys/var-appears-twice.rs25
-rw-r--r--src/test/ui/nll/relate_tys/var-appears-twice.stderr14
-rw-r--r--src/test/ui/nll/return-ref-mut-issue-46557.rs8
-rw-r--r--src/test/ui/nll/return-ref-mut-issue-46557.stderr11
-rw-r--r--src/test/ui/nll/return_from_loop.rs35
-rw-r--r--src/test/ui/nll/return_from_loop.stderr15
-rw-r--r--src/test/ui/nll/self-assign-ref-mut.rs20
-rw-r--r--src/test/ui/nll/snocat-regression.rs16
-rw-r--r--src/test/ui/nll/snocat-regression.stderr14
-rw-r--r--src/test/ui/nll/trait-associated-constant.rs31
-rw-r--r--src/test/ui/nll/trait-associated-constant.stderr22
-rw-r--r--src/test/ui/nll/ty-outlives/impl-trait-captures.rs15
-rw-r--r--src/test/ui/nll/ty-outlives/impl-trait-captures.stderr16
-rw-r--r--src/test/ui/nll/ty-outlives/impl-trait-outlives.rs38
-rw-r--r--src/test/ui/nll/ty-outlives/impl-trait-outlives.stderr25
-rw-r--r--src/test/ui/nll/ty-outlives/issue-53789-1.rs87
-rw-r--r--src/test/ui/nll/ty-outlives/issue-53789-2.rs249
-rw-r--r--src/test/ui/nll/ty-outlives/issue-55756.rs37
-rw-r--r--src/test/ui/nll/ty-outlives/projection-body.rs27
-rw-r--r--src/test/ui/nll/ty-outlives/projection-implied-bounds.rs40
-rw-r--r--src/test/ui/nll/ty-outlives/projection-implied-bounds.stderr14
-rw-r--r--src/test/ui/nll/ty-outlives/projection-no-regions-closure.rs55
-rw-r--r--src/test/ui/nll/ty-outlives/projection-no-regions-closure.stderr118
-rw-r--r--src/test/ui/nll/ty-outlives/projection-no-regions-fn.rs40
-rw-r--r--src/test/ui/nll/ty-outlives/projection-no-regions-fn.stderr21
-rw-r--r--src/test/ui/nll/ty-outlives/projection-one-region-closure.rs83
-rw-r--r--src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr155
-rw-r--r--src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.rs84
-rw-r--r--src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr152
-rw-r--r--src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-static-closure.rs88
-rw-r--r--src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-static-closure.stderr114
-rw-r--r--src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs112
-rw-r--r--src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr236
-rw-r--r--src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-bound.rs34
-rw-r--r--src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-bound.stderr12
-rw-r--r--src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-lifetime.rs25
-rw-r--r--src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-lifetime.stderr12
-rw-r--r--src/test/ui/nll/ty-outlives/projection-where-clause-env.rs28
-rw-r--r--src/test/ui/nll/ty-outlives/projection-where-clause-none.rs24
-rw-r--r--src/test/ui/nll/ty-outlives/projection-where-clause-none.stderr14
-rw-r--r--src/test/ui/nll/ty-outlives/projection-where-clause-trait.rs25
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-closure-approximate-lower-bound.rs39
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-closure-approximate-lower-bound.stderr59
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-return-type.rs53
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-return-type.stderr49
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-where-clause.rs82
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-where-clause.stderr122
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-fn-body.rs27
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-fn-body.stderr14
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-fn.rs36
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-fn.stderr25
-rw-r--r--src/test/ui/nll/ty-outlives/ty-param-implied-bounds.rs28
-rw-r--r--src/test/ui/nll/ty-outlives/wf-unreachable.rs52
-rw-r--r--src/test/ui/nll/ty-outlives/wf-unreachable.stderr73
-rw-r--r--src/test/ui/nll/type-alias-free-regions.rs31
-rw-r--r--src/test/ui/nll/type-alias-free-regions.stderr22
-rw-r--r--src/test/ui/nll/type-check-pointer-coercions.rs37
-rw-r--r--src/test/ui/nll/type-check-pointer-coercions.stderr111
-rw-r--r--src/test/ui/nll/type-check-pointer-comparisons.rs31
-rw-r--r--src/test/ui/nll/type-check-pointer-comparisons.stderr98
-rw-r--r--src/test/ui/nll/type-test-universe.rs21
-rw-r--r--src/test/ui/nll/type-test-universe.stderr22
-rw-r--r--src/test/ui/nll/unused-mut-issue-50343.fixed9
-rw-r--r--src/test/ui/nll/unused-mut-issue-50343.rs9
-rw-r--r--src/test/ui/nll/unused-mut-issue-50343.stderr16
-rw-r--r--src/test/ui/nll/user-annotations/adt-brace-enums.rs50
-rw-r--r--src/test/ui/nll/user-annotations/adt-brace-enums.stderr42
-rw-r--r--src/test/ui/nll/user-annotations/adt-brace-structs.rs48
-rw-r--r--src/test/ui/nll/user-annotations/adt-brace-structs.stderr42
-rw-r--r--src/test/ui/nll/user-annotations/adt-nullary-enums.rs69
-rw-r--r--src/test/ui/nll/user-annotations/adt-nullary-enums.stderr45
-rw-r--r--src/test/ui/nll/user-annotations/adt-tuple-enums.rs53
-rw-r--r--src/test/ui/nll/user-annotations/adt-tuple-enums.stderr42
-rw-r--r--src/test/ui/nll/user-annotations/adt-tuple-struct-calls.rs71
-rw-r--r--src/test/ui/nll/user-annotations/adt-tuple-struct-calls.stderr56
-rw-r--r--src/test/ui/nll/user-annotations/adt-tuple-struct.rs48
-rw-r--r--src/test/ui/nll/user-annotations/adt-tuple-struct.stderr42
-rw-r--r--src/test/ui/nll/user-annotations/ascribed-type-wf.rs16
-rw-r--r--src/test/ui/nll/user-annotations/cast_static_lifetime.rs6
-rw-r--r--src/test/ui/nll/user-annotations/cast_static_lifetime.stderr14
-rw-r--r--src/test/ui/nll/user-annotations/closure-substs.polonius.stderr61
-rw-r--r--src/test/ui/nll/user-annotations/closure-substs.rs31
-rw-r--r--src/test/ui/nll/user-annotations/closure-substs.stderr42
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.rs12
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr10
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-inherent-2.rs27
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-inherent-2.stderr50
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-normalize.rs22
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr10
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.rs14
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr10
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.rs14
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr10
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.rs14
-rw-r--r--src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr10
-rw-r--r--src/test/ui/nll/user-annotations/downcast-infer.rs11
-rw-r--r--src/test/ui/nll/user-annotations/dump-adt-brace-struct.rs20
-rw-r--r--src/test/ui/nll/user-annotations/dump-adt-brace-struct.stderr8
-rw-r--r--src/test/ui/nll/user-annotations/dump-fn-method.rs57
-rw-r--r--src/test/ui/nll/user-annotations/dump-fn-method.stderr26
-rw-r--r--src/test/ui/nll/user-annotations/fns.rs48
-rw-r--r--src/test/ui/nll/user-annotations/fns.stderr42
-rw-r--r--src/test/ui/nll/user-annotations/inherent-associated-constants.rs15
-rw-r--r--src/test/ui/nll/user-annotations/inherent-associated-constants.stderr10
-rw-r--r--src/test/ui/nll/user-annotations/issue-54124.rs8
-rw-r--r--src/test/ui/nll/user-annotations/issue-54124.stderr20
-rw-r--r--src/test/ui/nll/user-annotations/issue-54570-bootstrapping.rs30
-rw-r--r--src/test/ui/nll/user-annotations/issue-55219.rs18
-rw-r--r--src/test/ui/nll/user-annotations/issue-55241.rs26
-rw-r--r--src/test/ui/nll/user-annotations/issue-55748-pat-types-constrain-bindings.rs68
-rw-r--r--src/test/ui/nll/user-annotations/issue-55748-pat-types-constrain-bindings.stderr29
-rw-r--r--src/test/ui/nll/user-annotations/issue-57731-ascibed-coupled-types.rs40
-rw-r--r--src/test/ui/nll/user-annotations/issue-57731-ascibed-coupled-types.stderr38
-rw-r--r--src/test/ui/nll/user-annotations/method-call.rs69
-rw-r--r--src/test/ui/nll/user-annotations/method-call.stderr42
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-1.rs63
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-1.stderr46
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-2.rs63
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-2.stderr46
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-3.rs69
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-3.stderr42
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-inherent-1.rs18
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-inherent-1.stderr18
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-inherent-2.rs19
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-inherent-2.stderr33
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-inherent-3.rs18
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-inherent-3.stderr18
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-inherent-4.rs20
-rw-r--r--src/test/ui/nll/user-annotations/method-ufcs-inherent-4.stderr33
-rw-r--r--src/test/ui/nll/user-annotations/normalization.rs10
-rw-r--r--src/test/ui/nll/user-annotations/normalization.stderr13
-rw-r--r--src/test/ui/nll/user-annotations/normalize-self-ty.rs23
-rw-r--r--src/test/ui/nll/user-annotations/pattern_substs_on_brace_enum_variant.rs22
-rw-r--r--src/test/ui/nll/user-annotations/pattern_substs_on_brace_enum_variant.stderr26
-rw-r--r--src/test/ui/nll/user-annotations/pattern_substs_on_brace_struct.rs20
-rw-r--r--src/test/ui/nll/user-annotations/pattern_substs_on_brace_struct.stderr26
-rw-r--r--src/test/ui/nll/user-annotations/pattern_substs_on_tuple_enum_variant.rs22
-rw-r--r--src/test/ui/nll/user-annotations/pattern_substs_on_tuple_enum_variant.stderr26
-rw-r--r--src/test/ui/nll/user-annotations/pattern_substs_on_tuple_struct.rs20
-rw-r--r--src/test/ui/nll/user-annotations/pattern_substs_on_tuple_struct.stderr26
-rw-r--r--src/test/ui/nll/user-annotations/patterns.rs136
-rw-r--r--src/test/ui/nll/user-annotations/patterns.stderr189
-rw-r--r--src/test/ui/nll/user-annotations/promoted-annotation.rs10
-rw-r--r--src/test/ui/nll/user-annotations/promoted-annotation.stderr17
-rw-r--r--src/test/ui/nll/user-annotations/type-annotation-with-hrtb.rs33
-rw-r--r--src/test/ui/nll/user-annotations/type_ascription_static_lifetime.rs7
-rw-r--r--src/test/ui/nll/user-annotations/type_ascription_static_lifetime.stderr14
-rw-r--r--src/test/ui/nll/user-annotations/wf-self-type.rs13
-rw-r--r--src/test/ui/nll/user-annotations/wf-self-type.stderr14
-rw-r--r--src/test/ui/nll/vimwiki-core-regression.rs37
-rw-r--r--src/test/ui/nll/where_clauses_in_functions.rs15
-rw-r--r--src/test/ui/nll/where_clauses_in_functions.stderr14
-rw-r--r--src/test/ui/nll/where_clauses_in_structs.rs15
-rw-r--r--src/test/ui/nll/where_clauses_in_structs.stderr17
542 files changed, 0 insertions, 17608 deletions
diff --git a/src/test/ui/nll/assign-while-to-immutable.rs b/src/test/ui/nll/assign-while-to-immutable.rs
deleted file mode 100644
index c803321b5..000000000
--- a/src/test/ui/nll/assign-while-to-immutable.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-// We used to incorrectly assign to `x` twice when generating MIR for this
-// function, preventing this from compiling.
-
-// check-pass
-
-fn main() {
- let x = while false {
- break;
- };
- let y = 'l: while break 'l {};
-}
diff --git a/src/test/ui/nll/borrow-use-issue-46875.rs b/src/test/ui/nll/borrow-use-issue-46875.rs
deleted file mode 100644
index 42e28b967..000000000
--- a/src/test/ui/nll/borrow-use-issue-46875.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// run-pass
-
-fn vec() {
- let mut _x = vec!['c'];
- let _y = &_x;
- _x = Vec::new();
-}
-
-fn int() {
- let mut _x = 5;
- let _y = &_x;
- _x = 7;
-}
-
-fn main() {
- vec();
- int();
-}
diff --git a/src/test/ui/nll/borrowck-thread-local-static-mut-borrow-outlives-fn.rs b/src/test/ui/nll/borrowck-thread-local-static-mut-borrow-outlives-fn.rs
deleted file mode 100644
index 7d3b00dfc..000000000
--- a/src/test/ui/nll/borrowck-thread-local-static-mut-borrow-outlives-fn.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// run-pass
-//
-// FIXME(#54366) - We probably shouldn't allow #[thread_local] static mut to get a 'static lifetime.
-
-#![feature(thread_local)]
-
-#[thread_local]
-static mut X1: u64 = 0;
-
-struct S1 {
- a: &'static mut u64,
-}
-
-impl S1 {
- fn new(_x: u64) -> S1 {
- S1 {
- a: unsafe { &mut X1 },
- }
- }
-}
-
-fn main() {
- S1::new(0).a;
-}
diff --git a/src/test/ui/nll/borrowed-local-error.rs b/src/test/ui/nll/borrowed-local-error.rs
deleted file mode 100644
index d333356d9..000000000
--- a/src/test/ui/nll/borrowed-local-error.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-fn gimme(x: &(u32,)) -> &u32 {
- &x.0
-}
-
-fn main() {
- let x = gimme({
- let v = (22,);
- &v
- //~^ ERROR `v` does not live long enough [E0597]
- });
- println!("{:?}", x);
-}
diff --git a/src/test/ui/nll/borrowed-local-error.stderr b/src/test/ui/nll/borrowed-local-error.stderr
deleted file mode 100644
index d629caa43..000000000
--- a/src/test/ui/nll/borrowed-local-error.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0597]: `v` does not live long enough
- --> $DIR/borrowed-local-error.rs:8:9
- |
-LL | let x = gimme({
- | ----- borrow later used by call
-LL | let v = (22,);
-LL | &v
- | ^^ borrowed value does not live long enough
-LL |
-LL | });
- | - `v` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/borrowed-match-issue-45045.rs b/src/test/ui/nll/borrowed-match-issue-45045.rs
deleted file mode 100644
index 978eeb868..000000000
--- a/src/test/ui/nll/borrowed-match-issue-45045.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Regression test for issue #45045
-
-enum Xyz {
- A,
- B,
-}
-
-fn main() {
- let mut e = Xyz::A;
- let f = &mut e;
- let g = f;
- match e {
- //~^ cannot use `e` because it was mutably borrowed [E0503]
- Xyz::A => println!("a"),
- Xyz::B => println!("b"),
- };
- *g = Xyz::B;
-}
diff --git a/src/test/ui/nll/borrowed-match-issue-45045.stderr b/src/test/ui/nll/borrowed-match-issue-45045.stderr
deleted file mode 100644
index 9d4682667..000000000
--- a/src/test/ui/nll/borrowed-match-issue-45045.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0503]: cannot use `e` because it was mutably borrowed
- --> $DIR/borrowed-match-issue-45045.rs:12:11
- |
-LL | let f = &mut e;
- | ------ borrow of `e` occurs here
-LL | let g = f;
-LL | match e {
- | ^ use of borrowed `e`
-...
-LL | *g = Xyz::B;
- | ----------- borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0503`.
diff --git a/src/test/ui/nll/borrowed-referent-issue-38899.rs b/src/test/ui/nll/borrowed-referent-issue-38899.rs
deleted file mode 100644
index 1fe133283..000000000
--- a/src/test/ui/nll/borrowed-referent-issue-38899.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Regression test for issue #38899
-
-pub struct Block<'a> {
- current: &'a u8,
- unrelated: &'a u8,
-}
-
-fn bump<'a>(mut block: &mut Block<'a>) {
- let x = &mut block;
- println!("{}", x.current);
- let p: &'a u8 = &*block.current;
- //~^ ERROR cannot borrow `*block.current` as immutable because it is also borrowed as mutable
- drop(x);
- drop(p);
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/borrowed-referent-issue-38899.stderr b/src/test/ui/nll/borrowed-referent-issue-38899.stderr
deleted file mode 100644
index 16588cbcf..000000000
--- a/src/test/ui/nll/borrowed-referent-issue-38899.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0502]: cannot borrow `*block.current` as immutable because it is also borrowed as mutable
- --> $DIR/borrowed-referent-issue-38899.rs:11:21
- |
-LL | let x = &mut block;
- | ---------- mutable borrow occurs here
-LL | println!("{}", x.current);
-LL | let p: &'a u8 = &*block.current;
- | ^^^^^^^^^^^^^^^ immutable borrow occurs here
-LL |
-LL | drop(x);
- | - mutable borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0502`.
diff --git a/src/test/ui/nll/borrowed-temporary-error.rs b/src/test/ui/nll/borrowed-temporary-error.rs
deleted file mode 100644
index 37d0e670d..000000000
--- a/src/test/ui/nll/borrowed-temporary-error.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-fn gimme(x: &(u32,)) -> &u32 {
- &x.0
-}
-
-fn main() {
- let x = gimme({
- let v = 22;
- &(v,)
- //~^ ERROR temporary value dropped while borrowed [E0716]
- });
- println!("{:?}", x);
-}
diff --git a/src/test/ui/nll/borrowed-temporary-error.stderr b/src/test/ui/nll/borrowed-temporary-error.stderr
deleted file mode 100644
index 89781d96f..000000000
--- a/src/test/ui/nll/borrowed-temporary-error.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error[E0716]: temporary value dropped while borrowed
- --> $DIR/borrowed-temporary-error.rs:8:10
- |
-LL | &(v,)
- | ^^^^ creates a temporary value which is freed while still in use
-LL |
-LL | });
- | - temporary value is freed at the end of this statement
-LL | println!("{:?}", x);
- | - borrow later used here
- |
- = note: consider using a `let` binding to create a longer lived value
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0716`.
diff --git a/src/test/ui/nll/borrowed-universal-error-2.rs b/src/test/ui/nll/borrowed-universal-error-2.rs
deleted file mode 100644
index 3f9b2f292..000000000
--- a/src/test/ui/nll/borrowed-universal-error-2.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-fn foo<'a>(x: &'a (u32,)) -> &'a u32 {
- let v = 22;
- &v
- //~^ ERROR cannot return reference to local variable `v` [E0515]
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/borrowed-universal-error-2.stderr b/src/test/ui/nll/borrowed-universal-error-2.stderr
deleted file mode 100644
index 7213ed3ba..000000000
--- a/src/test/ui/nll/borrowed-universal-error-2.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0515]: cannot return reference to local variable `v`
- --> $DIR/borrowed-universal-error-2.rs:3:5
- |
-LL | &v
- | ^^ returns a reference to data owned by the current function
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0515`.
diff --git a/src/test/ui/nll/borrowed-universal-error.rs b/src/test/ui/nll/borrowed-universal-error.rs
deleted file mode 100644
index fc9ffd470..000000000
--- a/src/test/ui/nll/borrowed-universal-error.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-fn gimme(x: &(u32,)) -> &u32 {
- &x.0
-}
-
-fn foo<'a>(x: &'a (u32,)) -> &'a u32 {
- let v = 22;
- gimme(&(v,))
- //~^ ERROR cannot return value referencing temporary value [E0515]
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/borrowed-universal-error.stderr b/src/test/ui/nll/borrowed-universal-error.stderr
deleted file mode 100644
index 88a2d8fcf..000000000
--- a/src/test/ui/nll/borrowed-universal-error.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0515]: cannot return value referencing temporary value
- --> $DIR/borrowed-universal-error.rs:7:5
- |
-LL | gimme(&(v,))
- | ^^^^^^^----^
- | | |
- | | temporary value created here
- | returns a value referencing data owned by the current function
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0515`.
diff --git a/src/test/ui/nll/cannot-move-block-spans.rs b/src/test/ui/nll/cannot-move-block-spans.rs
deleted file mode 100644
index e994fd3d5..000000000
--- a/src/test/ui/nll/cannot-move-block-spans.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Test that the we point to the inner expression when moving out to initialize
-// a variable, and that we don't give a useless suggestion such as &{ *r }.
-
-pub fn deref(r: &String) {
- let x = { *r }; //~ ERROR
- let y = unsafe { *r }; //~ ERROR
- let z = loop { break *r; }; //~ ERROR
-}
-
-pub fn index(arr: [String; 2]) {
- let x = { arr[0] }; //~ ERROR
- let y = unsafe { arr[0] }; //~ ERROR
- let z = loop { break arr[0]; }; //~ ERROR
-}
-
-pub fn additional_statement_cases(r: &String) {
- let x = { let mut u = 0; u += 1; *r }; //~ ERROR
- let y = unsafe { let mut u = 0; u += 1; *r }; //~ ERROR
- let z = loop { let mut u = 0; u += 1; break *r; u += 2; }; //~ ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/cannot-move-block-spans.stderr b/src/test/ui/nll/cannot-move-block-spans.stderr
deleted file mode 100644
index 56a5cdff0..000000000
--- a/src/test/ui/nll/cannot-move-block-spans.stderr
+++ /dev/null
@@ -1,88 +0,0 @@
-error[E0507]: cannot move out of `*r` which is behind a shared reference
- --> $DIR/cannot-move-block-spans.rs:5:15
- |
-LL | let x = { *r };
- | ^^
- | |
- | move occurs because `*r` has type `String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&*r`
-
-error[E0507]: cannot move out of `*r` which is behind a shared reference
- --> $DIR/cannot-move-block-spans.rs:6:22
- |
-LL | let y = unsafe { *r };
- | ^^
- | |
- | move occurs because `*r` has type `String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&*r`
-
-error[E0507]: cannot move out of `*r` which is behind a shared reference
- --> $DIR/cannot-move-block-spans.rs:7:26
- |
-LL | let z = loop { break *r; };
- | ^^
- | |
- | move occurs because `*r` has type `String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&*r`
-
-error[E0508]: cannot move out of type `[String; 2]`, a non-copy array
- --> $DIR/cannot-move-block-spans.rs:11:15
- |
-LL | let x = { arr[0] };
- | ^^^^^^
- | |
- | cannot move out of here
- | move occurs because `arr[_]` has type `String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&arr[0]`
-
-error[E0508]: cannot move out of type `[String; 2]`, a non-copy array
- --> $DIR/cannot-move-block-spans.rs:12:22
- |
-LL | let y = unsafe { arr[0] };
- | ^^^^^^
- | |
- | cannot move out of here
- | move occurs because `arr[_]` has type `String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&arr[0]`
-
-error[E0508]: cannot move out of type `[String; 2]`, a non-copy array
- --> $DIR/cannot-move-block-spans.rs:13:26
- |
-LL | let z = loop { break arr[0]; };
- | ^^^^^^
- | |
- | cannot move out of here
- | move occurs because `arr[_]` has type `String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&arr[0]`
-
-error[E0507]: cannot move out of `*r` which is behind a shared reference
- --> $DIR/cannot-move-block-spans.rs:17:38
- |
-LL | let x = { let mut u = 0; u += 1; *r };
- | ^^
- | |
- | move occurs because `*r` has type `String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&*r`
-
-error[E0507]: cannot move out of `*r` which is behind a shared reference
- --> $DIR/cannot-move-block-spans.rs:18:45
- |
-LL | let y = unsafe { let mut u = 0; u += 1; *r };
- | ^^
- | |
- | move occurs because `*r` has type `String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&*r`
-
-error[E0507]: cannot move out of `*r` which is behind a shared reference
- --> $DIR/cannot-move-block-spans.rs:19:49
- |
-LL | let z = loop { let mut u = 0; u += 1; break *r; u += 2; };
- | ^^
- | |
- | move occurs because `*r` has type `String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&*r`
-
-error: aborting due to 9 previous errors
-
-Some errors have detailed explanations: E0507, E0508.
-For more information about an error, try `rustc --explain E0507`.
diff --git a/src/test/ui/nll/capture-mut-ref.fixed b/src/test/ui/nll/capture-mut-ref.fixed
deleted file mode 100644
index 2dacb26b6..000000000
--- a/src/test/ui/nll/capture-mut-ref.fixed
+++ /dev/null
@@ -1,16 +0,0 @@
-// run-rustfix
-
-// Check that capturing a mutable reference by move and assigning to its
-// referent doesn't make the unused mut lint think that it is mutable.
-
-#![deny(unused_mut)]
-
-pub fn mutable_upvar() {
- let x = &mut 0;
- //~^ ERROR
- let _ = move || {
- *x = 1;
- };
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/capture-mut-ref.rs b/src/test/ui/nll/capture-mut-ref.rs
deleted file mode 100644
index 56e01f7b7..000000000
--- a/src/test/ui/nll/capture-mut-ref.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// run-rustfix
-
-// Check that capturing a mutable reference by move and assigning to its
-// referent doesn't make the unused mut lint think that it is mutable.
-
-#![deny(unused_mut)]
-
-pub fn mutable_upvar() {
- let mut x = &mut 0;
- //~^ ERROR
- let _ = move || {
- *x = 1;
- };
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/capture-mut-ref.stderr b/src/test/ui/nll/capture-mut-ref.stderr
deleted file mode 100644
index 4898d5692..000000000
--- a/src/test/ui/nll/capture-mut-ref.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error: variable does not need to be mutable
- --> $DIR/capture-mut-ref.rs:9:9
- |
-LL | let mut x = &mut 0;
- | ----^
- | |
- | help: remove this `mut`
- |
-note: the lint level is defined here
- --> $DIR/capture-mut-ref.rs:6:9
- |
-LL | #![deny(unused_mut)]
- | ^^^^^^^^^^
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/capture-ref-in-struct.rs b/src/test/ui/nll/capture-ref-in-struct.rs
deleted file mode 100644
index db6ac7d66..000000000
--- a/src/test/ui/nll/capture-ref-in-struct.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Test that a structure which tries to store a pointer to `y` into
-// `p` (indirectly) fails to compile.
-
-struct SomeStruct<'a, 'b: 'a> {
- p: &'a mut &'b i32,
- y: &'b i32,
-}
-
-fn test() {
- let x = 44;
- let mut p = &x;
-
- {
- let y = 22;
-
- let closure = SomeStruct {
- p: &mut p,
- y: &y,
- //~^ ERROR `y` does not live long enough [E0597]
- };
-
- closure.invoke();
- }
-
- deref(p);
-}
-
-impl<'a, 'b> SomeStruct<'a, 'b> {
- fn invoke(self) {
- *self.p = self.y;
- }
-}
-
-fn deref(_: &i32) { }
-
-fn main() { }
diff --git a/src/test/ui/nll/capture-ref-in-struct.stderr b/src/test/ui/nll/capture-ref-in-struct.stderr
deleted file mode 100644
index cdfe7f6db..000000000
--- a/src/test/ui/nll/capture-ref-in-struct.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0597]: `y` does not live long enough
- --> $DIR/capture-ref-in-struct.rs:18:16
- |
-LL | y: &y,
- | ^^ borrowed value does not live long enough
-...
-LL | }
- | - `y` dropped here while still borrowed
-LL |
-LL | deref(p);
- | - borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/closure-access-spans.rs b/src/test/ui/nll/closure-access-spans.rs
deleted file mode 100644
index 2a59e80b2..000000000
--- a/src/test/ui/nll/closure-access-spans.rs
+++ /dev/null
@@ -1,56 +0,0 @@
-// check that accesses due to a closure capture give a special note
-
-fn closure_imm_capture_conflict(mut x: i32) {
- let r = &mut x;
- || x; //~ ERROR
- r.use_mut();
-}
-
-fn closure_mut_capture_conflict(mut x: i32) {
- let r = &mut x;
- || x = 2; //~ ERROR
- r.use_mut();
-}
-
-fn closure_unique_capture_conflict(mut x: &mut i32) {
- let r = &mut x;
- || *x = 2; //~ ERROR
- r.use_mut();
-}
-
-fn closure_copy_capture_conflict(mut x: i32) {
- let r = &mut x;
- move || x; //~ ERROR
- r.use_ref();
-}
-
-fn closure_move_capture_conflict(mut x: String) {
- let r = &x;
- || x; //~ ERROR
- r.use_ref();
-}
-
-fn closure_imm_capture_moved(mut x: String) {
- let r = x;
- || x.len(); //~ ERROR
-}
-
-fn closure_mut_capture_moved(mut x: String) {
- let r = x;
- || x = String::new(); //~ ERROR
-}
-
-fn closure_unique_capture_moved(x: &mut String) {
- let r = x;
- || *x = String::new(); //~ ERROR
-}
-
-fn closure_move_capture_moved(x: &mut String) {
- let r = x;
- || x; //~ ERROR
-}
-
-fn main() {}
-
-trait Fake { fn use_mut(&mut self) { } fn use_ref(&self) { } }
-impl<T> Fake for T { }
diff --git a/src/test/ui/nll/closure-access-spans.stderr b/src/test/ui/nll/closure-access-spans.stderr
deleted file mode 100644
index 0a09353b8..000000000
--- a/src/test/ui/nll/closure-access-spans.stderr
+++ /dev/null
@@ -1,120 +0,0 @@
-error[E0502]: cannot borrow `x` as immutable because it is also borrowed as mutable
- --> $DIR/closure-access-spans.rs:5:5
- |
-LL | let r = &mut x;
- | ------ mutable borrow occurs here
-LL | || x;
- | ^^ - second borrow occurs due to use of `x` in closure
- | |
- | immutable borrow occurs here
-LL | r.use_mut();
- | ----------- mutable borrow later used here
-
-error[E0499]: cannot borrow `x` as mutable more than once at a time
- --> $DIR/closure-access-spans.rs:11:5
- |
-LL | let r = &mut x;
- | ------ first mutable borrow occurs here
-LL | || x = 2;
- | ^^ - second borrow occurs due to use of `x` in closure
- | |
- | second mutable borrow occurs here
-LL | r.use_mut();
- | ----------- first borrow later used here
-
-error[E0500]: closure requires unique access to `x` but it is already borrowed
- --> $DIR/closure-access-spans.rs:17:5
- |
-LL | let r = &mut x;
- | ------ borrow occurs here
-LL | || *x = 2;
- | ^^ -- second borrow occurs due to use of `x` in closure
- | |
- | closure construction occurs here
-LL | r.use_mut();
- | ----------- first borrow later used here
-
-error[E0503]: cannot use `x` because it was mutably borrowed
- --> $DIR/closure-access-spans.rs:23:13
- |
-LL | let r = &mut x;
- | ------ borrow of `x` occurs here
-LL | move || x;
- | ^ use of borrowed `x`
-LL | r.use_ref();
- | ----------- borrow later used here
-
-error[E0505]: cannot move out of `x` because it is borrowed
- --> $DIR/closure-access-spans.rs:29:5
- |
-LL | let r = &x;
- | -- borrow of `x` occurs here
-LL | || x;
- | ^^ - move occurs due to use in closure
- | |
- | move out of `x` occurs here
-LL | r.use_ref();
- | ----------- borrow later used here
-
-error[E0382]: borrow of moved value: `x`
- --> $DIR/closure-access-spans.rs:35:5
- |
-LL | fn closure_imm_capture_moved(mut x: String) {
- | ----- move occurs because `x` has type `String`, which does not implement the `Copy` trait
-LL | let r = x;
- | - value moved here
-LL | || x.len();
- | ^^ - borrow occurs due to use in closure
- | |
- | value borrowed here after move
- |
-help: consider cloning the value if the performance cost is acceptable
- |
-LL | let r = x.clone();
- | ++++++++
-
-error[E0382]: borrow of moved value: `x`
- --> $DIR/closure-access-spans.rs:40:5
- |
-LL | fn closure_mut_capture_moved(mut x: String) {
- | ----- move occurs because `x` has type `String`, which does not implement the `Copy` trait
-LL | let r = x;
- | - value moved here
-LL | || x = String::new();
- | ^^ - borrow occurs due to use in closure
- | |
- | value borrowed here after move
- |
-help: consider cloning the value if the performance cost is acceptable
- |
-LL | let r = x.clone();
- | ++++++++
-
-error[E0382]: borrow of moved value: `x`
- --> $DIR/closure-access-spans.rs:45:5
- |
-LL | fn closure_unique_capture_moved(x: &mut String) {
- | - move occurs because `x` has type `&mut String`, which does not implement the `Copy` trait
-LL | let r = x;
- | - value moved here
-LL | || *x = String::new();
- | ^^ -- borrow occurs due to use in closure
- | |
- | value borrowed here after move
-
-error[E0382]: use of moved value: `x`
- --> $DIR/closure-access-spans.rs:50:5
- |
-LL | fn closure_move_capture_moved(x: &mut String) {
- | - move occurs because `x` has type `&mut String`, which does not implement the `Copy` trait
-LL | let r = x;
- | - value moved here
-LL | || x;
- | ^^ - use occurs due to use in closure
- | |
- | value used here after move
-
-error: aborting due to 9 previous errors
-
-Some errors have detailed explanations: E0382, E0499, E0500, E0502, E0503, E0505.
-For more information about an error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/closure-borrow-spans.rs b/src/test/ui/nll/closure-borrow-spans.rs
deleted file mode 100644
index b38f7900e..000000000
--- a/src/test/ui/nll/closure-borrow-spans.rs
+++ /dev/null
@@ -1,100 +0,0 @@
-// check that existing borrows due to a closure capture give a special note
-
-fn move_while_borrowed(x: String) {
- let f = || x.len();
- let y = x; //~ ERROR
- f.use_ref();
-}
-
-fn borrow_mut_while_borrowed(mut x: i32) {
- let f = || x;
- let y = &mut x; //~ ERROR
- f.use_ref();
-}
-
-fn drop_while_borrowed() {
- let f;
- {
- let x = 1;
- f = || x; //~ ERROR
- }
- f.use_ref();
-}
-
-fn assign_while_borrowed(mut x: i32) {
- let f = || x;
- x = 1; //~ ERROR
- f.use_ref();
-}
-
-fn copy_while_borrowed_mut(mut x: i32) {
- let f = || x = 0;
- let y = x; //~ ERROR
- f.use_ref();
-}
-
-fn borrow_while_borrowed_mut(mut x: i32) {
- let f = || x = 0;
- let y = &x; //~ ERROR
- f.use_ref();
-}
-
-fn borrow_mut_while_borrowed_mut(mut x: i32) {
- let f = || x = 0;
- let y = &mut x; //~ ERROR
- f.use_ref();
-}
-
-fn drop_while_borrowed_mut() {
- let f;
- {
- let mut x = 1;
- f = || x = 0; //~ ERROR
- }
- f.use_ref();
-}
-
-fn assign_while_borrowed_mut(mut x: i32) {
- let f = || x = 0;
- x = 1; //~ ERROR
- f.use_ref();
-}
-
-fn copy_while_borrowed_unique(x: &mut i32) {
- let f = || *x = 0;
- let y = x; //~ ERROR
- f.use_ref();
-}
-
-fn borrow_while_borrowed_unique(x: &mut i32) {
- let f = || *x = 0;
- let y = &x; //~ ERROR
- f.use_ref();
-}
-
-fn borrow_mut_while_borrowed_unique(mut x: &mut i32) {
- let f = || *x = 0;
- let y = &mut x; //~ ERROR
- f.use_ref();
-}
-
-fn drop_while_borrowed_unique() {
- let mut z = 1;
- let f;
- {
- let x = &mut z;
- f = || *x = 0; //~ ERROR
- }
- f.use_ref();
-}
-
-fn assign_while_borrowed_unique(x: &mut i32) {
- let f = || *x = 0;
- *x = 1; //~ ERROR
- f.use_ref();
-}
-
-fn main() {}
-
-trait Fake { fn use_mut(&mut self) { } fn use_ref(&self) { } }
-impl<T> Fake for T { }
diff --git a/src/test/ui/nll/closure-borrow-spans.stderr b/src/test/ui/nll/closure-borrow-spans.stderr
deleted file mode 100644
index bada4e1b8..000000000
--- a/src/test/ui/nll/closure-borrow-spans.stderr
+++ /dev/null
@@ -1,172 +0,0 @@
-error[E0505]: cannot move out of `x` because it is borrowed
- --> $DIR/closure-borrow-spans.rs:5:13
- |
-LL | let f = || x.len();
- | -- - borrow occurs due to use in closure
- | |
- | borrow of `x` occurs here
-LL | let y = x;
- | ^ move out of `x` occurs here
-LL | f.use_ref();
- | ----------- borrow later used here
-
-error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
- --> $DIR/closure-borrow-spans.rs:11:13
- |
-LL | let f = || x;
- | -- - first borrow occurs due to use of `x` in closure
- | |
- | immutable borrow occurs here
-LL | let y = &mut x;
- | ^^^^^^ mutable borrow occurs here
-LL | f.use_ref();
- | ----------- immutable borrow later used here
-
-error[E0597]: `x` does not live long enough
- --> $DIR/closure-borrow-spans.rs:19:16
- |
-LL | f = || x;
- | -- ^ borrowed value does not live long enough
- | |
- | value captured here
-LL | }
- | - `x` dropped here while still borrowed
-LL | f.use_ref();
- | ----------- borrow later used here
-
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/closure-borrow-spans.rs:26:5
- |
-LL | let f = || x;
- | -- - borrow occurs due to use in closure
- | |
- | borrow of `x` occurs here
-LL | x = 1;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | f.use_ref();
- | ----------- borrow later used here
-
-error[E0503]: cannot use `x` because it was mutably borrowed
- --> $DIR/closure-borrow-spans.rs:32:13
- |
-LL | let f = || x = 0;
- | -- - borrow occurs due to use of `x` in closure
- | |
- | borrow of `x` occurs here
-LL | let y = x;
- | ^ use of borrowed `x`
-LL | f.use_ref();
- | ----------- borrow later used here
-
-error[E0502]: cannot borrow `x` as immutable because it is also borrowed as mutable
- --> $DIR/closure-borrow-spans.rs:38:13
- |
-LL | let f = || x = 0;
- | -- - first borrow occurs due to use of `x` in closure
- | |
- | mutable borrow occurs here
-LL | let y = &x;
- | ^^ immutable borrow occurs here
-LL | f.use_ref();
- | ----------- mutable borrow later used here
-
-error[E0499]: cannot borrow `x` as mutable more than once at a time
- --> $DIR/closure-borrow-spans.rs:44:13
- |
-LL | let f = || x = 0;
- | -- - first borrow occurs due to use of `x` in closure
- | |
- | first mutable borrow occurs here
-LL | let y = &mut x;
- | ^^^^^^ second mutable borrow occurs here
-LL | f.use_ref();
- | ----------- first borrow later used here
-
-error[E0597]: `x` does not live long enough
- --> $DIR/closure-borrow-spans.rs:52:16
- |
-LL | f = || x = 0;
- | -- ^ borrowed value does not live long enough
- | |
- | value captured here
-LL | }
- | - `x` dropped here while still borrowed
-LL | f.use_ref();
- | ----------- borrow later used here
-
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/closure-borrow-spans.rs:59:5
- |
-LL | let f = || x = 0;
- | -- - borrow occurs due to use in closure
- | |
- | borrow of `x` occurs here
-LL | x = 1;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | f.use_ref();
- | ----------- borrow later used here
-
-error[E0505]: cannot move out of `x` because it is borrowed
- --> $DIR/closure-borrow-spans.rs:65:13
- |
-LL | let f = || *x = 0;
- | -- -- borrow occurs due to use in closure
- | |
- | borrow of `x` occurs here
-LL | let y = x;
- | ^ move out of `x` occurs here
-LL | f.use_ref();
- | ----------- borrow later used here
-
-error[E0501]: cannot borrow `x` as immutable because previous closure requires unique access
- --> $DIR/closure-borrow-spans.rs:71:13
- |
-LL | let f = || *x = 0;
- | -- -- first borrow occurs due to use of `x` in closure
- | |
- | closure construction occurs here
-LL | let y = &x;
- | ^^ second borrow occurs here
-LL | f.use_ref();
- | ----------- first borrow later used here
-
-error[E0501]: cannot borrow `x` as mutable because previous closure requires unique access
- --> $DIR/closure-borrow-spans.rs:77:13
- |
-LL | let f = || *x = 0;
- | -- -- first borrow occurs due to use of `x` in closure
- | |
- | closure construction occurs here
-LL | let y = &mut x;
- | ^^^^^^ second borrow occurs here
-LL | f.use_ref();
- | ----------- first borrow later used here
-
-error[E0597]: `x` does not live long enough
- --> $DIR/closure-borrow-spans.rs:86:16
- |
-LL | f = || *x = 0;
- | -- ^^ borrowed value does not live long enough
- | |
- | value captured here
-LL | }
- | - `x` dropped here while still borrowed
-LL | f.use_ref();
- | ----------- borrow later used here
-
-error[E0506]: cannot assign to `*x` because it is borrowed
- --> $DIR/closure-borrow-spans.rs:93:5
- |
-LL | let f = || *x = 0;
- | -- -- borrow occurs due to use in closure
- | |
- | borrow of `*x` occurs here
-LL | *x = 1;
- | ^^^^^^ assignment to borrowed `*x` occurs here
-LL | f.use_ref();
- | ----------- borrow later used here
-
-error: aborting due to 14 previous errors
-
-Some errors have detailed explanations: E0499, E0501, E0502, E0503, E0505, E0506, E0597.
-For more information about an error, try `rustc --explain E0499`.
diff --git a/src/test/ui/nll/closure-captures.rs b/src/test/ui/nll/closure-captures.rs
deleted file mode 100644
index 16d90b971..000000000
--- a/src/test/ui/nll/closure-captures.rs
+++ /dev/null
@@ -1,55 +0,0 @@
-// Some cases with closures that might be problems
-
-// Should have one error per assignment
-
-fn one_closure(x: i32) {
- ||
- x = 1; //~ ERROR
- move ||
- x = 1; //~ ERROR
-}
-
-fn two_closures(x: i32) {
- || {
- ||
- x = 1; //~ ERROR
- };
- move || {
- ||
- x = 1; //~ ERROR
- };
-}
-
-fn fn_ref<F: Fn()>(f: F) -> F { f }
-
-fn two_closures_ref_mut(mut x: i32) {
- fn_ref(|| {
- || //~ ERROR
- x = 1;}
- );
- fn_ref(move || {
- || //~ ERROR
- x = 1;});
-}
-
-// This still gives two messages, but it requires two things to be fixed.
-fn two_closures_ref(x: i32) {
- fn_ref(|| {
- || //~ ERROR
- x = 1;} //~ ERROR
- );
- fn_ref(move || {
- || //~ ERROR
- x = 1;}); //~ ERROR
-}
-
-fn two_closures_two_refs(x: &mut i32) {
- fn_ref(|| {
- || //~ ERROR
- *x = 1;});
- fn_ref(move || {
- || //~ ERROR
- *x = 1;});
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-captures.stderr b/src/test/ui/nll/closure-captures.stderr
deleted file mode 100644
index 5233f0b24..000000000
--- a/src/test/ui/nll/closure-captures.stderr
+++ /dev/null
@@ -1,148 +0,0 @@
-error[E0594]: cannot assign to `x`, as it is not declared as mutable
- --> $DIR/closure-captures.rs:7:5
- |
-LL | fn one_closure(x: i32) {
- | - help: consider changing this to be mutable: `mut x`
-LL | ||
-LL | x = 1;
- | ^^^^^ cannot assign
-
-error[E0594]: cannot assign to `x`, as it is not declared as mutable
- --> $DIR/closure-captures.rs:9:5
- |
-LL | fn one_closure(x: i32) {
- | - help: consider changing this to be mutable: `mut x`
-...
-LL | x = 1;
- | ^^^^^ cannot assign
-
-error[E0594]: cannot assign to `x`, as it is not declared as mutable
- --> $DIR/closure-captures.rs:15:9
- |
-LL | fn two_closures(x: i32) {
- | - help: consider changing this to be mutable: `mut x`
-...
-LL | x = 1;
- | ^^^^^ cannot assign
-
-error[E0594]: cannot assign to `x`, as it is not declared as mutable
- --> $DIR/closure-captures.rs:19:9
- |
-LL | fn two_closures(x: i32) {
- | - help: consider changing this to be mutable: `mut x`
-...
-LL | x = 1;
- | ^^^^^ cannot assign
-
-error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
- --> $DIR/closure-captures.rs:27:9
- |
-LL | fn fn_ref<F: Fn()>(f: F) -> F { f }
- | - change this to accept `FnMut` instead of `Fn`
-...
-LL | fn_ref(|| {
- | ------ -- in this closure
- | |
- | expects `Fn` instead of `FnMut`
-LL | ||
- | ^^ cannot borrow as mutable
-LL | x = 1;}
- | - mutable borrow occurs due to use of `x` in closure
-
-error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
- --> $DIR/closure-captures.rs:31:9
- |
-LL | fn fn_ref<F: Fn()>(f: F) -> F { f }
- | - change this to accept `FnMut` instead of `Fn`
-...
-LL | fn_ref(move || {
- | ------ ------- in this closure
- | |
- | expects `Fn` instead of `FnMut`
-LL | ||
- | ^^ cannot borrow as mutable
-LL | x = 1;});
- | - mutable borrow occurs due to use of `x` in closure
-
-error[E0594]: cannot assign to `x`, as it is not declared as mutable
- --> $DIR/closure-captures.rs:39:10
- |
-LL | fn two_closures_ref(x: i32) {
- | - help: consider changing this to be mutable: `mut x`
-...
-LL | x = 1;}
- | ^^^^^ cannot assign
-
-error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
- --> $DIR/closure-captures.rs:38:9
- |
-LL | fn fn_ref<F: Fn()>(f: F) -> F { f }
- | - change this to accept `FnMut` instead of `Fn`
-...
-LL | fn_ref(|| {
- | ------ -- in this closure
- | |
- | expects `Fn` instead of `FnMut`
-LL | ||
- | ^^ cannot borrow as mutable
-LL | x = 1;}
- | - mutable borrow occurs due to use of `x` in closure
-
-error[E0594]: cannot assign to `x`, as it is not declared as mutable
- --> $DIR/closure-captures.rs:43:5
- |
-LL | fn two_closures_ref(x: i32) {
- | - help: consider changing this to be mutable: `mut x`
-...
-LL | x = 1;});
- | ^^^^^ cannot assign
-
-error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
- --> $DIR/closure-captures.rs:42:9
- |
-LL | fn fn_ref<F: Fn()>(f: F) -> F { f }
- | - change this to accept `FnMut` instead of `Fn`
-...
-LL | fn_ref(move || {
- | ------ ------- in this closure
- | |
- | expects `Fn` instead of `FnMut`
-LL | ||
- | ^^ cannot borrow as mutable
-LL | x = 1;});
- | - mutable borrow occurs due to use of `x` in closure
-
-error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
- --> $DIR/closure-captures.rs:48:9
- |
-LL | fn fn_ref<F: Fn()>(f: F) -> F { f }
- | - change this to accept `FnMut` instead of `Fn`
-...
-LL | fn_ref(|| {
- | ------ -- in this closure
- | |
- | expects `Fn` instead of `FnMut`
-LL | ||
- | ^^ cannot borrow as mutable
-LL | *x = 1;});
- | -- mutable borrow occurs due to use of `x` in closure
-
-error[E0596]: cannot borrow `x` as mutable, as it is a captured variable in a `Fn` closure
- --> $DIR/closure-captures.rs:51:9
- |
-LL | fn fn_ref<F: Fn()>(f: F) -> F { f }
- | - change this to accept `FnMut` instead of `Fn`
-...
-LL | fn_ref(move || {
- | ------ ------- in this closure
- | |
- | expects `Fn` instead of `FnMut`
-LL | ||
- | ^^ cannot borrow as mutable
-LL | *x = 1;});
- | -- mutable borrow occurs due to use of `x` in closure
-
-error: aborting due to 12 previous errors
-
-Some errors have detailed explanations: E0594, E0596.
-For more information about an error, try `rustc --explain E0594`.
diff --git a/src/test/ui/nll/closure-malformed-projection-input-issue-102800.rs b/src/test/ui/nll/closure-malformed-projection-input-issue-102800.rs
deleted file mode 100644
index 25f47f5b6..000000000
--- a/src/test/ui/nll/closure-malformed-projection-input-issue-102800.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Regression test for #102800
-//
-// Here we are generating higher-ranked region constraints when normalizing and relating closure
-// input types. Previously this was an ICE in the error path because we didn't register enough
-// diagnostic information to render the higher-ranked subtyping error.
-
-// check-fail
-
-trait Trait {
- type Ty;
-}
-
-impl Trait for &'static () {
- type Ty = ();
-}
-
-fn main() {
- let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- //~^ ERROR lifetime may not live long enough
- //~| ERROR higher-ranked subtype error
- //~| ERROR higher-ranked subtype error
- //~| ERROR implementation of `Trait` is not general enough
- //~| ERROR implementation of `Trait` is not general enough
- //~| ERROR implementation of `Trait` is not general enough
- //~| ERROR implementation of `Trait` is not general enough
- //~| ERROR implementation of `Trait` is not general enough
- //~| ERROR implementation of `Trait` is not general enough
- //~| ERROR implementation of `Trait` is not general enough
- //~| ERROR implementation of `Trait` is not general enough
- //~| ERROR implementation of `Trait` is not general enough
-}
diff --git a/src/test/ui/nll/closure-malformed-projection-input-issue-102800.stderr b/src/test/ui/nll/closure-malformed-projection-input-issue-102800.stderr
deleted file mode 100644
index dbd5dabd1..000000000
--- a/src/test/ui/nll/closure-malformed-projection-input-issue-102800.stderr
+++ /dev/null
@@ -1,104 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:48
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^-^
- | ||
- | |has type `<&'1 () as Trait>::Ty`
- | requires that `'1` must outlive `'static`
-
-error: higher-ranked subtype error
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:48
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^
-
-error: higher-ranked subtype error
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:48
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^
-
-error: implementation of `Trait` is not general enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:48
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^^^^ implementation of `Trait` is not general enough
- |
- = note: `&'0 ()` must implement `Trait`, for any lifetime `'0`...
- = note: ...but `Trait` is actually implemented for the type `&'static ()`
-
-error: implementation of `Trait` is not general enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:12
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Trait` is not general enough
- |
- = note: `&'0 ()` must implement `Trait`, for any lifetime `'0`...
- = note: ...but `Trait` is actually implemented for the type `&'static ()`
-
-error: implementation of `Trait` is not general enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:12
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Trait` is not general enough
- |
- = note: `&'0 ()` must implement `Trait`, for any lifetime `'0`...
- = note: ...but `Trait` is actually implemented for the type `&'static ()`
-
-error: implementation of `Trait` is not general enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:12
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Trait` is not general enough
- |
- = note: `&'0 ()` must implement `Trait`, for any lifetime `'0`...
- = note: ...but `Trait` is actually implemented for the type `&'static ()`
-
-error: implementation of `Trait` is not general enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:12
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Trait` is not general enough
- |
- = note: `&'0 ()` must implement `Trait`, for any lifetime `'0`...
- = note: ...but `Trait` is actually implemented for the type `&'static ()`
-
-error: implementation of `Trait` is not general enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:48
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^^^^ implementation of `Trait` is not general enough
- |
- = note: `&'0 ()` must implement `Trait`, for any lifetime `'0`...
- = note: ...but `Trait` is actually implemented for the type `&'static ()`
-
-error: implementation of `Trait` is not general enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:48
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^^^^ implementation of `Trait` is not general enough
- |
- = note: `&'0 ()` must implement `Trait`, for any lifetime `'0`...
- = note: ...but `Trait` is actually implemented for the type `&'static ()`
-
-error: implementation of `Trait` is not general enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:48
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^^^^ implementation of `Trait` is not general enough
- |
- = note: `&'0 ()` must implement `Trait`, for any lifetime `'0`...
- = note: ...but `Trait` is actually implemented for the type `&'static ()`
-
-error: implementation of `Trait` is not general enough
- --> $DIR/closure-malformed-projection-input-issue-102800.rs:18:48
- |
-LL | let _: for<'a> fn(<&'a () as Trait>::Ty) = |_| {};
- | ^^^^^^ implementation of `Trait` is not general enough
- |
- = note: `&'0 ()` must implement `Trait`, for any lifetime `'0`...
- = note: ...but `Trait` is actually implemented for the type `&'static ()`
-
-error: aborting due to 12 previous errors
-
diff --git a/src/test/ui/nll/closure-move-spans.rs b/src/test/ui/nll/closure-move-spans.rs
deleted file mode 100644
index bf2431870..000000000
--- a/src/test/ui/nll/closure-move-spans.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// check that moves due to a closure capture give a special note
-
-fn move_after_move(x: String) {
- || x;
- let y = x; //~ ERROR
-}
-
-fn borrow_after_move(x: String) {
- || x;
- let y = &x; //~ ERROR
-}
-
-fn borrow_mut_after_move(mut x: String) {
- || x;
- let y = &mut x; //~ ERROR
-}
-
-fn fn_ref<F: Fn()>(f: F) -> F { f }
-fn fn_mut<F: FnMut()>(f: F) -> F { f }
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-move-spans.stderr b/src/test/ui/nll/closure-move-spans.stderr
deleted file mode 100644
index 0446ef7b0..000000000
--- a/src/test/ui/nll/closure-move-spans.stderr
+++ /dev/null
@@ -1,39 +0,0 @@
-error[E0382]: use of moved value: `x`
- --> $DIR/closure-move-spans.rs:5:13
- |
-LL | fn move_after_move(x: String) {
- | - move occurs because `x` has type `String`, which does not implement the `Copy` trait
-LL | || x;
- | -- - variable moved due to use in closure
- | |
- | value moved into closure here
-LL | let y = x;
- | ^ value used here after move
-
-error[E0382]: borrow of moved value: `x`
- --> $DIR/closure-move-spans.rs:10:13
- |
-LL | fn borrow_after_move(x: String) {
- | - move occurs because `x` has type `String`, which does not implement the `Copy` trait
-LL | || x;
- | -- - variable moved due to use in closure
- | |
- | value moved into closure here
-LL | let y = &x;
- | ^^ value borrowed here after move
-
-error[E0382]: borrow of moved value: `x`
- --> $DIR/closure-move-spans.rs:15:13
- |
-LL | fn borrow_mut_after_move(mut x: String) {
- | ----- move occurs because `x` has type `String`, which does not implement the `Copy` trait
-LL | || x;
- | -- - variable moved due to use in closure
- | |
- | value moved into closure here
-LL | let y = &mut x;
- | ^^^^^^ value borrowed here after move
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/closure-requirements/escape-argument-callee.rs b/src/test/ui/nll/closure-requirements/escape-argument-callee.rs
deleted file mode 100644
index 3aea511b0..000000000
--- a/src/test/ui/nll/closure-requirements/escape-argument-callee.rs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Test closure that:
-//
-// - takes an argument `y` with lifetime `'a` (in the code, it's anonymous)
-// - stores `y` into another, longer-lived spot with lifetime `'b`
-//
-// Because `'a` and `'b` are two different, unrelated higher-ranked
-// regions with no relationship to one another, this is an error. This
-// error is reported by the closure itself and is not propagated to
-// its creator: this is because `'a` and `'b` are higher-ranked
-// (late-bound) regions and the closure is not allowed to propagate
-// additional where clauses between higher-ranked regions, only those
-// that appear free in its type (hence, we see it before the closure's
-// "external requirements" report).
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-#[rustc_regions]
-fn test() {
- let x = 44;
- let mut p = &x;
-
- {
- let y = 22;
- let mut closure = expect_sig(|p, y| *p = y);
- //~^ ERROR
- closure(&mut p, &y);
- }
-
- deref(p);
-}
-
-fn expect_sig<F>(f: F) -> F
- where F: FnMut(&mut &i32, &i32)
-{
- f
-}
-
-fn deref(_p: &i32) { }
-
-fn main() { }
diff --git a/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr b/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr
deleted file mode 100644
index 363ddfaff..000000000
--- a/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr
+++ /dev/null
@@ -1,31 +0,0 @@
-note: no external requirements
- --> $DIR/escape-argument-callee.rs:26:38
- |
-LL | let mut closure = expect_sig(|p, y| *p = y);
- | ^^^^^^
- |
- = note: defining type: test::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) mut &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) i32, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) i32)),
- (),
- ]
-
-error: lifetime may not live long enough
- --> $DIR/escape-argument-callee.rs:26:45
- |
-LL | let mut closure = expect_sig(|p, y| *p = y);
- | - - ^^^^^^ assignment requires that `'1` must outlive `'2`
- | | |
- | | has type `&'1 i32`
- | has type `&'_#2r mut &'2 i32`
-
-note: no external requirements
- --> $DIR/escape-argument-callee.rs:20:1
- |
-LL | fn test() {
- | ^^^^^^^^^
- |
- = note: defining type: test
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-requirements/escape-argument.rs b/src/test/ui/nll/closure-requirements/escape-argument.rs
deleted file mode 100644
index 066cd4360..000000000
--- a/src/test/ui/nll/closure-requirements/escape-argument.rs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Test closure that:
-//
-// - takes an argument `y`
-// - stores `y` into another, longer-lived spot
-//
-// but is invoked with a spot that doesn't live long
-// enough to store `y`.
-//
-// The error is reported in the caller: invoking the closure links the
-// lifetime of the variable that is given as `y` (via subtyping) and
-// thus forces the corresponding borrow to live too long. This is
-// basically checking that the MIR type checker correctly enforces the
-// closure signature.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-#[rustc_regions]
-fn test() {
- let x = 44;
- let mut p = &x;
-
- {
- let y = 22;
- let mut closure = expect_sig(|p, y| *p = y);
- closure(&mut p, &y);
- //~^ ERROR `y` does not live long enough [E0597]
- }
-
- deref(p);
-}
-
-fn expect_sig<F>(f: F) -> F
- where F: for<'a, 'b> FnMut(&'a mut &'b i32, &'b i32)
-{
- f
-}
-
-fn deref(_p: &i32) { }
-
-fn main() { }
diff --git a/src/test/ui/nll/closure-requirements/escape-argument.stderr b/src/test/ui/nll/closure-requirements/escape-argument.stderr
deleted file mode 100644
index f67c312b9..000000000
--- a/src/test/ui/nll/closure-requirements/escape-argument.stderr
+++ /dev/null
@@ -1,35 +0,0 @@
-note: no external requirements
- --> $DIR/escape-argument.rs:26:38
- |
-LL | let mut closure = expect_sig(|p, y| *p = y);
- | ^^^^^^
- |
- = note: defining type: test::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) mut &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) i32, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) i32)),
- (),
- ]
-
-note: no external requirements
- --> $DIR/escape-argument.rs:20:1
- |
-LL | fn test() {
- | ^^^^^^^^^
- |
- = note: defining type: test
-
-error[E0597]: `y` does not live long enough
- --> $DIR/escape-argument.rs:27:25
- |
-LL | closure(&mut p, &y);
- | ^^ borrowed value does not live long enough
-LL |
-LL | }
- | - `y` dropped here while still borrowed
-LL |
-LL | deref(p);
- | - borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/closure-requirements/escape-upvar-nested.rs b/src/test/ui/nll/closure-requirements/escape-upvar-nested.rs
deleted file mode 100644
index 765a3cf96..000000000
--- a/src/test/ui/nll/closure-requirements/escape-upvar-nested.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// As in `escape-upvar-ref.rs`, test closure that:
-//
-// - captures a variable `y`
-// - stores reference to `y` into another, longer-lived spot
-//
-// except that the closure does so via a second closure.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-#[rustc_regions]
-fn test() {
- let x = 44;
- let mut p = &x;
-
- {
- let y = 22;
-
- let mut closure = || {
- let mut closure1 = || p = &y; //~ ERROR `y` does not live long enough [E0597]
- closure1();
- };
-
- closure();
- }
-
- deref(p);
-}
-
-fn deref(_p: &i32) { }
-
-fn main() { }
diff --git a/src/test/ui/nll/closure-requirements/escape-upvar-nested.stderr b/src/test/ui/nll/closure-requirements/escape-upvar-nested.stderr
deleted file mode 100644
index 4fbd5eb19..000000000
--- a/src/test/ui/nll/closure-requirements/escape-upvar-nested.stderr
+++ /dev/null
@@ -1,53 +0,0 @@
-note: external requirements
- --> $DIR/escape-upvar-nested.rs:21:32
- |
-LL | let mut closure1 = || p = &y;
- | ^^
- |
- = note: defining type: test::{closure#0}::{closure#0} with closure substs [
- i16,
- extern "rust-call" fn(()),
- (&'_#1r mut &'_#2r i32, &'_#3r i32),
- ]
- = note: number of external vids: 4
- = note: where '_#3r: '_#2r
-
-note: external requirements
- --> $DIR/escape-upvar-nested.rs:20:27
- |
-LL | let mut closure = || {
- | ^^
- |
- = note: defining type: test::{closure#0} with closure substs [
- i16,
- extern "rust-call" fn(()),
- (&'_#1r mut &'_#2r i32, &'_#3r i32),
- ]
- = note: number of external vids: 4
- = note: where '_#3r: '_#2r
-
-note: no external requirements
- --> $DIR/escape-upvar-nested.rs:13:1
- |
-LL | fn test() {
- | ^^^^^^^^^
- |
- = note: defining type: test
-
-error[E0597]: `y` does not live long enough
- --> $DIR/escape-upvar-nested.rs:21:40
- |
-LL | let mut closure = || {
- | -- value captured here
-LL | let mut closure1 = || p = &y;
- | ^ borrowed value does not live long enough
-...
-LL | }
- | - `y` dropped here while still borrowed
-LL |
-LL | deref(p);
- | - borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/closure-requirements/escape-upvar-ref.rs b/src/test/ui/nll/closure-requirements/escape-upvar-ref.rs
deleted file mode 100644
index 0a562a0a1..000000000
--- a/src/test/ui/nll/closure-requirements/escape-upvar-ref.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Test closure that:
-//
-// - captures a variable `y` by reference
-// - stores that reference to `y` into another, longer-lived place (`p`)
-//
-// Both of these are upvars of reference type (the capture of `y` is
-// of type `&'a i32`, the capture of `p` is of type `&mut &'b
-// i32`). The closure thus computes a relationship between `'a` and
-// `'b`. This relationship is propagated to the closure creator,
-// which reports an error.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-#[rustc_regions]
-fn test() {
- let x = 44;
- let mut p = &x;
-
- {
- let y = 22;
- let mut closure = || p = &y;
- //~^ ERROR `y` does not live long enough [E0597]
- closure();
- }
-
- deref(p);
-}
-
-fn deref(_p: &i32) { }
-
-fn main() { }
diff --git a/src/test/ui/nll/closure-requirements/escape-upvar-ref.stderr b/src/test/ui/nll/closure-requirements/escape-upvar-ref.stderr
deleted file mode 100644
index bc1ceac5b..000000000
--- a/src/test/ui/nll/closure-requirements/escape-upvar-ref.stderr
+++ /dev/null
@@ -1,39 +0,0 @@
-note: external requirements
- --> $DIR/escape-upvar-ref.rs:23:27
- |
-LL | let mut closure = || p = &y;
- | ^^
- |
- = note: defining type: test::{closure#0} with closure substs [
- i16,
- extern "rust-call" fn(()),
- (&'_#1r mut &'_#2r i32, &'_#3r i32),
- ]
- = note: number of external vids: 4
- = note: where '_#3r: '_#2r
-
-note: no external requirements
- --> $DIR/escape-upvar-ref.rs:17:1
- |
-LL | fn test() {
- | ^^^^^^^^^
- |
- = note: defining type: test
-
-error[E0597]: `y` does not live long enough
- --> $DIR/escape-upvar-ref.rs:23:35
- |
-LL | let mut closure = || p = &y;
- | -- ^ borrowed value does not live long enough
- | |
- | value captured here
-...
-LL | }
- | - `y` dropped here while still borrowed
-LL |
-LL | deref(p);
- | - borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/closure-requirements/issue-58127-mutliple-requirements.rs b/src/test/ui/nll/closure-requirements/issue-58127-mutliple-requirements.rs
deleted file mode 100644
index a83ebc21f..000000000
--- a/src/test/ui/nll/closure-requirements/issue-58127-mutliple-requirements.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-// check-pass
-
-// Test that we propagate region relations from closures precisely when there is
-// more than one non-local lower bound.
-
-// In this case the closure has signature
-// |x: &'4 mut (&'5 (&'1 str, &'2 str), &'3 str)| -> ..
-// We end up with a `'3: '5` constraint that we can propagate as
-// `'3: '1`, `'3: '2`, but previously we approximated it as `'3: 'static`.
-
-// As an optimization, we primarily propagate bounds for the "representative"
-// of each SCC. As such we have these two similar cases where hopefully one
-// of them will test the case we want (case2, when this test was added).
-mod case1 {
- fn f(s: &str) {
- g(s, |x| h(x));
- }
-
- fn g<T, F>(_: T, _: F)
- where F: Fn(&mut (&(T, T), T)) {}
-
- fn h<T>(_: &mut (&(T, T), T)) {}
-}
-
-mod case2 {
- fn f(s: &str) {
- g(s, |x| h(x));
- }
-
- fn g<T, F>(_: T, _: F)
- where F: Fn(&mut (T, &(T, T))) {}
-
- fn h<T>(_: &mut (T, &(T, T))) {}
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.rs
deleted file mode 100644
index 35a864b88..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.rs
+++ /dev/null
@@ -1,51 +0,0 @@
-// Test where we fail to approximate due to demanding a postdom
-// relationship between our upper bounds.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-// Callee knows that:
-//
-// 'x: 'a
-// 'x: 'b
-// 'c: 'y
-//
-// we have to prove that `'x: 'y`. We currently can only approximate
-// via a postdominator -- hence we fail to choose between `'a` and
-// `'b` here and report the error in the closure.
-fn establish_relationships<'a, 'b, 'c, F>(
- _cell_a: Cell<&'a u32>,
- _cell_b: Cell<&'b u32>,
- _cell_c: Cell<&'c u32>,
- _closure: F,
-) where
- F: for<'x, 'y> FnMut(
- Cell<&'a &'x u32>, // shows that 'x: 'a
- Cell<&'b &'x u32>, // shows that 'x: 'b
- Cell<&'y &'c u32>, // shows that 'c: 'y
- Cell<&'x u32>,
- Cell<&'y u32>,
- ),
-{
-}
-
-fn demand_y<'x, 'y>(_cell_x: Cell<&'x u32>, _cell_y: Cell<&'y u32>, _y: &'y u32) {}
-
-#[rustc_regions]
-fn supply<'a, 'b, 'c>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>, cell_c: Cell<&'c u32>) {
- establish_relationships(
- cell_a,
- cell_b,
- cell_c,
- |_outlives1, _outlives2, _outlives3, x, y| {
- // Only works if 'x: 'y:
- let p = x.get();
- demand_y(x, y, p) //~ ERROR
- },
- );
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr
deleted file mode 100644
index 7da6ce58b..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr
+++ /dev/null
@@ -1,36 +0,0 @@
-note: no external requirements
- --> $DIR/propagate-approximated-fail-no-postdom.rs:43:9
- |
-LL | |_outlives1, _outlives2, _outlives3, x, y| {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&'_#2r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) &'_#3r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>)),
- (),
- ]
- = note: late-bound region is '_#4r
- = note: late-bound region is '_#5r
- = note: late-bound region is '_#6r
-
-error: lifetime may not live long enough
- --> $DIR/propagate-approximated-fail-no-postdom.rs:46:13
- |
-LL | |_outlives1, _outlives2, _outlives3, x, y| {
- | ---------- ---------- has type `Cell<&'2 &'_#3r u32>`
- | |
- | has type `Cell<&'_#1r &'1 u32>`
-...
-LL | demand_y(x, y, p)
- | ^^^^^^^^^^^^^^^^^ argument requires that `'1` must outlive `'2`
-
-note: no external requirements
- --> $DIR/propagate-approximated-fail-no-postdom.rs:38:1
- |
-LL | fn supply<'a, 'b, 'c>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>, cell_c: Cell<&'c u32>) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs
deleted file mode 100644
index 7291c6e97..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Rather convoluted setup where we infer a relationship between two
-// free regions in the closure signature (`'a` and `'b`) on the basis
-// of a relationship between two bound regions (`'x` and `'y`).
-//
-// The idea is that, thanks to invoking `demand_y`, `'x: 'y` must
-// hold, where `'x` and `'y` are bound regions. The closure can't
-// prove that directly, and because `'x` and `'y` are bound it cannot
-// ask the caller to prove it either. But it has bounds on `'x` and
-// `'y` in terms of `'a` and `'b`, and it can propagate a relationship
-// between `'a` and `'b` to the caller.
-//
-// Note: the use of `Cell` here is to introduce invariance. One less
-// variable.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-// Callee knows that:
-//
-// 'x: 'a
-// 'b: 'y
-//
-// so if we are going to ensure that `'x: 'y`, then `'a: 'b` must
-// hold.
-fn establish_relationships<'a, 'b, F>(_cell_a: &Cell<&'a u32>, _cell_b: &Cell<&'b u32>, _closure: F)
-where
- F: for<'x, 'y> FnMut(
- &Cell<&'a &'x u32>, // shows that 'x: 'a
- &Cell<&'y &'b u32>, // shows that 'b: 'y
- &Cell<&'x u32>,
- &Cell<&'y u32>,
- ),
-{
-}
-
-fn demand_y<'x, 'y>(_cell_x: &Cell<&'x u32>, _cell_y: &Cell<&'y u32>, _y: &'y u32) {}
-
-#[rustc_regions]
-fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
- // Only works if 'x: 'y:
- demand_y(x, y, x.get())
- //~^ ERROR lifetime may not live long enough
- });
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr
deleted file mode 100644
index 993687605..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr
+++ /dev/null
@@ -1,39 +0,0 @@
-note: external requirements
- --> $DIR/propagate-approximated-ref.rs:43:47
- |
-LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None)), Region(BrAnon(3, None)), Region(BrAnon(4, None)), Region(BrAnon(5, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) &'_#2r u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrAnon(4, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 5, kind: BrAnon(5, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) u32>)),
- (),
- ]
- = note: late-bound region is '_#3r
- = note: late-bound region is '_#4r
- = note: number of external vids: 5
- = note: where '_#1r: '_#2r
-
-note: no external requirements
- --> $DIR/propagate-approximated-ref.rs:42:1
- |
-LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply
-
-error: lifetime may not live long enough
- --> $DIR/propagate-approximated-ref.rs:45:9
- |
-LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | demand_y(x, y, x.get())
- | ^^^^^^^^^^^^^^^^^^^^^^^ argument requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-comparing-against-free.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-comparing-against-free.rs
deleted file mode 100644
index afe6f10a5..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-comparing-against-free.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Test a case where we setup relationships like `'x: 'a` or `'a: 'x`,
-// where `'x` is bound in closure type but `'a` is free. This forces
-// us to approximate `'x` one way or the other.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-fn foo<'a, F>(_cell: Cell<&'a u32>, _f: F)
-where
- F: for<'x> FnOnce(Cell<&'a u32>, Cell<&'x u32>),
-{
-}
-
-#[rustc_regions]
-fn case1() {
- let a = 0;
- let cell = Cell::new(&a);
- foo(cell, |cell_a, cell_x| {
- cell_a.set(cell_x.get()); // forces 'x: 'a, error in closure
- //~^ ERROR
- })
-}
-
-#[rustc_regions]
-fn case2() {
- let a = 0;
- let cell = Cell::new(&a);
- //~^ ERROR `a` does not live long enough
-
- // As you can see in the stderr output, this closure propoagates a
- // requirement that `'a: 'static'.
- foo(cell, |cell_a, cell_x| {
- cell_x.set(cell_a.get()); // forces 'a: 'x, implies 'a = 'static -> borrow error
- })
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-comparing-against-free.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-comparing-against-free.stderr
deleted file mode 100644
index 7991abeb7..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-comparing-against-free.stderr
+++ /dev/null
@@ -1,69 +0,0 @@
-note: no external requirements
- --> $DIR/propagate-approximated-shorter-to-static-comparing-against-free.rs:21:15
- |
-LL | foo(cell, |cell_a, cell_x| {
- | ^^^^^^^^^^^^^^^^
- |
- = note: defining type: case1::{closure#0} with closure substs [
- i32,
- for<Region(BrAnon(0, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>)),
- (),
- ]
-
-error[E0521]: borrowed data escapes outside of closure
- --> $DIR/propagate-approximated-shorter-to-static-comparing-against-free.rs:22:9
- |
-LL | foo(cell, |cell_a, cell_x| {
- | ------ ------ `cell_x` is a reference that is only valid in the closure body
- | |
- | `cell_a` declared here, outside of the closure body
-LL | cell_a.set(cell_x.get()); // forces 'x: 'a, error in closure
- | ^^^^^^^^^^^^^^^^^^^^^^^^ `cell_x` escapes the closure body here
-
-note: no external requirements
- --> $DIR/propagate-approximated-shorter-to-static-comparing-against-free.rs:18:1
- |
-LL | fn case1() {
- | ^^^^^^^^^^
- |
- = note: defining type: case1
-
-note: external requirements
- --> $DIR/propagate-approximated-shorter-to-static-comparing-against-free.rs:35:15
- |
-LL | foo(cell, |cell_a, cell_x| {
- | ^^^^^^^^^^^^^^^^
- |
- = note: defining type: case2::{closure#0} with closure substs [
- i32,
- for<Region(BrAnon(0, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>)),
- (),
- ]
- = note: number of external vids: 2
- = note: where '_#1r: '_#0r
-
-note: no external requirements
- --> $DIR/propagate-approximated-shorter-to-static-comparing-against-free.rs:28:1
- |
-LL | fn case2() {
- | ^^^^^^^^^^
- |
- = note: defining type: case2
-
-error[E0597]: `a` does not live long enough
- --> $DIR/propagate-approximated-shorter-to-static-comparing-against-free.rs:30:26
- |
-LL | let cell = Cell::new(&a);
- | ^^ borrowed value does not live long enough
-...
-LL | / foo(cell, |cell_a, cell_x| {
-LL | | cell_x.set(cell_a.get()); // forces 'a: 'x, implies 'a = 'static -> borrow error
-LL | | })
- | |______- argument requires that `a` is borrowed for `'static`
-LL | }
- | - `a` dropped here while still borrowed
-
-error: aborting due to 2 previous errors
-
-Some errors have detailed explanations: E0521, E0597.
-For more information about an error, try `rustc --explain E0521`.
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-no-bound.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-no-bound.rs
deleted file mode 100644
index 372209075..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-no-bound.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Test a case where we are trying to prove `'x: 'y` and are forced to
-// approximate the shorter end-point (`'y`) to with `'static`. This is
-// because `'y` is higher-ranked but we know of no relations to other
-// regions. Note that `'static` shows up in the stderr output as `'0`.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-// Callee knows that:
-//
-// 'x: 'a
-//
-// so the only way we can ensure that `'x: 'y` is to show that
-// `'a: 'static`.
-fn establish_relationships<'a, 'b, F>(_cell_a: &Cell<&'a u32>, _cell_b: &Cell<&'b u32>, _closure: F)
-where
- F: for<'x, 'y> FnMut(
- &Cell<&'a &'x u32>, // shows that 'x: 'a
- &Cell<&'x u32>,
- &Cell<&'y u32>,
- ),
-{
-}
-
-fn demand_y<'x, 'y>(_cell_x: &Cell<&'x u32>, _cell_y: &Cell<&'y u32>, _y: &'y u32) {}
-
-#[rustc_regions]
-fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
- //~^ ERROR borrowed data escapes outside of function
-
- // Only works if 'x: 'y:
- demand_y(x, y, x.get())
- });
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-no-bound.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-no-bound.stderr
deleted file mode 100644
index 43dfc3bb9..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-no-bound.stderr
+++ /dev/null
@@ -1,49 +0,0 @@
-note: external requirements
- --> $DIR/propagate-approximated-shorter-to-static-no-bound.rs:32:47
- |
-LL | establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
- | ^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None)), Region(BrAnon(3, None)), Region(BrAnon(4, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrAnon(4, None) }) u32>)),
- (),
- ]
- = note: late-bound region is '_#2r
- = note: late-bound region is '_#3r
- = note: number of external vids: 4
- = note: where '_#1r: '_#0r
-
-note: no external requirements
- --> $DIR/propagate-approximated-shorter-to-static-no-bound.rs:31:1
- |
-LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply
-
-error[E0521]: borrowed data escapes outside of function
- --> $DIR/propagate-approximated-shorter-to-static-no-bound.rs:32:5
- |
-LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | -- ------ `cell_a` is a reference that is only valid in the function body
- | |
- | lifetime `'a` defined here
-LL | / establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
-LL | |
-LL | |
-LL | | // Only works if 'x: 'y:
-LL | | demand_y(x, y, x.get())
-LL | | });
- | | ^
- | | |
- | |______`cell_a` escapes the function body here
- | argument requires that `'a` must outlive `'static`
- |
- = note: requirement occurs because of the type `Cell<&'_#9r u32>`, which makes the generic argument `&'_#9r u32` invariant
- = note: the struct `Cell<T>` is invariant over the parameter `T`
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0521`.
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-wrong-bound.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-wrong-bound.rs
deleted file mode 100644
index 9898777c7..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-wrong-bound.rs
+++ /dev/null
@@ -1,43 +0,0 @@
-// Test a case where we are trying to prove `'x: 'y` and are forced to
-// approximate the shorter end-point (`'y`) to with `'static`. This is
-// because `'y` is higher-ranked but we know of only irrelevant
-// relations to other regions. Note that `'static` shows up in the
-// stderr output as `'0`.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-// Callee knows that:
-//
-// 'x: 'a
-// 'y: 'b
-//
-// so the only way we can ensure that `'x: 'y` is to show that
-// `'a: 'static`.
-fn establish_relationships<'a, 'b, F>(_cell_a: &Cell<&'a u32>, _cell_b: &Cell<&'b u32>, _closure: F)
-where
- F: for<'x, 'y> FnMut(
- &Cell<&'a &'x u32>, // shows that 'x: 'a
- &Cell<&'b &'y u32>, // shows that 'y: 'b
- &Cell<&'x u32>,
- &Cell<&'y u32>,
- ),
-{
-}
-
-fn demand_y<'x, 'y>(_cell_x: &Cell<&'x u32>, _cell_y: &Cell<&'y u32>, _y: &'y u32) {}
-
-#[rustc_regions]
-fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
- //~^ ERROR borrowed data escapes outside of function
-
- // Only works if 'x: 'y:
- demand_y(x, y, x.get())
- });
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-wrong-bound.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-wrong-bound.stderr
deleted file mode 100644
index 96c734226..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-wrong-bound.stderr
+++ /dev/null
@@ -1,49 +0,0 @@
-note: external requirements
- --> $DIR/propagate-approximated-shorter-to-static-wrong-bound.rs:35:47
- |
-LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None)), Region(BrAnon(3, None)), Region(BrAnon(4, None)), Region(BrAnon(5, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) std::cell::Cell<&'_#2r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrAnon(4, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 5, kind: BrAnon(5, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) u32>)),
- (),
- ]
- = note: late-bound region is '_#3r
- = note: late-bound region is '_#4r
- = note: number of external vids: 5
- = note: where '_#1r: '_#0r
-
-note: no external requirements
- --> $DIR/propagate-approximated-shorter-to-static-wrong-bound.rs:34:1
- |
-LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply
-
-error[E0521]: borrowed data escapes outside of function
- --> $DIR/propagate-approximated-shorter-to-static-wrong-bound.rs:35:5
- |
-LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | -- ------ `cell_a` is a reference that is only valid in the function body
- | |
- | lifetime `'a` defined here
-LL | / establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
-LL | |
-LL | |
-LL | | // Only works if 'x: 'y:
-LL | | demand_y(x, y, x.get())
-LL | | });
- | | ^
- | | |
- | |______`cell_a` escapes the function body here
- | argument requires that `'a` must outlive `'static`
- |
- = note: requirement occurs because of the type `Cell<&'_#10r u32>`, which makes the generic argument `&'_#10r u32` invariant
- = note: the struct `Cell<T>` is invariant over the parameter `T`
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0521`.
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs
deleted file mode 100644
index 5bb5eea99..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs
+++ /dev/null
@@ -1,43 +0,0 @@
-// A simpler variant of `outlives-from-argument` where cells are
-// passed by value.
-//
-// This is simpler because there are no "extraneous" region
-// relationships. In the 'main' variant, there are a number of
-// anonymous regions as well.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-// Callee knows that:
-//
-// 'x: 'a
-// 'b: 'y
-//
-// so if we are going to ensure that `'x: 'y`, then `'a: 'b` must
-// hold.
-fn establish_relationships<'a, 'b, F>(_cell_a: Cell<&'a u32>, _cell_b: Cell<&'b u32>, _closure: F)
-where
- F: for<'x, 'y> FnMut(
- Cell<&'a &'x u32>, // shows that 'x: 'a
- Cell<&'y &'b u32>, // shows that 'b: 'y
- Cell<&'x u32>,
- Cell<&'y u32>,
- ),
-{
-}
-
-fn demand_y<'x, 'y>(_outlives1: Cell<&&'x u32>, _outlives2: Cell<&'y &u32>, _y: &'y u32) {}
-
-#[rustc_regions]
-fn test<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- establish_relationships(cell_a, cell_b, |outlives1, outlives2, x, y| {
- // Only works if 'x: 'y:
- demand_y(outlives1, outlives2, x.get())
- //~^ ERROR lifetime may not live long enough
- });
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr
deleted file mode 100644
index 03dbd686e..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr
+++ /dev/null
@@ -1,39 +0,0 @@
-note: external requirements
- --> $DIR/propagate-approximated-val.rs:36:45
- |
-LL | establish_relationships(cell_a, cell_b, |outlives1, outlives2, x, y| {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: test::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) &'_#2r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>)),
- (),
- ]
- = note: late-bound region is '_#3r
- = note: late-bound region is '_#4r
- = note: number of external vids: 5
- = note: where '_#1r: '_#2r
-
-note: no external requirements
- --> $DIR/propagate-approximated-val.rs:35:1
- |
-LL | fn test<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: test
-
-error: lifetime may not live long enough
- --> $DIR/propagate-approximated-val.rs:38:9
- |
-LL | fn test<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | demand_y(outlives1, outlives2, x.get())
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ argument requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-requirements/propagate-despite-same-free-region.rs b/src/test/ui/nll/closure-requirements/propagate-despite-same-free-region.rs
deleted file mode 100644
index 704a026d2..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-despite-same-free-region.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Test where we might in theory be able to see that the relationship
-// between two bound regions is true within closure and hence have no
-// need to propagate; but in fact we do because identity of free
-// regions is erased.
-
-// compile-flags:-Zverbose
-// check-pass
-
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-// In theory, callee knows that:
-//
-// 'x: 'a
-// 'a: 'y
-//
-// and hence could satisfy that `'x: 'y` locally. However, in our
-// checking, we ignore the precise free regions that come into the
-// region and just assign each position a distinct universally bound
-// region. Hence, we propagate a constraint to our caller that will
-// wind up being solvable.
-fn establish_relationships<'a, F>(
- _cell_a: Cell<&'a u32>,
- _closure: F,
-) where
- F: for<'x, 'y> FnMut(
- Cell<&'a &'x u32>, // shows that 'x: 'a
- Cell<&'y &'a u32>, // shows that 'a: 'y
- Cell<&'x u32>,
- Cell<&'y u32>,
- ),
-{
-}
-
-fn demand_y<'x, 'y>(_cell_x: Cell<&'x u32>, _cell_y: Cell<&'y u32>, _y: &'y u32) {}
-
-#[rustc_regions]
-fn supply<'a>(cell_a: Cell<&'a u32>) {
- establish_relationships(
- cell_a,
- |_outlives1, _outlives2, x, y| {
- // Only works if 'x: 'y:
- let p = x.get();
- demand_y(x, y, p)
- },
- );
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-despite-same-free-region.stderr b/src/test/ui/nll/closure-requirements/propagate-despite-same-free-region.stderr
deleted file mode 100644
index d716d3de2..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-despite-same-free-region.stderr
+++ /dev/null
@@ -1,23 +0,0 @@
-note: external requirements
- --> $DIR/propagate-despite-same-free-region.rs:42:9
- |
-LL | |_outlives1, _outlives2, x, y| {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) &'_#2r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>)),
- (),
- ]
- = note: late-bound region is '_#3r
- = note: number of external vids: 4
- = note: where '_#1r: '_#2r
-
-note: no external requirements
- --> $DIR/propagate-despite-same-free-region.rs:39:1
- |
-LL | fn supply<'a>(cell_a: Cell<&'a u32>) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply
-
diff --git a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.rs b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.rs
deleted file mode 100644
index dcd05d7fa..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.rs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Similarly to escape-argument-callee, a test case where the closure
-// requires a relationship between 2 unrelated higher-ranked regions,
-// with no helpful relations between the HRRs and free regions.
-//
-// In this case, the error is reported by the closure itself. This is
-// because it is unable to approximate the higher-ranked region `'x`,
-// as it knows of no relationships between `'x` and any
-// non-higher-ranked regions.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-// Callee knows that:
-//
-// 'b: 'y
-//
-// but this doesn't really help us in proving that `'x: 'y`, so closure gets an error.
-fn establish_relationships<'a, 'b, F>(_cell_a: &Cell<&'a u32>, _cell_b: &Cell<&'b u32>, _closure: F)
-where
- F: for<'x, 'y> FnMut(
- &Cell<&'y &'b u32>, // shows that 'b: 'y
- &Cell<&'x u32>,
- &Cell<&'y u32>,
- ),
-{
-}
-
-fn demand_y<'x, 'y>(_cell_x: &Cell<&'x u32>, _cell_y: &Cell<&'y u32>, _y: &'y u32) {}
-
-#[rustc_regions]
-fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
- // Only works if 'x: 'y:
- demand_y(x, y, x.get())
- //~^ ERROR
- });
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr
deleted file mode 100644
index b924873fc..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr
+++ /dev/null
@@ -1,35 +0,0 @@
-note: no external requirements
- --> $DIR/propagate-fail-to-approximate-longer-no-bounds.rs:35:47
- |
-LL | establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
- | ^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None)), Region(BrAnon(3, None)), Region(BrAnon(4, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) &'_#1r u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrAnon(4, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>)),
- (),
- ]
- = note: late-bound region is '_#2r
- = note: late-bound region is '_#3r
-
-error: lifetime may not live long enough
- --> $DIR/propagate-fail-to-approximate-longer-no-bounds.rs:37:9
- |
-LL | establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
- | --------- - has type `&'_#7r Cell<&'1 u32>`
- | |
- | has type `&'_#5r Cell<&'2 &'_#1r u32>`
-LL | // Only works if 'x: 'y:
-LL | demand_y(x, y, x.get())
- | ^^^^^^^^^^^^^^^^^^^^^^^ argument requires that `'1` must outlive `'2`
-
-note: no external requirements
- --> $DIR/propagate-fail-to-approximate-longer-no-bounds.rs:34:1
- |
-LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.rs b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.rs
deleted file mode 100644
index 98be92d1c..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-// Similarly to escape-argument-callee, a test case where the closure
-// requires a relationship between 2 unrelated higher-ranked regions,
-// with no helpful relations between the HRRs and free regions.
-//
-// In this case, the error is reported by the closure itself. This is
-// because it is unable to approximate the higher-ranked region `'x`,
-// as it only knows of regions that `'x` is outlived by, and none that
-// `'x` outlives.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-// Callee knows that:
-//
-// 'a: 'x
-// 'b: 'y
-//
-// but this doesn't really help us in proving that `'x: 'y`, so
-// closure gets an error. In particular, we would need to know that
-// `'x: 'a`, so that we could approximate `'x` "downwards" to `'a`.
-fn establish_relationships<'a, 'b, F>(_cell_a: &Cell<&'a u32>, _cell_b: &Cell<&'b u32>, _closure: F)
-where
- F: for<'x, 'y> FnMut(
- &Cell<&'x &'a u32>, // shows that 'a: 'x
- &Cell<&'y &'b u32>, // shows that 'b: 'y
- &Cell<&'x u32>,
- &Cell<&'y u32>,
- ),
-{
-}
-
-fn demand_y<'x, 'y>(_cell_x: &Cell<&'x u32>, _cell_y: &Cell<&'y u32>, _y: &'y u32) {}
-
-#[rustc_regions]
-fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
- // Only works if 'x: 'y:
- demand_y(x, y, x.get())
- //~^ ERROR
- });
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr
deleted file mode 100644
index 9b25efd0b..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr
+++ /dev/null
@@ -1,35 +0,0 @@
-note: no external requirements
- --> $DIR/propagate-fail-to-approximate-longer-wrong-bounds.rs:39:47
- |
-LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None)), Region(BrAnon(3, None)), Region(BrAnon(4, None)), Region(BrAnon(5, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) &'_#1r u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) &'_#2r u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrAnon(4, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 5, kind: BrAnon(5, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) u32>)),
- (),
- ]
- = note: late-bound region is '_#3r
- = note: late-bound region is '_#4r
-
-error: lifetime may not live long enough
- --> $DIR/propagate-fail-to-approximate-longer-wrong-bounds.rs:41:9
- |
-LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
- | ---------- ---------- has type `&'_#8r Cell<&'2 &'_#2r u32>`
- | |
- | has type `&'_#6r Cell<&'1 &'_#1r u32>`
-LL | // Only works if 'x: 'y:
-LL | demand_y(x, y, x.get())
- | ^^^^^^^^^^^^^^^^^^^^^^^ argument requires that `'1` must outlive `'2`
-
-note: no external requirements
- --> $DIR/propagate-fail-to-approximate-longer-wrong-bounds.rs:38:1
- |
-LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: supply
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-requirements/propagate-from-trait-match.rs b/src/test/ui/nll/closure-requirements/propagate-from-trait-match.rs
deleted file mode 100644
index cda781d8e..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-from-trait-match.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-// Test that regions which appear only in the closure's generics (in
-// this case, `'a`) are properly mapped to the creator's generics. In
-// this case, the closure constrains its type parameter `T` to outlive
-// the same `'a` for which it implements `Trait`, which can only be the `'a`
-// from the function definition.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-#![allow(dead_code)]
-
-trait Trait<'a> {}
-
-fn establish_relationships<T, F>(value: T, closure: F)
-where
- F: FnOnce(T),
-{
- closure(value)
-}
-
-fn require<'a, T>(t: T)
-where
- T: Trait<'a> + 'a,
-{
-}
-
-#[rustc_regions]
-fn supply<'a, T>(value: T)
-where
- T: Trait<'a>,
-{
- establish_relationships(value, |value| {
- // This function call requires that
- //
- // (a) T: Trait<'a>
- //
- // and
- //
- // (b) T: 'a
- //
- // The latter does not hold.
-
- require(value);
- //~^ ERROR the parameter type `T` may not live long enough
- });
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/propagate-from-trait-match.stderr b/src/test/ui/nll/closure-requirements/propagate-from-trait-match.stderr
deleted file mode 100644
index 038a5e11f..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-from-trait-match.stderr
+++ /dev/null
@@ -1,38 +0,0 @@
-note: external requirements
- --> $DIR/propagate-from-trait-match.rs:32:36
- |
-LL | establish_relationships(value, |value| {
- | ^^^^^^^
- |
- = note: defining type: supply::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((T,)),
- (),
- ]
- = note: number of external vids: 2
- = note: where T: '_#1r
-
-note: no external requirements
- --> $DIR/propagate-from-trait-match.rs:28:1
- |
-LL | / fn supply<'a, T>(value: T)
-LL | | where
-LL | | T: Trait<'a>,
- | |_________________^
- |
- = note: defining type: supply::<'_#1r, T>
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/propagate-from-trait-match.rs:43:9
- |
-LL | require(value);
- | ^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: Trait<'a> + 'a,
- | ++++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/closure-requirements/propagate-multiple-requirements.rs b/src/test/ui/nll/closure-requirements/propagate-multiple-requirements.rs
deleted file mode 100644
index a9d2a0771..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-multiple-requirements.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Test that we propagate *all* requirements to the caller, not just the first
-// one.
-
-fn once<S, T, U, F: FnOnce(S, T) -> U>(f: F, s: S, t: T) -> U {
- f(s, t)
-}
-
-pub fn dangle() -> &'static [i32] {
- let other_local_arr = [0, 2, 4];
- let local_arr = other_local_arr;
- let mut out: &mut &'static [i32] = &mut (&[1] as _);
- once(|mut z: &[i32], mut out_val: &mut &[i32]| {
- // We unfortunately point to the first use in the closure in the error
- // message
- z = &local_arr; //~ ERROR
- *out_val = &local_arr;
- }, &[] as &[_], &mut *out);
- *out
-}
-
-fn main() {
- println!("{:?}", dangle());
-}
diff --git a/src/test/ui/nll/closure-requirements/propagate-multiple-requirements.stderr b/src/test/ui/nll/closure-requirements/propagate-multiple-requirements.stderr
deleted file mode 100644
index 2fec9bc62..000000000
--- a/src/test/ui/nll/closure-requirements/propagate-multiple-requirements.stderr
+++ /dev/null
@@ -1,17 +0,0 @@
-error[E0597]: `local_arr` does not live long enough
- --> $DIR/propagate-multiple-requirements.rs:15:14
- |
-LL | let mut out: &mut &'static [i32] = &mut (&[1] as _);
- | ------------------- type annotation requires that `local_arr` is borrowed for `'static`
-LL | once(|mut z: &[i32], mut out_val: &mut &[i32]| {
- | ----------------------------------------- value captured here
-...
-LL | z = &local_arr;
- | ^^^^^^^^^ borrowed value does not live long enough
-...
-LL | }
- | - `local_arr` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/closure-requirements/region-lbr-anon-does-not-outlive-static.rs b/src/test/ui/nll/closure-requirements/region-lbr-anon-does-not-outlive-static.rs
deleted file mode 100644
index 8147da09d..000000000
--- a/src/test/ui/nll/closure-requirements/region-lbr-anon-does-not-outlive-static.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Basic test for free regions in the NLL code. This test ought to
-// report an error due to a reborrowing constraint. Right now, we get
-// a variety of errors from the older, AST-based machinery (notably
-// borrowck), and then we get the NLL error at the end.
-
-// compile-flags:-Zverbose
-
-fn foo(x: &u32) -> &'static u32 {
- &*x
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/closure-requirements/region-lbr-anon-does-not-outlive-static.stderr b/src/test/ui/nll/closure-requirements/region-lbr-anon-does-not-outlive-static.stderr
deleted file mode 100644
index 7034492ce..000000000
--- a/src/test/ui/nll/closure-requirements/region-lbr-anon-does-not-outlive-static.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/region-lbr-anon-does-not-outlive-static.rs:9:5
- |
-LL | fn foo(x: &u32) -> &'static u32 {
- | - let's call the lifetime of this reference `'1`
-LL | &*x
- | ^^^ returning this value requires that `'1` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.rs b/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.rs
deleted file mode 100644
index 4acd2fc92..000000000
--- a/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Basic test for free regions in the NLL code. This test ought to
-// report an error due to a reborrowing constraint. Right now, we get
-// a variety of errors from the older, AST-based machinery (notably
-// borrowck), and then we get the NLL error at the end.
-
-// compile-flags:-Zverbose
-
-fn foo<'a>(x: &'a u32) -> &'static u32 {
- &*x
- //~^ ERROR
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr b/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr
deleted file mode 100644
index d0a24a267..000000000
--- a/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/region-lbr-named-does-not-outlive-static.rs:9:5
- |
-LL | fn foo<'a>(x: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | &*x
- | ^^^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs
deleted file mode 100644
index 06e96be80..000000000
--- a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Basic test for free regions in the NLL code. This test ought to
-// report an error due to a reborrowing constraint. Right now, we get
-// a variety of errors from the older, AST-based machinery (notably
-// borrowck), and then we get the NLL error at the end.
-
-// compile-flags:-Zverbose
-
-fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
- &*x
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr
deleted file mode 100644
index d0ba53925..000000000
--- a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/region-lbr1-does-not-outlive-ebr2.rs:9:5
- |
-LL | fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | &*x
- | ^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-requirements/region-lbr1-does-outlive-lbr2-because-implied-bound.rs b/src/test/ui/nll/closure-requirements/region-lbr1-does-outlive-lbr2-because-implied-bound.rs
deleted file mode 100644
index 014959fdb..000000000
--- a/src/test/ui/nll/closure-requirements/region-lbr1-does-outlive-lbr2-because-implied-bound.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-// Basic test for free regions in the NLL code. This test does not
-// report an error because of the (implied) bound that `'b: 'a`.
-
-// check-pass
-// compile-flags:-Zverbose
-
-fn foo<'a, 'b>(x: &'a &'b u32) -> &'a u32 {
- &**x
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/return-wrong-bound-region.rs b/src/test/ui/nll/closure-requirements/return-wrong-bound-region.rs
deleted file mode 100644
index e34a3f6f2..000000000
--- a/src/test/ui/nll/closure-requirements/return-wrong-bound-region.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Test closure that takes two references and is supposed to return
-// the first, but actually returns the second. This should fail within
-// the closure.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-#[rustc_regions]
-fn test() {
- expect_sig(|a, b| b); // ought to return `a`
- //~^ ERROR
-}
-
-fn expect_sig<F>(f: F) -> F
- where F: for<'a> FnMut(&'a i32, &i32) -> &'a i32
-{
- f
-}
-
-fn deref(_p: &i32) { }
-
-fn main() { }
diff --git a/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr b/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr
deleted file mode 100644
index 6db72b886..000000000
--- a/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr
+++ /dev/null
@@ -1,31 +0,0 @@
-note: no external requirements
- --> $DIR/return-wrong-bound-region.rs:11:16
- |
-LL | expect_sig(|a, b| b); // ought to return `a`
- | ^^^^^^
- |
- = note: defining type: test::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) i32, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) i32)) -> &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) i32,
- (),
- ]
-
-error: lifetime may not live long enough
- --> $DIR/return-wrong-bound-region.rs:11:23
- |
-LL | expect_sig(|a, b| b); // ought to return `a`
- | - - ^ closure was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
- | | |
- | | has type `&'1 i32`
- | has type `&'2 i32`
-
-note: no external requirements
- --> $DIR/return-wrong-bound-region.rs:10:1
- |
-LL | fn test() {
- | ^^^^^^^^^
- |
- = note: defining type: test
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/closure-use-spans.rs b/src/test/ui/nll/closure-use-spans.rs
deleted file mode 100644
index 6768250dc..000000000
--- a/src/test/ui/nll/closure-use-spans.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// check that liveness due to a closure capture gives a special note
-
-fn use_as_borrow_capture(mut x: i32) {
- let y = &x;
- x = 0; //~ ERROR
- || *y;
-}
-
-fn use_as_borrow_mut_capture(mut x: i32) {
- let y = &mut x;
- x = 0; //~ ERROR
- || *y = 1;
-}
-
-fn use_as_move_capture(mut x: i32) {
- let y = &x;
- x = 0; //~ ERROR
- move || *y;
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closure-use-spans.stderr b/src/test/ui/nll/closure-use-spans.stderr
deleted file mode 100644
index ad928f1bb..000000000
--- a/src/test/ui/nll/closure-use-spans.stderr
+++ /dev/null
@@ -1,33 +0,0 @@
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/closure-use-spans.rs:5:5
- |
-LL | let y = &x;
- | -- borrow of `x` occurs here
-LL | x = 0;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | || *y;
- | -- borrow later captured here by closure
-
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/closure-use-spans.rs:11:5
- |
-LL | let y = &mut x;
- | ------ borrow of `x` occurs here
-LL | x = 0;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | || *y = 1;
- | -- borrow later captured here by closure
-
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/closure-use-spans.rs:17:5
- |
-LL | let y = &x;
- | -- borrow of `x` occurs here
-LL | x = 0;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | move || *y;
- | -- borrow later captured here by closure
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/closures-in-loops.rs b/src/test/ui/nll/closures-in-loops.rs
deleted file mode 100644
index 491c186ec..000000000
--- a/src/test/ui/nll/closures-in-loops.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Test messages where a closure capture conflicts with itself because it's in
-// a loop.
-
-fn repreated_move(x: String) {
- for i in 0..10 {
- || x; //~ ERROR
- }
-}
-
-fn repreated_mut_borrow(mut x: String) {
- let mut v = Vec::new();
- for i in 0..10 {
- v.push(|| x = String::new()); //~ ERROR
- }
-}
-
-fn repreated_unique_borrow(x: &mut String) {
- let mut v = Vec::new();
- for i in 0..10 {
- v.push(|| *x = String::new()); //~ ERROR
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/closures-in-loops.stderr b/src/test/ui/nll/closures-in-loops.stderr
deleted file mode 100644
index 1c1a31d35..000000000
--- a/src/test/ui/nll/closures-in-loops.stderr
+++ /dev/null
@@ -1,35 +0,0 @@
-error[E0382]: use of moved value: `x`
- --> $DIR/closures-in-loops.rs:6:9
- |
-LL | fn repreated_move(x: String) {
- | - move occurs because `x` has type `String`, which does not implement the `Copy` trait
-LL | for i in 0..10 {
-LL | || x;
- | ^^ - use occurs due to use in closure
- | |
- | value moved into closure here, in previous iteration of loop
-
-error[E0499]: cannot borrow `x` as mutable more than once at a time
- --> $DIR/closures-in-loops.rs:13:16
- |
-LL | v.push(|| x = String::new());
- | -------^^-------------------
- | | | |
- | | | borrows occur due to use of `x` in closure
- | | `x` was mutably borrowed here in the previous iteration of the loop
- | first borrow used here, in later iteration of loop
-
-error[E0524]: two closures require unique access to `x` at the same time
- --> $DIR/closures-in-loops.rs:20:16
- |
-LL | v.push(|| *x = String::new());
- | -------^^--------------------
- | | | |
- | | | borrows occur due to use of `x` in closure
- | | closures are constructed here in different iterations of loop
- | first borrow used here, in later iteration of loop
-
-error: aborting due to 3 previous errors
-
-Some errors have detailed explanations: E0382, E0499, E0524.
-For more information about an error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/constant-thread-locals-issue-47053.rs b/src/test/ui/nll/constant-thread-locals-issue-47053.rs
deleted file mode 100644
index dde0ef7a5..000000000
--- a/src/test/ui/nll/constant-thread-locals-issue-47053.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Regression test for issue #47053
-
-#![feature(thread_local)]
-
-#[thread_local]
-static FOO: isize = 5;
-
-fn main() {
- FOO = 6; //~ ERROR cannot assign to immutable static item `FOO` [E0594]
-}
diff --git a/src/test/ui/nll/constant-thread-locals-issue-47053.stderr b/src/test/ui/nll/constant-thread-locals-issue-47053.stderr
deleted file mode 100644
index a44acfb5f..000000000
--- a/src/test/ui/nll/constant-thread-locals-issue-47053.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0594]: cannot assign to immutable static item `FOO`
- --> $DIR/constant-thread-locals-issue-47053.rs:9:5
- |
-LL | FOO = 6;
- | ^^^^^^^ cannot assign
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0594`.
diff --git a/src/test/ui/nll/constant.rs b/src/test/ui/nll/constant.rs
deleted file mode 100644
index 47f0eadf9..000000000
--- a/src/test/ui/nll/constant.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Test that MIR borrowck and NLL analysis can handle constants of
-// arbitrary types without ICEs.
-
-// check-pass
-
-const HI: &str = "hi";
-
-fn main() {
- assert_eq!(HI, "hi");
-}
diff --git a/src/test/ui/nll/continue-after-missing-main.rs b/src/test/ui/nll/continue-after-missing-main.rs
deleted file mode 100644
index 778639158..000000000
--- a/src/test/ui/nll/continue-after-missing-main.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-#![allow(dead_code)]
-
-struct Tableau<'a, MP> {
- provider: &'a MP,
-}
-
-impl<'adapted_matrix_provider, 'original_data, MP>
- Tableau<'adapted_matrix_provider, AdaptedMatrixProvider<'original_data, MP>>
-{
- fn provider(&self) -> &'adapted_matrix_provider AdaptedMatrixProvider</*'original_data,*/ MP> {
- self.provider
- }
-}
-
-struct AdaptedMatrixProvider<'a, T> {
- original_problem: &'a T,
-}
-
-impl<'a, T> AdaptedMatrixProvider<'a, T> {
- fn clone_with_extra_bound(&self) -> Self {
- AdaptedMatrixProvider { original_problem: self.original_problem }
- }
-}
-
-fn create_and_solve_subproblems<'data_provider, 'original_data, MP>(
- tableau: Tableau<'data_provider, AdaptedMatrixProvider<'original_data, MP>>,
-) {
- let _: AdaptedMatrixProvider<'original_data, MP> = tableau.provider().clone_with_extra_bound();
-} //~ ERROR `main` function not found in crate
diff --git a/src/test/ui/nll/continue-after-missing-main.stderr b/src/test/ui/nll/continue-after-missing-main.stderr
deleted file mode 100644
index 0df8d8d70..000000000
--- a/src/test/ui/nll/continue-after-missing-main.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0601]: `main` function not found in crate `continue_after_missing_main`
- --> $DIR/continue-after-missing-main.rs:29:2
- |
-LL | }
- | ^ consider adding a `main` function to `$DIR/continue-after-missing-main.rs`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0601`.
diff --git a/src/test/ui/nll/decl-macro-illegal-copy.rs b/src/test/ui/nll/decl-macro-illegal-copy.rs
deleted file mode 100644
index f72432946..000000000
--- a/src/test/ui/nll/decl-macro-illegal-copy.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Regression test for #46314
-
-#![feature(decl_macro)]
-
-struct NonCopy(String);
-
-struct Wrapper {
- inner: NonCopy,
-}
-
-macro inner_copy($wrapper:ident) {
- $wrapper.inner
-}
-
-fn main() {
- let wrapper = Wrapper {
- inner: NonCopy("foo".into()),
- };
- assert_two_non_copy(
- inner_copy!(wrapper),
- wrapper.inner,
- //~^ ERROR use of moved value: `wrapper.inner` [E0382]
- );
-}
-
-fn assert_two_non_copy(a: NonCopy, b: NonCopy) {
- assert_eq!(a.0, b.0);
-}
diff --git a/src/test/ui/nll/decl-macro-illegal-copy.stderr b/src/test/ui/nll/decl-macro-illegal-copy.stderr
deleted file mode 100644
index 7948485bd..000000000
--- a/src/test/ui/nll/decl-macro-illegal-copy.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0382]: use of moved value: `wrapper.inner`
- --> $DIR/decl-macro-illegal-copy.rs:21:9
- |
-LL | $wrapper.inner
- | -------------- value moved here
-...
-LL | wrapper.inner,
- | ^^^^^^^^^^^^^ value used here after move
- |
- = note: move occurs because `wrapper.inner` has type `NonCopy`, which does not implement the `Copy` trait
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy-proj.rs b/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy-proj.rs
deleted file mode 100644
index 96c871946..000000000
--- a/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy-proj.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Test that the 'static bound from the Copy impl is respected. Regression test for #29149.
-
-#[derive(Clone)]
-struct Foo<'a>(&'a u32);
-impl Copy for Foo<'static> {}
-
-fn main() {
- let s = 2;
- let a = (Foo(&s),); //~ ERROR `s` does not live long enough [E0597]
- drop(a.0);
- drop(a.0);
-}
diff --git a/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy-proj.stderr b/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy-proj.stderr
deleted file mode 100644
index 65be3b37e..000000000
--- a/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy-proj.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0597]: `s` does not live long enough
- --> $DIR/do-not-ignore-lifetime-bounds-in-copy-proj.rs:9:18
- |
-LL | let a = (Foo(&s),);
- | ^^ borrowed value does not live long enough
-LL | drop(a.0);
- | --- copying this value requires that `s` is borrowed for `'static`
-LL | drop(a.0);
-LL | }
- | - `s` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy.rs b/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy.rs
deleted file mode 100644
index 99922cc51..000000000
--- a/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-// Test that the 'static bound from the Copy impl is respected. Regression test for #29149.
-
-#[derive(Clone)] struct Foo<'a>(&'a u32);
-impl Copy for Foo<'static> {}
-
-fn main() {
- let s = 2;
- let a = Foo(&s); //~ ERROR `s` does not live long enough [E0597]
- drop(a);
- drop(a);
-}
diff --git a/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy.stderr b/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy.stderr
deleted file mode 100644
index b811ba4fd..000000000
--- a/src/test/ui/nll/do-not-ignore-lifetime-bounds-in-copy.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0597]: `s` does not live long enough
- --> $DIR/do-not-ignore-lifetime-bounds-in-copy.rs:8:17
- |
-LL | let a = Foo(&s);
- | ^^ borrowed value does not live long enough
-LL | drop(a);
- | - copying this value requires that `s` is borrowed for `'static`
-LL | drop(a);
-LL | }
- | - `s` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/dont-print-desugared.rs b/src/test/ui/nll/dont-print-desugared.rs
deleted file mode 100644
index 829d78ed4..000000000
--- a/src/test/ui/nll/dont-print-desugared.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Test that we don't show variables with from for loop desugaring
-
-fn for_loop(s: &[i32]) {
- for &ref mut x in s {}
- //~^ ERROR cannot borrow data in a `&` reference as mutable [E0596]
-}
-
-struct D<'a>(&'a ());
-
-impl Drop for D<'_> {
- fn drop(&mut self) {}
-}
-
-fn for_loop_dropck(v: Vec<D<'static>>) {
- for ref mut d in v {
- let y = ();
- *d = D(&y); //~ ERROR `y` does not live long enough
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/dont-print-desugared.stderr b/src/test/ui/nll/dont-print-desugared.stderr
deleted file mode 100644
index fad6121cb..000000000
--- a/src/test/ui/nll/dont-print-desugared.stderr
+++ /dev/null
@@ -1,24 +0,0 @@
-error[E0596]: cannot borrow data in a `&` reference as mutable
- --> $DIR/dont-print-desugared.rs:4:10
- |
-LL | for &ref mut x in s {}
- | ^^^^^^^^^ cannot borrow as mutable
-
-error[E0597]: `y` does not live long enough
- --> $DIR/dont-print-desugared.rs:17:16
- |
-LL | for ref mut d in v {
- | - a temporary with access to the borrow is created here ...
-LL | let y = ();
-LL | *d = D(&y);
- | ^^ borrowed value does not live long enough
-LL | }
- | -
- | |
- | `y` dropped here while still borrowed
- | ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
-
-error: aborting due to 2 previous errors
-
-Some errors have detailed explanations: E0596, E0597.
-For more information about an error, try `rustc --explain E0596`.
diff --git a/src/test/ui/nll/drop-may-dangle.rs b/src/test/ui/nll/drop-may-dangle.rs
deleted file mode 100644
index b5531c29b..000000000
--- a/src/test/ui/nll/drop-may-dangle.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Basic test for liveness constraints: the region (`R1`) that appears
-// in the type of `p` includes the points after `&v[0]` up to (but not
-// including) the call to `use_x`. The `else` branch is not included.
-
-// check-pass
-
-#![allow(warnings)]
-#![feature(dropck_eyepatch)]
-
-fn use_x(_: usize) -> bool { true }
-
-fn main() {
- let mut v = [1, 2, 3];
- let p: WrapMayDangle<& /* R4 */ usize> = WrapMayDangle { value: &v[0] };
- if true {
- // `p` will get dropped at end of this block. However, because of
- // the `#[may_dangle]` attribute, we do not need to consider R4
- // live after this point.
- use_x(*p.value);
- } else {
- v[0] += 1;
- use_x(22);
- }
-
- v[0] += 1;
-}
-
-struct WrapMayDangle<T> {
- value: T
-}
-
-unsafe impl<#[may_dangle] T> Drop for WrapMayDangle<T> {
- fn drop(&mut self) { }
-}
diff --git a/src/test/ui/nll/drop-no-may-dangle.rs b/src/test/ui/nll/drop-no-may-dangle.rs
deleted file mode 100644
index a0ff0c398..000000000
--- a/src/test/ui/nll/drop-no-may-dangle.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Basic test for liveness constraints: the region (`R1`) that appears
-// in the type of `p` must include everything until `p` is dropped
-// because of destructor. (Note that the stderr also identifies this
-// destructor in the error message.)
-
-#![allow(warnings)]
-#![feature(dropck_eyepatch)]
-
-fn use_x(_: usize) -> bool { true }
-
-fn main() {
- let mut v = [1, 2, 3];
- let p: WrapMayNotDangle<&usize> = WrapMayNotDangle { value: &v[0] };
- if true {
- use_x(*p.value);
- } else {
- use_x(22);
- v[0] += 1; //~ ERROR cannot assign to `v[_]` because it is borrowed
- }
-
- v[0] += 1; //~ ERROR cannot assign to `v[_]` because it is borrowed
-}
-
-struct WrapMayNotDangle<T> {
- value: T
-}
-
-impl<T> Drop for WrapMayNotDangle<T> {
- fn drop(&mut self) { }
-}
diff --git a/src/test/ui/nll/drop-no-may-dangle.stderr b/src/test/ui/nll/drop-no-may-dangle.stderr
deleted file mode 100644
index cb2808809..000000000
--- a/src/test/ui/nll/drop-no-may-dangle.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-error[E0506]: cannot assign to `v[_]` because it is borrowed
- --> $DIR/drop-no-may-dangle.rs:18:9
- |
-LL | let p: WrapMayNotDangle<&usize> = WrapMayNotDangle { value: &v[0] };
- | ----- borrow of `v[_]` occurs here
-...
-LL | v[0] += 1;
- | ^^^^^^^^^ assignment to borrowed `v[_]` occurs here
-...
-LL | }
- | - borrow might be used here, when `p` is dropped and runs the `Drop` code for type `WrapMayNotDangle`
-
-error[E0506]: cannot assign to `v[_]` because it is borrowed
- --> $DIR/drop-no-may-dangle.rs:21:5
- |
-LL | let p: WrapMayNotDangle<&usize> = WrapMayNotDangle { value: &v[0] };
- | ----- borrow of `v[_]` occurs here
-...
-LL | v[0] += 1;
- | ^^^^^^^^^ assignment to borrowed `v[_]` occurs here
-LL | }
- | - borrow might be used here, when `p` is dropped and runs the `Drop` code for type `WrapMayNotDangle`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/empty-type-predicate-2.rs b/src/test/ui/nll/empty-type-predicate-2.rs
deleted file mode 100644
index 20d6e47f7..000000000
--- a/src/test/ui/nll/empty-type-predicate-2.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Regression test for #65553
-//
-// `D::Error:` is lowered to `D::Error: ReEmpty` - check that we don't ICE in
-// NLL for the unexpected region.
-
-// check-pass
-
-trait Deserializer {
- type Error;
-}
-
-fn d1<D: Deserializer>() where D::Error: {}
-
-fn d2<D: Deserializer>() {
- d1::<D>();
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/empty-type-predicate.rs b/src/test/ui/nll/empty-type-predicate.rs
deleted file mode 100644
index d126a455d..000000000
--- a/src/test/ui/nll/empty-type-predicate.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-// Regression test for #61315
-//
-// `dyn T:` is lowered to `dyn T: ReEmpty` - check that we don't ICE in NLL for
-// the unexpected region.
-
-// check-pass
-
-trait T {}
-fn f() where dyn T: {}
-
-fn main() { f(); }
diff --git a/src/test/ui/nll/enum-drop-access.rs b/src/test/ui/nll/enum-drop-access.rs
deleted file mode 100644
index 5ef0c3fe7..000000000
--- a/src/test/ui/nll/enum-drop-access.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-enum DropOption<T> {
- Some(T),
- None,
-}
-
-impl<T> Drop for DropOption<T> {
- fn drop(&mut self) {}
-}
-
-// Dropping opt could access the value behind the reference,
-fn drop_enum(opt: DropOption<&mut i32>) -> Option<&mut i32> {
- match opt {
- DropOption::Some(&mut ref mut r) => { //~ ERROR
- Some(r)
- },
- DropOption::None => None,
- }
-}
-
-fn optional_drop_enum(opt: Option<DropOption<&mut i32>>) -> Option<&mut i32> {
- match opt {
- Some(DropOption::Some(&mut ref mut r)) => { //~ ERROR
- Some(r)
- },
- Some(DropOption::None) | None => None,
- }
-}
-
-// Ok, dropping opt doesn't access the reference
-fn optional_tuple(opt: Option<(&mut i32, String)>) -> Option<&mut i32> {
- match opt {
- Some((&mut ref mut r, _)) => {
- Some(r)
- },
- None => None,
- }
-}
-
-// Ok, dropping res doesn't access the Ok case.
-fn different_variants(res: Result<&mut i32, String>) -> Option<&mut i32> {
- match res {
- Ok(&mut ref mut r) => {
- Some(r)
- },
- Err(_) => None,
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/enum-drop-access.stderr b/src/test/ui/nll/enum-drop-access.stderr
deleted file mode 100644
index a532ae121..000000000
--- a/src/test/ui/nll/enum-drop-access.stderr
+++ /dev/null
@@ -1,31 +0,0 @@
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/enum-drop-access.rs:13:31
- |
-LL | fn drop_enum(opt: DropOption<&mut i32>) -> Option<&mut i32> {
- | - let's call the lifetime of this reference `'1`
-LL | match opt {
-LL | DropOption::Some(&mut ref mut r) => {
- | ^^^^^^^^^
-LL | Some(r)
- | ------- returning this value requires that `*opt.0` is borrowed for `'1`
-...
-LL | }
- | - here, drop of `opt` needs exclusive access to `*opt.0`, because the type `DropOption<&mut i32>` implements the `Drop` trait
-
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/enum-drop-access.rs:22:36
- |
-LL | fn optional_drop_enum(opt: Option<DropOption<&mut i32>>) -> Option<&mut i32> {
- | - let's call the lifetime of this reference `'1`
-LL | match opt {
-LL | Some(DropOption::Some(&mut ref mut r)) => {
- | ^^^^^^^^^
-LL | Some(r)
- | ------- returning this value requires that `*opt.0.0` is borrowed for `'1`
-...
-LL | }
- | - here, drop of `opt` needs exclusive access to `*opt.0.0`, because the type `DropOption<&mut i32>` implements the `Drop` trait
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0713`.
diff --git a/src/test/ui/nll/extra-unused-mut.rs b/src/test/ui/nll/extra-unused-mut.rs
deleted file mode 100644
index 340f2952a..000000000
--- a/src/test/ui/nll/extra-unused-mut.rs
+++ /dev/null
@@ -1,66 +0,0 @@
-// extra unused mut lint tests for #51918
-
-// check-pass
-
-#![feature(generators)]
-#![deny(unused_mut)]
-
-fn ref_argument(ref _y: i32) {}
-
-// #51801
-fn mutable_upvar() {
- let mut x = 0;
- move || {
- x = 1;
- };
-}
-
-// #50897
-fn generator_mutable_upvar() {
- let mut x = 0;
- move || {
- x = 1;
- yield;
- };
-}
-
-// #51830
-fn ref_closure_argument() {
- let _ = Some(0).as_ref().map(|ref _a| true);
-}
-
-struct Expr {
- attrs: Vec<u32>,
-}
-
-// #51904
-fn parse_dot_or_call_expr_with(mut attrs: Vec<u32>) {
- let x = Expr { attrs: vec![] };
- Some(Some(x)).map(|expr|
- expr.map(|mut expr| {
- attrs.push(666);
- expr.attrs = attrs;
- expr
- })
- );
-}
-
-// Found when trying to bootstrap rustc
-fn if_guard(x: Result<i32, i32>) {
- match x {
- Ok(mut r) | Err(mut r) if true => r = 1,
- _ => (),
- }
-}
-
-// #59620
-fn nested_closures() {
- let mut i = 0;
- [].iter().for_each(|_: &i32| {
- [].iter().for_each(move |_: &i32| {
- i += 1;
- });
- });
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/generator-distinct-lifetime.rs b/src/test/ui/nll/generator-distinct-lifetime.rs
deleted file mode 100644
index 90fe6b569..000000000
--- a/src/test/ui/nll/generator-distinct-lifetime.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-#![feature(generators)]
-
-// Test for issue #47189. Here, both `s` and `t` are live for the
-// generator's lifetime, but within the generator they have distinct
-// lifetimes. We accept this code -- even though the borrow extends
-// over a yield -- because the data that is borrowed (`*x`) is not
-// stored on the stack.
-
-// check-pass
-
-fn foo(x: &mut u32) {
- move || {
- let s = &mut *x;
- yield;
- *s += 1;
-
- let t = &mut *x;
- yield;
- *t += 1;
- };
-}
-
-fn main() {
- foo(&mut 0);
-}
diff --git a/src/test/ui/nll/generator-upvar-mutability.rs b/src/test/ui/nll/generator-upvar-mutability.rs
deleted file mode 100644
index c49ea15b8..000000000
--- a/src/test/ui/nll/generator-upvar-mutability.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Check that generators respect the muatability of their upvars.
-
-#![feature(generators)]
-
-fn mutate_upvar() {
- let x = 0;
- move || {
- x = 1;
- //~^ ERROR
- yield;
- };
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/generator-upvar-mutability.stderr b/src/test/ui/nll/generator-upvar-mutability.stderr
deleted file mode 100644
index 31b061b61..000000000
--- a/src/test/ui/nll/generator-upvar-mutability.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0594]: cannot assign to `x`, as it is not declared as mutable
- --> $DIR/generator-upvar-mutability.rs:8:9
- |
-LL | let x = 0;
- | - help: consider changing this to be mutable: `mut x`
-LL | move || {
-LL | x = 1;
- | ^^^^^ cannot assign
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0594`.
diff --git a/src/test/ui/nll/get_default.polonius.stderr b/src/test/ui/nll/get_default.polonius.stderr
deleted file mode 100644
index 476d86cfb..000000000
--- a/src/test/ui/nll/get_default.polonius.stderr
+++ /dev/null
@@ -1,18 +0,0 @@
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable
- --> $DIR/get_default.rs:32:17
- |
-LL | fn err(map: &mut Map) -> &String {
- | - let's call the lifetime of this reference `'1`
-LL | loop {
-LL | match map.get() {
- | --- immutable borrow occurs here
-LL | Some(v) => {
-LL | map.set(String::new()); // Both AST and MIR error here
- | ^^^ mutable borrow occurs here
-LL |
-LL | return v;
- | - returning this value requires that `*map` is borrowed for `'1`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0502`.
diff --git a/src/test/ui/nll/get_default.rs b/src/test/ui/nll/get_default.rs
deleted file mode 100644
index ffac8a33d..000000000
--- a/src/test/ui/nll/get_default.rs
+++ /dev/null
@@ -1,44 +0,0 @@
-// Basic test for free regions in the NLL code. This test ought to
-// report an error due to a reborrowing constraint. Right now, we get
-// a variety of errors from the older, AST-based machinery (notably
-// borrowck), and then we get the NLL error at the end.
-
-struct Map {
-}
-
-impl Map {
- fn get(&self) -> Option<&String> { None }
- fn set(&mut self, v: String) { }
-}
-
-fn ok(map: &mut Map) -> &String {
- loop {
- match map.get() {
- Some(v) => {
- return v;
- }
- None => {
- map.set(String::new()); // Ideally, this would not error.
- //~^ ERROR borrowed as immutable
- }
- }
- }
-}
-
-fn err(map: &mut Map) -> &String {
- loop {
- match map.get() {
- Some(v) => {
- map.set(String::new()); // Both AST and MIR error here
- //~^ ERROR borrowed as immutable
- return v;
- }
- None => {
- map.set(String::new()); // Ideally, just AST would error here
- //~^ ERROR borrowed as immutable
- }
- }
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/get_default.stderr b/src/test/ui/nll/get_default.stderr
deleted file mode 100644
index 6998c0433..000000000
--- a/src/test/ui/nll/get_default.stderr
+++ /dev/null
@@ -1,48 +0,0 @@
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable
- --> $DIR/get_default.rs:21:17
- |
-LL | fn ok(map: &mut Map) -> &String {
- | - let's call the lifetime of this reference `'1`
-LL | loop {
-LL | match map.get() {
- | --------- immutable borrow occurs here
-LL | Some(v) => {
-LL | return v;
- | - returning this value requires that `*map` is borrowed for `'1`
-...
-LL | map.set(String::new()); // Ideally, this would not error.
- | ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
-
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable
- --> $DIR/get_default.rs:32:17
- |
-LL | fn err(map: &mut Map) -> &String {
- | - let's call the lifetime of this reference `'1`
-LL | loop {
-LL | match map.get() {
- | --------- immutable borrow occurs here
-LL | Some(v) => {
-LL | map.set(String::new()); // Both AST and MIR error here
- | ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
-LL |
-LL | return v;
- | - returning this value requires that `*map` is borrowed for `'1`
-
-error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable
- --> $DIR/get_default.rs:37:17
- |
-LL | fn err(map: &mut Map) -> &String {
- | - let's call the lifetime of this reference `'1`
-LL | loop {
-LL | match map.get() {
- | --------- immutable borrow occurs here
-...
-LL | return v;
- | - returning this value requires that `*map` is borrowed for `'1`
-...
-LL | map.set(String::new()); // Ideally, just AST would error here
- | ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0502`.
diff --git a/src/test/ui/nll/guarantor-issue-46974.rs b/src/test/ui/nll/guarantor-issue-46974.rs
deleted file mode 100644
index 96af4bf5c..000000000
--- a/src/test/ui/nll/guarantor-issue-46974.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Test that NLL analysis propagates lifetimes correctly through
-// field accesses, Box accesses, etc.
-
-fn foo(s: &mut (i32,)) -> i32 {
- let t = &mut *s; // this borrow should last for the entire function
- let x = &t.0;
- *s = (2,); //~ ERROR cannot assign to `*s`
- *x
-}
-
-fn bar(s: &Box<(i32,)>) -> &'static i32 {
- // FIXME(#46983): error message should be better
- &s.0 //~ ERROR lifetime may not live long enough
-}
-
-fn main() {
- foo(&mut (0,));
- bar(&Box::new((1,)));
-}
diff --git a/src/test/ui/nll/guarantor-issue-46974.stderr b/src/test/ui/nll/guarantor-issue-46974.stderr
deleted file mode 100644
index 8854dd8d6..000000000
--- a/src/test/ui/nll/guarantor-issue-46974.stderr
+++ /dev/null
@@ -1,23 +0,0 @@
-error[E0506]: cannot assign to `*s` because it is borrowed
- --> $DIR/guarantor-issue-46974.rs:7:5
- |
-LL | let t = &mut *s; // this borrow should last for the entire function
- | ------- borrow of `*s` occurs here
-LL | let x = &t.0;
-LL | *s = (2,);
- | ^^^^^^^^^ assignment to borrowed `*s` occurs here
-LL | *x
- | -- borrow later used here
-
-error: lifetime may not live long enough
- --> $DIR/guarantor-issue-46974.rs:13:5
- |
-LL | fn bar(s: &Box<(i32,)>) -> &'static i32 {
- | - let's call the lifetime of this reference `'1`
-LL | // FIXME(#46983): error message should be better
-LL | &s.0
- | ^^^^ returning this value requires that `'1` must outlive `'static`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/issue-16223.rs b/src/test/ui/nll/issue-16223.rs
deleted file mode 100644
index 0ae0ed3d8..000000000
--- a/src/test/ui/nll/issue-16223.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-// Regression test for #16223: without NLL the `if let` construct together with
-// the nested box-structure of `Root` causes an unwanted collateral move.
-
-// The exact error prevented here is:
-//
-// error[E0382]: use of collaterally moved value: `(root.boxed.rhs as SomeVariant::B).0`
-// --> src/main.rs:55:29
-// |
-// 56 | lhs: SomeVariant::A(a),
-// | - value moved here
-// 57 | rhs: SomeVariant::B(b),
-// | ^ value used here after move
-// |
-// = note: move occurs because the value has type `A`, which does not implement the `Copy` trait
-
-// check-pass
-
-#![feature(box_patterns)]
-
-struct Root {
- boxed: Box<SetOfVariants>,
-}
-
-struct SetOfVariants {
- lhs: SomeVariant,
- rhs: SomeVariant,
-}
-
-enum SomeVariant {
- A(A),
- B(B),
-}
-
-struct A(String);
-struct B(String);
-
-fn main() {
- let root = Root {
- boxed: Box::new(SetOfVariants {
- lhs: SomeVariant::A(A(String::from("This is A"))),
- rhs: SomeVariant::B(B(String::from("This is B"))),
- }),
- };
- if let box SetOfVariants {
- lhs: SomeVariant::A(a),
- rhs: SomeVariant::B(b),
- } = root.boxed
- {
- println!("a = {}", a.0);
- println!("b = {}", b.0);
- }
-}
diff --git a/src/test/ui/nll/issue-21114-ebfull.rs b/src/test/ui/nll/issue-21114-ebfull.rs
deleted file mode 100644
index fc4a6845a..000000000
--- a/src/test/ui/nll/issue-21114-ebfull.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// check-pass
-
-use std::collections::HashMap;
-use std::sync::Mutex;
-
-fn i_used_to_be_able_to(foo: &Mutex<HashMap<usize, usize>>) -> Vec<(usize, usize)> {
- let mut foo = foo.lock().unwrap();
-
- foo.drain().collect()
-}
-
-fn but_after_nightly_update_now_i_gotta(foo: &Mutex<HashMap<usize, usize>>) -> Vec<(usize, usize)> {
- let mut foo = foo.lock().unwrap();
-
- return foo.drain().collect();
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-21114-kixunil.rs b/src/test/ui/nll/issue-21114-kixunil.rs
deleted file mode 100644
index 666f89f35..000000000
--- a/src/test/ui/nll/issue-21114-kixunil.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-// check-pass
-
-fn from_stdin(min: u64) -> Vec<u64> {
- use std::io::BufRead;
-
- let stdin = std::io::stdin();
- let stdin = stdin.lock();
-
- stdin.lines()
- .map(Result::unwrap)
- .map(|val| val.parse())
- .map(Result::unwrap)
- .filter(|val| *val >= min)
- .collect()
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-21232-partial-init-and-erroneous-use.rs b/src/test/ui/nll/issue-21232-partial-init-and-erroneous-use.rs
deleted file mode 100644
index 46a156d2a..000000000
--- a/src/test/ui/nll/issue-21232-partial-init-and-erroneous-use.rs
+++ /dev/null
@@ -1,60 +0,0 @@
-// This test enumerates various cases of interest where an ADT or tuple is
-// partially initialized and then used in some way that is wrong *even*
-// after rust-lang/rust#54987 is implemented.
-//
-// See rust-lang/rust#21232, rust-lang/rust#54986, and rust-lang/rust#54987.
-//
-// See issue-21232-partial-init-and-use.rs for cases of tests that are
-// meant to compile and run successfully once rust-lang/rust#54987 is
-// implemented.
-
-struct D {
- x: u32,
- s: S,
-}
-
-struct S {
- y: u32,
- z: u32,
-}
-
-
-impl Drop for D {
- fn drop(&mut self) { }
-}
-
-fn cannot_partially_init_adt_with_drop() {
- let d: D;
- d.x = 10; //~ ERROR E0381
-}
-
-fn cannot_partially_init_mutable_adt_with_drop() {
- let mut d: D;
- d.x = 10; //~ ERROR E0381
-}
-
-fn cannot_partially_reinit_adt_with_drop() {
- let mut d = D { x: 0, s: S{ y: 0, z: 0 } };
- drop(d);
- d.x = 10;
- //~^ ERROR assign of moved value: `d` [E0382]
-}
-
-fn cannot_partially_init_inner_adt_via_outer_with_drop() {
- let d: D;
- d.s.y = 20; //~ ERROR E0381
-}
-
-fn cannot_partially_init_inner_adt_via_mutable_outer_with_drop() {
- let mut d: D;
- d.s.y = 20; //~ ERROR E0381
-}
-
-fn cannot_partially_reinit_inner_adt_via_outer_with_drop() {
- let mut d = D { x: 0, s: S{ y: 0, z: 0} };
- drop(d);
- d.s.y = 20;
- //~^ ERROR assign to part of moved value: `d` [E0382]
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-21232-partial-init-and-erroneous-use.stderr b/src/test/ui/nll/issue-21232-partial-init-and-erroneous-use.stderr
deleted file mode 100644
index 63f230be7..000000000
--- a/src/test/ui/nll/issue-21232-partial-init-and-erroneous-use.stderr
+++ /dev/null
@@ -1,64 +0,0 @@
-error[E0381]: assigned binding `d` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-erroneous-use.rs:28:5
- |
-LL | let d: D;
- | - binding declared here but left uninitialized
-LL | d.x = 10;
- | ^^^^^^^^ `d` assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0381]: assigned binding `d` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-erroneous-use.rs:33:5
- |
-LL | let mut d: D;
- | ----- binding declared here but left uninitialized
-LL | d.x = 10;
- | ^^^^^^^^ `d` assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0382]: assign of moved value: `d`
- --> $DIR/issue-21232-partial-init-and-erroneous-use.rs:39:5
- |
-LL | let mut d = D { x: 0, s: S{ y: 0, z: 0 } };
- | ----- move occurs because `d` has type `D`, which does not implement the `Copy` trait
-LL | drop(d);
- | - value moved here
-LL | d.x = 10;
- | ^^^^^^^^ value assigned here after move
-
-error[E0381]: partially assigned binding `d` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-erroneous-use.rs:45:5
- |
-LL | let d: D;
- | - binding declared here but left uninitialized
-LL | d.s.y = 20;
- | ^^^^^^^^^^ `d.s` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0381]: partially assigned binding `d` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-erroneous-use.rs:50:5
- |
-LL | let mut d: D;
- | ----- binding declared here but left uninitialized
-LL | d.s.y = 20;
- | ^^^^^^^^^^ `d.s` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0382]: assign to part of moved value: `d`
- --> $DIR/issue-21232-partial-init-and-erroneous-use.rs:56:5
- |
-LL | let mut d = D { x: 0, s: S{ y: 0, z: 0} };
- | ----- move occurs because `d` has type `D`, which does not implement the `Copy` trait
-LL | drop(d);
- | - value moved here
-LL | d.s.y = 20;
- | ^^^^^^^^^^ value partially assigned here after move
-
-error: aborting due to 6 previous errors
-
-Some errors have detailed explanations: E0381, E0382.
-For more information about an error, try `rustc --explain E0381`.
diff --git a/src/test/ui/nll/issue-21232-partial-init-and-use.rs b/src/test/ui/nll/issue-21232-partial-init-and-use.rs
deleted file mode 100644
index ad3eb2483..000000000
--- a/src/test/ui/nll/issue-21232-partial-init-and-use.rs
+++ /dev/null
@@ -1,297 +0,0 @@
-// This test enumerates various cases of interest for partial
-// [re]initialization of ADTs and tuples.
-//
-// See rust-lang/rust#21232, rust-lang/rust#54986, and rust-lang/rust#54987.
-//
-// All of tests in this file are expected to change from being
-// rejected, at least under NLL (by rust-lang/rust#54986) to being
-// **accepted** when rust-lang/rust#54987 is implemented.
-// (That's why there are assertions in the code.)
-//
-// See issue-21232-partial-init-and-erroneous-use.rs for cases of
-// tests that are meant to continue failing to compile once
-// rust-lang/rust#54987 is implemented.
-
-struct S<Y> {
- x: u32,
-
- // Note that even though `y` may implement `Drop`, under #54987 we
- // will still allow partial initialization of `S` itself.
- y: Y,
-}
-
-enum Void { }
-
-type B = Box<u32>;
-
-impl S<B> { fn new() -> Self { S { x: 0, y: Box::new(0) } } }
-
-fn borrow_s(s: &S<B>) { assert_eq!(s.x, 10); assert_eq!(*s.y, 20); }
-fn move_s(s: S<B>) { assert_eq!(s.x, 10); assert_eq!(*s.y, 20); }
-fn borrow_field(x: &u32) { assert_eq!(*x, 10); }
-
-type T = (u32, B);
-type Tvoid = (u32, Void);
-
-fn borrow_t(t: &T) { assert_eq!(t.0, 10); assert_eq!(*t.1, 20); }
-fn move_t(t: T) { assert_eq!(t.0, 10); assert_eq!(*t.1, 20); }
-
-struct Q<F> {
- v: u32,
- r: R<F>,
-}
-
-struct R<F> {
- w: u32,
- f: F,
-}
-
-impl<F> Q<F> { fn new(f: F) -> Self { Q { v: 0, r: R::new(f) } } }
-impl<F> R<F> { fn new(f: F) -> Self { R { w: 0, f } } }
-
-// Axes to cover:
-// * local/field: Is the structure in a local or a field
-// * fully/partial/void: Are we fully initializing it before using any part?
-// Is whole type empty due to a void component?
-// * init/reinit: First initialization, or did we previously initialize and then move out?
-// * struct/tuple: Is this a struct or a (X, Y).
-//
-// As a shorthand for the cases above, adding a numeric summary to
-// each test's fn name to denote each point on each axis.
-//
-// e.g., 1000 = field fully init struct; 0211 = local void reinit tuple
-
-// It got pretty monotonous writing the same code over and over, and I
-// feared I would forget details. So I abstracted some desiderata into
-// macros. But I left the initialization code inline, because that's
-// where the errors for #54986 will be emitted.
-
-macro_rules! use_fully {
- (struct $s:expr) => { {
- borrow_field(& $s.x );
- borrow_s(& $s );
- move_s( $s );
- } };
-
- (tuple $t:expr) => { {
- borrow_field(& $t.0 );
- borrow_t(& $t );
- move_t( $t );
- } }
-}
-
-macro_rules! use_part {
- (struct $s:expr) => { {
- borrow_field(& $s.x );
- match $s { S { ref x, y: _ } => { borrow_field(x); } }
- } };
-
- (tuple $t:expr) => { {
- borrow_field(& $t.0 );
- match $t { (ref x, _) => { borrow_field(x); } }
- } }
-}
-
-fn test_0000_local_fully_init_and_use_struct() {
- let s: S<B>;
- s.x = 10; s.y = Box::new(20); //~ ERROR E0381
- use_fully!(struct s);
-}
-
-fn test_0001_local_fully_init_and_use_tuple() {
- let t: T;
- t.0 = 10; t.1 = Box::new(20); //~ ERROR E0381
- use_fully!(tuple t);
-}
-
-fn test_0010_local_fully_reinit_and_use_struct() {
- let mut s: S<B> = S::new(); drop(s);
- s.x = 10; s.y = Box::new(20);
- //~^ ERROR assign to part of moved value: `s` [E0382]
- use_fully!(struct s);
-}
-
-fn test_0011_local_fully_reinit_and_use_tuple() {
- let mut t: T = (0, Box::new(0)); drop(t);
- t.0 = 10; t.1 = Box::new(20);
- //~^ ERROR assign to part of moved value: `t` [E0382]
- use_fully!(tuple t);
-}
-
-fn test_0100_local_partial_init_and_use_struct() {
- let s: S<B>;
- s.x = 10; //~ ERROR E0381
- use_part!(struct s);
-}
-
-fn test_0101_local_partial_init_and_use_tuple() {
- let t: T;
- t.0 = 10; //~ ERROR E0381
- use_part!(tuple t);
-}
-
-fn test_0110_local_partial_reinit_and_use_struct() {
- let mut s: S<B> = S::new(); drop(s);
- s.x = 10;
- //~^ ERROR assign to part of moved value: `s` [E0382]
- use_part!(struct s);
-}
-
-fn test_0111_local_partial_reinit_and_use_tuple() {
- let mut t: T = (0, Box::new(0)); drop(t);
- t.0 = 10;
- //~^ ERROR assign to part of moved value: `t` [E0382]
- use_part!(tuple t);
-}
-
-fn test_0200_local_void_init_and_use_struct() {
- let s: S<Void>;
- s.x = 10; //~ ERROR E0381
- use_part!(struct s);
-}
-
-fn test_0201_local_void_init_and_use_tuple() {
- let t: Tvoid;
- t.0 = 10; //~ ERROR E0381
- use_part!(tuple t);
-}
-
-// NOTE: uniform structure of tests here makes n21n (aka combining
-// Void with Reinit) an (even more) senseless case, as we cannot
-// safely create initial instance containing Void to move out of and
-// then reinitialize. While I was tempted to sidestep this via some
-// unsafe code (eek), lets just instead not encode such tests.
-
-// fn test_0210_local_void_reinit_and_use_struct() { unimplemented!() }
-// fn test_0211_local_void_reinit_and_use_tuple() { unimplemented!() }
-
-fn test_1000_field_fully_init_and_use_struct() {
- let q: Q<S<B>>;
- q.r.f.x = 10; q.r.f.y = Box::new(20); //~ ERROR E0381
- use_fully!(struct q.r.f);
-}
-
-fn test_1001_field_fully_init_and_use_tuple() {
- let q: Q<T>;
- q.r.f.0 = 10; q.r.f.1 = Box::new(20); //~ ERROR E0381
- use_fully!(tuple q.r.f);
-}
-
-fn test_1010_field_fully_reinit_and_use_struct() {
- let mut q: Q<S<B>> = Q::new(S::new()); drop(q.r);
- q.r.f.x = 10; q.r.f.y = Box::new(20);
- //~^ ERROR assign to part of moved value: `q.r` [E0382]
- use_fully!(struct q.r.f);
-}
-
-fn test_1011_field_fully_reinit_and_use_tuple() {
- let mut q: Q<T> = Q::new((0, Box::new(0))); drop(q.r);
- q.r.f.0 = 10; q.r.f.1 = Box::new(20);
- //~^ ERROR assign to part of moved value: `q.r` [E0382]
- use_fully!(tuple q.r.f);
-}
-
-fn test_1100_field_partial_init_and_use_struct() {
- let q: Q<S<B>>;
- q.r.f.x = 10; //~ ERROR E0381
- use_part!(struct q.r.f);
-}
-
-fn test_1101_field_partial_init_and_use_tuple() {
- let q: Q<T>;
- q.r.f.0 = 10; //~ ERROR E0381
- use_part!(tuple q.r.f);
-}
-
-fn test_1110_field_partial_reinit_and_use_struct() {
- let mut q: Q<S<B>> = Q::new(S::new()); drop(q.r);
- q.r.f.x = 10;
- //~^ ERROR assign to part of moved value: `q.r` [E0382]
- use_part!(struct q.r.f);
-}
-
-fn test_1111_field_partial_reinit_and_use_tuple() {
- let mut q: Q<T> = Q::new((0, Box::new(0))); drop(q.r);
- q.r.f.0 = 10;
- //~^ ERROR assign to part of moved value: `q.r` [E0382]
- use_part!(tuple q.r.f);
-}
-
-fn test_1200_field_void_init_and_use_struct() {
- let mut q: Q<S<Void>>;
- q.r.f.x = 10; //~ ERROR E0381
- use_part!(struct q.r.f);
-}
-
-fn test_1201_field_void_init_and_use_tuple() {
- let mut q: Q<Tvoid>;
- q.r.f.0 = 10; //~ ERROR E0381
- use_part!(tuple q.r.f);
-}
-
-// See NOTE abve.
-
-// fn test_1210_field_void_reinit_and_use_struct() { unimplemented!() }
-// fn test_1211_field_void_reinit_and_use_tuple() { unimplemented!() }
-
-// The below are some additional cases of interest that have been
-// transcribed from other bugs based on old erroneous codegen when we
-// encountered partial writes.
-
-fn issue_26996() {
- let mut c = (1, "".to_owned());
- match c {
- c2 => {
- c.0 = 2; //~ ERROR assign to part of moved value
- assert_eq!(c2.0, 1);
- }
- }
-}
-
-fn issue_27021() {
- let mut c = (1, (1, "".to_owned()));
- match c {
- c2 => {
- (c.1).0 = 2; //~ ERROR assign to part of moved value
- assert_eq!((c2.1).0, 1);
- }
- }
-
- let mut c = (1, (1, (1, "".to_owned())));
- match c.1 {
- c2 => {
- ((c.1).1).0 = 3; //~ ERROR assign to part of moved value
- assert_eq!((c2.1).0, 1);
- }
- }
-}
-
-fn main() {
- test_0000_local_fully_init_and_use_struct();
- test_0001_local_fully_init_and_use_tuple();
- test_0010_local_fully_reinit_and_use_struct();
- test_0011_local_fully_reinit_and_use_tuple();
- test_0100_local_partial_init_and_use_struct();
- test_0101_local_partial_init_and_use_tuple();
- test_0110_local_partial_reinit_and_use_struct();
- test_0111_local_partial_reinit_and_use_tuple();
- test_0200_local_void_init_and_use_struct();
- test_0201_local_void_init_and_use_tuple();
- // test_0210_local_void_reinit_and_use_struct();
- // test_0211_local_void_reinit_and_use_tuple();
- test_1000_field_fully_init_and_use_struct();
- test_1001_field_fully_init_and_use_tuple();
- test_1010_field_fully_reinit_and_use_struct();
- test_1011_field_fully_reinit_and_use_tuple();
- test_1100_field_partial_init_and_use_struct();
- test_1101_field_partial_init_and_use_tuple();
- test_1110_field_partial_reinit_and_use_struct();
- test_1111_field_partial_reinit_and_use_tuple();
- test_1200_field_void_init_and_use_struct();
- test_1201_field_void_init_and_use_tuple();
- // test_1210_field_void_reinit_and_use_struct();
- // test_1211_field_void_reinit_and_use_tuple();
-
- issue_26996();
- issue_27021();
-}
diff --git a/src/test/ui/nll/issue-21232-partial-init-and-use.stderr b/src/test/ui/nll/issue-21232-partial-init-and-use.stderr
deleted file mode 100644
index 97ed414b1..000000000
--- a/src/test/ui/nll/issue-21232-partial-init-and-use.stderr
+++ /dev/null
@@ -1,260 +0,0 @@
-error[E0381]: partially assigned binding `s` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:97:5
- |
-LL | let s: S<B>;
- | - binding declared here but left uninitialized
-LL | s.x = 10; s.y = Box::new(20);
- | ^^^^^^^^ `s` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0381]: partially assigned binding `t` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:103:5
- |
-LL | let t: T;
- | - binding declared here but left uninitialized
-LL | t.0 = 10; t.1 = Box::new(20);
- | ^^^^^^^^ `t` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0382]: assign to part of moved value: `s`
- --> $DIR/issue-21232-partial-init-and-use.rs:109:5
- |
-LL | let mut s: S<B> = S::new(); drop(s);
- | ----- - value moved here
- | |
- | move occurs because `s` has type `S<Box<u32>>`, which does not implement the `Copy` trait
-LL | s.x = 10; s.y = Box::new(20);
- | ^^^^^^^^ value partially assigned here after move
-
-error[E0382]: assign to part of moved value: `t`
- --> $DIR/issue-21232-partial-init-and-use.rs:116:5
- |
-LL | let mut t: T = (0, Box::new(0)); drop(t);
- | ----- - value moved here
- | |
- | move occurs because `t` has type `(u32, Box<u32>)`, which does not implement the `Copy` trait
-LL | t.0 = 10; t.1 = Box::new(20);
- | ^^^^^^^^ value partially assigned here after move
- |
-help: consider cloning the value if the performance cost is acceptable
- |
-LL | let mut t: T = (0, Box::new(0)); drop(t.clone());
- | ++++++++
-
-error[E0381]: partially assigned binding `s` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:123:5
- |
-LL | let s: S<B>;
- | - binding declared here but left uninitialized
-LL | s.x = 10;
- | ^^^^^^^^ `s` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0381]: partially assigned binding `t` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:129:5
- |
-LL | let t: T;
- | - binding declared here but left uninitialized
-LL | t.0 = 10;
- | ^^^^^^^^ `t` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0382]: assign to part of moved value: `s`
- --> $DIR/issue-21232-partial-init-and-use.rs:135:5
- |
-LL | let mut s: S<B> = S::new(); drop(s);
- | ----- - value moved here
- | |
- | move occurs because `s` has type `S<Box<u32>>`, which does not implement the `Copy` trait
-LL | s.x = 10;
- | ^^^^^^^^ value partially assigned here after move
-
-error[E0382]: assign to part of moved value: `t`
- --> $DIR/issue-21232-partial-init-and-use.rs:142:5
- |
-LL | let mut t: T = (0, Box::new(0)); drop(t);
- | ----- - value moved here
- | |
- | move occurs because `t` has type `(u32, Box<u32>)`, which does not implement the `Copy` trait
-LL | t.0 = 10;
- | ^^^^^^^^ value partially assigned here after move
- |
-help: consider cloning the value if the performance cost is acceptable
- |
-LL | let mut t: T = (0, Box::new(0)); drop(t.clone());
- | ++++++++
-
-error[E0381]: partially assigned binding `s` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:149:5
- |
-LL | let s: S<Void>;
- | - binding declared here but left uninitialized
-LL | s.x = 10;
- | ^^^^^^^^ `s` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0381]: partially assigned binding `t` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:155:5
- |
-LL | let t: Tvoid;
- | - binding declared here but left uninitialized
-LL | t.0 = 10;
- | ^^^^^^^^ `t` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0381]: partially assigned binding `q` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:170:5
- |
-LL | let q: Q<S<B>>;
- | - binding declared here but left uninitialized
-LL | q.r.f.x = 10; q.r.f.y = Box::new(20);
- | ^^^^^^^^^^^^ `q.r.f` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0381]: partially assigned binding `q` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:176:5
- |
-LL | let q: Q<T>;
- | - binding declared here but left uninitialized
-LL | q.r.f.0 = 10; q.r.f.1 = Box::new(20);
- | ^^^^^^^^^^^^ `q.r.f` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0382]: assign to part of moved value: `q.r`
- --> $DIR/issue-21232-partial-init-and-use.rs:182:5
- |
-LL | let mut q: Q<S<B>> = Q::new(S::new()); drop(q.r);
- | --- value moved here
-LL | q.r.f.x = 10; q.r.f.y = Box::new(20);
- | ^^^^^^^^^^^^ value partially assigned here after move
- |
- = note: move occurs because `q.r` has type `R<S<Box<u32>>>`, which does not implement the `Copy` trait
-
-error[E0382]: assign to part of moved value: `q.r`
- --> $DIR/issue-21232-partial-init-and-use.rs:189:5
- |
-LL | let mut q: Q<T> = Q::new((0, Box::new(0))); drop(q.r);
- | --- value moved here
-LL | q.r.f.0 = 10; q.r.f.1 = Box::new(20);
- | ^^^^^^^^^^^^ value partially assigned here after move
- |
- = note: move occurs because `q.r` has type `R<(u32, Box<u32>)>`, which does not implement the `Copy` trait
-
-error[E0381]: partially assigned binding `q` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:196:5
- |
-LL | let q: Q<S<B>>;
- | - binding declared here but left uninitialized
-LL | q.r.f.x = 10;
- | ^^^^^^^^^^^^ `q.r.f` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0381]: partially assigned binding `q` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:202:5
- |
-LL | let q: Q<T>;
- | - binding declared here but left uninitialized
-LL | q.r.f.0 = 10;
- | ^^^^^^^^^^^^ `q.r.f` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0382]: assign to part of moved value: `q.r`
- --> $DIR/issue-21232-partial-init-and-use.rs:208:5
- |
-LL | let mut q: Q<S<B>> = Q::new(S::new()); drop(q.r);
- | --- value moved here
-LL | q.r.f.x = 10;
- | ^^^^^^^^^^^^ value partially assigned here after move
- |
- = note: move occurs because `q.r` has type `R<S<Box<u32>>>`, which does not implement the `Copy` trait
-
-error[E0382]: assign to part of moved value: `q.r`
- --> $DIR/issue-21232-partial-init-and-use.rs:215:5
- |
-LL | let mut q: Q<T> = Q::new((0, Box::new(0))); drop(q.r);
- | --- value moved here
-LL | q.r.f.0 = 10;
- | ^^^^^^^^^^^^ value partially assigned here after move
- |
- = note: move occurs because `q.r` has type `R<(u32, Box<u32>)>`, which does not implement the `Copy` trait
-
-error[E0381]: partially assigned binding `q` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:222:5
- |
-LL | let mut q: Q<S<Void>>;
- | ----- binding declared here but left uninitialized
-LL | q.r.f.x = 10;
- | ^^^^^^^^^^^^ `q.r.f` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0381]: partially assigned binding `q` isn't fully initialized
- --> $DIR/issue-21232-partial-init-and-use.rs:228:5
- |
-LL | let mut q: Q<Tvoid>;
- | ----- binding declared here but left uninitialized
-LL | q.r.f.0 = 10;
- | ^^^^^^^^^^^^ `q.r.f` partially assigned here but it isn't fully initialized
- |
- = help: partial initialization isn't supported, fully initialize the binding with a default value and mutate it, or use `std::mem::MaybeUninit`
-
-error[E0382]: assign to part of moved value: `c`
- --> $DIR/issue-21232-partial-init-and-use.rs:245:13
- |
-LL | let mut c = (1, "".to_owned());
- | ----- move occurs because `c` has type `(i32, String)`, which does not implement the `Copy` trait
-LL | match c {
-LL | c2 => {
- | -- value moved here
-LL | c.0 = 2;
- | ^^^^^^^ value partially assigned here after move
- |
-help: borrow this binding in the pattern to avoid moving the value
- |
-LL | ref c2 => {
- | +++
-
-error[E0382]: assign to part of moved value: `c`
- --> $DIR/issue-21232-partial-init-and-use.rs:255:13
- |
-LL | let mut c = (1, (1, "".to_owned()));
- | ----- move occurs because `c` has type `(i32, (i32, String))`, which does not implement the `Copy` trait
-LL | match c {
-LL | c2 => {
- | -- value moved here
-LL | (c.1).0 = 2;
- | ^^^^^^^^^^^ value partially assigned here after move
- |
-help: borrow this binding in the pattern to avoid moving the value
- |
-LL | ref c2 => {
- | +++
-
-error[E0382]: assign to part of moved value: `c.1`
- --> $DIR/issue-21232-partial-init-and-use.rs:263:13
- |
-LL | c2 => {
- | -- value moved here
-LL | ((c.1).1).0 = 3;
- | ^^^^^^^^^^^^^^^ value partially assigned here after move
- |
- = note: move occurs because `c.1` has type `(i32, (i32, String))`, which does not implement the `Copy` trait
-help: borrow this binding in the pattern to avoid moving the value
- |
-LL | ref c2 => {
- | +++
-
-error: aborting due to 23 previous errors
-
-Some errors have detailed explanations: E0381, E0382.
-For more information about an error, try `rustc --explain E0381`.
diff --git a/src/test/ui/nll/issue-22323-temp-destruction.rs b/src/test/ui/nll/issue-22323-temp-destruction.rs
deleted file mode 100644
index 3f2ece1cf..000000000
--- a/src/test/ui/nll/issue-22323-temp-destruction.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// rust-lang/rust#22323: regression test demonstrating that NLL
-// precisely tracks temporary destruction order.
-
-// check-pass
-
-fn main() {
- let _s = construct().borrow().consume_borrowed();
-}
-
-fn construct() -> Value { Value }
-
-pub struct Value;
-
-impl Value {
- fn borrow<'a>(&'a self) -> Borrowed<'a> { unimplemented!() }
-}
-
-pub struct Borrowed<'a> {
- _inner: Guard<'a, Value>,
-}
-
-impl<'a> Borrowed<'a> {
- fn consume_borrowed(self) -> String { unimplemented!() }
-}
-
-pub struct Guard<'a, T: ?Sized + 'a> {
- _lock: &'a T,
-}
-
-impl<'a, T: ?Sized> Drop for Guard<'a, T> { fn drop(&mut self) {} }
diff --git a/src/test/ui/nll/issue-24535-allow-mutable-borrow-in-match-guard.rs b/src/test/ui/nll/issue-24535-allow-mutable-borrow-in-match-guard.rs
deleted file mode 100644
index 7253d35ed..000000000
--- a/src/test/ui/nll/issue-24535-allow-mutable-borrow-in-match-guard.rs
+++ /dev/null
@@ -1,55 +0,0 @@
-// run-pass
-// This test illustrates that under NLL, we can remove our overly
-// conservative approach for disallowing mutations of match inputs.
-
-// See further discussion on rust-lang/rust#24535,
-// rust-lang/rfcs#1006, and rust-lang/rfcs#107
-
-fn main() {
- rust_issue_24535();
- rfcs_issue_1006_1();
- rfcs_issue_1006_2();
-}
-
-fn rust_issue_24535() {
- fn compare(a: &u8, b: &mut u8) -> bool {
- a == b
- }
-
- let a = 3u8;
-
- match a {
- 0 => panic!("nope"),
- 3 if compare(&a, &mut 3) => (),
- _ => panic!("nope"),
- }
-}
-
-fn rfcs_issue_1006_1() {
- let v = vec!["1".to_string(), "2".to_string(), "3".to_string()];
- match Some(&v) {
- Some(iv) if iv.iter().any(|x| &x[..]=="2") => true,
- _ => panic!("nope"),
- };
-}
-
-fn rfcs_issue_1006_2() {
- #[inline(always)]
- fn check<'a, I: Iterator<Item=&'a i32>>(mut i: I) -> bool {
- i.any(|&x| x == 2)
- }
-
- let slice = [1, 2, 3];
-
- match 42 {
- _ if slice.iter().any(|&x| x == 2) => { true },
- _ => { panic!("nope"); }
- };
-
- // (This match is just illustrating how easy it was to circumvent
- // the checking performed for the previous `match`.)
- match 42 {
- _ if check(slice.iter()) => { true },
- _ => { panic!("nope"); }
- };
-}
diff --git a/src/test/ui/nll/issue-27282-move-match-input-into-guard.rs b/src/test/ui/nll/issue-27282-move-match-input-into-guard.rs
deleted file mode 100644
index 4109c10e2..000000000
--- a/src/test/ui/nll/issue-27282-move-match-input-into-guard.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Issue 27282: Example 2: This sidesteps the AST checks disallowing
-// mutable borrows in match guards by hiding the mutable borrow in a
-// guard behind a move (of the mutably borrowed match input) within a
-// closure.
-//
-// This example is not rejected by AST borrowck (and then reliably
-// reaches the panic code when executed, despite the compiler warning
-// about that match arm being unreachable.
-
-fn main() {
- let b = &mut true;
- match b {
- //~^ ERROR use of moved value: `b` [E0382]
- &mut false => {},
- _ if { (|| { let bar = b; *bar = false; })();
- false } => { },
- &mut true => { println!("You might think we should get here"); },
- _ => panic!("surely we could never get here, since rustc warns it is unreachable."),
- }
-}
diff --git a/src/test/ui/nll/issue-27282-move-match-input-into-guard.stderr b/src/test/ui/nll/issue-27282-move-match-input-into-guard.stderr
deleted file mode 100644
index 9be1a9279..000000000
--- a/src/test/ui/nll/issue-27282-move-match-input-into-guard.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error[E0382]: use of moved value: `b`
- --> $DIR/issue-27282-move-match-input-into-guard.rs:12:5
- |
-LL | let b = &mut true;
- | - move occurs because `b` has type `&mut bool`, which does not implement the `Copy` trait
-LL | match b {
- | ^^^^^^^ value used here after move
-...
-LL | _ if { (|| { let bar = b; *bar = false; })();
- | -- - variable moved due to use in closure
- | |
- | value moved into closure here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/issue-27282-move-ref-mut-into-guard.rs b/src/test/ui/nll/issue-27282-move-ref-mut-into-guard.rs
deleted file mode 100644
index afa0ba780..000000000
--- a/src/test/ui/nll/issue-27282-move-ref-mut-into-guard.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Issue 27282: Example 1: This sidesteps the AST checks disallowing
-// mutable borrows in match guards by hiding the mutable borrow in a
-// guard behind a move (of the ref mut pattern id) within a closure.
-
-fn main() {
- match Some(&4) {
- None => {},
- ref mut foo
- if { (|| { let bar = foo; bar.take() })(); false } => {},
- //~^ ERROR cannot move out of `foo` in pattern guard [E0507]
- Some(s) => std::process::exit(*s),
- }
-}
diff --git a/src/test/ui/nll/issue-27282-move-ref-mut-into-guard.stderr b/src/test/ui/nll/issue-27282-move-ref-mut-into-guard.stderr
deleted file mode 100644
index a0d32616f..000000000
--- a/src/test/ui/nll/issue-27282-move-ref-mut-into-guard.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0507]: cannot move out of `foo` in pattern guard
- --> $DIR/issue-27282-move-ref-mut-into-guard.rs:9:19
- |
-LL | if { (|| { let bar = foo; bar.take() })(); false } => {},
- | ^^ --- move occurs because `foo` has type `&mut Option<&i32>`, which does not implement the `Copy` trait
- | |
- | move out of `foo` occurs here
- |
- = note: variables bound in patterns cannot be moved from until after the end of the pattern guard
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0507`.
diff --git a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-1.rs b/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-1.rs
deleted file mode 100644
index d17d6f07f..000000000
--- a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-1.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// This is testing an attempt to corrupt the discriminant of the match
-// arm in a guard, followed by an attempt to continue matching on that
-// corrupted discriminant in the remaining match arms.
-//
-// Basically this is testing that our new NLL feature of emitting a
-// fake read on each match arm is catching cases like this.
-//
-// This case is interesting because it includes a guard that
-// diverges, and therefore a single final fake-read at the very end
-// after the final match arm would not suffice.
-
-struct ForceFnOnce;
-
-fn main() {
- let mut x = &mut Some(&2);
- let force_fn_once = ForceFnOnce;
- match x {
- &mut None => panic!("unreachable"),
- &mut Some(&_) if {
- // ForceFnOnce needed to exploit #27282
- (|| { *x = None; drop(force_fn_once); })();
- //~^ ERROR cannot mutably borrow `x` in match guard [E0510]
- false
- } => {}
- &mut Some(&a) if { // this binds to garbage if we've corrupted discriminant
- println!("{}", a);
- panic!()
- } => {}
- _ => panic!("unreachable"),
- }
-}
diff --git a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-1.stderr b/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-1.stderr
deleted file mode 100644
index a1f973e0f..000000000
--- a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-1.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0510]: cannot mutably borrow `x` in match guard
- --> $DIR/issue-27282-mutate-before-diverging-arm-1.rs:21:14
- |
-LL | match x {
- | - value is immutable in match guard
-...
-LL | (|| { *x = None; drop(force_fn_once); })();
- | ^^ -- borrow occurs due to use of `x` in closure
- | |
- | cannot mutably borrow
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0510`.
diff --git a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-2.rs b/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-2.rs
deleted file mode 100644
index 9c3e7e997..000000000
--- a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-2.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-// This is testing an attempt to corrupt the discriminant of the match
-// arm in a guard, followed by an attempt to continue matching on that
-// corrupted discriminant in the remaining match arms.
-//
-// Basically this is testing that our new NLL feature of emitting a
-// fake read on each match arm is catching cases like this.
-//
-// This case is interesting because it includes a guard that
-// diverges, and therefore a single final fake-read at the very end
-// after the final match arm would not suffice.
-//
-// It is also interesting because the access to the corrupted data
-// occurs in the pattern-match itself, and not in the guard
-// expression.
-
-struct ForceFnOnce;
-
-fn main() {
- let mut x = &mut Some(&2);
- let force_fn_once = ForceFnOnce;
- match x {
- &mut None => panic!("unreachable"),
- &mut Some(&_)
- if {
- // ForceFnOnce needed to exploit #27282
- (|| { *x = None; drop(force_fn_once); })();
- //~^ ERROR cannot mutably borrow `x` in match guard [E0510]
- false
- } => {}
-
- // this segfaults if we corrupted the discriminant, because
- // the compiler gets to *assume* that it cannot be the `None`
- // case, even though that was the effect of the guard.
- &mut Some(&2)
- if {
- panic!()
- } => {}
- _ => panic!("unreachable"),
- }
-}
diff --git a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-2.stderr b/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-2.stderr
deleted file mode 100644
index dd46308d1..000000000
--- a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-2.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0510]: cannot mutably borrow `x` in match guard
- --> $DIR/issue-27282-mutate-before-diverging-arm-2.rs:26:18
- |
-LL | match x {
- | - value is immutable in match guard
-...
-LL | (|| { *x = None; drop(force_fn_once); })();
- | ^^ -- borrow occurs due to use of `x` in closure
- | |
- | cannot mutably borrow
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0510`.
diff --git a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-3.rs b/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-3.rs
deleted file mode 100644
index cff9e963e..000000000
--- a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-3.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// This is testing an attempt to corrupt the discriminant of the match
-// arm in a guard, followed by an attempt to continue matching on that
-// corrupted discriminant in the remaining match arms.
-//
-// Basically this is testing that our new NLL feature of emitting a
-// fake read on each match arm is catching cases like this.
-//
-// This case is interesting because a borrow of **x is untracked, because **x is
-// immutable. However, for matches we care that **x refers to the same value
-// until we have chosen a match arm.
-
-struct ForceFnOnce;
-fn main() {
- let mut x = &mut &Some(&2);
- let force_fn_once = ForceFnOnce;
- match **x {
- None => panic!("unreachable"),
- Some(&_) if {
- // ForceFnOnce needed to exploit #27282
- (|| { *x = &None; drop(force_fn_once); })();
- //~^ ERROR cannot mutably borrow `x` in match guard [E0510]
- false
- } => {}
- Some(&a) if { // this binds to garbage if we've corrupted discriminant
- println!("{}", a);
- panic!()
- } => {}
- _ => panic!("unreachable"),
- }
-}
diff --git a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-3.stderr b/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-3.stderr
deleted file mode 100644
index 4a4a25790..000000000
--- a/src/test/ui/nll/issue-27282-mutate-before-diverging-arm-3.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0510]: cannot mutably borrow `x` in match guard
- --> $DIR/issue-27282-mutate-before-diverging-arm-3.rs:20:14
- |
-LL | match **x {
- | --- value is immutable in match guard
-...
-LL | (|| { *x = &None; drop(force_fn_once); })();
- | ^^ -- borrow occurs due to use of `x` in closure
- | |
- | cannot mutably borrow
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0510`.
diff --git a/src/test/ui/nll/issue-27282-mutation-in-guard.rs b/src/test/ui/nll/issue-27282-mutation-in-guard.rs
deleted file mode 100644
index 395c7d214..000000000
--- a/src/test/ui/nll/issue-27282-mutation-in-guard.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main() {
- match Some(&4) {
- None => {},
- ref mut foo
- if {
- (|| { let bar = foo; bar.take() })();
- //~^ ERROR cannot move out of `foo` in pattern guard
- false
- } => {},
- Some(ref _s) => println!("Note this arm is bogus; the `Some` became `None` in the guard."),
- _ => println!("Here is some supposedly unreachable code."),
- }
-}
diff --git a/src/test/ui/nll/issue-27282-mutation-in-guard.stderr b/src/test/ui/nll/issue-27282-mutation-in-guard.stderr
deleted file mode 100644
index c4ce7e62f..000000000
--- a/src/test/ui/nll/issue-27282-mutation-in-guard.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0507]: cannot move out of `foo` in pattern guard
- --> $DIR/issue-27282-mutation-in-guard.rs:6:18
- |
-LL | (|| { let bar = foo; bar.take() })();
- | ^^ --- move occurs because `foo` has type `&mut Option<&i32>`, which does not implement the `Copy` trait
- | |
- | move out of `foo` occurs here
- |
- = note: variables bound in patterns cannot be moved from until after the end of the pattern guard
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0507`.
diff --git a/src/test/ui/nll/issue-27282-reborrow-ref-mut-in-guard.rs b/src/test/ui/nll/issue-27282-reborrow-ref-mut-in-guard.rs
deleted file mode 100644
index 82d8b9e9e..000000000
--- a/src/test/ui/nll/issue-27282-reborrow-ref-mut-in-guard.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Issue 27282: This is a variation on issue-27282-move-ref-mut-into-guard.rs
-//
-// It reborrows instead of moving the `ref mut` pattern borrow. This
-// means that our conservative check for mutation in guards will
-// reject it. But I want to make sure that we continue to reject it
-// (under NLL) even when that conservaive check goes away.
-
-fn main() {
- let mut b = &mut true;
- match b {
- &mut false => {},
- ref mut r if { (|| { let bar = &mut *r; **bar = false; })();
- //~^ ERROR cannot borrow `r` as mutable, as it is immutable for the pattern guard
- false } => { &mut *r; },
- &mut true => { println!("You might think we should get here"); },
- _ => panic!("surely we could never get here, since rustc warns it is unreachable."),
- }
-}
diff --git a/src/test/ui/nll/issue-27282-reborrow-ref-mut-in-guard.stderr b/src/test/ui/nll/issue-27282-reborrow-ref-mut-in-guard.stderr
deleted file mode 100644
index 48433432d..000000000
--- a/src/test/ui/nll/issue-27282-reborrow-ref-mut-in-guard.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0596]: cannot borrow `r` as mutable, as it is immutable for the pattern guard
- --> $DIR/issue-27282-reborrow-ref-mut-in-guard.rs:12:25
- |
-LL | ref mut r if { (|| { let bar = &mut *r; **bar = false; })();
- | ^^ -- mutable borrow occurs due to use of `r` in closure
- | |
- | cannot borrow as mutable
- |
- = note: variables bound in patterns are immutable until the end of the pattern guard
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0596`.
diff --git a/src/test/ui/nll/issue-27868.rs b/src/test/ui/nll/issue-27868.rs
deleted file mode 100644
index e436b22db..000000000
--- a/src/test/ui/nll/issue-27868.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Regression test for issue #27868
-
-use std::ops::AddAssign;
-
-struct MyVec<T>(Vec<T>);
-
-impl <T> Drop for MyVec<T> {
- fn drop(&mut self) {
- println!("Being dropped.");
- }
-}
-
-impl<T> AddAssign<T> for MyVec<T> {
- fn add_assign(&mut self, _elem: T) {
- println!("In add_assign.");
- }
-}
-
-fn main() {
- let mut vec = MyVec(vec![0]);
- let mut vecvec = vec![vec];
-
- vecvec[0] += {
- vecvec = vec![];
- //~^ ERROR cannot assign to `vecvec` because it is borrowed [E0506]
- 0
- };
-}
diff --git a/src/test/ui/nll/issue-27868.stderr b/src/test/ui/nll/issue-27868.stderr
deleted file mode 100644
index e0b3b5494..000000000
--- a/src/test/ui/nll/issue-27868.stderr
+++ /dev/null
@@ -1,18 +0,0 @@
-error[E0506]: cannot assign to `vecvec` because it is borrowed
- --> $DIR/issue-27868.rs:24:9
- |
-LL | vecvec[0] += {
- | ------
- | |
- | _____borrow of `vecvec` occurs here
- | |
-LL | | vecvec = vec![];
- | | ^^^^^^ assignment to borrowed `vecvec` occurs here
-LL | |
-LL | | 0
-LL | | };
- | |_____- borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/issue-30104.rs b/src/test/ui/nll/issue-30104.rs
deleted file mode 100644
index 38850cd3f..000000000
--- a/src/test/ui/nll/issue-30104.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Regression test for #30104
-
-// check-pass
-
-use std::ops::{Deref, DerefMut};
-
-fn box_two_field(v: &mut Box<(i32, i32)>) {
- let _a = &mut v.0;
- let _b = &mut v.1;
-}
-
-fn box_destructure(v: &mut Box<(i32, i32)>) {
- let (ref mut _head, ref mut _tail) = **v;
-}
-
-struct Wrap<T>(T);
-
-impl<T> Deref for Wrap<T> {
- type Target = T;
- fn deref(&self) -> &T {
- &self.0
- }
-}
-
-impl<T> DerefMut for Wrap<T> {
- fn deref_mut(&mut self) -> &mut T {
- &mut self.0
- }
-}
-
-fn smart_two_field(v: &mut Wrap<(i32, i32)>) {
- let _a = &mut v.0;
- let _b = &mut v.1;
-}
-
-fn smart_destructure(v: &mut Wrap<(i32, i32)>) {
- let (ref mut _head, ref mut _tail) = **v;
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-31567.rs b/src/test/ui/nll/issue-31567.rs
deleted file mode 100644
index 623954e6d..000000000
--- a/src/test/ui/nll/issue-31567.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Regression test for #31567: cached results of projections were
-// causing region relations not to be enforced at all the places where
-// they have to be enforced.
-
-struct VecWrapper<'a>(&'a mut S);
-
-struct S(Box<u32>);
-
-fn get_dangling<'a>(v: VecWrapper<'a>) -> &'a u32 {
- let s_inner: &'a S = &*v.0; //~ ERROR borrow may still be in use when destructor runs [E0713]
- &s_inner.0
-}
-
-impl<'a> Drop for VecWrapper<'a> {
- fn drop(&mut self) {
- *self.0 = S(Box::new(0));
- }
-}
-
-fn main() {
- let mut s = S(Box::new(11));
- let vw = VecWrapper(&mut s);
- let dangling = get_dangling(vw);
- println!("{}", dangling);
-}
diff --git a/src/test/ui/nll/issue-31567.stderr b/src/test/ui/nll/issue-31567.stderr
deleted file mode 100644
index 7d43383e8..000000000
--- a/src/test/ui/nll/issue-31567.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/issue-31567.rs:10:26
- |
-LL | fn get_dangling<'a>(v: VecWrapper<'a>) -> &'a u32 {
- | -- lifetime `'a` defined here
-LL | let s_inner: &'a S = &*v.0;
- | ----- ^^^^^
- | |
- | type annotation requires that `*v.0` is borrowed for `'a`
-LL | &s_inner.0
-LL | }
- | - here, drop of `v` needs exclusive access to `*v.0`, because the type `VecWrapper<'_>` implements the `Drop` trait
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0713`.
diff --git a/src/test/ui/nll/issue-32382-index-assoc-type-with-lifetime.rs b/src/test/ui/nll/issue-32382-index-assoc-type-with-lifetime.rs
deleted file mode 100644
index a8a8e6930..000000000
--- a/src/test/ui/nll/issue-32382-index-assoc-type-with-lifetime.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-// check-pass
-
-// rust-lang/rust#32382: Borrow checker used to complain about
-// `foobar_3` in the `impl` below, presumably due to some interaction
-// between the use of a lifetime in the associated type and the use of
-// the overloaded operator[]. This regression test ensures that we do
-// not resume complaining about it in the future.
-
-
-use std::marker::PhantomData;
-use std::ops::Index;
-
-pub trait Context: Clone {
- type Container: ?Sized;
- fn foobar_1( container: &Self::Container ) -> &str;
- fn foobar_2( container: &Self::Container ) -> &str;
- fn foobar_3( container: &Self::Container ) -> &str;
-}
-
-#[derive(Clone)]
-struct Foobar<'a> {
- phantom: PhantomData<&'a ()>
-}
-
-impl<'a> Context for Foobar<'a> {
- type Container = [&'a str];
-
- fn foobar_1<'r>( container: &'r [&'a str] ) -> &'r str {
- container[0]
- }
-
- fn foobar_2<'r>( container: &'r Self::Container ) -> &'r str {
- container.index( 0 )
- }
-
- fn foobar_3<'r>( container: &'r Self::Container ) -> &'r str {
- container[0]
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.rs b/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.rs
deleted file mode 100644
index 0ec0179e8..000000000
--- a/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-// This test illustrates a case where full NLL (enabled by the feature
-// switch below) produces superior diagnostics to the NLL-migrate
-// mode.
-
-fn doit(data: &'static mut ()) {
- || doit(data);
- //~^ ERROR lifetime may not live long enough
- //~| ERROR `data` does not live long enough
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.stderr b/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.stderr
deleted file mode 100644
index f7a525ee9..000000000
--- a/src/test/ui/nll/issue-42574-diagnostic-in-nested-closure.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-42574-diagnostic-in-nested-closure.rs:6:8
- |
-LL | || doit(data);
- | -- ^^^^^^^^^^ argument requires that `'1` must outlive `'static`
- | |
- | lifetime `'1` represents this closure's body
- |
- = note: closure implements `FnMut`, so references to captured variables can't escape the closure
-
-error[E0597]: `data` does not live long enough
- --> $DIR/issue-42574-diagnostic-in-nested-closure.rs:6:13
- |
-LL | || doit(data);
- | -- -----^^^^-
- | | | |
- | | | borrowed value does not live long enough
- | | argument requires that `data` is borrowed for `'static`
- | value captured here
-...
-LL | }
- | - `data` dropped here while still borrowed
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-43058.rs b/src/test/ui/nll/issue-43058.rs
deleted file mode 100644
index 227888d17..000000000
--- a/src/test/ui/nll/issue-43058.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// check-pass
-
-use std::borrow::Cow;
-
-#[derive(Clone, Debug)]
-struct S<'a> {
- name: Cow<'a, str>
-}
-
-#[derive(Clone, Debug)]
-struct T<'a> {
- s: Cow<'a, [S<'a>]>
-}
-
-fn main() {
- let s1 = [S { name: Cow::Borrowed("Test1") }, S { name: Cow::Borrowed("Test2") }];
- let b1 = T { s: Cow::Borrowed(&s1) };
- let s2 = [S { name: Cow::Borrowed("Test3") }, S { name: Cow::Borrowed("Test4") }];
- let b2 = T { s: Cow::Borrowed(&s2) };
-
- let mut v = Vec::new();
- v.push(b1);
- v.push(b2);
-
- println!("{:?}", v);
-}
diff --git a/src/test/ui/nll/issue-45157.rs b/src/test/ui/nll/issue-45157.rs
deleted file mode 100644
index 8d2bf22a0..000000000
--- a/src/test/ui/nll/issue-45157.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-#![allow(unused)]
-
-
-#[derive(Clone, Copy, Default)]
-struct S {
- a: u8,
- b: u8,
-}
-#[derive(Clone, Copy, Default)]
-struct Z {
- c: u8,
- d: u8,
-}
-
-union U {
- s: S,
- z: Z,
-}
-
-fn main() {
- unsafe {
- let mut u = U { s: Default::default() };
-
- let mref = &mut u.s.a;
- *mref = 22;
-
- let nref = &u.z.c;
- //~^ ERROR cannot borrow `u` (via `u.z.c`) as immutable because it is also borrowed as mutable (via `u.s.a`) [E0502]
- println!("{} {}", mref, nref)
- }
-}
diff --git a/src/test/ui/nll/issue-45157.stderr b/src/test/ui/nll/issue-45157.stderr
deleted file mode 100644
index 57fd8d49c..000000000
--- a/src/test/ui/nll/issue-45157.stderr
+++ /dev/null
@@ -1,17 +0,0 @@
-error[E0502]: cannot borrow `u` (via `u.z.c`) as immutable because it is also borrowed as mutable (via `u.s.a`)
- --> $DIR/issue-45157.rs:27:20
- |
-LL | let mref = &mut u.s.a;
- | ---------- mutable borrow occurs here (via `u.s.a`)
-...
-LL | let nref = &u.z.c;
- | ^^^^^^ immutable borrow of `u.z.c` -- which overlaps with `u.s.a` -- occurs here
-LL |
-LL | println!("{} {}", mref, nref)
- | ---- mutable borrow later used here
- |
- = note: `u.z.c` is a field of the union `U`, so it overlaps the field `u.s.a`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0502`.
diff --git a/src/test/ui/nll/issue-45696-long-live-borrows-in-boxes.rs b/src/test/ui/nll/issue-45696-long-live-borrows-in-boxes.rs
deleted file mode 100644
index b3f655628..000000000
--- a/src/test/ui/nll/issue-45696-long-live-borrows-in-boxes.rs
+++ /dev/null
@@ -1,114 +0,0 @@
-// rust-lang/rust#45696: This test is checking that we can return
-// mutable borrows owned by boxes even when the boxes are dropped.
-
-// run-pass
-
-// This function shows quite directly what is going on: We have a
-// reborrow of contents within the box.
-fn return_borrow_from_dropped_box_1(x: Box<&mut u32>) -> &mut u32 { &mut **x }
-
-// This function is the way you'll probably see this in practice (the
-// reborrow is now implicit).
-fn return_borrow_from_dropped_box_2(x: Box<&mut u32>) -> &mut u32 { *x }
-
-// For the remaining tests we just add some fields or other
-// indirection to ensure that the compiler isn't just special-casing
-// the above `Box<&mut T>` as the only type that would work.
-
-// Here we add a tuple of indirection between the box and the
-// reference.
-type BoxedTup<'a, 'b> = Box<(&'a mut u32, &'b mut u32)>;
-
-fn return_borrow_of_field_from_dropped_box_1<'a>(x: BoxedTup<'a, '_>) -> &'a mut u32 {
- &mut *x.0
-}
-
-fn return_borrow_of_field_from_dropped_box_2<'a>(x: BoxedTup<'a, '_>) -> &'a mut u32 {
- x.0
-}
-
-fn return_borrow_from_dropped_tupled_box_1<'a>(x: (BoxedTup<'a, '_>, &mut u32)) -> &'a mut u32 {
- &mut *(x.0).0
-}
-
-fn return_borrow_from_dropped_tupled_box_2<'a>(x: (BoxedTup<'a, '_>, &mut u32)) -> &'a mut u32 {
- (x.0).0
-}
-
-fn basic_tests() {
- let mut x = 2;
- let mut y = 3;
- let mut z = 4;
- *return_borrow_from_dropped_box_1(Box::new(&mut x)) += 10;
- assert_eq!((x, y, z), (12, 3, 4));
- *return_borrow_from_dropped_box_2(Box::new(&mut x)) += 10;
- assert_eq!((x, y, z), (22, 3, 4));
- *return_borrow_of_field_from_dropped_box_1(Box::new((&mut x, &mut y))) += 10;
- assert_eq!((x, y, z), (32, 3, 4));
- *return_borrow_of_field_from_dropped_box_2(Box::new((&mut x, &mut y))) += 10;
- assert_eq!((x, y, z), (42, 3, 4));
- *return_borrow_from_dropped_tupled_box_1((Box::new((&mut x, &mut y)), &mut z)) += 10;
- assert_eq!((x, y, z), (52, 3, 4));
- *return_borrow_from_dropped_tupled_box_2((Box::new((&mut x, &mut y)), &mut z)) += 10;
- assert_eq!((x, y, z), (62, 3, 4));
-}
-
-// These scribbling tests have been transcribed from
-// issue-45696-scribble-on-boxed-borrow.rs
-//
-// In the context of that file, these tests are meant to show cases
-// that should be *accepted* by the compiler, so here we are actually
-// checking that the code we get when they are compiled matches our
-// expectations.
-
-struct Scribble<'a>(&'a mut u32);
-
-impl<'a> Drop for Scribble<'a> { fn drop(&mut self) { *self.0 = 42; } }
-
-// this is okay, in both AST-borrowck and NLL: The `Scribble` here *has*
-// to strictly outlive `'a`
-fn borrowed_scribble<'a>(s: &'a mut Scribble) -> &'a mut u32 {
- &mut *s.0
-}
-
-// this, by analogy to previous case, is also okay.
-fn boxed_borrowed_scribble<'a>(s: Box<&'a mut Scribble>) -> &'a mut u32 {
- &mut *(*s).0
-}
-
-// this, by analogy to previous case, is also okay.
-fn boxed_boxed_borrowed_scribble<'a>(s: Box<Box<&'a mut Scribble>>) -> &'a mut u32 {
- &mut *(**s).0
-}
-
-fn scribbling_tests() {
- let mut x = 1;
- {
- let mut long_lived = Scribble(&mut x);
- *borrowed_scribble(&mut long_lived) += 10;
- assert_eq!(*long_lived.0, 11);
- // (Scribble dtor runs here, after `&mut`-borrow above ends)
- }
- assert_eq!(x, 42);
- x = 1;
- {
- let mut long_lived = Scribble(&mut x);
- *boxed_borrowed_scribble(Box::new(&mut long_lived)) += 10;
- assert_eq!(*long_lived.0, 11);
- // (Scribble dtor runs here, after `&mut`-borrow above ends)
- }
- assert_eq!(x, 42);
- x = 1;
- {
- let mut long_lived = Scribble(&mut x);
- *boxed_boxed_borrowed_scribble(Box::new(Box::new(&mut long_lived))) += 10;
- assert_eq!(*long_lived.0, 11);
- // (Scribble dtor runs here, after `&mut`-borrow above ends)
- }
- assert_eq!(x, 42);
-}
-
-fn main() {
- basic_tests();
- scribbling_tests();
-}
diff --git a/src/test/ui/nll/issue-45696-no-variant-box-recur.rs b/src/test/ui/nll/issue-45696-no-variant-box-recur.rs
deleted file mode 100644
index 39f1607a3..000000000
--- a/src/test/ui/nll/issue-45696-no-variant-box-recur.rs
+++ /dev/null
@@ -1,47 +0,0 @@
-// rust-lang/rust#45696: This test checks the compiler won't infinite loop when
-// you declare a variable of type `struct A(Box<A>, ...);` (which is impossible
-// to construct but *is* possible to declare; see also issues #4287, #44933,
-// and #52852).
-
-// run-pass
-
-// This test has structs and functions that are by definition unusable
-// all over the place, so just go ahead and allow dead_code
-#![allow(dead_code)]
-
-// direct regular recursion with indirect ownership via box
-struct C { field: Box<C> }
-
-// direct non-regular recursion with indirect ownership via box
-struct D { field: Box<(D, D)> }
-
-// indirect regular recursion with indirect ownership via box.
-struct E { field: F }
-struct F { field: Box<E> }
-
-// indirect non-regular recursion with indirect ownership via box.
-struct G { field: (H, H) }
-struct H { field: Box<G> }
-
-// These enums are cases that are not currently hit by the
-// `visit_terminator_drop` recursion down a type's structural
-// definition.
-//
-// But it seems prudent to include them in this test as variants on
-// the above, in that they are similarly non-constructable data types
-// with destructors that would diverge.
-enum I { One(Box<I>) }
-enum J { One(Box<J>), Two(Box<J>) }
-
-fn impossible_to_call_c(_c: C) { }
-fn impossible_to_call_d(_d: D) { }
-fn impossible_to_call_e(_e: E) { }
-fn impossible_to_call_f(_f: F) { }
-fn impossible_to_call_g(_g: G) { }
-fn impossible_to_call_h(_h: H) { }
-fn impossible_to_call_i(_i: I) { }
-fn impossible_to_call_j(_j: J) { }
-
-fn main() {
-
-}
diff --git a/src/test/ui/nll/issue-45696-scribble-on-boxed-borrow.rs b/src/test/ui/nll/issue-45696-scribble-on-boxed-borrow.rs
deleted file mode 100644
index 637cf278f..000000000
--- a/src/test/ui/nll/issue-45696-scribble-on-boxed-borrow.rs
+++ /dev/null
@@ -1,67 +0,0 @@
-// rust-lang/rust#45696: This test is checking that we *cannot* return
-// mutable borrows that would be scribbled over by destructors before
-// the return occurs.
-
-// ignore-compare-mode-polonius
-
-struct Scribble<'a>(&'a mut u32);
-
-impl<'a> Drop for Scribble<'a> { fn drop(&mut self) { *self.0 = 42; } }
-
-// this is okay: The `Scribble` here *has* to strictly outlive `'a`
-fn borrowed_scribble<'a>(s: &'a mut Scribble) -> &'a mut u32 {
- &mut *s.0
-}
-
-// this, by analogy to previous case, is also okay.
-fn boxed_borrowed_scribble<'a>(s: Box<&'a mut Scribble>) -> &'a mut u32 {
- &mut *(*s).0
-}
-
-// this, by analogy to previous case, is also okay.
-fn boxed_boxed_borrowed_scribble<'a>(s: Box<Box<&'a mut Scribble>>) -> &'a mut u32 {
- &mut *(**s).0
-}
-
-// this is not okay: in between the time that we take the mutable
-// borrow and the caller receives it as a return value, the drop of
-// `s` will scribble on it, violating our aliasing guarantees.
-//
-// * (Maybe in the future the two-phase borrows system will be
-// extended to support this case. But for now, it is an error in
-// NLL, even with two-phase borrows.)
-fn scribbled<'a>(s: Scribble<'a>) -> &'a mut u32 {
- &mut *s.0 //~ ERROR borrow may still be in use when destructor runs [E0713]
-}
-
-// This, by analogy to previous case, is *also* not okay.
-fn boxed_scribbled<'a>(s: Box<Scribble<'a>>) -> &'a mut u32 {
- &mut *(*s).0 //~ ERROR borrow may still be in use when destructor runs [E0713]
-}
-
-// This, by analogy to previous case, is *also* not okay.
-fn boxed_boxed_scribbled<'a>(s: Box<Box<Scribble<'a>>>) -> &'a mut u32 {
- &mut *(**s).0 //~ ERROR borrow may still be in use when destructor runs [E0713]
-}
-
-fn main() {
- let mut x = 1;
- {
- let mut long_lived = Scribble(&mut x);
- *borrowed_scribble(&mut long_lived) += 10;
- // (Scribble dtor runs here, after `&mut`-borrow above ends)
- }
- {
- let mut long_lived = Scribble(&mut x);
- *boxed_borrowed_scribble(Box::new(&mut long_lived)) += 10;
- // (Scribble dtor runs here, after `&mut`-borrow above ends)
- }
- {
- let mut long_lived = Scribble(&mut x);
- *boxed_boxed_borrowed_scribble(Box::new(Box::new(&mut long_lived))) += 10;
- // (Scribble dtor runs here, after `&mut`-borrow above ends)
- }
- *scribbled(Scribble(&mut x)) += 10;
- *boxed_scribbled(Box::new(Scribble(&mut x))) += 10;
- *boxed_boxed_scribbled(Box::new(Box::new(Scribble(&mut x)))) += 10;
-}
diff --git a/src/test/ui/nll/issue-45696-scribble-on-boxed-borrow.stderr b/src/test/ui/nll/issue-45696-scribble-on-boxed-borrow.stderr
deleted file mode 100644
index db0a17199..000000000
--- a/src/test/ui/nll/issue-45696-scribble-on-boxed-borrow.stderr
+++ /dev/null
@@ -1,33 +0,0 @@
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/issue-45696-scribble-on-boxed-borrow.rs:34:5
- |
-LL | fn scribbled<'a>(s: Scribble<'a>) -> &'a mut u32 {
- | -- lifetime `'a` defined here
-LL | &mut *s.0
- | ^^^^^^^^^ returning this value requires that `*s.0` is borrowed for `'a`
-LL | }
- | - here, drop of `s` needs exclusive access to `*s.0`, because the type `Scribble<'_>` implements the `Drop` trait
-
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/issue-45696-scribble-on-boxed-borrow.rs:39:5
- |
-LL | fn boxed_scribbled<'a>(s: Box<Scribble<'a>>) -> &'a mut u32 {
- | -- lifetime `'a` defined here
-LL | &mut *(*s).0
- | ^^^^^^^^^^^^ returning this value requires that `*s.0` is borrowed for `'a`
-LL | }
- | - here, drop of `s` needs exclusive access to `*s.0`, because the type `Scribble<'_>` implements the `Drop` trait
-
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/issue-45696-scribble-on-boxed-borrow.rs:44:5
- |
-LL | fn boxed_boxed_scribbled<'a>(s: Box<Box<Scribble<'a>>>) -> &'a mut u32 {
- | -- lifetime `'a` defined here
-LL | &mut *(**s).0
- | ^^^^^^^^^^^^^ returning this value requires that `*s.0` is borrowed for `'a`
-LL | }
- | - here, drop of `s` needs exclusive access to `*s.0`, because the type `Scribble<'_>` implements the `Drop` trait
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0713`.
diff --git a/src/test/ui/nll/issue-46023.rs b/src/test/ui/nll/issue-46023.rs
deleted file mode 100644
index a923eb244..000000000
--- a/src/test/ui/nll/issue-46023.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main() {
- let x = 0;
-
- (move || {
- x = 1;
- //~^ ERROR cannot assign to `x`, as it is not declared as mutable [E0594]
- })()
-}
diff --git a/src/test/ui/nll/issue-46023.stderr b/src/test/ui/nll/issue-46023.stderr
deleted file mode 100644
index ca19c2501..000000000
--- a/src/test/ui/nll/issue-46023.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0594]: cannot assign to `x`, as it is not declared as mutable
- --> $DIR/issue-46023.rs:5:9
- |
-LL | let x = 0;
- | - help: consider changing this to be mutable: `mut x`
-...
-LL | x = 1;
- | ^^^^^ cannot assign
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0594`.
diff --git a/src/test/ui/nll/issue-46036.rs b/src/test/ui/nll/issue-46036.rs
deleted file mode 100644
index 18af33c18..000000000
--- a/src/test/ui/nll/issue-46036.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Issue 46036: [NLL] false edges on infinite loops
-// Infinite loops should create false edges to the cleanup block.
-
-struct Foo { x: &'static u32 }
-
-fn foo() {
- let a = 3;
- let foo = Foo { x: &a }; //~ ERROR E0597
- loop { }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-46036.stderr b/src/test/ui/nll/issue-46036.stderr
deleted file mode 100644
index e6e95ee61..000000000
--- a/src/test/ui/nll/issue-46036.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0597]: `a` does not live long enough
- --> $DIR/issue-46036.rs:8:24
- |
-LL | let foo = Foo { x: &a };
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `a` is borrowed for `'static`
-LL | loop { }
-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/src/test/ui/nll/issue-46589.rs b/src/test/ui/nll/issue-46589.rs
deleted file mode 100644
index 0a4c20d15..000000000
--- a/src/test/ui/nll/issue-46589.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// This tests passes in Polonius mode, so is skipped in the automated compare-mode.
-// We will manually check it passes in Polonius tests, as we can't have a test here
-// which conditionally passes depending on a test revision/compile-flags.
-
-// ignore-compare-mode-polonius
-
-struct Foo;
-
-impl Foo {
- fn get_self(&mut self) -> Option<&mut Self> {
- Some(self)
- }
-
- fn new_self(&mut self) -> &mut Self {
- self
- }
-
- fn trigger_bug(&mut self) {
- let other = &mut (&mut *self);
-
- *other = match (*other).get_self() {
- Some(s) => s,
- None => (*other).new_self()
- //~^ ERROR cannot borrow `**other` as mutable more than once at a time [E0499]
- };
-
- let c = other;
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-46589.stderr b/src/test/ui/nll/issue-46589.stderr
deleted file mode 100644
index 60ef3f7b8..000000000
--- a/src/test/ui/nll/issue-46589.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0499]: cannot borrow `**other` as mutable more than once at a time
- --> $DIR/issue-46589.rs:23:21
- |
-LL | *other = match (*other).get_self() {
- | ------------------- first mutable borrow occurs here
-LL | Some(s) => s,
-LL | None => (*other).new_self()
- | ^^^^^^^^^^^^^^^^^^^
- | |
- | second mutable borrow occurs here
- | first borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0499`.
diff --git a/src/test/ui/nll/issue-47022.rs b/src/test/ui/nll/issue-47022.rs
deleted file mode 100644
index 521643c66..000000000
--- a/src/test/ui/nll/issue-47022.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// check-pass
-
-struct LoadedObject {
- bodies: Vec<Body>,
- color: Color,
-}
-
-struct Body;
-
-#[derive(Clone)]
-struct Color;
-
-struct Graphic {
- color: Color,
-}
-
-fn convert(objects: Vec<LoadedObject>) -> (Vec<Body>, Vec<Graphic>) {
- objects
- .into_iter()
- .flat_map(|LoadedObject { bodies, color, .. }| {
- bodies.into_iter().map(move |body| {
- (
- body,
- Graphic {
- color: color.clone(),
- },
- )
- })
- })
- .unzip()
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-47153-generic-const.rs b/src/test/ui/nll/issue-47153-generic-const.rs
deleted file mode 100644
index 9f4d57111..000000000
--- a/src/test/ui/nll/issue-47153-generic-const.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// run-pass
-
-// Regression test for #47153: constants in a generic context (such as
-// a trait) used to ICE.
-
-#![allow(warnings)]
-
-trait Foo {
- const B: bool = true;
-}
-
-struct Bar<T> { x: T }
-
-impl<T> Bar<T> {
- const B: bool = true;
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-47388.rs b/src/test/ui/nll/issue-47388.rs
deleted file mode 100644
index 207af380e..000000000
--- a/src/test/ui/nll/issue-47388.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-struct FancyNum {
- num: u8,
-}
-
-fn main() {
- let mut fancy = FancyNum{ num: 5 };
- let fancy_ref = &(&mut fancy);
- fancy_ref.num = 6; //~ ERROR E0594
- println!("{}", fancy_ref.num);
-}
diff --git a/src/test/ui/nll/issue-47388.stderr b/src/test/ui/nll/issue-47388.stderr
deleted file mode 100644
index a4ee77817..000000000
--- a/src/test/ui/nll/issue-47388.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error[E0594]: cannot assign to `fancy_ref.num`, which is behind a `&` reference
- --> $DIR/issue-47388.rs:8:5
- |
-LL | let fancy_ref = &(&mut fancy);
- | ------------- help: consider changing this to be a mutable reference: `&mut (&mut fancy)`
-LL | fancy_ref.num = 6;
- | ^^^^^^^^^^^^^^^^^ `fancy_ref` is a `&` reference, so the data it refers to cannot be written
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0594`.
diff --git a/src/test/ui/nll/issue-47470.rs b/src/test/ui/nll/issue-47470.rs
deleted file mode 100644
index 72ee7f886..000000000
--- a/src/test/ui/nll/issue-47470.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Regression test for #47470: cached results of projections were
-// causing region relations not to be enforced at all the places where
-// they have to be enforced.
-
-struct Foo<'a>(&'a ());
-trait Bar {
- type Assoc;
- fn get(self) -> Self::Assoc;
-}
-
-impl<'a> Bar for Foo<'a> {
- type Assoc = &'a u32;
- fn get(self) -> Self::Assoc {
- let local = 42;
- &local //~ ERROR cannot return reference to local variable `local`
- }
-}
-
-fn main() {
- let f = Foo(&()).get();
- println!("{}", f);
-}
diff --git a/src/test/ui/nll/issue-47470.stderr b/src/test/ui/nll/issue-47470.stderr
deleted file mode 100644
index 0b1247d60..000000000
--- a/src/test/ui/nll/issue-47470.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0515]: cannot return reference to local variable `local`
- --> $DIR/issue-47470.rs:15:9
- |
-LL | &local
- | ^^^^^^ returns a reference to data owned by the current function
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0515`.
diff --git a/src/test/ui/nll/issue-47589.rs b/src/test/ui/nll/issue-47589.rs
deleted file mode 100644
index 280bf0811..000000000
--- a/src/test/ui/nll/issue-47589.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// run-pass
-
-pub struct DescriptorSet<'a> {
- pub slots: Vec<AttachInfo<'a, Resources>>
-}
-
-pub trait ResourcesTrait<'r>: Sized {
- type DescriptorSet: 'r;
-}
-
-pub struct Resources;
-
-impl<'a> ResourcesTrait<'a> for Resources {
- type DescriptorSet = DescriptorSet<'a>;
-}
-
-pub enum AttachInfo<'a, R: ResourcesTrait<'a>> {
- NextDescriptorSet(Box<R::DescriptorSet>)
-}
-
-fn main() {
- let _x = DescriptorSet {slots: Vec::new()};
-}
diff --git a/src/test/ui/nll/issue-48070.rs b/src/test/ui/nll/issue-48070.rs
deleted file mode 100644
index a9fe3521d..000000000
--- a/src/test/ui/nll/issue-48070.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-// run-pass
-
-struct Foo {
- x: u32
-}
-
-impl Foo {
- fn twiddle(&mut self) -> &mut Self { self }
- fn twaddle(&mut self) -> &mut Self { self }
- fn emit(&mut self) {
- self.x += 1;
- }
-}
-
-fn main() {
- let mut foo = Foo { x: 0 };
- match 22 {
- 22 => &mut foo,
- 44 => foo.twiddle(),
- _ => foo.twaddle(),
- }.emit();
-}
diff --git a/src/test/ui/nll/issue-48238.rs b/src/test/ui/nll/issue-48238.rs
deleted file mode 100644
index d2e9285fa..000000000
--- a/src/test/ui/nll/issue-48238.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Regression test for issue #48238
-
-fn use_val<'a>(val: &'a u8) -> &'a u8 {
- val
-}
-
-fn main() {
- let orig: u8 = 5;
- move || use_val(&orig); //~ ERROR
-}
diff --git a/src/test/ui/nll/issue-48238.stderr b/src/test/ui/nll/issue-48238.stderr
deleted file mode 100644
index 0aa1eedad..000000000
--- a/src/test/ui/nll/issue-48238.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-48238.rs:9:13
- |
-LL | move || use_val(&orig);
- | ------- ^^^^^^^^^^^^^^ returning this value requires that `'1` must outlive `'2`
- | | |
- | | return type of closure is &'2 u8
- | lifetime `'1` represents this closure's body
- |
- = note: closure implements `Fn`, so references to captured variables can't escape the closure
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-48623-closure.rs b/src/test/ui/nll/issue-48623-closure.rs
deleted file mode 100644
index 3f8587eed..000000000
--- a/src/test/ui/nll/issue-48623-closure.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// run-pass
-#![allow(path_statements)]
-#![allow(dead_code)]
-
-struct WithDrop;
-
-impl Drop for WithDrop {
- fn drop(&mut self) {}
-}
-
-fn reborrow_from_closure(r: &mut ()) -> &mut () {
- let d = WithDrop;
- (move || { d; &mut *r })()
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-48623-generator.rs b/src/test/ui/nll/issue-48623-generator.rs
deleted file mode 100644
index 08d2584ee..000000000
--- a/src/test/ui/nll/issue-48623-generator.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// run-pass
-#![allow(path_statements)]
-#![allow(dead_code)]
-
-#![feature(generators, generator_trait)]
-
-struct WithDrop;
-
-impl Drop for WithDrop {
- fn drop(&mut self) {}
-}
-
-fn reborrow_from_generator(r: &mut ()) {
- let d = WithDrop;
- move || { d; yield; &mut *r }; //~ WARN unused generator that must be used
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-48623-generator.stderr b/src/test/ui/nll/issue-48623-generator.stderr
deleted file mode 100644
index bfdfca210..000000000
--- a/src/test/ui/nll/issue-48623-generator.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-warning: unused generator that must be used
- --> $DIR/issue-48623-generator.rs:15:5
- |
-LL | move || { d; yield; &mut *r };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: generators are lazy and do nothing unless resumed
- = note: `#[warn(unused_must_use)]` on by default
-
-warning: 1 warning emitted
-
diff --git a/src/test/ui/nll/issue-48697.rs b/src/test/ui/nll/issue-48697.rs
deleted file mode 100644
index 16e29ab2a..000000000
--- a/src/test/ui/nll/issue-48697.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Regression test for #48697
-
-fn foo(x: &i32) -> &i32 {
- let z = 4;
- let f = &|y| y;
- let k = f(&z);
- f(x) //~ cannot return value referencing local variable
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-48697.stderr b/src/test/ui/nll/issue-48697.stderr
deleted file mode 100644
index f0c29b72b..000000000
--- a/src/test/ui/nll/issue-48697.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error[E0515]: cannot return value referencing local variable `z`
- --> $DIR/issue-48697.rs:7:5
- |
-LL | let k = f(&z);
- | -- `z` is borrowed here
-LL | f(x)
- | ^^^^ returns a value referencing data owned by the current function
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0515`.
diff --git a/src/test/ui/nll/issue-48803.rs b/src/test/ui/nll/issue-48803.rs
deleted file mode 100644
index f7fd04179..000000000
--- a/src/test/ui/nll/issue-48803.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-fn flatten<'a, 'b, T>(x: &'a &'b T) -> &'a T {
- x
-}
-
-fn main() {
- let mut x = "original";
- let y = &x;
- let z = &y;
- let w = flatten(z);
- x = "modified";
- //~^ ERROR cannot assign to `x` because it is borrowed [E0506]
- println!("{}", w); // prints "modified"
-}
diff --git a/src/test/ui/nll/issue-48803.stderr b/src/test/ui/nll/issue-48803.stderr
deleted file mode 100644
index 2f94039c0..000000000
--- a/src/test/ui/nll/issue-48803.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/issue-48803.rs:10:5
- |
-LL | let y = &x;
- | -- borrow of `x` occurs here
-...
-LL | x = "modified";
- | ^^^^^^^^^^^^^^ assignment to borrowed `x` occurs here
-LL |
-LL | println!("{}", w); // prints "modified"
- | - borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/issue-50343.rs b/src/test/ui/nll/issue-50343.rs
deleted file mode 100644
index dd0afbbdf..000000000
--- a/src/test/ui/nll/issue-50343.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-// run-pass
-
-#![deny(unused_mut)]
-
-fn main() {
- vec![42].iter().map(drop).count();
- vec![(42, 22)].iter().map(|(_x, _y)| ()).count();
-}
diff --git a/src/test/ui/nll/issue-50461-used-mut-from-moves.rs b/src/test/ui/nll/issue-50461-used-mut-from-moves.rs
deleted file mode 100644
index 2458b171e..000000000
--- a/src/test/ui/nll/issue-50461-used-mut-from-moves.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-// run-pass
-
-#![deny(unused_mut)]
-#![allow(dead_code)]
-
-struct Foo {
- pub value: i32
-}
-
-fn use_foo_mut(mut foo: Foo) {
- foo = foo;
- println!("{}", foo.value);
-}
-
-fn main() {
- use_foo_mut(Foo { value: 413 });
-}
diff --git a/src/test/ui/nll/issue-50716-1.rs b/src/test/ui/nll/issue-50716-1.rs
deleted file mode 100644
index 9c3e24de4..000000000
--- a/src/test/ui/nll/issue-50716-1.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-//
-// An additional regression test for the issue #50716 “NLL ignores lifetimes
-// bounds derived from `Sized` requirements” that checks that the fixed compiler
-// accepts this code fragment with both AST and MIR borrow checkers.
-//
-// check-pass
-
-struct Qey<Q: ?Sized>(Q);
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-50716.rs b/src/test/ui/nll/issue-50716.rs
deleted file mode 100644
index c2fc345fa..000000000
--- a/src/test/ui/nll/issue-50716.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// Regression test for the issue #50716: NLL ignores lifetimes bounds
-// derived from `Sized` requirements
-
-trait A {
- type X: ?Sized;
-}
-
-fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>)
-where
- for<'b> &'b T: A,
- <&'static T as A>::X: Sized
-{
- let _x = *s; //~ ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-50716.stderr b/src/test/ui/nll/issue-50716.stderr
deleted file mode 100644
index 38dd1b5f6..000000000
--- a/src/test/ui/nll/issue-50716.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-50716.rs:14:14
- |
-LL | fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>)
- | -- lifetime `'a` defined here
-...
-LL | let _x = *s;
- | ^^ proving this value is `Sized` requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-51191.rs b/src/test/ui/nll/issue-51191.rs
deleted file mode 100644
index 836587d93..000000000
--- a/src/test/ui/nll/issue-51191.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-struct Struct;
-
-impl Struct {
- fn bar(self: &mut Self) {
- //~^ WARN function cannot return without recursing
- //~^^ HELP a `loop` may express intention better if this is on purpose
- (&mut self).bar();
- //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable [E0596]
- //~^^ HELP try removing `&mut` here
- }
-
- fn imm(self) { //~ HELP consider changing this to be mutable
- (&mut self).bar();
- //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable [E0596]
- }
-
- fn mtbl(mut self) {
- (&mut self).bar();
- }
-
- fn immref(&self) {
- (&mut self).bar();
- //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable [E0596]
- //~^^ ERROR cannot borrow data in a `&` reference as mutable [E0596]
- }
-
- fn mtblref(&mut self) {
- (&mut self).bar();
- //~^ ERROR cannot borrow `self` as mutable, as it is not declared as mutable [E0596]
- //~^^ HELP try removing `&mut` here
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-51191.stderr b/src/test/ui/nll/issue-51191.stderr
deleted file mode 100644
index 63ca6ae5c..000000000
--- a/src/test/ui/nll/issue-51191.stderr
+++ /dev/null
@@ -1,69 +0,0 @@
-warning: function cannot return without recursing
- --> $DIR/issue-51191.rs:4:5
- |
-LL | fn bar(self: &mut Self) {
- | ^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing
-...
-LL | (&mut self).bar();
- | ----------------- recursive call site
- |
- = help: a `loop` may express intention better if this is on purpose
- = note: `#[warn(unconditional_recursion)]` on by default
-
-error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
- --> $DIR/issue-51191.rs:7:9
- |
-LL | (&mut self).bar();
- | ^^^^^^^^^^^ cannot borrow as mutable
- |
-note: the binding is already a mutable borrow
- --> $DIR/issue-51191.rs:4:18
- |
-LL | fn bar(self: &mut Self) {
- | ^^^^^^^^^
-help: try removing `&mut` here
- --> $DIR/issue-51191.rs:7:9
- |
-LL | (&mut self).bar();
- | ^^^^^^^^^^^
-
-error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
- --> $DIR/issue-51191.rs:13:9
- |
-LL | fn imm(self) {
- | ---- help: consider changing this to be mutable: `mut self`
-LL | (&mut self).bar();
- | ^^^^^^^^^^^ cannot borrow as mutable
-
-error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
- --> $DIR/issue-51191.rs:22:9
- |
-LL | (&mut self).bar();
- | ^^^^^^^^^^^ cannot borrow as mutable
-
-error[E0596]: cannot borrow data in a `&` reference as mutable
- --> $DIR/issue-51191.rs:22:9
- |
-LL | (&mut self).bar();
- | ^^^^^^^^^^^^^^^^^ cannot borrow as mutable
-
-error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
- --> $DIR/issue-51191.rs:28:9
- |
-LL | (&mut self).bar();
- | ^^^^^^^^^^^ cannot borrow as mutable
- |
-note: the binding is already a mutable borrow
- --> $DIR/issue-51191.rs:27:16
- |
-LL | fn mtblref(&mut self) {
- | ^^^^^^^^^
-help: try removing `&mut` here
- --> $DIR/issue-51191.rs:28:9
- |
-LL | (&mut self).bar();
- | ^^^^^^^^^^^
-
-error: aborting due to 5 previous errors; 1 warning emitted
-
-For more information about this error, try `rustc --explain E0596`.
diff --git a/src/test/ui/nll/issue-51244.rs b/src/test/ui/nll/issue-51244.rs
deleted file mode 100644
index c4cbee675..000000000
--- a/src/test/ui/nll/issue-51244.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-fn main() {
- let ref my_ref @ _ = 0;
- *my_ref = 0;
- //~^ ERROR cannot assign to `*my_ref`, which is behind a `&` reference [E0594]
-}
diff --git a/src/test/ui/nll/issue-51244.stderr b/src/test/ui/nll/issue-51244.stderr
deleted file mode 100644
index dcb6f9fec..000000000
--- a/src/test/ui/nll/issue-51244.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error[E0594]: cannot assign to `*my_ref`, which is behind a `&` reference
- --> $DIR/issue-51244.rs:3:5
- |
-LL | let ref my_ref @ _ = 0;
- | ---------- help: consider changing this to be a mutable reference: `ref mut my_ref`
-LL | *my_ref = 0;
- | ^^^^^^^^^^^ `my_ref` is a `&` reference, so the data it refers to cannot be written
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0594`.
diff --git a/src/test/ui/nll/issue-51268.rs b/src/test/ui/nll/issue-51268.rs
deleted file mode 100644
index dcdedf7d4..000000000
--- a/src/test/ui/nll/issue-51268.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-struct Bar;
-
-impl Bar {
- fn bar(&mut self, _: impl Fn()) {}
-}
-
-struct Foo {
- thing: Bar,
- number: usize,
-}
-
-impl Foo {
- fn foo(&mut self) {
- self.thing.bar(|| {
- //~^ ERROR cannot borrow `self.thing` as mutable because it is also borrowed as immutable [E0502]
- &self.number;
- });
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-51268.stderr b/src/test/ui/nll/issue-51268.stderr
deleted file mode 100644
index 0483bda63..000000000
--- a/src/test/ui/nll/issue-51268.stderr
+++ /dev/null
@@ -1,17 +0,0 @@
-error[E0502]: cannot borrow `self.thing` as mutable because it is also borrowed as immutable
- --> $DIR/issue-51268.rs:14:9
- |
-LL | self.thing.bar(|| {
- | ^ --- -- immutable borrow occurs here
- | | |
- | _________| immutable borrow later used by call
- | |
-LL | |
-LL | | &self.number;
- | | ----------- first borrow occurs due to use of `self` in closure
-LL | | });
- | |__________^ mutable borrow occurs here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0502`.
diff --git a/src/test/ui/nll/issue-51345-2.rs b/src/test/ui/nll/issue-51345-2.rs
deleted file mode 100644
index 52f342a85..000000000
--- a/src/test/ui/nll/issue-51345-2.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-// run-fail
-// error-pattern: thread 'main' panicked at 'explicit panic'
-// ignore-emscripten no processes
-
-fn main() {
- let mut vec = vec![];
- vec.push((vec.len(), panic!()));
-}
diff --git a/src/test/ui/nll/issue-51351.rs b/src/test/ui/nll/issue-51351.rs
deleted file mode 100644
index 591d49584..000000000
--- a/src/test/ui/nll/issue-51351.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// Regression test for #51351 and #52133: In the case of #51351,
-// late-bound regions (like 'a) that were unused within the arguments of
-// a function were overlooked and could case an ICE. In the case of #52133,
-// LBR defined on the creator function needed to be added to the free regions
-// of the closure, as they were not present in the closure's generic
-// declarations otherwise.
-//
-// check-pass
-
-fn creash<'a>() {
- let x: &'a () = &();
-}
-
-fn produce<'a>() {
- move || {
- let x: &'a () = &();
- };
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-51512.rs b/src/test/ui/nll/issue-51512.rs
deleted file mode 100644
index 691760eb9..000000000
--- a/src/test/ui/nll/issue-51512.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-fn main() {
- let range = 0..1;
- let r = range;
- let x = range.start;
- //~^ ERROR use of moved value: `range` [E0382]
-}
diff --git a/src/test/ui/nll/issue-51512.stderr b/src/test/ui/nll/issue-51512.stderr
deleted file mode 100644
index 072e96788..000000000
--- a/src/test/ui/nll/issue-51512.stderr
+++ /dev/null
@@ -1,18 +0,0 @@
-error[E0382]: use of moved value: `range`
- --> $DIR/issue-51512.rs:4:13
- |
-LL | let range = 0..1;
- | ----- move occurs because `range` has type `std::ops::Range<i32>`, which does not implement the `Copy` trait
-LL | let r = range;
- | ----- value moved here
-LL | let x = range.start;
- | ^^^^^^^^^^^ value used here after move
- |
-help: consider cloning the value if the performance cost is acceptable
- |
-LL | let r = range.clone();
- | ++++++++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/issue-51770.rs b/src/test/ui/nll/issue-51770.rs
deleted file mode 100644
index 3d6bc82f1..000000000
--- a/src/test/ui/nll/issue-51770.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-// check-pass
-
-#![crate_type = "lib"]
-
-// In an older version, when NLL was still a feature, the following previously did not compile
-
-use std::ops::Index;
-
-pub struct Test<T> {
- a: T,
-}
-
-impl<T> Index<usize> for Test<T> {
- type Output = T;
-
- fn index(&self, _index: usize) -> &Self::Output {
- &self.a
- }
-}
diff --git a/src/test/ui/nll/issue-52057.rs b/src/test/ui/nll/issue-52057.rs
deleted file mode 100644
index 98f49fe8f..000000000
--- a/src/test/ui/nll/issue-52057.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Regression test for #52057. There is an implied bound
-// that `I: 'a` where `'a` is the lifetime of `self` in `parse_first`;
-// but to observe that, one must normalize first.
-//
-// run-pass
-
-pub trait Parser {
- type Input;
-
- fn parse_first(input: &mut Self::Input);
-}
-
-impl<'a, I, P: ?Sized> Parser for &'a mut P
-where
- P: Parser<Input = I>,
-{
- type Input = I;
-
- fn parse_first(_: &mut Self::Input) {}
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-52059-report-when-borrow-and-drop-conflict.rs b/src/test/ui/nll/issue-52059-report-when-borrow-and-drop-conflict.rs
deleted file mode 100644
index 7ea1c445d..000000000
--- a/src/test/ui/nll/issue-52059-report-when-borrow-and-drop-conflict.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// rust-lang/rust#52059: Regardless of whether you are moving out of a
-// Drop type or just introducing an inadvertent alias via a borrow of
-// one of its fields, it is useful to be reminded of the significance
-// of the fact that the type implements Drop.
-
-pub struct S<'a> { url: &'a mut String }
-
-impl<'a> Drop for S<'a> { fn drop(&mut self) { } }
-
-fn finish_1(s: S) -> &mut String {
- s.url
-}
-//~^^ ERROR borrow may still be in use when destructor runs
-
-fn finish_2(s: S) -> &mut String {
- let p = &mut *s.url; p
-}
-//~^^ ERROR borrow may still be in use when destructor runs
-
-fn finish_3(s: S) -> &mut String {
- let p: &mut _ = s.url; p
-}
-//~^^ ERROR borrow may still be in use when destructor runs
-
-fn finish_4(s: S) -> &mut String {
- let p = s.url; p
-}
-//~^^ ERROR cannot move out of type `S<'_>`, which implements the `Drop` trait
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-52059-report-when-borrow-and-drop-conflict.stderr b/src/test/ui/nll/issue-52059-report-when-borrow-and-drop-conflict.stderr
deleted file mode 100644
index c0a17a67e..000000000
--- a/src/test/ui/nll/issue-52059-report-when-borrow-and-drop-conflict.stderr
+++ /dev/null
@@ -1,44 +0,0 @@
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/issue-52059-report-when-borrow-and-drop-conflict.rs:11:5
- |
-LL | fn finish_1(s: S) -> &mut String {
- | - has type `S<'1>`
-LL | s.url
- | ^^^^^ returning this value requires that `*s.url` is borrowed for `'1`
-LL | }
- | - here, drop of `s` needs exclusive access to `*s.url`, because the type `S<'_>` implements the `Drop` trait
-
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/issue-52059-report-when-borrow-and-drop-conflict.rs:16:13
- |
-LL | fn finish_2(s: S) -> &mut String {
- | - has type `S<'1>`
-LL | let p = &mut *s.url; p
- | ^^^^^^^^^^^ - returning this value requires that `*s.url` is borrowed for `'1`
-LL | }
- | - here, drop of `s` needs exclusive access to `*s.url`, because the type `S<'_>` implements the `Drop` trait
-
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/issue-52059-report-when-borrow-and-drop-conflict.rs:21:21
- |
-LL | fn finish_3(s: S) -> &mut String {
- | - has type `S<'1>`
-LL | let p: &mut _ = s.url; p
- | ^^^^^ - returning this value requires that `*s.url` is borrowed for `'1`
-LL | }
- | - here, drop of `s` needs exclusive access to `*s.url`, because the type `S<'_>` implements the `Drop` trait
-
-error[E0509]: cannot move out of type `S<'_>`, which implements the `Drop` trait
- --> $DIR/issue-52059-report-when-borrow-and-drop-conflict.rs:26:13
- |
-LL | let p = s.url; p
- | ^^^^^
- | |
- | cannot move out of here
- | move occurs because `s.url` has type `&mut String`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&s.url`
-
-error: aborting due to 4 previous errors
-
-Some errors have detailed explanations: E0509, E0713.
-For more information about an error, try `rustc --explain E0509`.
diff --git a/src/test/ui/nll/issue-52078.rs b/src/test/ui/nll/issue-52078.rs
deleted file mode 100644
index a2bcb91ac..000000000
--- a/src/test/ui/nll/issue-52078.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Regression test for #52078: we were failing to infer a relationship
-// between `'a` and `'b` below due to inference variables introduced
-// during the normalization process.
-//
-// check-pass
-
-struct Drain<'a, T: 'a> {
- _marker: ::std::marker::PhantomData<&'a T>,
-}
-
-trait Join {
- type Value;
- fn get(value: &mut Self::Value);
-}
-
-impl<'a, T> Join for Drain<'a, T> {
- type Value = &'a mut Option<T>;
-
- fn get<'b>(value: &'b mut Self::Value) {
- }
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/issue-52086.rs b/src/test/ui/nll/issue-52086.rs
deleted file mode 100644
index 0414428e4..000000000
--- a/src/test/ui/nll/issue-52086.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-use std::rc::Rc;
-use std::sync::Arc;
-
-struct Bar { field: Vec<i32> }
-
-fn main() {
- let x = Rc::new(Bar { field: vec![] });
- drop(x.field);
-//~^ ERROR cannot move out of an `Rc`
-
- let y = Arc::new(Bar { field: vec![] });
- drop(y.field);
-//~^ ERROR cannot move out of an `Arc`
-}
diff --git a/src/test/ui/nll/issue-52086.stderr b/src/test/ui/nll/issue-52086.stderr
deleted file mode 100644
index 3b2dae9b7..000000000
--- a/src/test/ui/nll/issue-52086.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0507]: cannot move out of an `Rc`
- --> $DIR/issue-52086.rs:8:10
- |
-LL | drop(x.field);
- | ^^^^^^^ move occurs because value has type `Vec<i32>`, which does not implement the `Copy` trait
-
-error[E0507]: cannot move out of an `Arc`
- --> $DIR/issue-52086.rs:12:10
- |
-LL | drop(y.field);
- | ^^^^^^^ move occurs because value has type `Vec<i32>`, which does not implement the `Copy` trait
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0507`.
diff --git a/src/test/ui/nll/issue-52113.rs b/src/test/ui/nll/issue-52113.rs
deleted file mode 100644
index ffaef272a..000000000
--- a/src/test/ui/nll/issue-52113.rs
+++ /dev/null
@@ -1,35 +0,0 @@
-trait Bazinga {}
-impl<F> Bazinga for F {}
-
-fn produce1<'a>(data: &'a u32) -> impl Bazinga + 'a {
- let x = move || {
- let _data: &'a u32 = data;
- };
- x
-}
-
-fn produce2<'a>(data: &'a mut Vec<&'a u32>, value: &'a u32) -> impl Bazinga + 'a {
- let x = move || {
- let value: &'a u32 = value;
- data.push(value);
- };
- x
-}
-
-fn produce3<'a, 'b: 'a>(data: &'a mut Vec<&'a u32>, value: &'b u32) -> impl Bazinga + 'a {
- let x = move || {
- let value: &'a u32 = value;
- data.push(value);
- };
- x
-}
-
-fn produce_err<'a, 'b: 'a>(data: &'b mut Vec<&'b u32>, value: &'a u32) -> impl Bazinga + 'b {
- let x = move || {
- let value: &'a u32 = value;
- data.push(value); //~ ERROR lifetime may not live long enough
- };
- x
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-52113.stderr b/src/test/ui/nll/issue-52113.stderr
deleted file mode 100644
index 84d4eb266..000000000
--- a/src/test/ui/nll/issue-52113.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-52113.rs:30:9
- |
-LL | fn produce_err<'a, 'b: 'a>(data: &'b mut Vec<&'b u32>, value: &'a u32) -> impl Bazinga + 'b {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | data.push(value);
- | ^^^^^^^^^^^^^^^^ argument requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-52213.rs b/src/test/ui/nll/issue-52213.rs
deleted file mode 100644
index a016924a8..000000000
--- a/src/test/ui/nll/issue-52213.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-fn transmute_lifetime<'a, 'b, T>(t: &'a (T,)) -> &'b T {
- match (&t,) {
- ((u,),) => u,
- //~^ ERROR lifetime may not live long enough
- }
-}
-
-fn main() {
- let x = {
- let y = Box::new((42,));
- transmute_lifetime(&y)
- };
-
- println!("{}", x);
-}
diff --git a/src/test/ui/nll/issue-52213.stderr b/src/test/ui/nll/issue-52213.stderr
deleted file mode 100644
index da31bcd54..000000000
--- a/src/test/ui/nll/issue-52213.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-52213.rs:3:20
- |
-LL | fn transmute_lifetime<'a, 'b, T>(t: &'a (T,)) -> &'b T {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | match (&t,) {
-LL | ((u,),) => u,
- | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-52533-1.rs b/src/test/ui/nll/issue-52533-1.rs
deleted file mode 100644
index d15daeddc..000000000
--- a/src/test/ui/nll/issue-52533-1.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-#![allow(warnings)]
-
-struct Foo<'a, 'b, T: 'a + 'b> { x: &'a T, y: &'b T }
-
-fn gimme(_: impl for<'a, 'b, 'c> FnOnce(&'a Foo<'a, 'b, u32>,
- &'a Foo<'a, 'c, u32>) -> &'a Foo<'a, 'b, u32>) { }
-
-fn main() {
- gimme(|x, y| y)
- //~^ ERROR lifetime may not live long enough
-}
diff --git a/src/test/ui/nll/issue-52533-1.stderr b/src/test/ui/nll/issue-52533-1.stderr
deleted file mode 100644
index 20f19b259..000000000
--- a/src/test/ui/nll/issue-52533-1.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-52533-1.rs:9:18
- |
-LL | gimme(|x, y| y)
- | - - ^ closure was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
- | | |
- | | has type `&Foo<'_, '1, u32>`
- | has type `&Foo<'_, '2, u32>`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-52534-1.rs b/src/test/ui/nll/issue-52534-1.rs
deleted file mode 100644
index d9ea3ae42..000000000
--- a/src/test/ui/nll/issue-52534-1.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-struct Test;
-
-impl Test {
- fn bar(&self, x: &u32) -> &u32 {
- let x = 22;
- &x
-//~^ ERROR cannot return reference to local variable
- }
-}
-
-fn foo(x: &u32) -> &u32 {
- let x = 22;
- &x
-//~^ ERROR cannot return reference to local variable
-}
-
-fn baz(x: &u32) -> &&u32 {
- let x = 22;
- &&x
-//~^ ERROR cannot return value referencing local variable
-//~| ERROR cannot return reference to temporary value
-}
-
-fn foobazbar<'a>(x: u32, y: &'a u32) -> &'a u32 {
- let x = 22;
- &x
-//~^ ERROR cannot return reference to local variable
-}
-
-fn foobar<'a>(x: &'a u32) -> &'a u32 {
- let x = 22;
- &x
-//~^ ERROR cannot return reference to local variable
-}
-
-fn foobaz<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 {
- let x = 22;
- &x
-//~^ ERROR cannot return reference to local variable
-}
-
-fn foobarbaz<'a, 'b>(x: &'a u32, y: &'b u32, z: &'a u32) -> &'a u32 {
- let x = 22;
- &x
-//~^ ERROR cannot return reference to local variable
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-52534-1.stderr b/src/test/ui/nll/issue-52534-1.stderr
deleted file mode 100644
index 743179f05..000000000
--- a/src/test/ui/nll/issue-52534-1.stderr
+++ /dev/null
@@ -1,57 +0,0 @@
-error[E0515]: cannot return reference to local variable `x`
- --> $DIR/issue-52534-1.rs:6:9
- |
-LL | &x
- | ^^ returns a reference to data owned by the current function
-
-error[E0515]: cannot return reference to local variable `x`
- --> $DIR/issue-52534-1.rs:13:5
- |
-LL | &x
- | ^^ returns a reference to data owned by the current function
-
-error[E0515]: cannot return value referencing local variable `x`
- --> $DIR/issue-52534-1.rs:19:5
- |
-LL | &&x
- | ^--
- | ||
- | |`x` is borrowed here
- | returns a value referencing data owned by the current function
-
-error[E0515]: cannot return reference to temporary value
- --> $DIR/issue-52534-1.rs:19:5
- |
-LL | &&x
- | ^--
- | ||
- | |temporary value created here
- | returns a reference to data owned by the current function
-
-error[E0515]: cannot return reference to local variable `x`
- --> $DIR/issue-52534-1.rs:26:5
- |
-LL | &x
- | ^^ returns a reference to data owned by the current function
-
-error[E0515]: cannot return reference to local variable `x`
- --> $DIR/issue-52534-1.rs:32:5
- |
-LL | &x
- | ^^ returns a reference to data owned by the current function
-
-error[E0515]: cannot return reference to local variable `x`
- --> $DIR/issue-52534-1.rs:38:5
- |
-LL | &x
- | ^^ returns a reference to data owned by the current function
-
-error[E0515]: cannot return reference to local variable `x`
- --> $DIR/issue-52534-1.rs:44:5
- |
-LL | &x
- | ^^ returns a reference to data owned by the current function
-
-error: aborting due to 8 previous errors
-
-For more information about this error, try `rustc --explain E0515`.
diff --git a/src/test/ui/nll/issue-52534-2.rs b/src/test/ui/nll/issue-52534-2.rs
deleted file mode 100644
index e416264ed..000000000
--- a/src/test/ui/nll/issue-52534-2.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-fn foo(x: &u32) -> &u32 {
- let y;
-
- {
- let x = 32;
- y = &x
-//~^ ERROR does not live long enough
- }
-
- println!("{}", y);
- x
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-52534-2.stderr b/src/test/ui/nll/issue-52534-2.stderr
deleted file mode 100644
index ac385e056..000000000
--- a/src/test/ui/nll/issue-52534-2.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0597]: `x` does not live long enough
- --> $DIR/issue-52534-2.rs:6:13
- |
-LL | y = &x
- | ^^ borrowed value does not live long enough
-LL |
-LL | }
- | - `x` dropped here while still borrowed
-LL |
-LL | println!("{}", y);
- | - borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-52534.rs b/src/test/ui/nll/issue-52534.rs
deleted file mode 100644
index 559d4c859..000000000
--- a/src/test/ui/nll/issue-52534.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-fn foo(_: impl FnOnce(&u32) -> &u32) {
-}
-
-fn baz(_: impl FnOnce(&u32, u32) -> &u32) {
-}
-
-fn bar() {
- let x = 22;
- foo(|a| &x)
-//~^ ERROR does not live long enough
-}
-
-fn foobar() {
- let y = 22;
- baz(|first, second| &y)
-//~^ ERROR does not live long enough
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-52534.stderr b/src/test/ui/nll/issue-52534.stderr
deleted file mode 100644
index b2b727fd4..000000000
--- a/src/test/ui/nll/issue-52534.stderr
+++ /dev/null
@@ -1,31 +0,0 @@
-error[E0597]: `x` does not live long enough
- --> $DIR/issue-52534.rs:9:14
- |
-LL | foo(|a| &x)
- | - ^ `x` would have to be valid for `'0`...
- | |
- | has type `&'0 u32`
-LL |
-LL | }
- | - ...but `x` will be dropped here, when the function `bar` returns
- |
- = note: functions cannot return a borrow to data owned within the function's scope, functions can only return borrows to data passed as arguments
- = note: to learn more, visit <https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#dangling-references>
-
-error[E0597]: `y` does not live long enough
- --> $DIR/issue-52534.rs:15:26
- |
-LL | baz(|first, second| &y)
- | ----- ^ `y` would have to be valid for `'0`...
- | |
- | has type `&'0 u32`
-LL |
-LL | }
- | - ...but `y` will be dropped here, when the function `foobar` returns
- |
- = note: functions cannot return a borrow to data owned within the function's scope, functions can only return borrows to data passed as arguments
- = note: to learn more, visit <https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#dangling-references>
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-52663-span-decl-captured-variable.rs b/src/test/ui/nll/issue-52663-span-decl-captured-variable.rs
deleted file mode 100644
index cd1f457a1..000000000
--- a/src/test/ui/nll/issue-52663-span-decl-captured-variable.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-fn expect_fn<F>(f: F) where F : Fn() {
- f();
-}
-
-fn main() {
- {
- let x = (vec![22], vec![44]);
- expect_fn(|| drop(x.0));
- //~^ ERROR cannot move out of `x.0`, as `x` is a captured variable in an `Fn` closure [E0507]
- }
-}
diff --git a/src/test/ui/nll/issue-52663-span-decl-captured-variable.stderr b/src/test/ui/nll/issue-52663-span-decl-captured-variable.stderr
deleted file mode 100644
index fb61b30f0..000000000
--- a/src/test/ui/nll/issue-52663-span-decl-captured-variable.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0507]: cannot move out of `x.0`, as `x` is a captured variable in an `Fn` closure
- --> $DIR/issue-52663-span-decl-captured-variable.rs:8:26
- |
-LL | let x = (vec![22], vec![44]);
- | - captured outer variable
-LL | expect_fn(|| drop(x.0));
- | -- ^^^ move occurs because `x.0` has type `Vec<i32>`, which does not implement the `Copy` trait
- | |
- | captured by this `Fn` closure
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0507`.
diff --git a/src/test/ui/nll/issue-52663-trait-object.rs b/src/test/ui/nll/issue-52663-trait-object.rs
deleted file mode 100644
index f6bbb2d14..000000000
--- a/src/test/ui/nll/issue-52663-trait-object.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-trait Foo { fn get(&self); }
-
-impl<A> Foo for A {
- fn get(&self) { }
-}
-
-
-
-fn main() {
- let _ = {
- let tmp0 = 3;
- let tmp1 = &tmp0;
- Box::new(tmp1) as Box<dyn Foo + '_>
- };
- //~^^^ ERROR `tmp0` does not live long enough
-}
diff --git a/src/test/ui/nll/issue-52663-trait-object.stderr b/src/test/ui/nll/issue-52663-trait-object.stderr
deleted file mode 100644
index 5cedea6e6..000000000
--- a/src/test/ui/nll/issue-52663-trait-object.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0597]: `tmp0` does not live long enough
- --> $DIR/issue-52663-trait-object.rs:12:20
- |
-LL | let tmp1 = &tmp0;
- | ^^^^^ borrowed value does not live long enough
-LL | Box::new(tmp1) as Box<dyn Foo + '_>
- | ----------------------------------- borrow later captured here by trait object
-LL | };
- | - `tmp0` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-52669.rs b/src/test/ui/nll/issue-52669.rs
deleted file mode 100644
index e33528ac5..000000000
--- a/src/test/ui/nll/issue-52669.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-struct A {
- b: B,
-}
-
-#[derive(Clone)]
-struct B;
-
-fn foo(_: A) {}
-
-fn bar(mut a: A) -> B {
- a.b = B;
- foo(a);
- a.b.clone()
-//~^ ERROR borrow of moved value
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-52669.stderr b/src/test/ui/nll/issue-52669.stderr
deleted file mode 100644
index 807b95f7e..000000000
--- a/src/test/ui/nll/issue-52669.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0382]: borrow of moved value: `a.b`
- --> $DIR/issue-52669.rs:13:5
- |
-LL | fn bar(mut a: A) -> B {
- | ----- move occurs because `a` has type `A`, which does not implement the `Copy` trait
-LL | a.b = B;
-LL | foo(a);
- | - value moved here
-LL | a.b.clone()
- | ^^^^^^^^^^^ value borrowed here after move
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/issue-52742.rs b/src/test/ui/nll/issue-52742.rs
deleted file mode 100644
index d3e201b8a..000000000
--- a/src/test/ui/nll/issue-52742.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-struct Foo<'a, 'b> {
- x: &'a u32,
- y: &'b u32,
-}
-
-struct Bar<'b> {
- z: &'b u32,
-}
-
-impl Foo<'_, '_> {
- fn take_bar(&mut self, b: Bar<'_>) {
- self.y = b.z
- //~^ ERROR
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-52742.stderr b/src/test/ui/nll/issue-52742.stderr
deleted file mode 100644
index a79738296..000000000
--- a/src/test/ui/nll/issue-52742.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-52742.rs:12:9
- |
-LL | fn take_bar(&mut self, b: Bar<'_>) {
- | --------- - has type `Bar<'1>`
- | |
- | has type `&mut Foo<'_, '2>`
-LL | self.y = b.z
- | ^^^^^^^^^^^^ assignment requires that `'1` must outlive `'2`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-52992.rs b/src/test/ui/nll/issue-52992.rs
deleted file mode 100644
index 530d1a61b..000000000
--- a/src/test/ui/nll/issue-52992.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Regression test for an NLL-related ICE (#52992) -- computing
-// implied bounds was causing outlives relations that were not
-// properly handled.
-//
-// check-pass
-
-fn main() {}
-
-fn fail<'a>() -> Struct<'a, Generic<()>> {
- Struct(&Generic(()))
-}
-
-struct Struct<'a, T>(&'a T) where
- T: Trait + 'a,
- T::AT: 'a; // only fails with this bound
-
-struct Generic<T>(T);
-
-trait Trait {
- type AT;
-}
-
-impl<T> Trait for Generic<T> {
- type AT = T; // only fails with a generic AT
-}
diff --git a/src/test/ui/nll/issue-53040.rs b/src/test/ui/nll/issue-53040.rs
deleted file mode 100644
index e4ee6e913..000000000
--- a/src/test/ui/nll/issue-53040.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-fn main() {
- let mut v: Vec<()> = Vec::new();
- || &mut v;
-//~^ ERROR captured variable cannot escape `FnMut` closure body
-}
diff --git a/src/test/ui/nll/issue-53040.stderr b/src/test/ui/nll/issue-53040.stderr
deleted file mode 100644
index 87ffe9b1a..000000000
--- a/src/test/ui/nll/issue-53040.stderr
+++ /dev/null
@@ -1,17 +0,0 @@
-error: captured variable cannot escape `FnMut` closure body
- --> $DIR/issue-53040.rs:3:8
- |
-LL | let mut v: Vec<()> = Vec::new();
- | ----- variable defined here
-LL | || &mut v;
- | - ^^^^^-
- | | | |
- | | | variable captured here
- | | returns a reference to a captured variable which escapes the closure body
- | inferred to be a `FnMut` closure
- |
- = note: `FnMut` closures only have access to their captured variables while they are executing...
- = note: ...therefore, they cannot allow references to captured variables to escape
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-53119.rs b/src/test/ui/nll/issue-53119.rs
deleted file mode 100644
index 03c9c071c..000000000
--- a/src/test/ui/nll/issue-53119.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// check-pass
-
-use std::ops::Deref;
-
-pub struct TypeFieldIterator<'a, T: 'a> {
- _t: &'a T,
-}
-
-pub struct Type<Id, T> {
- _types: Vec<(Id, T)>,
-}
-
-impl<'a, Id: 'a, T> Iterator for TypeFieldIterator<'a, T>
-where T: Deref<Target = Type<Id, T>> {
- type Item = &'a (Id, T);
-
- fn next(&mut self) -> Option<&'a (Id, T)> {
- || self.next();
- None
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-53123-raw-pointer-cast.rs b/src/test/ui/nll/issue-53123-raw-pointer-cast.rs
deleted file mode 100644
index 941c9eeb4..000000000
--- a/src/test/ui/nll/issue-53123-raw-pointer-cast.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// run-pass
-
-#![allow(unused_variables)]
-
-pub trait TryTransform {
- fn try_transform<F>(self, f: F)
- where
- Self: Sized,
- F: FnOnce(Self);
-}
-
-impl<'a, T> TryTransform for &'a mut T {
- fn try_transform<F>(self, f: F)
- where
- // The bug was that `Self: Sized` caused the lifetime of `this` to "extend" for all
- // of 'a instead of only lasting as long as the binding is used (for just that line).
- Self: Sized,
- F: FnOnce(Self),
- {
- let this: *mut T = self as *mut T;
- f(self);
- }
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/issue-53570.rs b/src/test/ui/nll/issue-53570.rs
deleted file mode 100644
index 35860ba9c..000000000
--- a/src/test/ui/nll/issue-53570.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Regression test for #53570. Here, we need to propagate that `T: 'a`
-// but in some versions of NLL we were propagating a stronger
-// requirement that `T: 'static`. This arose because we actually had
-// to propagate both that `T: 'a` but also `T: 'b` where `'b` is the
-// higher-ranked lifetime that appears in the type of the closure
-// parameter `x` -- since `'b` cannot be expressed in the caller's
-// space, that got promoted th `'static`.
-//
-// check-pass
-
-use std::cell::{RefCell, Ref};
-
-trait AnyVec<'a> {
-}
-
-trait GenericVec<T> {
- fn unwrap<'a, 'b>(vec: &'b dyn AnyVec<'a>) -> &'b [T] where T: 'a;
-}
-
-struct Scratchpad<'a> {
- buffers: RefCell<Box<dyn AnyVec<'a>>>,
-}
-
-impl<'a> Scratchpad<'a> {
- fn get<T: GenericVec<T>>(&self) -> Ref<[T]>
- where T: 'a
- {
- Ref::map(self.buffers.borrow(), |x| T::unwrap(x.as_ref()))
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-53773.rs b/src/test/ui/nll/issue-53773.rs
deleted file mode 100644
index ed971b6ce..000000000
--- a/src/test/ui/nll/issue-53773.rs
+++ /dev/null
@@ -1,47 +0,0 @@
-struct Archive;
-struct ArchiveIterator<'a> {
- x: &'a Archive,
-}
-struct ArchiveChild<'a> {
- x: &'a Archive,
-}
-
-struct A {
- raw: &'static mut Archive,
-}
-struct Iter<'a> {
- raw: &'a mut ArchiveIterator<'a>,
-}
-struct C<'a> {
- raw: &'a mut ArchiveChild<'a>,
-}
-
-impl A {
- pub fn iter(&self) -> Iter<'_> {
- panic!()
- }
-}
-impl Drop for A {
- fn drop(&mut self) {}
-}
-impl<'a> Drop for C<'a> {
- fn drop(&mut self) {}
-}
-
-impl<'a> Iterator for Iter<'a> {
- type Item = C<'a>;
- fn next(&mut self) -> Option<C<'a>> {
- panic!()
- }
-}
-
-fn error(archive: &A) {
- let mut members: Vec<&mut ArchiveChild<'_>> = vec![];
- for child in archive.iter() {
- members.push(child.raw);
- //~^ ERROR borrow may still be in use when destructor runs [E0713]
- }
- members.len();
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-53773.stderr b/src/test/ui/nll/issue-53773.stderr
deleted file mode 100644
index 90cba2a14..000000000
--- a/src/test/ui/nll/issue-53773.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0713]: borrow may still be in use when destructor runs
- --> $DIR/issue-53773.rs:41:22
- |
-LL | members.push(child.raw);
- | -------------^^^^^^^^^- borrow later used here
-LL |
-LL | }
- | - here, drop of `child` needs exclusive access to `*child.raw`, because the type `C<'_>` implements the `Drop` trait
- |
- = note: consider using a `let` binding to create a longer lived value
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0713`.
diff --git a/src/test/ui/nll/issue-53807.rs b/src/test/ui/nll/issue-53807.rs
deleted file mode 100644
index d494f7e15..000000000
--- a/src/test/ui/nll/issue-53807.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-pub fn main(){
- let maybe = Some(vec![true, true]);
- loop {
- if let Some(thing) = maybe {
-//~^ ERROR use of moved value
- }
- }
-}
diff --git a/src/test/ui/nll/issue-53807.stderr b/src/test/ui/nll/issue-53807.stderr
deleted file mode 100644
index d8f58b591..000000000
--- a/src/test/ui/nll/issue-53807.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0382]: use of moved value
- --> $DIR/issue-53807.rs:4:21
- |
-LL | if let Some(thing) = maybe {
- | ^^^^^ value moved here, in previous iteration of loop
- |
- = note: move occurs because value has type `Vec<bool>`, which does not implement the `Copy` trait
-help: borrow this binding in the pattern to avoid moving the value
- |
-LL | if let Some(ref thing) = maybe {
- | +++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/issue-54382-use-span-of-tail-of-block.rs b/src/test/ui/nll/issue-54382-use-span-of-tail-of-block.rs
deleted file mode 100644
index 312e6dce8..000000000
--- a/src/test/ui/nll/issue-54382-use-span-of-tail-of-block.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-fn main() {
- {
- let mut _thing1 = D(Box::new("thing1"));
- {
- let _thing2 = D("thing2");
- side_effects();
- D("other").next(&_thing1)
-//~^ ERROR does not live long enough
- }
- }
-
- ;
-}
-
-#[derive(Debug)]
-struct D<T: std::fmt::Debug>(T);
-
-impl<T: std::fmt::Debug> Drop for D<T> {
- fn drop(&mut self) {
- println!("dropping {:?})", self);
- }
-}
-
-impl<T: std::fmt::Debug> D<T> {
- fn next<U: std::fmt::Debug>(&self, _other: U) -> D<U> { D(_other) }
- fn end(&self) { }
-}
-
-fn side_effects() { }
diff --git a/src/test/ui/nll/issue-54382-use-span-of-tail-of-block.stderr b/src/test/ui/nll/issue-54382-use-span-of-tail-of-block.stderr
deleted file mode 100644
index d8f43cbc9..000000000
--- a/src/test/ui/nll/issue-54382-use-span-of-tail-of-block.stderr
+++ /dev/null
@@ -1,23 +0,0 @@
-error[E0597]: `_thing1` does not live long enough
- --> $DIR/issue-54382-use-span-of-tail-of-block.rs:7:29
- |
-LL | D("other").next(&_thing1)
- | ----------------^^^^^^^^-
- | | |
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
-...
-LL | }
- | - `_thing1` dropped here while still borrowed
-LL |
-LL | ;
- | - ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- |
-help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
- |
-LL | D("other").next(&_thing1);
- | +
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-54556-niconii.rs b/src/test/ui/nll/issue-54556-niconii.rs
deleted file mode 100644
index cae389e8c..000000000
--- a/src/test/ui/nll/issue-54556-niconii.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// This is a reduction of a concrete test illustrating a case that was
-// annoying to Rust developer niconii (see comment thread on #21114).
-//
-// With resolving issue #54556, pnkfelix hopes that the new diagnostic
-// output produced by NLL helps to *explain* the semantic significance
-// of temp drop order, and thus why inserting a semi-colon after the
-// `if let` expression in `main` works.
-
-struct Mutex;
-struct MutexGuard<'a>(&'a Mutex);
-
-impl Drop for Mutex { fn drop(&mut self) { println!("Mutex::drop"); } }
-impl<'a> Drop for MutexGuard<'a> { fn drop(&mut self) { println!("MutexGuard::drop"); } }
-
-impl Mutex {
- fn lock(&self) -> Result<MutexGuard, ()> { Ok(MutexGuard(self)) }
-}
-
-fn main() {
- let counter = Mutex;
-
- if let Ok(_) = counter.lock() { } //~ ERROR does not live long enough
-
- // With this code as written, the dynamic semantics here implies
- // that `Mutex::drop` for `counter` runs *before*
- // `MutexGuard::drop`, which would be unsound since `MutexGuard`
- // still has a reference to `counter`.
- //
- // The goal of #54556 is to explain that within a compiler
- // diagnostic.
-}
diff --git a/src/test/ui/nll/issue-54556-niconii.stderr b/src/test/ui/nll/issue-54556-niconii.stderr
deleted file mode 100644
index a8e1edc54..000000000
--- a/src/test/ui/nll/issue-54556-niconii.stderr
+++ /dev/null
@@ -1,23 +0,0 @@
-error[E0597]: `counter` does not live long enough
- --> $DIR/issue-54556-niconii.rs:22:20
- |
-LL | if let Ok(_) = counter.lock() { }
- | ^^^^^^^^^^^^^^
- | |
- | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
-...
-LL | }
- | -
- | |
- | `counter` dropped here while still borrowed
- | ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Result<MutexGuard<'_>, ()>`
- |
-help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
- |
-LL | if let Ok(_) = counter.lock() { };
- | +
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-54556-stephaneyfx.rs b/src/test/ui/nll/issue-54556-stephaneyfx.rs
deleted file mode 100644
index b758228e4..000000000
--- a/src/test/ui/nll/issue-54556-stephaneyfx.rs
+++ /dev/null
@@ -1,35 +0,0 @@
-// This is a reduction of a concrete test illustrating a case that was
-// annoying to Rust developer stephaneyfx (see issue #46413).
-//
-// With resolving issue #54556, pnkfelix hopes that the new diagnostic
-// output produced by NLL helps to *explain* the semantic significance
-// of temp drop order, and thus why storing the result in `x` and then
-// returning `x` works.
-
-pub struct Statement;
-
-pub struct Rows<'stmt>(&'stmt Statement);
-
-impl<'stmt> Drop for Rows<'stmt> {
- fn drop(&mut self) {}
-}
-
-impl<'stmt> Iterator for Rows<'stmt> {
- type Item = String;
-
- fn next(&mut self) -> Option<Self::Item> {
- None
- }
-}
-
-fn get_names() -> Option<String> {
- let stmt = Statement;
- let rows = Rows(&stmt); //~ ERROR does not live long enough
- rows.map(|row| row).next()
- // let x = rows.map(|row| row).next();
- // x
- //
- // Removing the map works too as does removing the Drop impl.
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-54556-stephaneyfx.stderr b/src/test/ui/nll/issue-54556-stephaneyfx.stderr
deleted file mode 100644
index 036a7a0ab..000000000
--- a/src/test/ui/nll/issue-54556-stephaneyfx.stderr
+++ /dev/null
@@ -1,24 +0,0 @@
-error[E0597]: `stmt` does not live long enough
- --> $DIR/issue-54556-stephaneyfx.rs:27:21
- |
-LL | let rows = Rows(&stmt);
- | ^^^^^ borrowed value does not live long enough
-LL | rows.map(|row| row).next()
- | ------------------- a temporary with access to the borrow is created here ...
-...
-LL | }
- | -
- | |
- | `stmt` dropped here while still borrowed
- | ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Map<Rows<'_>, [closure@$DIR/issue-54556-stephaneyfx.rs:28:14: 28:19]>`
- |
- = note: the temporary is part of an expression at the end of a block;
- consider forcing this temporary to be dropped sooner, before the block's local variables are dropped
-help: for example, you could save the expression's value in a new local variable `x` and then make `x` be the expression at the end of the block
- |
-LL | let x = rows.map(|row| row).next(); x
- | +++++++ +++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-54556-temps-in-tail-diagnostic.rs b/src/test/ui/nll/issue-54556-temps-in-tail-diagnostic.rs
deleted file mode 100644
index 2935caaf2..000000000
--- a/src/test/ui/nll/issue-54556-temps-in-tail-diagnostic.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-fn main() {
- {
- let mut _thing1 = D(Box::new("thing1"));
- // D("other").next(&_thing1).end()
- D(&_thing1).end() //~ ERROR does not live long enough
- }
-
- ;
-}
-
-#[derive(Debug)]
-struct D<T: std::fmt::Debug>(T);
-
-impl<T: std::fmt::Debug> Drop for D<T> {
- fn drop(&mut self) {
- println!("dropping {:?})", self);
- }
-}
-
-impl<T: std::fmt::Debug> D<T> {
- fn next<U: std::fmt::Debug>(&self, _other: U) -> D<U> { D(_other) }
- fn end(&self) { }
-}
diff --git a/src/test/ui/nll/issue-54556-temps-in-tail-diagnostic.stderr b/src/test/ui/nll/issue-54556-temps-in-tail-diagnostic.stderr
deleted file mode 100644
index 92f5ffdf3..000000000
--- a/src/test/ui/nll/issue-54556-temps-in-tail-diagnostic.stderr
+++ /dev/null
@@ -1,22 +0,0 @@
-error[E0597]: `_thing1` does not live long enough
- --> $DIR/issue-54556-temps-in-tail-diagnostic.rs:5:11
- |
-LL | D(&_thing1).end()
- | --^^^^^^^^-
- | | |
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
-LL | }
- | - `_thing1` dropped here while still borrowed
-LL |
-LL | ;
- | - ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- |
-help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
- |
-LL | D(&_thing1).end();
- | +
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-54556-used-vs-unused-tails.rs b/src/test/ui/nll/issue-54556-used-vs-unused-tails.rs
deleted file mode 100644
index a111acca6..000000000
--- a/src/test/ui/nll/issue-54556-used-vs-unused-tails.rs
+++ /dev/null
@@ -1,56 +0,0 @@
-// This test case is exploring the space of how blocks with tail
-// expressions and statements can be composed, trying to keep each
-// case on one line so that we can compare them via a vertical scan
-// with the human eye.
-
-// Each comment on the right side of the line is summarizing the
-// expected suggestion from the diagnostic for issue #54556.
-
-fn main() {
- { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } ; // suggest `;`
-//~^ ERROR does not live long enough
-
- { { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } } ; // suggest `;`
-//~^ ERROR does not live long enough
-
- { { let mut _t1 = D(Box::new("t1")); D(&_t1).end() }; } // suggest `;`
-//~^ ERROR does not live long enough
-
- let _ = { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } ; // suggest `;`
-//~^ ERROR does not live long enough
-
- let _u = { let mut _t1 = D(Box::new("t1")); D(&_t1).unit() } ; // suggest `;`
-//~^ ERROR does not live long enough
-
- let _x = { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } ; // `let x = ...; x`
-//~^ ERROR does not live long enough
- let _x = { let mut _t1 = D(Box::new("t1")); let x = D(&_t1).end(); x } ; // no error
-
- let mut _y;
- _y = { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } ; // `let x = ...; x`
-//~^ ERROR does not live long enough
- _y = { let mut _t1 = D(Box::new("t1")); let x = D(&_t1).end(); x } ; // no error
-}
-
-fn f_param_ref(_t1: D<Box<&'static str>>) { D(&_t1).unit() } // no error
-
-fn f_local_ref() { let mut _t1 = D(Box::new("t1")); D(&_t1).unit() } // suggest `;`
-//~^ ERROR does not live long enough
-
-fn f() -> String { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } // `let x = ...; x`
-//~^ ERROR does not live long enough
-
-#[derive(Debug)]
-struct D<T: std::fmt::Debug>(T);
-
-impl<T: std::fmt::Debug> Drop for D<T> {
- fn drop(&mut self) {
- println!("dropping {:?})", self);
- }
-}
-
-impl<T: std::fmt::Debug> D<T> {
- fn next<U: std::fmt::Debug>(&self, _other: U) -> D<U> { D(_other) }
- fn end(&self) -> String { format!("End({:?})", self.0) }
- fn unit(&self) { }
-}
diff --git a/src/test/ui/nll/issue-54556-used-vs-unused-tails.stderr b/src/test/ui/nll/issue-54556-used-vs-unused-tails.stderr
deleted file mode 100644
index 25226e296..000000000
--- a/src/test/ui/nll/issue-54556-used-vs-unused-tails.stderr
+++ /dev/null
@@ -1,146 +0,0 @@
-error[E0597]: `_t1` does not live long enough
- --> $DIR/issue-54556-used-vs-unused-tails.rs:10:55
- |
-LL | { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } ; // suggest `;`
- | --^^^^- - - ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- | | | |
- | | | `_t1` dropped here while still borrowed
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
- |
-help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
- |
-LL | { let mut _t1 = D(Box::new("t1")); D(&_t1).end(); } ; // suggest `;`
- | +
-
-error[E0597]: `_t1` does not live long enough
- --> $DIR/issue-54556-used-vs-unused-tails.rs:13:55
- |
-LL | { { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } } ; // suggest `;`
- | --^^^^- - - ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- | | | |
- | | | `_t1` dropped here while still borrowed
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
- |
-help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
- |
-LL | { { let mut _t1 = D(Box::new("t1")); D(&_t1).end(); } } ; // suggest `;`
- | +
-
-error[E0597]: `_t1` does not live long enough
- --> $DIR/issue-54556-used-vs-unused-tails.rs:16:55
- |
-LL | { { let mut _t1 = D(Box::new("t1")); D(&_t1).end() }; } // suggest `;`
- | --^^^^- -- ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- | | | |
- | | | `_t1` dropped here while still borrowed
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
- |
-help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
- |
-LL | { { let mut _t1 = D(Box::new("t1")); D(&_t1).end(); }; } // suggest `;`
- | +
-
-error[E0597]: `_t1` does not live long enough
- --> $DIR/issue-54556-used-vs-unused-tails.rs:19:55
- |
-LL | let _ = { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } ; // suggest `;`
- | --^^^^- - - ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- | | | |
- | | | `_t1` dropped here while still borrowed
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
- |
-help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
- |
-LL | let _ = { let mut _t1 = D(Box::new("t1")); D(&_t1).end(); } ; // suggest `;`
- | +
-
-error[E0597]: `_t1` does not live long enough
- --> $DIR/issue-54556-used-vs-unused-tails.rs:22:55
- |
-LL | let _u = { let mut _t1 = D(Box::new("t1")); D(&_t1).unit() } ; // suggest `;`
- | --^^^^- - - ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- | | | |
- | | | `_t1` dropped here while still borrowed
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
- |
-help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
- |
-LL | let _u = { let mut _t1 = D(Box::new("t1")); D(&_t1).unit(); } ; // suggest `;`
- | +
-
-error[E0597]: `_t1` does not live long enough
- --> $DIR/issue-54556-used-vs-unused-tails.rs:25:55
- |
-LL | let _x = { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } ; // `let x = ...; x`
- | --^^^^- - - ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- | | | |
- | | | `_t1` dropped here while still borrowed
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
- |
- = note: the temporary is part of an expression at the end of a block;
- consider forcing this temporary to be dropped sooner, before the block's local variables are dropped
-help: for example, you could save the expression's value in a new local variable `x` and then make `x` be the expression at the end of the block
- |
-LL | let _x = { let mut _t1 = D(Box::new("t1")); let x = D(&_t1).end(); x } ; // `let x = ...; x`
- | +++++++ +++
-
-error[E0597]: `_t1` does not live long enough
- --> $DIR/issue-54556-used-vs-unused-tails.rs:30:55
- |
-LL | _y = { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } ; // `let x = ...; x`
- | --^^^^- - - ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- | | | |
- | | | `_t1` dropped here while still borrowed
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
- |
- = note: the temporary is part of an expression at the end of a block;
- consider forcing this temporary to be dropped sooner, before the block's local variables are dropped
-help: for example, you could save the expression's value in a new local variable `x` and then make `x` be the expression at the end of the block
- |
-LL | _y = { let mut _t1 = D(Box::new("t1")); let x = D(&_t1).end(); x } ; // `let x = ...; x`
- | +++++++ +++
-
-error[E0597]: `_t1` does not live long enough
- --> $DIR/issue-54556-used-vs-unused-tails.rs:37:55
- |
-LL | fn f_local_ref() { let mut _t1 = D(Box::new("t1")); D(&_t1).unit() } // suggest `;`
- | --^^^^- -
- | | | |
- | | | `_t1` dropped here while still borrowed
- | | | ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
- |
-help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
- |
-LL | fn f_local_ref() { let mut _t1 = D(Box::new("t1")); D(&_t1).unit(); } // suggest `;`
- | +
-
-error[E0597]: `_t1` does not live long enough
- --> $DIR/issue-54556-used-vs-unused-tails.rs:40:55
- |
-LL | fn f() -> String { let mut _t1 = D(Box::new("t1")); D(&_t1).end() } // `let x = ...; x`
- | --^^^^- -
- | | | |
- | | | `_t1` dropped here while still borrowed
- | | | ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `D`
- | | borrowed value does not live long enough
- | a temporary with access to the borrow is created here ...
- |
- = note: the temporary is part of an expression at the end of a block;
- consider forcing this temporary to be dropped sooner, before the block's local variables are dropped
-help: for example, you could save the expression's value in a new local variable `x` and then make `x` be the expression at the end of the block
- |
-LL | fn f() -> String { let mut _t1 = D(Box::new("t1")); let x = D(&_t1).end(); x } // `let x = ...; x`
- | +++++++ +++
-
-error: aborting due to 9 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-54556-wrap-it-up.rs b/src/test/ui/nll/issue-54556-wrap-it-up.rs
deleted file mode 100644
index 11dbef0d8..000000000
--- a/src/test/ui/nll/issue-54556-wrap-it-up.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// This is testing how the diagnostic from issue #54556 behaves when
-// the destructor code is attached to a place held in a field of the
-// temporary being dropped.
-//
-// Eventually it would be nice if the diagnostic would actually report
-// that specific place and its type that implements the `Drop` trait.
-// But for the short term, it is acceptable to just print out the
-// whole type of the temporary.
-
-#![allow(warnings)]
-
-struct Wrap<'p> { p: &'p mut i32 }
-
-impl<'p> Drop for Wrap<'p> {
- fn drop(&mut self) {
- *self.p += 1;
- }
-}
-
-struct Foo<'p> { a: String, b: Wrap<'p> }
-
-fn main() {
- let mut x = 0;
- let wrap = Wrap { p: &mut x };
- let s = String::from("str");
- let foo = Foo { a: s, b: wrap };
- x = 1; //~ ERROR cannot assign to `x` because it is borrowed [E0506]
-}
diff --git a/src/test/ui/nll/issue-54556-wrap-it-up.stderr b/src/test/ui/nll/issue-54556-wrap-it-up.stderr
deleted file mode 100644
index 9f27fac15..000000000
--- a/src/test/ui/nll/issue-54556-wrap-it-up.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/issue-54556-wrap-it-up.rs:27:5
- |
-LL | let wrap = Wrap { p: &mut x };
- | ------ borrow of `x` occurs here
-...
-LL | x = 1;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | }
- | - borrow might be used here, when `foo` is dropped and runs the destructor for type `Foo<'_>`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/issue-54779-anon-static-lifetime.rs b/src/test/ui/nll/issue-54779-anon-static-lifetime.rs
deleted file mode 100644
index 260b6b109..000000000
--- a/src/test/ui/nll/issue-54779-anon-static-lifetime.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-// Regression test for #54779, checks if the diagnostics are confusing.
-
-trait DebugWith<Cx: ?Sized> {
- fn debug_with<'me>(&'me self, cx: &'me Cx) -> DebugCxPair<'me, Self, Cx> {
- DebugCxPair { value: self, cx }
- }
-
- fn fmt_with(&self, cx: &Cx, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result;
-}
-
-struct DebugCxPair<'me, Value: ?Sized, Cx: ?Sized>
-where
- Value: DebugWith<Cx>,
-{
- value: &'me Value,
- cx: &'me Cx,
-}
-
-trait DebugContext {}
-
-struct Foo {
- bar: Bar,
-}
-
-impl DebugWith<dyn DebugContext> for Foo {
- fn fmt_with(
- &self,
- cx: &dyn DebugContext,
- fmt: &mut std::fmt::Formatter<'_>,
- ) -> std::fmt::Result {
- let Foo { bar } = self;
- bar.debug_with(cx); //~ ERROR: lifetime may not live long enough
- Ok(())
- }
-}
-
-struct Bar {}
-
-impl DebugWith<dyn DebugContext> for Bar {
- fn fmt_with(
- &self,
- cx: &dyn DebugContext,
- fmt: &mut std::fmt::Formatter<'_>,
- ) -> std::fmt::Result {
- Ok(())
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-54779-anon-static-lifetime.stderr b/src/test/ui/nll/issue-54779-anon-static-lifetime.stderr
deleted file mode 100644
index 64ad7a21a..000000000
--- a/src/test/ui/nll/issue-54779-anon-static-lifetime.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-54779-anon-static-lifetime.rs:32:24
- |
-LL | cx: &dyn DebugContext,
- | - let's call the lifetime of this reference `'1`
-...
-LL | bar.debug_with(cx);
- | ^^ cast requires that `'1` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-54943-3.rs b/src/test/ui/nll/issue-54943-3.rs
deleted file mode 100644
index 077eb1563..000000000
--- a/src/test/ui/nll/issue-54943-3.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-// check-pass
-// FIXME(#54943) This test targets the scenario where proving the WF requirements requires
-// knowing the value of the `_` type present in the user type annotation - unfortunately, figuring
-// out the value of that `_` requires type-checking the surrounding code, but that code is dead,
-// so our NLL region checker doesn't have access to it. This test should actually fail to compile.
-
-#![allow(warnings)]
-
-use std::fmt::Debug;
-
-fn foo<T: 'static + Debug>(_: T) { }
-
-fn bar<'a>() {
- return;
-
- let _x = foo::<Vec<_>>(Vec::<&'a u32>::new());
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-54943.rs b/src/test/ui/nll/issue-54943.rs
deleted file mode 100644
index 85722300b..000000000
--- a/src/test/ui/nll/issue-54943.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-fn foo<T: 'static>() { }
-
-fn boo<'a>() {
- return;
-
- let x = foo::<&'a u32>();
- //~^ ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-54943.stderr b/src/test/ui/nll/issue-54943.stderr
deleted file mode 100644
index 59be0f983..000000000
--- a/src/test/ui/nll/issue-54943.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-54943.rs:6:13
- |
-LL | fn boo<'a>() {
- | -- lifetime `'a` defined here
-...
-LL | let x = foo::<&'a u32>();
- | ^^^^^^^^^^^^^^ requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-55288.rs b/src/test/ui/nll/issue-55288.rs
deleted file mode 100644
index aab2dc267..000000000
--- a/src/test/ui/nll/issue-55288.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-// check-pass
-
-struct Slice(&'static [&'static [u8]]);
-
-static MAP: Slice = Slice(&[
- b"CloseEvent" as &'static [u8],
-]);
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-55344.rs b/src/test/ui/nll/issue-55344.rs
deleted file mode 100644
index 20f18dc46..000000000
--- a/src/test/ui/nll/issue-55344.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// check-pass
-
-#![deny(unused_mut)]
-
-pub fn foo() {
- return;
-
- let mut v = 0;
- assert_eq!(v, 0);
- v = 1;
- assert_eq!(v, 1);
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-55394.rs b/src/test/ui/nll/issue-55394.rs
deleted file mode 100644
index f813d1c91..000000000
--- a/src/test/ui/nll/issue-55394.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-struct Bar;
-
-struct Foo<'s> {
- bar: &'s mut Bar,
-}
-
-impl Foo<'_> {
- fn new(bar: &mut Bar) -> Self {
- Foo { bar } //~ERROR
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-55394.stderr b/src/test/ui/nll/issue-55394.stderr
deleted file mode 100644
index 24b8c84b4..000000000
--- a/src/test/ui/nll/issue-55394.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-55394.rs:9:9
- |
-LL | fn new(bar: &mut Bar) -> Self {
- | - ---- return type is Foo<'2>
- | |
- | let's call the lifetime of this reference `'1`
-LL | Foo { bar }
- | ^^^^^^^^^^^ associated function was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-55401.rs b/src/test/ui/nll/issue-55401.rs
deleted file mode 100644
index fc45824e9..000000000
--- a/src/test/ui/nll/issue-55401.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-fn static_to_a_to_static_through_ref_in_tuple<'a>(x: &'a u32) -> &'static u32 {
- let (ref y, _z): (&'a u32, u32) = (&22, 44);
- *y //~ ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-55401.stderr b/src/test/ui/nll/issue-55401.stderr
deleted file mode 100644
index 4f797f26a..000000000
--- a/src/test/ui/nll/issue-55401.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-55401.rs:3:5
- |
-LL | fn static_to_a_to_static_through_ref_in_tuple<'a>(x: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | let (ref y, _z): (&'a u32, u32) = (&22, 44);
-LL | *y
- | ^^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-55511.rs b/src/test/ui/nll/issue-55511.rs
deleted file mode 100644
index 7dfa9c7bc..000000000
--- a/src/test/ui/nll/issue-55511.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-#![warn(indirect_structural_match)]
-use std::cell::Cell;
-trait Foo<'a> {
- const C: Option<Cell<&'a u32>>;
-}
-
-impl<'a, T> Foo<'a> for T {
- const C: Option<Cell<&'a u32>> = None;
-}
-
-fn main() {
- let a = 22;
- let b = Some(Cell::new(&a));
- //~^ ERROR `a` does not live long enough [E0597]
- match b {
- <() as Foo<'static>>::C => { }
- _ => { }
- }
-}
diff --git a/src/test/ui/nll/issue-55511.stderr b/src/test/ui/nll/issue-55511.stderr
deleted file mode 100644
index bf3e58e8c..000000000
--- a/src/test/ui/nll/issue-55511.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0597]: `a` does not live long enough
- --> $DIR/issue-55511.rs:13:28
- |
-LL | let b = Some(Cell::new(&a));
- | ^^ borrowed value does not live long enough
-...
-LL | <() as Foo<'static>>::C => { }
- | ----------------------- type annotation requires that `a` is borrowed for `'static`
-...
-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/src/test/ui/nll/issue-55651.rs b/src/test/ui/nll/issue-55651.rs
deleted file mode 100644
index 75ba48271..000000000
--- a/src/test/ui/nll/issue-55651.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// check-pass
-
-use std::mem::ManuallyDrop;
-
-struct A;
-struct B;
-
-union U {
- a: ManuallyDrop<A>,
- b: ManuallyDrop<B>,
-}
-
-fn main() {
- unsafe {
- {
- let mut u = U { a: ManuallyDrop::new(A) };
- let a = u.a;
- u.a = ManuallyDrop::new(A);
- let a = u.a; // OK
- }
- {
- let mut u = U { a: ManuallyDrop::new(A) };
- let a = u.a;
- u.b = ManuallyDrop::new(B);
- let a = u.a; // OK
- }
- }
-}
diff --git a/src/test/ui/nll/issue-55825-const-fn.rs b/src/test/ui/nll/issue-55825-const-fn.rs
deleted file mode 100644
index 8aaa19813..000000000
--- a/src/test/ui/nll/issue-55825-const-fn.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-// Regression test for issue #55825
-// Tests that we don't emit a spurious warning in NLL mode
-
-// check-pass
-
-const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
-
-fn main() { }
diff --git a/src/test/ui/nll/issue-55850.rs b/src/test/ui/nll/issue-55850.rs
deleted file mode 100644
index e6279bd02..000000000
--- a/src/test/ui/nll/issue-55850.rs
+++ /dev/null
@@ -1,35 +0,0 @@
-#![allow(unused_mut)]
-#![feature(generators, generator_trait)]
-
-use std::marker::Unpin;
-use std::ops::Generator;
-use std::ops::GeneratorState::Yielded;
-use std::pin::Pin;
-
-pub struct GenIter<G>(G);
-
-impl <G> Iterator for GenIter<G>
-where
- G: Generator + Unpin,
-{
- type Item = G::Yield;
-
- fn next(&mut self) -> Option<Self::Item> {
- match Pin::new(&mut self.0).resume(()) {
- Yielded(y) => Some(y),
- _ => None
- }
- }
-}
-
-fn bug<'a>() -> impl Iterator<Item = &'a str> {
- GenIter(move || {
- let mut s = String::new();
- yield &s[..] //~ ERROR cannot yield value referencing local variable `s` [E0515]
- //~| ERROR borrow may still be in use when generator yields
- })
-}
-
-fn main() {
- bug();
-}
diff --git a/src/test/ui/nll/issue-55850.stderr b/src/test/ui/nll/issue-55850.stderr
deleted file mode 100644
index 86a8cdc42..000000000
--- a/src/test/ui/nll/issue-55850.stderr
+++ /dev/null
@@ -1,19 +0,0 @@
-error[E0515]: cannot yield value referencing local variable `s`
- --> $DIR/issue-55850.rs:28:9
- |
-LL | yield &s[..]
- | ^^^^^^^-^^^^
- | | |
- | | `s` is borrowed here
- | yields a value referencing data owned by the current function
-
-error[E0626]: borrow may still be in use when generator yields
- --> $DIR/issue-55850.rs:28:16
- |
-LL | yield &s[..]
- | -------^---- possible yield occurs here
-
-error: aborting due to 2 previous errors
-
-Some errors have detailed explanations: E0515, E0626.
-For more information about an error, try `rustc --explain E0515`.
diff --git a/src/test/ui/nll/issue-57100.rs b/src/test/ui/nll/issue-57100.rs
deleted file mode 100644
index f15929334..000000000
--- a/src/test/ui/nll/issue-57100.rs
+++ /dev/null
@@ -1,67 +0,0 @@
-#![allow(unused)]
-
-
-// This tests the error messages for borrows of union fields when the unions are embedded in other
-// structs or unions.
-
-#[derive(Clone, Copy, Default)]
-struct Leaf {
- l1_u8: u8,
- l2_u8: u8,
-}
-
-#[derive(Clone, Copy)]
-union First {
- f1_leaf: Leaf,
- f2_leaf: Leaf,
- f3_union: Second,
-}
-
-#[derive(Clone, Copy)]
-union Second {
- s1_leaf: Leaf,
- s2_leaf: Leaf,
-}
-
-struct Root {
- r1_u8: u8,
- r2_union: First,
-}
-
-// Borrow a different field of the nested union.
-fn nested_union() {
- unsafe {
- let mut r = Root {
- r1_u8: 3,
- r2_union: First { f3_union: Second { s2_leaf: Leaf { l1_u8: 8, l2_u8: 4 } } }
- };
-
- let mref = &mut r.r2_union.f3_union.s1_leaf.l1_u8;
- // ^^^^^^^
- *mref = 22;
- let nref = &r.r2_union.f3_union.s2_leaf.l1_u8;
- // ^^^^^^^
- //~^^ ERROR cannot borrow `r.r2_union.f3_union` (via `r.r2_union.f3_union.s2_leaf.l1_u8`) as immutable because it is also borrowed as mutable (via `r.r2_union.f3_union.s1_leaf.l1_u8`) [E0502]
- println!("{} {}", mref, nref)
- }
-}
-
-// Borrow a different field of the first union.
-fn first_union() {
- unsafe {
- let mut r = Root {
- r1_u8: 3,
- r2_union: First { f3_union: Second { s2_leaf: Leaf { l1_u8: 8, l2_u8: 4 } } }
- };
-
- let mref = &mut r.r2_union.f2_leaf.l1_u8;
- // ^^^^^^^
- *mref = 22;
- let nref = &r.r2_union.f1_leaf.l1_u8;
- // ^^^^^^^
- //~^^ ERROR cannot borrow `r.r2_union` (via `r.r2_union.f1_leaf.l1_u8`) as immutable because it is also borrowed as mutable (via `r.r2_union.f2_leaf.l1_u8`) [E0502]
- println!("{} {}", mref, nref)
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-57100.stderr b/src/test/ui/nll/issue-57100.stderr
deleted file mode 100644
index 523c3e8d0..000000000
--- a/src/test/ui/nll/issue-57100.stderr
+++ /dev/null
@@ -1,31 +0,0 @@
-error[E0502]: cannot borrow `r.r2_union.f3_union` (via `r.r2_union.f3_union.s2_leaf.l1_u8`) as immutable because it is also borrowed as mutable (via `r.r2_union.f3_union.s1_leaf.l1_u8`)
- --> $DIR/issue-57100.rs:42:20
- |
-LL | let mref = &mut r.r2_union.f3_union.s1_leaf.l1_u8;
- | -------------------------------------- mutable borrow occurs here (via `r.r2_union.f3_union.s1_leaf.l1_u8`)
-...
-LL | let nref = &r.r2_union.f3_union.s2_leaf.l1_u8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ immutable borrow of `r.r2_union.f3_union.s2_leaf.l1_u8` -- which overlaps with `r.r2_union.f3_union.s1_leaf.l1_u8` -- occurs here
-...
-LL | println!("{} {}", mref, nref)
- | ---- mutable borrow later used here
- |
- = note: `r.r2_union.f3_union.s2_leaf.l1_u8` is a field of the union `Second`, so it overlaps the field `r.r2_union.f3_union.s1_leaf.l1_u8`
-
-error[E0502]: cannot borrow `r.r2_union` (via `r.r2_union.f1_leaf.l1_u8`) as immutable because it is also borrowed as mutable (via `r.r2_union.f2_leaf.l1_u8`)
- --> $DIR/issue-57100.rs:60:20
- |
-LL | let mref = &mut r.r2_union.f2_leaf.l1_u8;
- | ----------------------------- mutable borrow occurs here (via `r.r2_union.f2_leaf.l1_u8`)
-...
-LL | let nref = &r.r2_union.f1_leaf.l1_u8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^ immutable borrow of `r.r2_union.f1_leaf.l1_u8` -- which overlaps with `r.r2_union.f2_leaf.l1_u8` -- occurs here
-...
-LL | println!("{} {}", mref, nref)
- | ---- mutable borrow later used here
- |
- = note: `r.r2_union.f1_leaf.l1_u8` is a field of the union `First`, so it overlaps the field `r.r2_union.f2_leaf.l1_u8`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0502`.
diff --git a/src/test/ui/nll/issue-57265-return-type-wf-check.rs b/src/test/ui/nll/issue-57265-return-type-wf-check.rs
deleted file mode 100644
index 8fb8351ce..000000000
--- a/src/test/ui/nll/issue-57265-return-type-wf-check.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-use std::any::Any;
-
-#[derive(Debug, Clone)]
-struct S<T: 'static>(T);
-
-// S<&'a T> is in the return type, so we get an implied bound
-// &'a T: 'static
-fn foo<'a, T>(x: &'a T) -> (S<&'a T>, Box<dyn Any + 'static>) {
- let y = S(x);
-
- let z = Box::new(y.clone()) as Box<dyn Any + 'static>;
- (y, z)
-}
-
-fn main() {
- let x = 5;
-
- // Check that we require that the argument is of type `&'static String`,
- // so that the return type is well-formed.
- let (_, z) = foo(&"hello".to_string());
- //~^ ERROR temporary value dropped while borrowed
-
- println!("{:?}", z.downcast_ref::<S<&'static String>>());
-}
diff --git a/src/test/ui/nll/issue-57265-return-type-wf-check.stderr b/src/test/ui/nll/issue-57265-return-type-wf-check.stderr
deleted file mode 100644
index bb45575fa..000000000
--- a/src/test/ui/nll/issue-57265-return-type-wf-check.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0716]: temporary value dropped while borrowed
- --> $DIR/issue-57265-return-type-wf-check.rs:20:23
- |
-LL | let (_, z) = foo(&"hello".to_string());
- | -----^^^^^^^^^^^^^^^^^^^-- 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`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0716`.
diff --git a/src/test/ui/nll/issue-57280-1-flipped.rs b/src/test/ui/nll/issue-57280-1-flipped.rs
deleted file mode 100644
index ad4b8dcfd..000000000
--- a/src/test/ui/nll/issue-57280-1-flipped.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// This test should compile, as the lifetimes
-// in matches don't really matter.
-//
-// We currently use contravariance when checking the
-// type of match arms.
-
-trait Foo<'a> {
- const C: &'a u32;
-}
-
-impl<'a, T> Foo<'a> for T {
- const C: &'a u32 = &22;
-}
-
-fn foo<'a>(x: &'static u32) {
- match x {
- <() as Foo<'a>>::C => { }
- //~^ ERROR lifetime may not live long enough
- &_ => { }
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-57280-1-flipped.stderr b/src/test/ui/nll/issue-57280-1-flipped.stderr
deleted file mode 100644
index 7a2135a2a..000000000
--- a/src/test/ui/nll/issue-57280-1-flipped.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-57280-1-flipped.rs:17:9
- |
-LL | fn foo<'a>(x: &'static u32) {
- | -- lifetime `'a` defined here
-LL | match x {
-LL | <() as Foo<'a>>::C => { }
- | ^^^^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-57280-1.rs b/src/test/ui/nll/issue-57280-1.rs
deleted file mode 100644
index b8979624e..000000000
--- a/src/test/ui/nll/issue-57280-1.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-// check-pass
-
-trait Foo<'a> {
- const C: &'a u32;
-}
-
-impl<'a, T> Foo<'a> for T {
- const C: &'a u32 = &22;
-}
-
-fn foo() {
- let a = 22;
- match &a {
- <() as Foo<'static>>::C => { }
- &_ => { }
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-57280.rs b/src/test/ui/nll/issue-57280.rs
deleted file mode 100644
index b9d336ec3..000000000
--- a/src/test/ui/nll/issue-57280.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-// check-pass
-
-trait Foo {
- const BLAH: &'static str;
-}
-
-struct Placeholder;
-
-impl Foo for Placeholder {
- const BLAH: &'static str = "hi";
-}
-
-fn foo(x: &str) {
- match x {
- <Placeholder as Foo>::BLAH => { }
- _ => { }
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-57642-higher-ranked-subtype.rs b/src/test/ui/nll/issue-57642-higher-ranked-subtype.rs
deleted file mode 100644
index eba859cde..000000000
--- a/src/test/ui/nll/issue-57642-higher-ranked-subtype.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Regression test for issue #57642
-// Tests that we reject a bad higher-ranked subtype
-
-trait X {
- type G;
- fn make_g() -> Self::G;
-}
-
-impl<'a> X for fn(&'a ()) {
- type G = &'a ();
-
- fn make_g() -> Self::G {
- &()
- }
-}
-
-trait Y {
- type F;
- fn make_f() -> Self::F;
-}
-
-impl<T> Y for fn(T) {
- type F = fn(T);
-
- fn make_f() -> Self::F {
- |_| {}
- }
-}
-
-fn higher_ranked_region_has_lost_its_binder() {
- let x = <fn (&())>::make_g(); //~ ERROR the function
-}
-
-fn magical() {
- let x = <fn (&())>::make_f(); //~ ERROR no function
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-57642-higher-ranked-subtype.stderr b/src/test/ui/nll/issue-57642-higher-ranked-subtype.stderr
deleted file mode 100644
index 6e96f40c0..000000000
--- a/src/test/ui/nll/issue-57642-higher-ranked-subtype.stderr
+++ /dev/null
@@ -1,31 +0,0 @@
-error[E0599]: the function or associated item `make_g` exists for fn pointer `for<'a> fn(&'a ())`, but its trait bounds were not satisfied
- --> $DIR/issue-57642-higher-ranked-subtype.rs:31:25
- |
-LL | let x = <fn (&())>::make_g();
- | ^^^^^^ function or associated item cannot be called on `for<'a> fn(&'a ())` due to unsatisfied trait bounds
- |
- = note: the following trait bounds were not satisfied:
- `for<'a> fn(&'a ()): X`
- = help: items from traits can only be used if the trait is implemented and in scope
-note: `X` defines an item `make_g`, perhaps you need to implement it
- --> $DIR/issue-57642-higher-ranked-subtype.rs:4:1
- |
-LL | trait X {
- | ^^^^^^^
-
-error[E0599]: no function or associated item named `make_f` found for fn pointer `for<'a> fn(&'a ())` in the current scope
- --> $DIR/issue-57642-higher-ranked-subtype.rs:35:25
- |
-LL | let x = <fn (&())>::make_f();
- | ^^^^^^ function or associated item not found in `for<'a> fn(&'a ())`
- |
- = help: items from traits can only be used if the trait is implemented and in scope
-note: `Y` defines an item `make_f`, perhaps you need to implement it
- --> $DIR/issue-57642-higher-ranked-subtype.rs:17:1
- |
-LL | trait Y {
- | ^^^^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0599`.
diff --git a/src/test/ui/nll/issue-57843.rs b/src/test/ui/nll/issue-57843.rs
deleted file mode 100644
index 11629690e..000000000
--- a/src/test/ui/nll/issue-57843.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Regression test for an ICE that occurred with the universes code:
-//
-// The signature of the closure `|_|` was being inferred to
-// `exists<'r> fn(&'r u8)`. This should result in a type error since
-// the signature `for<'r> fn(&'r u8)` is required. However, due to a
-// bug in the type variable generalization code, the placeholder for
-// `'r` was leaking out into the writeback phase, causing an ICE.
-
-trait ClonableFn<T> {
- fn clone(&self) -> Box<dyn Fn(T)>;
-}
-
-impl<T, F: 'static> ClonableFn<T> for F
-where
- F: Fn(T) + Clone,
-{
- fn clone(&self) -> Box<dyn Fn(T)> {
- Box::new(self.clone())
- }
-}
-
-struct Foo(Box<dyn for<'a> ClonableFn<&'a bool>>);
-
-fn main() {
- Foo(Box::new(|_| ())); //~ ERROR implementation of `FnOnce` is not general enough
-}
diff --git a/src/test/ui/nll/issue-57843.stderr b/src/test/ui/nll/issue-57843.stderr
deleted file mode 100644
index 2ab49ec61..000000000
--- a/src/test/ui/nll/issue-57843.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: implementation of `FnOnce` is not general enough
- --> $DIR/issue-57843.rs:25:9
- |
-LL | Foo(Box::new(|_| ()));
- | ^^^^^^^^^^^^^^^^ implementation of `FnOnce` is not general enough
- |
- = note: closure with signature `fn(&'2 bool)` must implement `FnOnce<(&'1 bool,)>`, for any lifetime `'1`...
- = note: ...but it actually implements `FnOnce<(&'2 bool,)>`, for some specific lifetime `'2`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-57960.rs b/src/test/ui/nll/issue-57960.rs
deleted file mode 100644
index 32e45184a..000000000
--- a/src/test/ui/nll/issue-57960.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-// run-pass
-
-#![allow(dead_code)]
-
-trait Range {
- const FIRST: u8;
- const LAST: u8;
-}
-
-struct OneDigit;
-impl Range for OneDigit {
- const FIRST: u8 = 0;
- const LAST: u8 = 9;
-}
-
-struct TwoDigits;
-impl Range for TwoDigits {
- const FIRST: u8 = 10;
- const LAST: u8 = 99;
-}
-
-struct ThreeDigits;
-impl Range for ThreeDigits {
- const FIRST: u8 = 100;
- const LAST: u8 = 255;
-}
-
-fn digits(x: u8) -> u32 {
- match x {
- OneDigit::FIRST..=OneDigit::LAST => 1,
- TwoDigits::FIRST..=TwoDigits::LAST => 2,
- ThreeDigits::FIRST..=ThreeDigits::LAST => 3,
- }
-}
-
-fn main() {
- assert_eq!(digits(100), 3);
-}
diff --git a/src/test/ui/nll/issue-57989.rs b/src/test/ui/nll/issue-57989.rs
deleted file mode 100644
index 8f3dec454..000000000
--- a/src/test/ui/nll/issue-57989.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Test for ICE from issue 57989
-
-fn f(x: &i32) {
- let g = &x;
- *x = 0; //~ ERROR cannot assign to `*x`, which is behind a `&` reference
- //~| ERROR cannot assign to `*x` because it is borrowed
- g;
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-57989.stderr b/src/test/ui/nll/issue-57989.stderr
deleted file mode 100644
index e85e63e52..000000000
--- a/src/test/ui/nll/issue-57989.stderr
+++ /dev/null
@@ -1,24 +0,0 @@
-error[E0594]: cannot assign to `*x`, which is behind a `&` reference
- --> $DIR/issue-57989.rs:5:5
- |
-LL | fn f(x: &i32) {
- | ---- help: consider changing this to be a mutable reference: `&mut i32`
-LL | let g = &x;
-LL | *x = 0;
- | ^^^^^^ `x` is a `&` reference, so the data it refers to cannot be written
-
-error[E0506]: cannot assign to `*x` because it is borrowed
- --> $DIR/issue-57989.rs:5:5
- |
-LL | let g = &x;
- | -- borrow of `*x` occurs here
-LL | *x = 0;
- | ^^^^^^ assignment to borrowed `*x` occurs here
-LL |
-LL | g;
- | - borrow later used here
-
-error: aborting due to 2 previous errors
-
-Some errors have detailed explanations: E0506, E0594.
-For more information about an error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/issue-58053.rs b/src/test/ui/nll/issue-58053.rs
deleted file mode 100644
index d5a2fa1a3..000000000
--- a/src/test/ui/nll/issue-58053.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main() {
- let i = &3;
-
- let f = |x: &i32| -> &i32 { x };
- //~^ ERROR lifetime may not live long enough
- let j = f(i);
-
- let g = |x: &i32| { x };
- //~^ ERROR lifetime may not live long enough
- let k = g(i);
-}
diff --git a/src/test/ui/nll/issue-58053.stderr b/src/test/ui/nll/issue-58053.stderr
deleted file mode 100644
index bf7416e1a..000000000
--- a/src/test/ui/nll/issue-58053.stderr
+++ /dev/null
@@ -1,20 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-58053.rs:4:33
- |
-LL | let f = |x: &i32| -> &i32 { x };
- | - - ^ returning this value requires that `'1` must outlive `'2`
- | | |
- | | let's call the lifetime of this reference `'2`
- | let's call the lifetime of this reference `'1`
-
-error: lifetime may not live long enough
- --> $DIR/issue-58053.rs:8:25
- |
-LL | let g = |x: &i32| { x };
- | - - ^ returning this value requires that `'1` must outlive `'2`
- | | |
- | | return type of closure is &'2 i32
- | let's call the lifetime of this reference `'1`
-
-error: aborting due to 2 previous errors
-
diff --git a/src/test/ui/nll/issue-58299.rs b/src/test/ui/nll/issue-58299.rs
deleted file mode 100644
index 0587fe8b4..000000000
--- a/src/test/ui/nll/issue-58299.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-struct A<'a>(&'a ());
-
-trait Y {
- const X: i32;
-}
-
-impl Y for A<'static> {
- const X: i32 = 10;
-}
-
-fn foo<'a>(x: i32) {
- match x {
- // This uses <A<'a> as Y>::X, but `A<'a>` does not implement `Y`.
- A::<'a>::X..=A::<'static>::X => (), //~ ERROR lifetime may not live long enough
- _ => (),
- }
-}
-
-fn bar<'a>(x: i32) {
- match x {
- // This uses <A<'a> as Y>::X, but `A<'a>` does not implement `Y`.
- A::<'static>::X..=A::<'a>::X => (), //~ ERROR lifetime may not live long enough
- _ => (),
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-58299.stderr b/src/test/ui/nll/issue-58299.stderr
deleted file mode 100644
index 509ba67bd..000000000
--- a/src/test/ui/nll/issue-58299.stderr
+++ /dev/null
@@ -1,20 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-58299.rs:14:9
- |
-LL | fn foo<'a>(x: i32) {
- | -- lifetime `'a` defined here
-...
-LL | A::<'a>::X..=A::<'static>::X => (),
- | ^^^^^^^^^^ requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/issue-58299.rs:22:27
- |
-LL | fn bar<'a>(x: i32) {
- | -- lifetime `'a` defined here
-...
-LL | A::<'static>::X..=A::<'a>::X => (),
- | ^^^^^^^^^^ requires that `'a` must outlive `'static`
-
-error: aborting due to 2 previous errors
-
diff --git a/src/test/ui/nll/issue-61311-normalize.rs b/src/test/ui/nll/issue-61311-normalize.rs
deleted file mode 100644
index 77d67b07a..000000000
--- a/src/test/ui/nll/issue-61311-normalize.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Regression test for #61311
-// We would ICE after failing to normalize `Self::Proj` in the `impl` below.
-
-// check-pass
-
-pub struct Unit;
-trait Obj {}
-
-trait Bound {}
-impl Bound for Unit {}
-
-pub trait HasProj {
- type Proj;
-}
-
-impl<T> HasProj for T {
- type Proj = Unit;
-}
-
-trait HasProjFn {
- type Proj;
- fn the_fn(_: Self::Proj);
-}
-
-impl HasProjFn for Unit
-where
- Box<dyn Obj + 'static>: HasProj,
- <Box<dyn Obj + 'static> as HasProj>::Proj: Bound,
-{
- type Proj = Unit;
- fn the_fn(_: Self::Proj) {}
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-61320-normalize.rs b/src/test/ui/nll/issue-61320-normalize.rs
deleted file mode 100644
index 095bef03f..000000000
--- a/src/test/ui/nll/issue-61320-normalize.rs
+++ /dev/null
@@ -1,160 +0,0 @@
-// Regression test for #61320
-// This is the same issue as #61311, just a larger test case.
-
-// check-pass
-
-pub struct AndThen<A, B, F>
-where
- A: Future,
- B: IntoFuture,
-{
- state: (A, B::Future, F),
-}
-
-pub struct FutureResult<T, E> {
- inner: Option<Result<T, E>>,
-}
-
-impl<T, E> Future for FutureResult<T, E> {
- type Item = T;
- type Error = E;
-
- fn poll(&mut self) -> Poll<T, E> {
- unimplemented!()
- }
-}
-
-pub type Poll<T, E> = Result<T, E>;
-
-impl<A, B, F> Future for AndThen<A, B, F>
-where
- A: Future,
- B: IntoFuture<Error = A::Error>,
- F: FnOnce(A::Item) -> B,
-{
- type Item = B::Item;
- type Error = B::Error;
-
- fn poll(&mut self) -> Poll<B::Item, B::Error> {
- unimplemented!()
- }
-}
-
-pub trait Future {
- type Item;
-
- type Error;
-
- fn poll(&mut self) -> Poll<Self::Item, Self::Error>;
-
- fn and_then<F, B>(self, f: F) -> AndThen<Self, B, F>
- where
- F: FnOnce(Self::Item) -> B,
- B: IntoFuture<Error = Self::Error>,
- Self: Sized,
- {
- unimplemented!()
- }
-}
-
-pub trait IntoFuture {
- /// The future that this type can be converted into.
- type Future: Future<Item = Self::Item, Error = Self::Error>;
-
- /// The item that the future may resolve with.
- type Item;
- /// The error that the future may resolve with.
- type Error;
-
- /// Consumes this object and produces a future.
- fn into_future(self) -> Self::Future;
-}
-
-impl<F: Future> IntoFuture for F {
- type Future = F;
- type Item = F::Item;
- type Error = F::Error;
-
- fn into_future(self) -> F {
- self
- }
-}
-
-impl<F: ?Sized + Future> Future for ::std::boxed::Box<F> {
- type Item = F::Item;
- type Error = F::Error;
-
- fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
- (**self).poll()
- }
-}
-
-impl<T, E> IntoFuture for Result<T, E> {
- type Future = FutureResult<T, E>;
- type Item = T;
- type Error = E;
-
- fn into_future(self) -> FutureResult<T, E> {
- unimplemented!()
- }
-}
-
-struct Request<T>(T);
-
-trait RequestContext {}
-impl<T> RequestContext for T {}
-struct NoContext;
-impl AsRef<NoContext> for NoContext {
- fn as_ref(&self) -> &Self {
- &NoContext
- }
-}
-
-type BoxedError = Box<dyn std::error::Error + Send + Sync>;
-type DefaultFuture<T, E> = Box<dyn Future<Item = T, Error = E> + Send>;
-
-trait Guard: Sized {
- type Result: IntoFuture<Item = Self, Error = BoxedError>;
- fn from_request(request: &Request<()>) -> Self::Result;
-}
-
-trait FromRequest: Sized {
- type Context;
- type Future: Future<Item = Self, Error = BoxedError> + Send;
- fn from_request(request: Request<()>) -> Self::Future;
-}
-
-struct MyGuard;
-impl Guard for MyGuard {
- type Result = Result<Self, BoxedError>;
- fn from_request(_request: &Request<()>) -> Self::Result {
- Ok(MyGuard)
- }
-}
-
-struct Generic<I> {
- _inner: I,
-}
-
-impl<I> FromRequest for Generic<I>
-where
- MyGuard: Guard,
- <MyGuard as Guard>::Result: IntoFuture<Item = MyGuard, Error = BoxedError>,
- <<MyGuard as Guard>::Result as IntoFuture>::Future: Send,
- I: FromRequest<Context = NoContext>,
-{
- type Future = DefaultFuture<Self, BoxedError>;
- type Context = NoContext;
- fn from_request(headers: Request<()>) -> DefaultFuture<Self, BoxedError> {
- let _future = <MyGuard as Guard>::from_request(&headers)
- .into_future()
- .and_then(move |_| {
- <I as FromRequest>::from_request(headers)
- .into_future()
- .and_then(move |fld_inner| Ok(Generic { _inner: fld_inner }).into_future())
- });
- panic!();
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-61424.fixed b/src/test/ui/nll/issue-61424.fixed
deleted file mode 100644
index 63e00c172..000000000
--- a/src/test/ui/nll/issue-61424.fixed
+++ /dev/null
@@ -1,9 +0,0 @@
-// run-rustfix
-
-#![deny(unused_mut)]
-
-fn main() {
- let x; //~ ERROR: variable does not need to be mutable
- x = String::new();
- dbg!(x);
-}
diff --git a/src/test/ui/nll/issue-61424.rs b/src/test/ui/nll/issue-61424.rs
deleted file mode 100644
index 3b64996c2..000000000
--- a/src/test/ui/nll/issue-61424.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-// run-rustfix
-
-#![deny(unused_mut)]
-
-fn main() {
- let mut x; //~ ERROR: variable does not need to be mutable
- x = String::new();
- dbg!(x);
-}
diff --git a/src/test/ui/nll/issue-61424.stderr b/src/test/ui/nll/issue-61424.stderr
deleted file mode 100644
index 6de6b7f3a..000000000
--- a/src/test/ui/nll/issue-61424.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error: variable does not need to be mutable
- --> $DIR/issue-61424.rs:6:9
- |
-LL | let mut x;
- | ----^
- | |
- | help: remove this `mut`
- |
-note: the lint level is defined here
- --> $DIR/issue-61424.rs:3:9
- |
-LL | #![deny(unused_mut)]
- | ^^^^^^^^^^
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-62007-assign-const-index.rs b/src/test/ui/nll/issue-62007-assign-const-index.rs
deleted file mode 100644
index 3ea5d3a7a..000000000
--- a/src/test/ui/nll/issue-62007-assign-const-index.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Issue #62007: assigning over a const-index projection of an array
-// (in this case, `list[I] = n;`) should in theory be able to kill all borrows
-// of `list[0]`, so that `list[0]` could be borrowed on the next
-// iteration through the loop.
-//
-// Currently the compiler does not allow this. We may want to consider
-// loosening that restriction in the future. (However, doing so would
-// at *least* require T-lang team approval, and probably an RFC; e.g.
-// such loosening might make complicate the user's mental mode; it
-// also would make code more brittle in the face of refactorings that
-// replace constants with variables.
-
-#![allow(dead_code)]
-
-struct List<T> {
- value: T,
- next: Option<Box<List<T>>>,
-}
-
-fn to_refs<T>(mut list: [&mut List<T>; 2]) -> Vec<&mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut list[0].value); //~ ERROR cannot borrow `list[_].value` as mutable
- if let Some(n) = list[0].next.as_mut() { //~ ERROR cannot borrow `list[_].next` as mutable
- list[0] = n;
- } else {
- return result;
- }
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-62007-assign-const-index.stderr b/src/test/ui/nll/issue-62007-assign-const-index.stderr
deleted file mode 100644
index 12e28aa3f..000000000
--- a/src/test/ui/nll/issue-62007-assign-const-index.stderr
+++ /dev/null
@@ -1,27 +0,0 @@
-error[E0499]: cannot borrow `list[_].value` as mutable more than once at a time
- --> $DIR/issue-62007-assign-const-index.rs:23:21
- |
-LL | fn to_refs<T>(mut list: [&mut List<T>; 2]) -> Vec<&mut T> {
- | - let's call the lifetime of this reference `'1`
-...
-LL | result.push(&mut list[0].value);
- | ^^^^^^^^^^^^^^^^^^ `list[_].value` was mutably borrowed here in the previous iteration of the loop
-...
-LL | return result;
- | ------ returning this value requires that `list[_].value` is borrowed for `'1`
-
-error[E0499]: cannot borrow `list[_].next` as mutable more than once at a time
- --> $DIR/issue-62007-assign-const-index.rs:24:26
- |
-LL | fn to_refs<T>(mut list: [&mut List<T>; 2]) -> Vec<&mut T> {
- | - let's call the lifetime of this reference `'1`
-...
-LL | if let Some(n) = list[0].next.as_mut() {
- | ^^^^^^^^^^^^^^^^^^^^^
- | |
- | `list[_].next` was mutably borrowed here in the previous iteration of the loop
- | argument requires that `list[_].next` is borrowed for `'1`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0499`.
diff --git a/src/test/ui/nll/issue-62007-assign-differing-fields.rs b/src/test/ui/nll/issue-62007-assign-differing-fields.rs
deleted file mode 100644
index 29d92b7b8..000000000
--- a/src/test/ui/nll/issue-62007-assign-differing-fields.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Double-check we didn't go too far with our resolution to issue
-// #62007: assigning over a field projection (`list.1 = n;` in this
-// case) should kill only borrows of `list.1`; `list.0` can *not*
-// necessarily be borrowed on the next iteration through the loop.
-
-#![allow(dead_code)]
-
-struct List<T> {
- value: T,
- next: Option<Box<List<T>>>,
-}
-
-fn to_refs<'a, T>(mut list: (&'a mut List<T>, &'a mut List<T>)) -> Vec<&'a mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut (list.0).value); //~ ERROR cannot borrow `list.0.value` as mutable
- if let Some(n) = (list.0).next.as_mut() { //~ ERROR cannot borrow `list.0.next` as mutable
- list.1 = n;
- } else {
- return result;
- }
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-62007-assign-differing-fields.stderr b/src/test/ui/nll/issue-62007-assign-differing-fields.stderr
deleted file mode 100644
index 4488431fc..000000000
--- a/src/test/ui/nll/issue-62007-assign-differing-fields.stderr
+++ /dev/null
@@ -1,27 +0,0 @@
-error[E0499]: cannot borrow `list.0.value` as mutable more than once at a time
- --> $DIR/issue-62007-assign-differing-fields.rs:16:21
- |
-LL | fn to_refs<'a, T>(mut list: (&'a mut List<T>, &'a mut List<T>)) -> Vec<&'a mut T> {
- | -- lifetime `'a` defined here
-...
-LL | result.push(&mut (list.0).value);
- | ^^^^^^^^^^^^^^^^^^^ `list.0.value` was mutably borrowed here in the previous iteration of the loop
-...
-LL | return result;
- | ------ returning this value requires that `list.0.value` is borrowed for `'a`
-
-error[E0499]: cannot borrow `list.0.next` as mutable more than once at a time
- --> $DIR/issue-62007-assign-differing-fields.rs:17:26
- |
-LL | fn to_refs<'a, T>(mut list: (&'a mut List<T>, &'a mut List<T>)) -> Vec<&'a mut T> {
- | -- lifetime `'a` defined here
-...
-LL | if let Some(n) = (list.0).next.as_mut() {
- | ^^^^^^^^^^^^^^^^^^^^^^
- | |
- | `list.0.next` was mutably borrowed here in the previous iteration of the loop
- | argument requires that `list.0.next` is borrowed for `'a`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0499`.
diff --git a/src/test/ui/nll/issue-63154-normalize.rs b/src/test/ui/nll/issue-63154-normalize.rs
deleted file mode 100644
index 484c12879..000000000
--- a/src/test/ui/nll/issue-63154-normalize.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Regression test for rust-lang/rust#63154
-//
-// Before, we would ICE after failing to normalize the destination type
-// when checking call destinations and also when checking MIR
-// assignment statements.
-
-// check-pass
-
-trait HasAssocType {
- type Inner;
-}
-
-impl HasAssocType for () {
- type Inner = ();
-}
-
-trait Tr<I, T>: Fn(I) -> Option<T> {}
-impl<I, T, Q: Fn(I) -> Option<T>> Tr<I, T> for Q {}
-
-fn f<T: HasAssocType>() -> impl Tr<T, T::Inner> {
- |_| None
-}
-
-fn g<T, Y>(f: impl Tr<T, Y>) -> impl Tr<T, Y> {
- f
-}
-
-fn h() {
- g(f())(());
-}
-
-fn main() {
- h();
-}
diff --git a/src/test/ui/nll/issue-67007-escaping-data.rs b/src/test/ui/nll/issue-67007-escaping-data.rs
deleted file mode 100644
index 49ea2e596..000000000
--- a/src/test/ui/nll/issue-67007-escaping-data.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Regression test for issue #67007
-// Ensures that we show information about the specific regions involved
-
-// Covariant over 'a, invariant over 'tcx
-struct FnCtxt<'a, 'tcx: 'a>(&'a (), *mut &'tcx ());
-
-impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
- fn use_it(&self, _: &'tcx ()) {}
-}
-
-struct Consumer<'tcx>(&'tcx ());
-
-impl<'tcx> Consumer<'tcx> {
- fn bad_method<'a>(&self, fcx: &FnCtxt<'a, 'tcx>) {
- let other = self.use_fcx(fcx); //~ ERROR lifetime may not live long enough
- fcx.use_it(other);
- }
-
- fn use_fcx<'a>(&self, _: &FnCtxt<'a, 'tcx>) -> &'a () {
- &()
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-67007-escaping-data.stderr b/src/test/ui/nll/issue-67007-escaping-data.stderr
deleted file mode 100644
index ac9c59bf7..000000000
--- a/src/test/ui/nll/issue-67007-escaping-data.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-67007-escaping-data.rs:15:21
- |
-LL | impl<'tcx> Consumer<'tcx> {
- | ---- lifetime `'tcx` defined here
-LL | fn bad_method<'a>(&self, fcx: &FnCtxt<'a, 'tcx>) {
- | -- lifetime `'a` defined here
-LL | let other = self.use_fcx(fcx);
- | ^^^^^^^^^^^^^^^^^ argument requires that `'a` must outlive `'tcx`
- |
- = help: consider adding the following bound: `'a: 'tcx`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-68550.rs b/src/test/ui/nll/issue-68550.rs
deleted file mode 100644
index 6bfd18de1..000000000
--- a/src/test/ui/nll/issue-68550.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Regression test for issue #68550.
-//
-// The `&'static A:` where clause was triggering
-// ICEs because it wound up being compiled to reference
-// the `'empty(U0)` region.
-
-fn run<'a, A>(x: A)
-where
- A: 'static,
- &'static A: ,
-{
- let _: &'a A = &x; //~ ERROR `x` does not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-68550.stderr b/src/test/ui/nll/issue-68550.stderr
deleted file mode 100644
index e234ebb04..000000000
--- a/src/test/ui/nll/issue-68550.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error[E0597]: `x` does not live long enough
- --> $DIR/issue-68550.rs:12:20
- |
-LL | fn run<'a, A>(x: A)
- | -- lifetime `'a` defined here
-...
-LL | let _: &'a A = &x;
- | ----- ^^ borrowed value does not live long enough
- | |
- | type annotation requires that `x` is borrowed for `'a`
-LL | }
- | - `x` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-69114-static-mut-ty.rs b/src/test/ui/nll/issue-69114-static-mut-ty.rs
deleted file mode 100644
index ce37da053..000000000
--- a/src/test/ui/nll/issue-69114-static-mut-ty.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Check that borrowck ensures that `static mut` items have the expected type.
-
-static FOO: u8 = 42;
-static mut BAR: &'static u8 = &FOO;
-static mut BAR_ELIDED: &u8 = &FOO;
-
-fn main() {
- unsafe {
- println!("{} {}", BAR, BAR_ELIDED);
- set_bar();
- set_bar_elided();
- println!("{} {}", BAR, BAR_ELIDED);
- }
-}
-
-fn set_bar() {
- let n = 42;
- unsafe {
- BAR = &n;
- //~^ ERROR does not live long enough
- }
-}
-
-fn set_bar_elided() {
- let n = 42;
- unsafe {
- BAR_ELIDED = &n;
- //~^ ERROR does not live long enough
- }
-}
diff --git a/src/test/ui/nll/issue-69114-static-mut-ty.stderr b/src/test/ui/nll/issue-69114-static-mut-ty.stderr
deleted file mode 100644
index 5e55cb502..000000000
--- a/src/test/ui/nll/issue-69114-static-mut-ty.stderr
+++ /dev/null
@@ -1,27 +0,0 @@
-error[E0597]: `n` does not live long enough
- --> $DIR/issue-69114-static-mut-ty.rs:19:15
- |
-LL | BAR = &n;
- | ------^^
- | | |
- | | borrowed value does not live long enough
- | assignment requires that `n` is borrowed for `'static`
-...
-LL | }
- | - `n` dropped here while still borrowed
-
-error[E0597]: `n` does not live long enough
- --> $DIR/issue-69114-static-mut-ty.rs:27:22
- |
-LL | BAR_ELIDED = &n;
- | -------------^^
- | | |
- | | borrowed value does not live long enough
- | assignment requires that `n` is borrowed for `'static`
-...
-LL | }
- | - `n` dropped here while still borrowed
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-69114-static-ty.rs b/src/test/ui/nll/issue-69114-static-ty.rs
deleted file mode 100644
index 3318433a1..000000000
--- a/src/test/ui/nll/issue-69114-static-ty.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-// Check that borrowck ensures that `static` items have the expected type.
-
-static FOO: &'static (dyn Fn(&'static u8) + Send + Sync) = &drop;
-
-fn main() {
- let n = 42;
- FOO(&n);
- //~^ ERROR does not live long enough
-}
diff --git a/src/test/ui/nll/issue-69114-static-ty.stderr b/src/test/ui/nll/issue-69114-static-ty.stderr
deleted file mode 100644
index 0815e74b5..000000000
--- a/src/test/ui/nll/issue-69114-static-ty.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0597]: `n` does not live long enough
- --> $DIR/issue-69114-static-ty.rs:7:9
- |
-LL | FOO(&n);
- | ----^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `n` is borrowed for `'static`
-LL |
-LL | }
- | - `n` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/issue-73159-rpit-static.rs b/src/test/ui/nll/issue-73159-rpit-static.rs
deleted file mode 100644
index 3002408b0..000000000
--- a/src/test/ui/nll/issue-73159-rpit-static.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Regression test for issue #73159
-// Tests thar we don't suggest replacing 'a with 'static'
-
-struct Foo<'a>(&'a [u8]);
-
-impl<'a> Foo<'a> {
- fn make_it(&self) -> impl Iterator<Item = u8> {
- self.0.iter().copied()
- //~^ ERROR: captures lifetime that does not appear in bounds
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-73159-rpit-static.stderr b/src/test/ui/nll/issue-73159-rpit-static.stderr
deleted file mode 100644
index 260b9b597..000000000
--- a/src/test/ui/nll/issue-73159-rpit-static.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0700]: hidden type for `impl Iterator<Item = u8>` captures lifetime that does not appear in bounds
- --> $DIR/issue-73159-rpit-static.rs:8:9
- |
-LL | impl<'a> Foo<'a> {
- | -- hidden type `Copied<std::slice::Iter<'a, u8>>` captures the lifetime `'a` as defined here
-LL | fn make_it(&self) -> impl Iterator<Item = u8> {
-LL | self.0.iter().copied()
- | ^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0700`.
diff --git a/src/test/ui/nll/issue-78561.rs b/src/test/ui/nll/issue-78561.rs
deleted file mode 100644
index 55147fcd1..000000000
--- a/src/test/ui/nll/issue-78561.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// check-pass
-#![feature(type_alias_impl_trait)]
-
-pub trait Trait {
- type A;
-
- fn f() -> Self::A;
-}
-
-pub trait Tr2<'a, 'b> {}
-
-pub struct A<T>(T);
-pub trait Tr {
- type B;
-}
-
-impl<'a, 'b, T: Tr<B = dyn Tr2<'a, 'b>>> Trait for A<T> {
- type A = impl core::fmt::Debug;
-
- fn f() -> Self::A {}
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-95272.rs b/src/test/ui/nll/issue-95272.rs
deleted file mode 100644
index 958cbde37..000000000
--- a/src/test/ui/nll/issue-95272.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-use std::cell::Cell;
-
-fn check<'a, 'b>(x: Cell<&'a ()>, y: Cell<&'b ()>)
-where
- 'a: 'b,
-{
-}
-
-fn test<'a, 'b>(x: Cell<&'a ()>, y: Cell<&'b ()>) {
- let f = check;
- //~^ ERROR lifetime may not live long enough
- f(x, y);
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-95272.stderr b/src/test/ui/nll/issue-95272.stderr
deleted file mode 100644
index 03edbc3a6..000000000
--- a/src/test/ui/nll/issue-95272.stderr
+++ /dev/null
@@ -1,17 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-95272.rs:10:13
- |
-LL | fn test<'a, 'b>(x: Cell<&'a ()>, y: Cell<&'b ()>) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | let f = check;
- | ^^^^^ assignment requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
- = note: requirement occurs because of a function pointer to `check`
- = note: the function `check` is invariant over the parameter `'a`
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/issue-97997.rs b/src/test/ui/nll/issue-97997.rs
deleted file mode 100644
index c64e720b1..000000000
--- a/src/test/ui/nll/issue-97997.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-trait Foo {
- const ASSOC: bool = true;
-}
-impl<T> Foo for fn(T) {}
-
-fn foo(_x: i32) {}
-
-fn impls_foo<T: Foo>(_x: T) {}
-
-fn main() {
- impls_foo(foo as fn(i32));
-
- <fn(&u8) as Foo>::ASSOC;
- //~^ ERROR implementation of `Foo` is not general enough
- //~| ERROR implementation of `Foo` is not general enough
-}
diff --git a/src/test/ui/nll/issue-97997.stderr b/src/test/ui/nll/issue-97997.stderr
deleted file mode 100644
index 46440c021..000000000
--- a/src/test/ui/nll/issue-97997.stderr
+++ /dev/null
@@ -1,20 +0,0 @@
-error: implementation of `Foo` is not general enough
- --> $DIR/issue-97997.rs:13:5
- |
-LL | <fn(&u8) as Foo>::ASSOC;
- | ^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Foo` is not general enough
- |
- = note: `Foo` would have to be implemented for the type `for<'a> fn(&'a u8)`
- = note: ...but `Foo` is actually implemented for the type `fn(&'0 u8)`, for some specific lifetime `'0`
-
-error: implementation of `Foo` is not general enough
- --> $DIR/issue-97997.rs:13:5
- |
-LL | <fn(&u8) as Foo>::ASSOC;
- | ^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Foo` is not general enough
- |
- = note: `Foo` would have to be implemented for the type `for<'a> fn(&'a u8)`
- = note: ...but `Foo` is actually implemented for the type `fn(&'0 u8)`, for some specific lifetime `'0`
-
-error: aborting due to 2 previous errors
-
diff --git a/src/test/ui/nll/issue-98170.rs b/src/test/ui/nll/issue-98170.rs
deleted file mode 100644
index 6bb12f52d..000000000
--- a/src/test/ui/nll/issue-98170.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-pub struct MyStruct<'a> {
- field: &'a [u32],
-}
-
-impl MyStruct<'_> {
- pub fn new<'a>(field: &'a [u32]) -> MyStruct<'a> {
- Self { field }
- //~^ ERROR lifetime may not live long enough
- //~| ERROR lifetime may not live long enough
- }
-}
-
-trait Trait<'a> {
- fn new(field: &'a [u32]) -> MyStruct<'a>;
-}
-
-impl<'a> Trait<'a> for MyStruct<'_> {
- fn new(field: &'a [u32]) -> MyStruct<'a> {
- Self { field }
- //~^ ERROR lifetime may not live long enough
- //~| ERROR lifetime may not live long enough
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-98170.stderr b/src/test/ui/nll/issue-98170.stderr
deleted file mode 100644
index 0d17365e7..000000000
--- a/src/test/ui/nll/issue-98170.stderr
+++ /dev/null
@@ -1,44 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-98170.rs:7:9
- |
-LL | impl MyStruct<'_> {
- | -- lifetime `'1` appears in the `impl`'s self type
-LL | pub fn new<'a>(field: &'a [u32]) -> MyStruct<'a> {
- | -- lifetime `'a` defined here
-LL | Self { field }
- | ^^^^^^^^^^^^^^ associated function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1`
-
-error: lifetime may not live long enough
- --> $DIR/issue-98170.rs:7:16
- |
-LL | impl MyStruct<'_> {
- | -- lifetime `'1` appears in the `impl`'s self type
-LL | pub fn new<'a>(field: &'a [u32]) -> MyStruct<'a> {
- | -- lifetime `'a` defined here
-LL | Self { field }
- | ^^^^^ this usage requires that `'a` must outlive `'1`
-
-error: lifetime may not live long enough
- --> $DIR/issue-98170.rs:19:9
- |
-LL | impl<'a> Trait<'a> for MyStruct<'_> {
- | -- -- lifetime `'1` appears in the `impl`'s self type
- | |
- | lifetime `'a` defined here
-LL | fn new(field: &'a [u32]) -> MyStruct<'a> {
-LL | Self { field }
- | ^^^^^^^^^^^^^^ associated function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1`
-
-error: lifetime may not live long enough
- --> $DIR/issue-98170.rs:19:16
- |
-LL | impl<'a> Trait<'a> for MyStruct<'_> {
- | -- -- lifetime `'1` appears in the `impl`'s self type
- | |
- | lifetime `'a` defined here
-LL | fn new(field: &'a [u32]) -> MyStruct<'a> {
-LL | Self { field }
- | ^^^^^ this usage requires that `'a` must outlive `'1`
-
-error: aborting due to 4 previous errors
-
diff --git a/src/test/ui/nll/issue-98589-closures-relate-named-regions.rs b/src/test/ui/nll/issue-98589-closures-relate-named-regions.rs
deleted file mode 100644
index 6cc4340bb..000000000
--- a/src/test/ui/nll/issue-98589-closures-relate-named-regions.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Regression test for #98589.
-// Previously, named lifetime `'a` that appears in the closure was unrelated to `'a`
-// that appears in the parent function iff `'a` is early-bound.
-// This made the following tests pass borrowck.
-
-// check-fail
-
-// The bound `'a: 'a` ensures that `'a` is early-bound.
-fn test_early_early<'a: 'a, 'b: 'b>() {
- || { None::<&'a &'b ()>; };
- //~^ ERROR lifetime may not live long enough
-}
-
-fn test_early_late<'a: 'a, 'b>() {
- || { None::<&'a &'b ()>; };
- //~^ ERROR lifetime may not live long enough
-}
-
-// No early-bound lifetime; included for completeness.
-fn test_late_late<'a, 'b>() {
- || { None::<&'a &'b ()>; };
- //~^ ERROR lifetime may not live long enough
-}
-
-fn test_early_type<'a: 'a, T>() {
- || { None::<&'a T>; };
- //~^ ERROR the parameter type `T` may not live long enough
-}
-
-// No early-bound lifetime; included for completeness.
-fn test_late_type<'a, T>() {
- || { None::<&'a T>; };
- //~^ ERROR the parameter type `T` may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-98589-closures-relate-named-regions.stderr b/src/test/ui/nll/issue-98589-closures-relate-named-regions.stderr
deleted file mode 100644
index d8b26f0b0..000000000
--- a/src/test/ui/nll/issue-98589-closures-relate-named-regions.stderr
+++ /dev/null
@@ -1,61 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-98589-closures-relate-named-regions.rs:10:5
- |
-LL | fn test_early_early<'a: 'a, 'b: 'b>() {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | || { None::<&'a &'b ()>; };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^ requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-error: lifetime may not live long enough
- --> $DIR/issue-98589-closures-relate-named-regions.rs:15:10
- |
-LL | fn test_early_late<'a: 'a, 'b>() {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | || { None::<&'a &'b ()>; };
- | ^^^^^^^^^^^^^^^^^^ requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-error: lifetime may not live long enough
- --> $DIR/issue-98589-closures-relate-named-regions.rs:21:10
- |
-LL | fn test_late_late<'a, 'b>() {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | || { None::<&'a &'b ()>; };
- | ^^^^^^^^^^^^^^^^^^ requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/issue-98589-closures-relate-named-regions.rs:26:10
- |
-LL | || { None::<&'a T>; };
- | ^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | fn test_early_type<'a: 'a, T: 'a>() {
- | ++++
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/issue-98589-closures-relate-named-regions.rs:32:10
- |
-LL | || { None::<&'a T>; };
- | ^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | fn test_late_type<'a, T: 'a>() {
- | ++++
-
-error: aborting due to 5 previous errors
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/issue-98693.rs b/src/test/ui/nll/issue-98693.rs
deleted file mode 100644
index 7a325e2e9..000000000
--- a/src/test/ui/nll/issue-98693.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Regression test for #98693.
-//
-// The closure encounters an obligation that `T` must outlive `!U1`,
-// a placeholder from universe U1. We were ignoring this placeholder
-// when promoting the constraint to the enclosing function, and
-// thus incorrectly judging the closure to be safe.
-
-fn assert_static<T>()
-where
- for<'a> T: 'a,
-{
-}
-
-fn test<T>() {
- || {
- assert_static::<T>();
- //~^ ERROR the parameter type `T` may not live long enough
- };
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/issue-98693.stderr b/src/test/ui/nll/issue-98693.stderr
deleted file mode 100644
index 15ca38aa2..000000000
--- a/src/test/ui/nll/issue-98693.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0310]: the parameter type `T` may not live long enough
- --> $DIR/issue-98693.rs:16:9
- |
-LL | assert_static::<T>();
- | ^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | fn test<T: 'static>() {
- | +++++++++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0310`.
diff --git a/src/test/ui/nll/lint-no-err.rs b/src/test/ui/nll/lint-no-err.rs
deleted file mode 100644
index 2d1d5cb26..000000000
--- a/src/test/ui/nll/lint-no-err.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// check-pass
-
-// mir borrowck previously incorrectly set `tainted_by_errors`
-// when buffering lints, which resulted in ICE later on,
-// see #94502.
-
-struct Repro;
-impl Repro {
- fn get(&self) -> &i32 {
- &3
- }
-
- fn insert(&mut self, _: i32) {}
-}
-
-fn main() {
- let x = &0;
- let mut conflict = Repro;
- let prev = conflict.get();
- conflict.insert(*prev + *x);
-}
diff --git a/src/test/ui/nll/loan_ends_mid_block_pair.rs b/src/test/ui/nll/loan_ends_mid_block_pair.rs
deleted file mode 100644
index acd6ec706..000000000
--- a/src/test/ui/nll/loan_ends_mid_block_pair.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-
-fn main() {
-}
-
-fn nll_fail() {
- let mut data = ('a', 'b', 'c');
- let c = &mut data.0;
- capitalize(c);
- data.0 = 'e';
- //~^ ERROR [E0506]
- data.0 = 'f';
- data.0 = 'g';
- capitalize(c);
-}
-
-fn nll_ok() {
- let mut data = ('a', 'b', 'c');
- let c = &mut data.0;
- capitalize(c);
- data.0 = 'e';
- data.0 = 'f';
- data.0 = 'g';
-}
-
-fn capitalize(_: &mut char) {
-}
diff --git a/src/test/ui/nll/loan_ends_mid_block_pair.stderr b/src/test/ui/nll/loan_ends_mid_block_pair.stderr
deleted file mode 100644
index eb8442b31..000000000
--- a/src/test/ui/nll/loan_ends_mid_block_pair.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0506]: cannot assign to `data.0` because it is borrowed
- --> $DIR/loan_ends_mid_block_pair.rs:12:5
- |
-LL | let c = &mut data.0;
- | ----------- borrow of `data.0` occurs here
-LL | capitalize(c);
-LL | data.0 = 'e';
- | ^^^^^^^^^^^^ assignment to borrowed `data.0` occurs here
-...
-LL | capitalize(c);
- | - borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/loan_ends_mid_block_vec.rs b/src/test/ui/nll/loan_ends_mid_block_vec.rs
deleted file mode 100644
index 2edcdef0a..000000000
--- a/src/test/ui/nll/loan_ends_mid_block_vec.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-fn main() {
-}
-
-fn nll_fail() {
- let mut data = vec!['a', 'b', 'c'];
- let slice = &mut data;
- capitalize(slice);
- data.push('d');
- //~^ ERROR [E0499]
- data.push('e');
- //~^ ERROR [E0499]
- data.push('f');
- //~^ ERROR [E0499]
- capitalize(slice);
-}
-
-fn nll_ok() {
- let mut data = vec!['a', 'b', 'c'];
- let slice = &mut data;
- capitalize(slice);
- data.push('d');
- data.push('e');
- data.push('f');
-}
-
-fn capitalize(_: &mut [char]) {
-}
diff --git a/src/test/ui/nll/loan_ends_mid_block_vec.stderr b/src/test/ui/nll/loan_ends_mid_block_vec.stderr
deleted file mode 100644
index 22c72af61..000000000
--- a/src/test/ui/nll/loan_ends_mid_block_vec.stderr
+++ /dev/null
@@ -1,39 +0,0 @@
-error[E0499]: cannot borrow `data` as mutable more than once at a time
- --> $DIR/loan_ends_mid_block_vec.rs:11:5
- |
-LL | let slice = &mut data;
- | --------- first mutable borrow occurs here
-LL | capitalize(slice);
-LL | data.push('d');
- | ^^^^^^^^^^^^^^ second mutable borrow occurs here
-...
-LL | capitalize(slice);
- | ----- first borrow later used here
-
-error[E0499]: cannot borrow `data` as mutable more than once at a time
- --> $DIR/loan_ends_mid_block_vec.rs:13:5
- |
-LL | let slice = &mut data;
- | --------- first mutable borrow occurs here
-...
-LL | data.push('e');
- | ^^^^^^^^^^^^^^ second mutable borrow occurs here
-...
-LL | capitalize(slice);
- | ----- first borrow later used here
-
-error[E0499]: cannot borrow `data` as mutable more than once at a time
- --> $DIR/loan_ends_mid_block_vec.rs:15:5
- |
-LL | let slice = &mut data;
- | --------- first mutable borrow occurs here
-...
-LL | data.push('f');
- | ^^^^^^^^^^^^^^ second mutable borrow occurs here
-LL |
-LL | capitalize(slice);
- | ----- first borrow later used here
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0499`.
diff --git a/src/test/ui/nll/local-outlives-static-via-hrtb.rs b/src/test/ui/nll/local-outlives-static-via-hrtb.rs
deleted file mode 100644
index 5f1f9b3a7..000000000
--- a/src/test/ui/nll/local-outlives-static-via-hrtb.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Test that we handle the case when a local variable is borrowed for `'static`
-// due to an outlives constraint involving a region in an incompatible universe
-
-pub trait Outlives<'this> {}
-
-impl<'this, T> Outlives<'this> for T where T: 'this {}
-trait Reference {
- type AssociatedType;
-}
-
-impl<'a, T: 'a> Reference for &'a T {
- type AssociatedType = &'a ();
-}
-
-fn assert_static_via_hrtb<G>(_: G) where for<'a> G: Outlives<'a> {}
-
-fn assert_static_via_hrtb_with_assoc_type<T>(_: &'_ T)
-where
- for<'a> &'a T: Reference<AssociatedType = &'a ()>,
-{}
-
-fn main() {
- let local = 0;
- assert_static_via_hrtb(&local); //~ ERROR `local` does not live long enough
- assert_static_via_hrtb_with_assoc_type(&&local); //~ ERROR `local` does not live long enough
-}
diff --git a/src/test/ui/nll/local-outlives-static-via-hrtb.stderr b/src/test/ui/nll/local-outlives-static-via-hrtb.stderr
deleted file mode 100644
index f5c10f3dd..000000000
--- a/src/test/ui/nll/local-outlives-static-via-hrtb.stderr
+++ /dev/null
@@ -1,38 +0,0 @@
-error[E0597]: `local` does not live long enough
- --> $DIR/local-outlives-static-via-hrtb.rs:24:28
- |
-LL | assert_static_via_hrtb(&local);
- | -----------------------^^^^^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `local` is borrowed for `'static`
-LL | assert_static_via_hrtb_with_assoc_type(&&local);
-LL | }
- | - `local` dropped here while still borrowed
- |
-note: due to current limitations in the borrow checker, this implies a `'static` lifetime
- --> $DIR/local-outlives-static-via-hrtb.rs:15:53
- |
-LL | fn assert_static_via_hrtb<G>(_: G) where for<'a> G: Outlives<'a> {}
- | ^^^^^^^^^^^^
-
-error[E0597]: `local` does not live long enough
- --> $DIR/local-outlives-static-via-hrtb.rs:25:45
- |
-LL | assert_static_via_hrtb_with_assoc_type(&&local);
- | ----------------------------------------^^^^^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `local` is borrowed for `'static`
-LL | }
- | - `local` dropped here while still borrowed
- |
-note: due to current limitations in the borrow checker, this implies a `'static` lifetime
- --> $DIR/local-outlives-static-via-hrtb.rs:19:20
- |
-LL | for<'a> &'a T: Reference<AssociatedType = &'a ()>,
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/lub-if.rs b/src/test/ui/nll/lub-if.rs
deleted file mode 100644
index 50225a783..000000000
--- a/src/test/ui/nll/lub-if.rs
+++ /dev/null
@@ -1,44 +0,0 @@
-// Test that we correctly consider the type of `match` to be the LUB
-// of the various arms, particularly in the case where regions are
-// involved.
-
-pub fn opt_str0<'a>(maybestr: &'a Option<String>) -> &'a str {
- if maybestr.is_none() {
- "(none)"
- } else {
- let s: &'a str = maybestr.as_ref().unwrap();
- s
- }
-}
-
-pub fn opt_str1<'a>(maybestr: &'a Option<String>) -> &'a str {
- if maybestr.is_some() {
- let s: &'a str = maybestr.as_ref().unwrap();
- s
- } else {
- "(none)"
- }
-}
-
-pub fn opt_str2<'a>(maybestr: &'a Option<String>) -> &'static str {
- if maybestr.is_none() {
- "(none)"
- } else {
- let s: &'a str = maybestr.as_ref().unwrap();
- s
- //~^ ERROR lifetime may not live long enough
- }
-}
-
-pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str {
- if maybestr.is_some() {
- let s: &'a str = maybestr.as_ref().unwrap();
- s
- //~^ ERROR lifetime may not live long enough
- } else {
- "(none)"
- }
-}
-
-
-fn main() {}
diff --git a/src/test/ui/nll/lub-if.stderr b/src/test/ui/nll/lub-if.stderr
deleted file mode 100644
index 03f7f9204..000000000
--- a/src/test/ui/nll/lub-if.stderr
+++ /dev/null
@@ -1,20 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/lub-if.rs:28:9
- |
-LL | pub fn opt_str2<'a>(maybestr: &'a Option<String>) -> &'static str {
- | -- lifetime `'a` defined here
-...
-LL | s
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/lub-if.rs:36:9
- |
-LL | pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str {
- | -- lifetime `'a` defined here
-...
-LL | s
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to 2 previous errors
-
diff --git a/src/test/ui/nll/lub-match.rs b/src/test/ui/nll/lub-match.rs
deleted file mode 100644
index 454dd1fc6..000000000
--- a/src/test/ui/nll/lub-match.rs
+++ /dev/null
@@ -1,47 +0,0 @@
-// Test that we correctly consider the type of `match` to be the LUB
-// of the various arms, particularly in the case where regions are
-// involved.
-
-pub fn opt_str0<'a>(maybestr: &'a Option<String>) -> &'a str {
- match *maybestr {
- Some(ref s) => {
- let s: &'a str = s;
- s
- }
- None => "(none)",
- }
-}
-
-pub fn opt_str1<'a>(maybestr: &'a Option<String>) -> &'a str {
- match *maybestr {
- None => "(none)",
- Some(ref s) => {
- let s: &'a str = s;
- s
- }
- }
-}
-
-pub fn opt_str2<'a>(maybestr: &'a Option<String>) -> &'static str {
- match *maybestr {
- None => "(none)",
- Some(ref s) => {
- let s: &'a str = s;
- s
- //~^ ERROR lifetime may not live long enough
- }
- }
-}
-
-pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str {
- match *maybestr {
- Some(ref s) => {
- let s: &'a str = s;
- s
- //~^ ERROR lifetime may not live long enough
- }
- None => "(none)",
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/lub-match.stderr b/src/test/ui/nll/lub-match.stderr
deleted file mode 100644
index 208ec07a1..000000000
--- a/src/test/ui/nll/lub-match.stderr
+++ /dev/null
@@ -1,20 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/lub-match.rs:30:13
- |
-LL | pub fn opt_str2<'a>(maybestr: &'a Option<String>) -> &'static str {
- | -- lifetime `'a` defined here
-...
-LL | s
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/lub-match.rs:40:13
- |
-LL | pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str {
- | -- lifetime `'a` defined here
-...
-LL | s
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to 2 previous errors
-
diff --git a/src/test/ui/nll/match-cfg-fake-edges.rs b/src/test/ui/nll/match-cfg-fake-edges.rs
deleted file mode 100644
index 252f7f8ba..000000000
--- a/src/test/ui/nll/match-cfg-fake-edges.rs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Test that we have enough false edges to avoid exposing the exact matching
-// algorithm in borrow checking.
-
-fn guard_always_precedes_arm(y: i32) {
- let mut x;
- // x should always be initialized, as the only way to reach the arm is
- // through the guard.
- match y {
- 0 | 2 if { x = 2; true } => x,
- _ => 2,
- };
-}
-
-fn guard_may_be_skipped(y: i32) {
- let x;
- // Even though x *is* always initialized, we don't want to have borrowck
- // results be based on whether patterns are exhaustive.
- match y {
- _ if { x = 2; true } => 1,
- _ if {
- x; //~ ERROR E0381
- false
- } => 2,
- _ => 3,
- };
-}
-
-fn guard_may_be_taken(y: bool) {
- let x = String::new();
- // Even though x *is* never moved before the use, we don't want to have
- // borrowck results be based on whether patterns are disjoint.
- match y {
- false if { drop(x); true } => 1,
- true => {
- x; //~ ERROR use of moved value: `x`
- 2
- }
- false => 3,
- };
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/match-cfg-fake-edges.stderr b/src/test/ui/nll/match-cfg-fake-edges.stderr
deleted file mode 100644
index f72ed3af7..000000000
--- a/src/test/ui/nll/match-cfg-fake-edges.stderr
+++ /dev/null
@@ -1,38 +0,0 @@
-error[E0381]: used binding `x` isn't initialized
- --> $DIR/match-cfg-fake-edges.rs:21:13
- |
-LL | let x;
- | - binding declared here but left uninitialized
-...
-LL | _ if { x = 2; true } => 1,
- | ----- binding initialized here in some conditions
-LL | _ if {
-LL | x;
- | ^ `x` used here but it isn't initialized
- |
-help: consider assigning a value
- |
-LL | let x = 0;
- | +++
-
-error[E0382]: use of moved value: `x`
- --> $DIR/match-cfg-fake-edges.rs:35:13
- |
-LL | let x = String::new();
- | - move occurs because `x` has type `String`, which does not implement the `Copy` trait
-...
-LL | false if { drop(x); true } => 1,
- | - value moved here
-LL | true => {
-LL | x;
- | ^ value used here after move
- |
-help: consider cloning the value if the performance cost is acceptable
- |
-LL | false if { drop(x.clone()); true } => 1,
- | ++++++++
-
-error: aborting due to 2 previous errors
-
-Some errors have detailed explanations: E0381, E0382.
-For more information about an error, try `rustc --explain E0381`.
diff --git a/src/test/ui/nll/match-cfg-fake-edges2.rs b/src/test/ui/nll/match-cfg-fake-edges2.rs
deleted file mode 100644
index 48f95e03b..000000000
--- a/src/test/ui/nll/match-cfg-fake-edges2.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Test that we have enough false edges to avoid exposing the exact matching
-// algorithm in borrow checking.
-
-fn all_previous_tests_may_be_done(y: &mut (bool, bool)) {
- let r = &mut y.1;
- // We don't actually test y.1 to select the second arm, but we don't want
- // borrowck results to be based on the order we match patterns.
- match y { //~ ERROR cannot use `y.1` because it was mutably borrowed
- (false, true) => 1,
- (true, _) => {
- r;
- 2
- }
- (false, _) => 3,
- };
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/match-cfg-fake-edges2.stderr b/src/test/ui/nll/match-cfg-fake-edges2.stderr
deleted file mode 100644
index c6d15a936..000000000
--- a/src/test/ui/nll/match-cfg-fake-edges2.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0503]: cannot use `y.1` because it was mutably borrowed
- --> $DIR/match-cfg-fake-edges2.rs:8:5
- |
-LL | let r = &mut y.1;
- | -------- borrow of `y.1` occurs here
-...
-LL | match y {
- | ^^^^^^^ use of borrowed `y.1`
-...
-LL | r;
- | - borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0503`.
diff --git a/src/test/ui/nll/match-guards-always-borrow.rs b/src/test/ui/nll/match-guards-always-borrow.rs
deleted file mode 100644
index 87dba187b..000000000
--- a/src/test/ui/nll/match-guards-always-borrow.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Here is arielb1's basic example from rust-lang/rust#27282
-// that AST borrowck is flummoxed by:
-
-fn should_reject_destructive_mutate_in_guard() {
- match Some(&4) {
- None => {},
- ref mut foo if {
- (|| { let bar = foo; bar.take() })();
- //~^ ERROR cannot move out of `foo` in pattern guard [E0507]
- false } => { },
- Some(s) => std::process::exit(*s),
- }
-}
-
-// Here below is a case that needs to keep working: we only use the
-// binding via immutable-borrow in the guard, and we mutate in the arm
-// body.
-fn allow_mutate_in_arm_body() {
- match Some(&4) {
- None => {},
- ref mut foo if foo.is_some() && false => { foo.take(); () }
- Some(s) => std::process::exit(*s),
- }
-}
-
-// Here below is a case that needs to keep working: we only use the
-// binding via immutable-borrow in the guard, and we move into the arm
-// body.
-fn allow_move_into_arm_body() {
- match Some(&4) {
- None => {},
- mut foo if foo.is_some() && false => { foo.take(); () }
- Some(s) => std::process::exit(*s),
- }
-}
-
-fn main() {
- should_reject_destructive_mutate_in_guard();
- allow_mutate_in_arm_body();
- allow_move_into_arm_body();
-}
diff --git a/src/test/ui/nll/match-guards-always-borrow.stderr b/src/test/ui/nll/match-guards-always-borrow.stderr
deleted file mode 100644
index c0fb5f653..000000000
--- a/src/test/ui/nll/match-guards-always-borrow.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0507]: cannot move out of `foo` in pattern guard
- --> $DIR/match-guards-always-borrow.rs:8:14
- |
-LL | (|| { let bar = foo; bar.take() })();
- | ^^ --- move occurs because `foo` has type `&mut Option<&i32>`, which does not implement the `Copy` trait
- | |
- | move out of `foo` occurs here
- |
- = note: variables bound in patterns cannot be moved from until after the end of the pattern guard
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0507`.
diff --git a/src/test/ui/nll/match-guards-partially-borrow.rs b/src/test/ui/nll/match-guards-partially-borrow.rs
deleted file mode 100644
index 81ae19ebf..000000000
--- a/src/test/ui/nll/match-guards-partially-borrow.rs
+++ /dev/null
@@ -1,169 +0,0 @@
-// Test that a (partially) mutably borrowed place can be matched on, so long as
-// we don't have to read any values that are mutably borrowed to determine
-// which arm to take.
-//
-// Test that we don't allow mutating the value being matched on in a way that
-// changes which patterns it matches, until we have chosen an arm.
-
-fn ok_mutation_in_guard(mut q: i32) {
- match q {
- // OK, mutation doesn't change which patterns g matches
- _ if { q = 1; false } => (),
- _ => (),
- }
-}
-
-fn ok_mutation_in_guard2(mut u: bool) {
- // OK value of u is unused before modification
- match u {
- _ => (),
- _ if {
- u = true;
- false
- } => (),
- x => (),
- }
-}
-
-fn ok_mutation_in_guard4(mut w: (&mut bool,)) {
- // OK value of u is unused before modification
- match w {
- _ => (),
- _ if {
- *w.0 = true;
- false
- } => (),
- x => (),
- }
-}
-
-fn ok_indirect_mutation_in_guard(mut p: &bool) {
- match *p {
- // OK, mutation doesn't change which patterns s matches
- _ if {
- p = &true;
- false
- } => (),
- _ => (),
- }
-}
-
-fn mutation_invalidates_pattern_in_guard(mut q: bool) {
- match q {
- // q doesn't match the pattern with the guard by the end of the guard.
- false if {
- q = true; //~ ERROR
- true
- } => (),
- _ => (),
- }
-}
-
-fn mutation_invalidates_previous_pattern_in_guard(mut r: bool) {
- match r {
- // r matches a previous pattern by the end of the guard.
- true => (),
- _ if {
- r = true; //~ ERROR
- true
- } => (),
- _ => (),
- }
-}
-
-fn match_on_borrowed_early_end(mut s: bool) {
- let h = &mut s;
- // OK value of s is unused before modification.
- match s {
- _ if {
- *h = !*h;
- false
- } => (),
- true => (),
- false => (),
- }
-}
-
-fn bad_mutation_in_guard(mut t: bool) {
- match t {
- true => (),
- false if {
- t = true; //~ ERROR
- false
- } => (),
- false => (),
- }
-}
-
-fn bad_mutation_in_guard2(mut x: Option<Option<&i32>>) {
- // Check that nested patterns are checked.
- match x {
- None => (),
- Some(None) => (),
- _ if {
- match x {
- Some(ref mut r) => *r = None, //~ ERROR
- _ => return,
- };
- false
- } => (),
- Some(Some(r)) => println!("{}", r),
- }
-}
-
-fn bad_mutation_in_guard3(mut t: bool) {
- match t {
- s if {
- t = !t; //~ ERROR
- false
- } => (), // What value should `s` have in the arm?
- _ => (),
- }
-}
-
-fn bad_indirect_mutation_in_guard(mut y: &bool) {
- match *y {
- true => (),
- false if {
- y = &true; //~ ERROR
- false
- } => (),
- false => (),
- }
-}
-
-fn bad_indirect_mutation_in_guard2(mut z: &bool) {
- match z {
- &true => (),
- &false if {
- z = &true; //~ ERROR
- false
- } => (),
- &false => (),
- }
-}
-
-fn bad_indirect_mutation_in_guard3(mut a: &bool) {
- // Same as bad_indirect_mutation_in_guard2, but using match ergonomics
- match a {
- true => (),
- false if {
- a = &true; //~ ERROR
- false
- } => (),
- false => (),
- }
-}
-
-fn bad_indirect_mutation_in_guard4(mut b: &bool) {
- match b {
- &_ => (),
- &_ if {
- b = &true; //~ ERROR
- false
- } => (),
- &b => (),
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/match-guards-partially-borrow.stderr b/src/test/ui/nll/match-guards-partially-borrow.stderr
deleted file mode 100644
index 48e3a7c69..000000000
--- a/src/test/ui/nll/match-guards-partially-borrow.stderr
+++ /dev/null
@@ -1,87 +0,0 @@
-error[E0510]: cannot assign `q` in match guard
- --> $DIR/match-guards-partially-borrow.rs:55:13
- |
-LL | match q {
- | - value is immutable in match guard
-...
-LL | q = true;
- | ^^^^^^^^ cannot assign
-
-error[E0510]: cannot assign `r` in match guard
- --> $DIR/match-guards-partially-borrow.rs:67:13
- |
-LL | match r {
- | - value is immutable in match guard
-...
-LL | r = true;
- | ^^^^^^^^ cannot assign
-
-error[E0510]: cannot assign `t` in match guard
- --> $DIR/match-guards-partially-borrow.rs:91:13
- |
-LL | match t {
- | - value is immutable in match guard
-...
-LL | t = true;
- | ^^^^^^^^ cannot assign
-
-error[E0510]: cannot mutably borrow `x.0` in match guard
- --> $DIR/match-guards-partially-borrow.rs:105:22
- |
-LL | match x {
- | - value is immutable in match guard
-...
-LL | Some(ref mut r) => *r = None,
- | ^^^^^^^^^ cannot mutably borrow
-
-error[E0506]: cannot assign to `t` because it is borrowed
- --> $DIR/match-guards-partially-borrow.rs:117:13
- |
-LL | s if {
- | - borrow of `t` occurs here
-LL | t = !t;
- | ^^^^^^ assignment to borrowed `t` occurs here
-LL | false
-LL | } => (), // What value should `s` have in the arm?
- | - borrow later used here
-
-error[E0510]: cannot assign `y` in match guard
- --> $DIR/match-guards-partially-borrow.rs:128:13
- |
-LL | match *y {
- | -- value is immutable in match guard
-...
-LL | y = &true;
- | ^^^^^^^^^ cannot assign
-
-error[E0510]: cannot assign `z` in match guard
- --> $DIR/match-guards-partially-borrow.rs:139:13
- |
-LL | match z {
- | - value is immutable in match guard
-...
-LL | z = &true;
- | ^^^^^^^^^ cannot assign
-
-error[E0510]: cannot assign `a` in match guard
- --> $DIR/match-guards-partially-borrow.rs:151:13
- |
-LL | match a {
- | - value is immutable in match guard
-...
-LL | a = &true;
- | ^^^^^^^^^ cannot assign
-
-error[E0510]: cannot assign `b` in match guard
- --> $DIR/match-guards-partially-borrow.rs:162:13
- |
-LL | match b {
- | - value is immutable in match guard
-...
-LL | b = &true;
- | ^^^^^^^^^ cannot assign
-
-error: aborting due to 9 previous errors
-
-Some errors have detailed explanations: E0506, E0510.
-For more information about an error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/match-on-borrowed.rs b/src/test/ui/nll/match-on-borrowed.rs
deleted file mode 100644
index 447dabeb4..000000000
--- a/src/test/ui/nll/match-on-borrowed.rs
+++ /dev/null
@@ -1,96 +0,0 @@
-// Test that a (partially) mutably borrowed place can be matched on, so long as
-// we don't have to read any values that are mutably borrowed to determine
-// which arm to take.
-//
-// Test that we don't allow mutating the value being matched on in a way that
-// changes which patterns it matches, until we have chosen an arm.
-
-struct A(i32, i32);
-
-fn struct_example(mut a: A) {
- let x = &mut a.0;
- match a { // OK, no access of borrowed data
- _ if false => (),
- A(_, r) => (),
- }
- x;
-}
-
-fn indirect_struct_example(mut b: &mut A) {
- let x = &mut b.0;
- match *b { // OK, no access of borrowed data
- _ if false => (),
- A(_, r) => (),
- }
- x;
-}
-
-fn underscore_example(mut c: i32) {
- let r = &mut c;
- match c { // OK, no access of borrowed data (or any data at all)
- _ if false => (),
- _ => (),
- }
- r;
-}
-
-enum E {
- V(i32, i32),
- W,
-}
-
-fn enum_example(mut e: E) {
- let x = match e {
- E::V(ref mut x, _) => x,
- E::W => panic!(),
- };
- match e { // Don't know that E uses a tag for its discriminant
- //~^ ERROR
- _ if false => (),
- E::V(_, r) => (),
- E::W => (),
- }
- x;
-}
-
-fn indirect_enum_example(mut f: &mut E) {
- let x = match *f {
- E::V(ref mut x, _) => x,
- E::W => panic!(),
- };
- match f { // Don't know that E uses a tag for its discriminant
- //~^ ERROR
- _ if false => (),
- E::V(_, r) => (),
- E::W => (),
- }
- x;
-}
-
-fn match_on_muatbly_borrowed_ref(mut p: &bool) {
- let r = &mut p;
- match *p { // OK, no access at all
- _ if false => (),
- _ => (),
- }
- r;
-}
-
-fn match_on_borrowed(mut t: bool) {
- let x = &mut t;
- match t {
- //~^ ERROR
- true => (),
- false => (),
- }
- x;
-}
-
-enum Never {}
-
-fn never_init() {
- let n: Never;
- match n {} //~ ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/match-on-borrowed.stderr b/src/test/ui/nll/match-on-borrowed.stderr
deleted file mode 100644
index 32666529f..000000000
--- a/src/test/ui/nll/match-on-borrowed.stderr
+++ /dev/null
@@ -1,52 +0,0 @@
-error[E0503]: cannot use `e` because it was mutably borrowed
- --> $DIR/match-on-borrowed.rs:47:11
- |
-LL | E::V(ref mut x, _) => x,
- | --------- borrow of `e.0` occurs here
-...
-LL | match e { // Don't know that E uses a tag for its discriminant
- | ^ use of borrowed `e.0`
-...
-LL | x;
- | - borrow later used here
-
-error[E0503]: cannot use `*f` because it was mutably borrowed
- --> $DIR/match-on-borrowed.rs:61:11
- |
-LL | E::V(ref mut x, _) => x,
- | --------- borrow of `f.0` occurs here
-...
-LL | match f { // Don't know that E uses a tag for its discriminant
- | ^ use of borrowed `f.0`
-...
-LL | x;
- | - borrow later used here
-
-error[E0503]: cannot use `t` because it was mutably borrowed
- --> $DIR/match-on-borrowed.rs:81:5
- |
-LL | let x = &mut t;
- | ------ borrow of `t` occurs here
-LL | match t {
- | ^^^^^^^ use of borrowed `t`
-...
-LL | x;
- | - borrow later used here
-
-error[E0381]: used binding `n` isn't initialized
- --> $DIR/match-on-borrowed.rs:93:11
- |
-LL | let n: Never;
- | - binding declared here but left uninitialized
-LL | match n {}
- | ^ `n` used here but it isn't initialized
- |
-help: consider assigning a value
- |
-LL | let n: Never = todo!();
- | +++++++++
-
-error: aborting due to 4 previous errors
-
-Some errors have detailed explanations: E0381, E0503.
-For more information about an error, try `rustc --explain E0381`.
diff --git a/src/test/ui/nll/maybe-initialized-drop-implicit-fragment-drop.rs b/src/test/ui/nll/maybe-initialized-drop-implicit-fragment-drop.rs
deleted file mode 100644
index 1de32ddf5..000000000
--- a/src/test/ui/nll/maybe-initialized-drop-implicit-fragment-drop.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-struct Wrap<'p> { p: &'p mut i32 }
-
-impl<'p> Drop for Wrap<'p> {
- fn drop(&mut self) {
- *self.p += 1;
- }
-}
-
-struct Foo<'p> { a: String, b: Wrap<'p> }
-
-fn main() {
- let mut x = 0;
- let wrap = Wrap { p: &mut x };
- let s = String::from("str");
- let foo = Foo { a: s, b: wrap };
- std::mem::drop(foo.b);
- x = 1; //~ ERROR cannot assign to `x` because it is borrowed [E0506]
- // FIXME ^ Should not error in the future with implicit dtors, only manually implemented ones
-}
diff --git a/src/test/ui/nll/maybe-initialized-drop-implicit-fragment-drop.stderr b/src/test/ui/nll/maybe-initialized-drop-implicit-fragment-drop.stderr
deleted file mode 100644
index 80e297807..000000000
--- a/src/test/ui/nll/maybe-initialized-drop-implicit-fragment-drop.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/maybe-initialized-drop-implicit-fragment-drop.rs:17:5
- |
-LL | let wrap = Wrap { p: &mut x };
- | ------ borrow of `x` occurs here
-...
-LL | x = 1;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | // FIXME ^ Should not error in the future with implicit dtors, only manually implemented ones
-LL | }
- | - borrow might be used here, when `foo` is dropped and runs the destructor for type `Foo<'_>`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/maybe-initialized-drop-uninitialized.rs b/src/test/ui/nll/maybe-initialized-drop-uninitialized.rs
deleted file mode 100644
index 32e07cd14..000000000
--- a/src/test/ui/nll/maybe-initialized-drop-uninitialized.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// check-pass
-
-#![allow(warnings)]
-
-struct Wrap<'p> { p: &'p mut i32 }
-
-impl<'p> Drop for Wrap<'p> {
- fn drop(&mut self) {
- *self.p += 1;
- }
-}
-
-fn main() {
- let mut x = 0;
- let wrap = Wrap { p: &mut x };
- std::mem::drop(wrap);
- x = 1; // OK, drop is inert
-}
diff --git a/src/test/ui/nll/maybe-initialized-drop-with-fragment.rs b/src/test/ui/nll/maybe-initialized-drop-with-fragment.rs
deleted file mode 100644
index 778212918..000000000
--- a/src/test/ui/nll/maybe-initialized-drop-with-fragment.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-#![allow(warnings)]
-
-struct Wrap<'p> { p: &'p mut i32 }
-
-impl<'p> Drop for Wrap<'p> {
- fn drop(&mut self) {
- *self.p += 1;
- }
-}
-
-struct Foo<'p> { a: String, b: Wrap<'p> }
-
-fn main() {
- let mut x = 0;
- let wrap = Wrap { p: &mut x };
- let s = String::from("str");
- let foo = Foo { a: s, b: wrap };
- std::mem::drop(foo.a);
- x = 1; //~ ERROR cannot assign to `x` because it is borrowed [E0506]
-}
diff --git a/src/test/ui/nll/maybe-initialized-drop-with-fragment.stderr b/src/test/ui/nll/maybe-initialized-drop-with-fragment.stderr
deleted file mode 100644
index 14074472e..000000000
--- a/src/test/ui/nll/maybe-initialized-drop-with-fragment.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/maybe-initialized-drop-with-fragment.rs:19:5
- |
-LL | let wrap = Wrap { p: &mut x };
- | ------ borrow of `x` occurs here
-...
-LL | x = 1;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | }
- | - borrow might be used here, when `foo` is dropped and runs the destructor for type `Foo<'_>`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/maybe-initialized-drop-with-uninitialized-fragments.rs b/src/test/ui/nll/maybe-initialized-drop-with-uninitialized-fragments.rs
deleted file mode 100644
index b0d6e27a3..000000000
--- a/src/test/ui/nll/maybe-initialized-drop-with-uninitialized-fragments.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-#![allow(warnings)]
-
-struct Wrap<'p> { p: &'p mut i32 }
-
-impl<'p> Drop for Wrap<'p> {
- fn drop(&mut self) {
- *self.p += 1;
- }
-}
-
-struct Foo<'p> { a: String, b: Wrap<'p> }
-
-fn main() {
- let mut x = 0;
- let wrap = Wrap { p: &mut x };
- let s = String::from("str");
- let foo = Foo { a: s, b: wrap };
- std::mem::drop(foo.a);
- std::mem::drop(foo.b);
- x = 1; //~ ERROR cannot assign to `x` because it is borrowed [E0506]
- // FIXME ^ This currently errors and it should not.
-}
diff --git a/src/test/ui/nll/maybe-initialized-drop-with-uninitialized-fragments.stderr b/src/test/ui/nll/maybe-initialized-drop-with-uninitialized-fragments.stderr
deleted file mode 100644
index 91c0afc1d..000000000
--- a/src/test/ui/nll/maybe-initialized-drop-with-uninitialized-fragments.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/maybe-initialized-drop-with-uninitialized-fragments.rs:20:5
- |
-LL | let wrap = Wrap { p: &mut x };
- | ------ borrow of `x` occurs here
-...
-LL | x = 1;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | // FIXME ^ This currently errors and it should not.
-LL | }
- | - borrow might be used here, when `foo` is dropped and runs the destructor for type `Foo<'_>`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/maybe-initialized-drop.rs b/src/test/ui/nll/maybe-initialized-drop.rs
deleted file mode 100644
index 44a7ede78..000000000
--- a/src/test/ui/nll/maybe-initialized-drop.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-#![allow(warnings)]
-
-struct Wrap<'p> { p: &'p mut i32 }
-
-impl<'p> Drop for Wrap<'p> {
- fn drop(&mut self) {
- *self.p += 1;
- }
-}
-
-fn main() {
- let mut x = 0;
- let wrap = Wrap { p: &mut x };
- x = 1; //~ ERROR cannot assign to `x` because it is borrowed [E0506]
-}
diff --git a/src/test/ui/nll/maybe-initialized-drop.stderr b/src/test/ui/nll/maybe-initialized-drop.stderr
deleted file mode 100644
index 9825ba461..000000000
--- a/src/test/ui/nll/maybe-initialized-drop.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0506]: cannot assign to `x` because it is borrowed
- --> $DIR/maybe-initialized-drop.rs:14:5
- |
-LL | let wrap = Wrap { p: &mut x };
- | ------ borrow of `x` occurs here
-LL | x = 1;
- | ^^^^^ assignment to borrowed `x` occurs here
-LL | }
- | - borrow might be used here, when `wrap` is dropped and runs the `Drop` code for type `Wrap`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0506`.
diff --git a/src/test/ui/nll/mir_check_cast_closure.rs b/src/test/ui/nll/mir_check_cast_closure.rs
deleted file mode 100644
index 4aebcfdb4..000000000
--- a/src/test/ui/nll/mir_check_cast_closure.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-#![allow(dead_code)]
-
-fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 {
- let g: fn(_, _) -> _ = |_x, y| y;
- g
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_closure.stderr b/src/test/ui/nll/mir_check_cast_closure.stderr
deleted file mode 100644
index 72d99aad9..000000000
--- a/src/test/ui/nll/mir_check_cast_closure.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/mir_check_cast_closure.rs:5:5
- |
-LL | fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | let g: fn(_, _) -> _ = |_x, y| y;
-LL | g
- | ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/mir_check_cast_reify.rs b/src/test/ui/nll/mir_check_cast_reify.rs
deleted file mode 100644
index 951459911..000000000
--- a/src/test/ui/nll/mir_check_cast_reify.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-#![allow(dead_code)]
-
-// Test that we relate the type of the fn type to the type of the fn
-// ptr when doing a `ReifyFnPointer` cast.
-//
-// This test is a bit tortured, let me explain:
-//
-
-// The `where 'a: 'a` clause here ensures that `'a` is early bound,
-// which is needed below to ensure that this test hits the path we are
-// concerned with.
-fn foo<'a>(x: &'a u32) -> &'a u32
-where
- 'a: 'a,
-{
- panic!()
-}
-
-fn bar<'a>(x: &'a u32) -> &'static u32 {
- // Here, the type of `foo` is `typeof(foo::<'x>)` for some fresh variable `'x`.
- // During NLL region analysis, this will get renumbered to `typeof(foo::<'?0>)`
- // where `'?0` is a new region variable.
- //
- // (Note that if `'a` on `foo` were late-bound, the type would be
- // `typeof(foo)`, which would interact differently with because
- // the renumbering later.)
- //
- // This type is then coerced to a fn type `fn(&'?1 u32) -> &'?2
- // u32`. Here, the `'?1` and `'?2` will have been created during
- // the NLL region renumbering.
- //
- // The MIR type checker must therefore relate `'?0` to `'?1` and `'?2`
- // as part of checking the `ReifyFnPointer`.
- let f: fn(_) -> _ = foo;
- f(x)
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_reify.stderr b/src/test/ui/nll/mir_check_cast_reify.stderr
deleted file mode 100644
index 9be2670fe..000000000
--- a/src/test/ui/nll/mir_check_cast_reify.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/mir_check_cast_reify.rs:35:5
- |
-LL | fn bar<'a>(x: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-...
-LL | f(x)
- | ^^^^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/mir_check_cast_unsafe_fn.rs b/src/test/ui/nll/mir_check_cast_unsafe_fn.rs
deleted file mode 100644
index 8f55bedfb..000000000
--- a/src/test/ui/nll/mir_check_cast_unsafe_fn.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-#![allow(dead_code)]
-
-fn bar<'a>(input: &'a u32, f: fn(&'a u32) -> &'a u32) -> &'static u32 {
- // Here the NLL checker must relate the types in `f` to the types
- // in `g`. These are related via the `UnsafeFnPointer` cast.
- let g: unsafe fn(_) -> _ = f;
- unsafe { g(input) }
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr b/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr
deleted file mode 100644
index 321d17ba6..000000000
--- a/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/mir_check_cast_unsafe_fn.rs:7:14
- |
-LL | fn bar<'a>(input: &'a u32, f: fn(&'a u32) -> &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-...
-LL | unsafe { g(input) }
- | ^^^^^^^^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/mir_check_cast_unsize.rs b/src/test/ui/nll/mir_check_cast_unsize.rs
deleted file mode 100644
index f6c100ab6..000000000
--- a/src/test/ui/nll/mir_check_cast_unsize.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-#![allow(dead_code)]
-
-use std::fmt::Debug;
-
-fn bar<'a>(x: &'a u32) -> &'static dyn Debug {
- x
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_unsize.stderr b/src/test/ui/nll/mir_check_cast_unsize.stderr
deleted file mode 100644
index 1cd2579e4..000000000
--- a/src/test/ui/nll/mir_check_cast_unsize.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/mir_check_cast_unsize.rs:6:5
- |
-LL | fn bar<'a>(x: &'a u32) -> &'static dyn Debug {
- | -- lifetime `'a` defined here
-LL | x
- | ^ returning this value requires that `'a` must outlive `'static`
- |
-help: to declare that the trait object captures data from argument `x`, you can add an explicit `'a` lifetime bound
- |
-LL | fn bar<'a>(x: &'a u32) -> &'static dyn Debug + 'a {
- | ++++
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/move-errors.rs b/src/test/ui/nll/move-errors.rs
deleted file mode 100644
index e0fcd6250..000000000
--- a/src/test/ui/nll/move-errors.rs
+++ /dev/null
@@ -1,117 +0,0 @@
-struct A(String);
-struct C(D);
-
-fn suggest_remove_deref() {
- let a = &A("".to_string());
- let b = *a;
- //~^ ERROR
-}
-
-fn suggest_borrow() {
- let a = [A("".to_string())];
- let b = a[0];
- //~^ ERROR
-}
-
-fn suggest_borrow2() {
- let mut a = A("".to_string());
- let r = &&mut a;
- let s = **r;
- //~^ ERROR
-}
-
-fn suggest_borrow3() {
- use std::rc::Rc;
- let mut a = A("".to_string());
- let r = Rc::new(a);
- let s = *r;
- //~^ ERROR
-}
-
-fn suggest_borrow4() {
- let a = [A("".to_string())][0];
- //~^ ERROR
-}
-
-fn suggest_borrow5() {
- let a = &A("".to_string());
- let A(s) = *a;
- //~^ ERROR
-}
-
-fn suggest_ref() {
- let c = C(D(String::new()));
- let C(D(s)) = c;
- //~^ ERROR
-}
-
-fn suggest_nothing() {
- let a = &A("".to_string());
- let b;
- b = *a;
- //~^ ERROR
-}
-
-enum B {
- V(String),
- U(D),
-}
-
-struct D(String);
-
-impl Drop for D {
- fn drop(&mut self) {}
-}
-
-struct F(String, String);
-
-impl Drop for F {
- fn drop(&mut self) {}
-}
-
-fn probably_suggest_borrow() {
- let x = [B::V(String::new())];
- match x[0] {
- //~^ ERROR
- B::U(d) => (),
- B::V(s) => (),
- }
-}
-
-fn have_to_suggest_ref() {
- let x = B::V(String::new());
- match x {
- //~^ ERROR
- B::V(s) => drop(s),
- B::U(D(s)) => (),
- };
-}
-
-fn two_separate_errors() {
- let x = (D(String::new()), &String::new());
- match x {
- //~^ ERROR
- //~^^ ERROR
- (D(s), &t) => (),
- _ => (),
- }
-}
-
-fn have_to_suggest_double_ref() {
- let x = F(String::new(), String::new());
- match x {
- //~^ ERROR
- F(s, mut t) => (),
- _ => (),
- }
-}
-
-fn double_binding(x: &Result<String, String>) {
- match *x {
- //~^ ERROR
- Ok(s) | Err(s) => (),
- }
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/move-errors.stderr b/src/test/ui/nll/move-errors.stderr
deleted file mode 100644
index b03fcf70b..000000000
--- a/src/test/ui/nll/move-errors.stderr
+++ /dev/null
@@ -1,152 +0,0 @@
-error[E0507]: cannot move out of `*a` which is behind a shared reference
- --> $DIR/move-errors.rs:6:13
- |
-LL | let b = *a;
- | ^^
- | |
- | move occurs because `*a` has type `A`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&*a`
-
-error[E0508]: cannot move out of type `[A; 1]`, a non-copy array
- --> $DIR/move-errors.rs:12:13
- |
-LL | let b = a[0];
- | ^^^^
- | |
- | cannot move out of here
- | move occurs because `a[_]` has type `A`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&a[0]`
-
-error[E0507]: cannot move out of `**r` which is behind a shared reference
- --> $DIR/move-errors.rs:19:13
- |
-LL | let s = **r;
- | ^^^
- | |
- | move occurs because `**r` has type `A`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&**r`
-
-error[E0507]: cannot move out of an `Rc`
- --> $DIR/move-errors.rs:27:13
- |
-LL | let s = *r;
- | ^^
- | |
- | move occurs because value has type `A`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&*r`
-
-error[E0508]: cannot move out of type `[A; 1]`, a non-copy array
- --> $DIR/move-errors.rs:32:13
- |
-LL | let a = [A("".to_string())][0];
- | ^^^^^^^^^^^^^^^^^^^^^^
- | |
- | cannot move out of here
- | move occurs because value has type `A`, which does not implement the `Copy` trait
- | help: consider borrowing here: `&[A("".to_string())][0]`
-
-error[E0507]: cannot move out of `a` which is behind a shared reference
- --> $DIR/move-errors.rs:38:16
- |
-LL | let A(s) = *a;
- | - ^^ help: consider borrowing here: `&*a`
- | |
- | data moved here
- | move occurs because `s` has type `String`, which does not implement the `Copy` trait
-
-error[E0509]: cannot move out of type `D`, which implements the `Drop` trait
- --> $DIR/move-errors.rs:44:19
- |
-LL | let C(D(s)) = c;
- | - ^ cannot move out of here
- | |
- | data moved here
- | move occurs because `s` has type `String`, which does not implement the `Copy` trait
-
-error[E0507]: cannot move out of `*a` which is behind a shared reference
- --> $DIR/move-errors.rs:51:9
- |
-LL | b = *a;
- | ^^ move occurs because `*a` has type `A`, which does not implement the `Copy` trait
-
-error[E0508]: cannot move out of type `[B; 1]`, a non-copy array
- --> $DIR/move-errors.rs:74:11
- |
-LL | match x[0] {
- | ^^^^
- | |
- | cannot move out of here
- | help: consider borrowing here: `&x[0]`
-LL |
-LL | B::U(d) => (),
- | - data moved here
-LL | B::V(s) => (),
- | - ...and here
- |
- = note: move occurs because these variables have types that don't implement the `Copy` trait
-
-error[E0509]: cannot move out of type `D`, which implements the `Drop` trait
- --> $DIR/move-errors.rs:83:11
- |
-LL | match x {
- | ^ cannot move out of here
-...
-LL | B::U(D(s)) => (),
- | -
- | |
- | data moved here
- | move occurs because `s` has type `String`, which does not implement the `Copy` trait
-
-error[E0509]: cannot move out of type `D`, which implements the `Drop` trait
- --> $DIR/move-errors.rs:92:11
- |
-LL | match x {
- | ^ cannot move out of here
-...
-LL | (D(s), &t) => (),
- | -
- | |
- | data moved here
- | move occurs because `s` has type `String`, which does not implement the `Copy` trait
-
-error[E0507]: cannot move out of `*x.1` which is behind a shared reference
- --> $DIR/move-errors.rs:92:11
- |
-LL | match x {
- | ^
-...
-LL | (D(s), &t) => (),
- | -
- | |
- | data moved here
- | move occurs because `t` has type `String`, which does not implement the `Copy` trait
-
-error[E0509]: cannot move out of type `F`, which implements the `Drop` trait
- --> $DIR/move-errors.rs:102:11
- |
-LL | match x {
- | ^ cannot move out of here
-LL |
-LL | F(s, mut t) => (),
- | - ----- ...and here
- | |
- | data moved here
- |
- = note: move occurs because these variables have types that don't implement the `Copy` trait
-
-error[E0507]: cannot move out of `x` as enum variant `Err` which is behind a shared reference
- --> $DIR/move-errors.rs:110:11
- |
-LL | match *x {
- | ^^ help: consider borrowing here: `&*x`
-LL |
-LL | Ok(s) | Err(s) => (),
- | -
- | |
- | data moved here
- | move occurs because `s` has type `String`, which does not implement the `Copy` trait
-
-error: aborting due to 14 previous errors
-
-Some errors have detailed explanations: E0507, E0508, E0509.
-For more information about an error, try `rustc --explain E0507`.
diff --git a/src/test/ui/nll/move-subpaths-moves-root.rs b/src/test/ui/nll/move-subpaths-moves-root.rs
deleted file mode 100644
index d266c6bb6..000000000
--- a/src/test/ui/nll/move-subpaths-moves-root.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-fn main() {
- let x = (vec![1, 2, 3], );
- drop(x.0);
- drop(x); //~ ERROR use of partially moved value
-}
diff --git a/src/test/ui/nll/move-subpaths-moves-root.stderr b/src/test/ui/nll/move-subpaths-moves-root.stderr
deleted file mode 100644
index ae9287f92..000000000
--- a/src/test/ui/nll/move-subpaths-moves-root.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0382]: use of partially moved value: `x`
- --> $DIR/move-subpaths-moves-root.rs:4:10
- |
-LL | drop(x.0);
- | --- value partially moved here
-LL | drop(x);
- | ^ value used here after partial move
- |
- = note: partial move occurs because `x.0` has type `Vec<i32>`, which does not implement the `Copy` trait
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/mutating_references.rs b/src/test/ui/nll/mutating_references.rs
deleted file mode 100644
index eb46b30b6..000000000
--- a/src/test/ui/nll/mutating_references.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// run-pass
-
-struct List<T> {
- value: T,
- next: Option<Box<List<T>>>,
-}
-
-fn to_refs<T>(mut list: &mut List<T>) -> Vec<&mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut list.value);
- if let Some(n) = list.next.as_mut() {
- list = n;
- } else {
- return result;
- }
- }
-}
-
-fn main() {
- let mut list = List { value: 1, next: None };
- let vec = to_refs(&mut list);
- assert_eq!(vec![&mut 1], vec);
-}
diff --git a/src/test/ui/nll/normalization-bounds-error.rs b/src/test/ui/nll/normalization-bounds-error.rs
deleted file mode 100644
index b6cfcd987..000000000
--- a/src/test/ui/nll/normalization-bounds-error.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Check that we error when a bound from the impl is not satisfied when
-// normalizing an associated type.
-
-trait Visitor<'d> {
- type Value;
-}
-
-impl<'a, 'd: 'a> Visitor<'d> for &'a () {
- type Value = ();
-}
-
-fn visit_seq<'d, 'a: 'd>() -> <&'a () as Visitor<'d>>::Value {}
-//~^ ERROR
-
-fn main() {}
diff --git a/src/test/ui/nll/normalization-bounds-error.stderr b/src/test/ui/nll/normalization-bounds-error.stderr
deleted file mode 100644
index 6abe53127..000000000
--- a/src/test/ui/nll/normalization-bounds-error.stderr
+++ /dev/null
@@ -1,27 +0,0 @@
-error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'d` due to conflicting requirements
- --> $DIR/normalization-bounds-error.rs:12:1
- |
-LL | fn visit_seq<'d, 'a: 'd>() -> <&'a () as Visitor<'d>>::Value {}
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
-note: first, the lifetime cannot outlive the lifetime `'d` as defined here...
- --> $DIR/normalization-bounds-error.rs:12:14
- |
-LL | fn visit_seq<'d, 'a: 'd>() -> <&'a () as Visitor<'d>>::Value {}
- | ^^
-note: ...but the lifetime must also be valid for the lifetime `'a` as defined here...
- --> $DIR/normalization-bounds-error.rs:12:18
- |
-LL | fn visit_seq<'d, 'a: 'd>() -> <&'a () as Visitor<'d>>::Value {}
- | ^^
-note: ...so that the types are compatible
- --> $DIR/normalization-bounds-error.rs:12:1
- |
-LL | fn visit_seq<'d, 'a: 'd>() -> <&'a () as Visitor<'d>>::Value {}
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- = note: expected `Visitor<'d>`
- found `Visitor<'_>`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0495`.
diff --git a/src/test/ui/nll/normalization-bounds.rs b/src/test/ui/nll/normalization-bounds.rs
deleted file mode 100644
index bb6d981e0..000000000
--- a/src/test/ui/nll/normalization-bounds.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Check that lifetime bounds get checked the right way around with NLL enabled.
-
-// check-pass
-
-trait Visitor<'d> {
- type Value;
-}
-
-impl<'a, 'd: 'a> Visitor<'d> for &'a () {
- type Value = ();
-}
-
-fn visit_seq<'d: 'a, 'a>() -> <&'a () as Visitor<'d>>::Value {}
-
-fn main() {}
diff --git a/src/test/ui/nll/outlives-suggestion-more.rs b/src/test/ui/nll/outlives-suggestion-more.rs
deleted file mode 100644
index 2e1359fe5..000000000
--- a/src/test/ui/nll/outlives-suggestion-more.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Test the more elaborate outlives suggestions.
-
-// Should suggest: 'a: 'c, 'b: 'd
-fn foo1<'a, 'b, 'c, 'd>(x: &'a usize, y: &'b usize) -> (&'c usize, &'d usize) {
- (x, y) //~ERROR lifetime may not live long enough
- //~^ERROR lifetime may not live long enough
-}
-
-// Should suggest: 'a: 'c and use 'static instead of 'b
-fn foo2<'a, 'b, 'c>(x: &'a usize, y: &'b usize) -> (&'c usize, &'static usize) {
- (x, y) //~ERROR lifetime may not live long enough
- //~^ERROR lifetime may not live long enough
-}
-
-// Should suggest: 'a and 'b are the same and use 'static instead of 'c
-fn foo3<'a, 'b, 'c, 'd, 'e>(
- x: &'a usize,
- y: &'b usize,
- z: &'c usize,
-) -> (&'b usize, &'a usize, &'static usize) {
- (x, y, z) //~ERROR lifetime may not live long enough
- //~^ERROR lifetime may not live long enough
- //~^^ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/outlives-suggestion-more.stderr b/src/test/ui/nll/outlives-suggestion-more.stderr
deleted file mode 100644
index c8c604b5b..000000000
--- a/src/test/ui/nll/outlives-suggestion-more.stderr
+++ /dev/null
@@ -1,96 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-more.rs:5:5
- |
-LL | fn foo1<'a, 'b, 'c, 'd>(x: &'a usize, y: &'b usize) -> (&'c usize, &'d usize) {
- | -- -- lifetime `'c` defined here
- | |
- | lifetime `'a` defined here
-LL | (x, y)
- | ^^^^^^ function was supposed to return data with lifetime `'c` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'c`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-more.rs:5:5
- |
-LL | fn foo1<'a, 'b, 'c, 'd>(x: &'a usize, y: &'b usize) -> (&'c usize, &'d usize) {
- | -- -- lifetime `'d` defined here
- | |
- | lifetime `'b` defined here
-LL | (x, y)
- | ^^^^^^ function was supposed to return data with lifetime `'d` but it is returning data with lifetime `'b`
- |
- = help: consider adding the following bound: `'b: 'd`
-
-help: the following changes may resolve your lifetime errors
- |
- = help: add bound `'a: 'c`
- = help: add bound `'b: 'd`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-more.rs:11:5
- |
-LL | fn foo2<'a, 'b, 'c>(x: &'a usize, y: &'b usize) -> (&'c usize, &'static usize) {
- | -- -- lifetime `'c` defined here
- | |
- | lifetime `'a` defined here
-LL | (x, y)
- | ^^^^^^ function was supposed to return data with lifetime `'c` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'c`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-more.rs:11:5
- |
-LL | fn foo2<'a, 'b, 'c>(x: &'a usize, y: &'b usize) -> (&'c usize, &'static usize) {
- | -- lifetime `'b` defined here
-LL | (x, y)
- | ^^^^^^ returning this value requires that `'b` must outlive `'static`
-
-help: the following changes may resolve your lifetime errors
- |
- = help: add bound `'a: 'c`
- = help: replace `'b` with `'static`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-more.rs:21:5
- |
-LL | fn foo3<'a, 'b, 'c, 'd, 'e>(
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | (x, y, z)
- | ^^^^^^^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-more.rs:21:5
- |
-LL | fn foo3<'a, 'b, 'c, 'd, 'e>(
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | (x, y, z)
- | ^^^^^^^^^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-more.rs:21:5
- |
-LL | fn foo3<'a, 'b, 'c, 'd, 'e>(
- | -- lifetime `'c` defined here
-...
-LL | (x, y, z)
- | ^^^^^^^^^ returning this value requires that `'c` must outlive `'static`
-
-help: the following changes may resolve your lifetime errors
- |
- = help: `'a` and `'b` must be the same: replace one with the other
- = help: replace `'c` with `'static`
-
-error: aborting due to 7 previous errors
-
diff --git a/src/test/ui/nll/outlives-suggestion-simple.polonius.stderr b/src/test/ui/nll/outlives-suggestion-simple.polonius.stderr
deleted file mode 100644
index c00288f2e..000000000
--- a/src/test/ui/nll/outlives-suggestion-simple.polonius.stderr
+++ /dev/null
@@ -1,124 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:6:5
- |
-LL | fn foo1<'a, 'b>(x: &'a usize) -> &'b usize {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | x
- | ^ returning this value requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:10:5
- |
-LL | fn foo2<'a>(x: &'a usize) -> &'static usize {
- | -- lifetime `'a` defined here
-LL | x
- | ^ returning this value requires that `'a` must outlive `'static`
- |
- = help: consider replacing `'a` with `'static`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:14:5
- |
-LL | fn foo3<'a, 'b>(x: &'a usize, y: &'b usize) -> (&'b usize, &'a usize) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | (x, y)
- | ^^^^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:14:5
- |
-LL | fn foo3<'a, 'b>(x: &'a usize, y: &'b usize) -> (&'b usize, &'a usize) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | (x, y)
- | ^^^^^^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-help: `'a` and `'b` must be the same: replace one with the other
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:22:5
- |
-LL | fn foo4<'a, 'b, 'c>(x: &'a usize) -> (&'b usize, &'c usize) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | (x, x)
- | ^^^^^^ returning this value requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:22:5
- |
-LL | fn foo4<'a, 'b, 'c>(x: &'a usize) -> (&'b usize, &'c usize) {
- | -- -- lifetime `'c` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | (x, x)
- | ^^^^^^ returning this value requires that `'a` must outlive `'c`
- |
- = help: consider adding the following bound: `'a: 'c`
-
-help: add bound `'a: 'b + 'c`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:31:9
- |
-LL | pub fn foo<'a>(x: &'a usize) -> Self {
- | -- lifetime `'a` defined here
-LL | Foo { x }
- | ^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
- |
- = help: consider replacing `'a` with `'static`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:41:9
- |
-LL | impl<'a> Bar<'a> {
- | -- lifetime `'a` defined here
-LL | pub fn get<'b>(&self) -> &'b usize {
- | -- lifetime `'b` defined here
-LL | self.x
- | ^^^^^^ returning this value requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:52:9
- |
-LL | impl<'a> Baz<'a> {
- | -- lifetime `'a` defined here
-LL | fn get<'b>(&'b self) -> &'a i32 {
- | -- lifetime `'b` defined here
-LL | self.x
- | ^^^^^^ returning this value requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-error[E0521]: borrowed data escapes outside of associated function
- --> $DIR/outlives-suggestion-simple.rs:73:9
- |
-LL | fn get_bar(&self) -> Bar2 {
- | -----
- | |
- | `self` declared here, outside of the associated function body
- | `self` is a reference that is only valid in the associated function body
-LL | Bar2::new(&self)
- | ^^^^^^^^^^^^^^^^ `self` escapes the associated function body here
-
-error: aborting due to 10 previous errors
-
-For more information about this error, try `rustc --explain E0521`.
diff --git a/src/test/ui/nll/outlives-suggestion-simple.rs b/src/test/ui/nll/outlives-suggestion-simple.rs
deleted file mode 100644
index 2a5c31e3a..000000000
--- a/src/test/ui/nll/outlives-suggestion-simple.rs
+++ /dev/null
@@ -1,75 +0,0 @@
-// Test the simplest of outlives suggestions.
-
-fn foo1<'a, 'b>(x: &'a usize) -> &'b usize {
- x //~ERROR lifetime may not live long enough
-}
-
-fn foo2<'a>(x: &'a usize) -> &'static usize {
- x //~ERROR lifetime may not live long enough
-}
-
-fn foo3<'a, 'b>(x: &'a usize, y: &'b usize) -> (&'b usize, &'a usize) {
- (x, y) //~ERROR lifetime may not live long enough
- //~^ERROR lifetime may not live long enough
-}
-
-fn foo4<'a, 'b, 'c>(x: &'a usize) -> (&'b usize, &'c usize) {
- // FIXME: ideally, we suggest 'a: 'b + 'c, but as of today (may 04, 2019), the null error
- // reporting stops after the first error in a MIR def so as not to produce too many errors, so
- // currently we only report 'a: 'b. The user would then re-run and get another error.
- (x, x) //~ERROR lifetime may not live long enough
-}
-
-struct Foo<'a> {
- x: &'a usize,
-}
-
-impl Foo<'static> {
- pub fn foo<'a>(x: &'a usize) -> Self {
- Foo { x } //~ERROR lifetime may not live long enough
- }
-}
-
-struct Bar<'a> {
- x: &'a usize,
-}
-
-impl<'a> Bar<'a> {
- pub fn get<'b>(&self) -> &'b usize {
- self.x //~ERROR lifetime may not live long enough
- }
-}
-
-// source: https://stackoverflow.com/questions/41417057/why-do-i-get-a-lifetime-error-when-i-use-a-mutable-reference-in-a-struct-instead
-struct Baz<'a> {
- x: &'a mut i32,
-}
-
-impl<'a> Baz<'a> {
- fn get<'b>(&'b self) -> &'a i32 {
- self.x //~ERROR lifetime may not live long enough
- }
-}
-
-// source: https://stackoverflow.com/questions/41204134/rust-lifetime-error
-struct Bar2<'a> {
- bar: &'a str,
-}
-impl<'a> Bar2<'a> {
- fn new(foo: &'a Foo2<'a>) -> Bar2<'a> {
- Bar2 { bar: foo.raw }
- }
-}
-
-pub struct Foo2<'a> {
- raw: &'a str,
- cell: std::cell::Cell<&'a str>,
-}
-impl<'a> Foo2<'a> {
- // should not produce outlives suggestions to name 'self
- fn get_bar(&self) -> Bar2 {
- Bar2::new(&self) //~ERROR lifetime may not live long enough
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/outlives-suggestion-simple.stderr b/src/test/ui/nll/outlives-suggestion-simple.stderr
deleted file mode 100644
index a8368c494..000000000
--- a/src/test/ui/nll/outlives-suggestion-simple.stderr
+++ /dev/null
@@ -1,104 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:4:5
- |
-LL | fn foo1<'a, 'b>(x: &'a usize) -> &'b usize {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | x
- | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:8:5
- |
-LL | fn foo2<'a>(x: &'a usize) -> &'static usize {
- | -- lifetime `'a` defined here
-LL | x
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:12:5
- |
-LL | fn foo3<'a, 'b>(x: &'a usize, y: &'b usize) -> (&'b usize, &'a usize) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | (x, y)
- | ^^^^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:12:5
- |
-LL | fn foo3<'a, 'b>(x: &'a usize, y: &'b usize) -> (&'b usize, &'a usize) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | (x, y)
- | ^^^^^^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-help: `'a` and `'b` must be the same: replace one with the other
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:20:5
- |
-LL | fn foo4<'a, 'b, 'c>(x: &'a usize) -> (&'b usize, &'c usize) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | (x, x)
- | ^^^^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:29:9
- |
-LL | pub fn foo<'a>(x: &'a usize) -> Self {
- | -- lifetime `'a` defined here
-LL | Foo { x }
- | ^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:39:9
- |
-LL | impl<'a> Bar<'a> {
- | -- lifetime `'a` defined here
-LL | pub fn get<'b>(&self) -> &'b usize {
- | -- lifetime `'b` defined here
-LL | self.x
- | ^^^^^^ associated function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:50:9
- |
-LL | impl<'a> Baz<'a> {
- | -- lifetime `'a` defined here
-LL | fn get<'b>(&'b self) -> &'a i32 {
- | -- lifetime `'b` defined here
-LL | self.x
- | ^^^^^^ associated function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-error: lifetime may not live long enough
- --> $DIR/outlives-suggestion-simple.rs:71:9
- |
-LL | impl<'a> Foo2<'a> {
- | -- lifetime `'a` defined here
-LL | // should not produce outlives suggestions to name 'self
-LL | fn get_bar(&self) -> Bar2 {
- | - let's call the lifetime of this reference `'1`
-LL | Bar2::new(&self)
- | ^^^^^^^^^^^^^^^^ argument requires that `'1` must outlive `'a`
-
-error: aborting due to 9 previous errors
-
diff --git a/src/test/ui/nll/polonius/assignment-kills-loans.rs b/src/test/ui/nll/polonius/assignment-kills-loans.rs
deleted file mode 100644
index 696bf61ce..000000000
--- a/src/test/ui/nll/polonius/assignment-kills-loans.rs
+++ /dev/null
@@ -1,87 +0,0 @@
-#![allow(dead_code)]
-
-// This tests the various kinds of assignments there are. Polonius used to generate `killed`
-// facts only on simple assignments, but not projections, incorrectly causing errors to be emitted
-// for code accepted by NLL. They are all variations from example code in the NLL RFC.
-
-// check-pass
-// compile-flags: -Z polonius
-
-struct List<T> {
- value: T,
- next: Option<Box<List<T>>>,
-}
-
-// Assignment to a local: the `list` assignment should clear the existing
-// borrows of `list.value` and `list.next`
-fn assignment_to_local<T>(mut list: &mut List<T>) -> Vec<&mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut list.value);
- if let Some(n) = list.next.as_mut() {
- list = n;
- } else {
- return result;
- }
- }
-}
-
-// Assignment to a deref projection: the `*list` assignment should clear the existing
-// borrows of `list.value` and `list.next`
-fn assignment_to_deref_projection<T>(mut list: Box<&mut List<T>>) -> Vec<&mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut list.value);
- if let Some(n) = list.next.as_mut() {
- *list = n;
- } else {
- return result;
- }
- }
-}
-
-// Assignment to a field projection: the `list.0` assignment should clear the existing
-// borrows of `list.0.value` and `list.0.next`
-fn assignment_to_field_projection<T>(mut list: (&mut List<T>,)) -> Vec<&mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut list.0.value);
- if let Some(n) = list.0.next.as_mut() {
- list.0 = n;
- } else {
- return result;
- }
- }
-}
-
-// Assignment to a deref field projection: the `*list.0` assignment should clear the existing
-// borrows of `list.0.value` and `list.0.next`
-fn assignment_to_deref_field_projection<T>(mut list: (Box<&mut List<T>>,)) -> Vec<&mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut list.0.value);
- if let Some(n) = list.0.next.as_mut() {
- *list.0 = n;
- } else {
- return result;
- }
- }
-}
-
-// Similar to `assignment_to_deref_field_projection` but through a longer projection chain
-fn assignment_through_projection_chain<T>(
- mut list: (((((Box<&mut List<T>>,),),),),),
-) -> Vec<&mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut ((((list.0).0).0).0).0.value);
- if let Some(n) = ((((list.0).0).0).0).0.next.as_mut() {
- *((((list.0).0).0).0).0 = n;
- } else {
- return result;
- }
- }
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/polonius/assignment-to-differing-field.rs b/src/test/ui/nll/polonius/assignment-to-differing-field.rs
deleted file mode 100644
index 7ec3b9049..000000000
--- a/src/test/ui/nll/polonius/assignment-to-differing-field.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-#![allow(dead_code)]
-
-// Compared to `assignment-kills-loans.rs`, we check here
-// that we do not kill too many borrows. Assignments to the `.1`
-// field projections should leave the borrows on `.0` intact.
-
-// compile-flags: -Z polonius
-
-struct List<T> {
- value: T,
- next: Option<Box<List<T>>>,
-}
-
-
-fn assignment_to_field_projection<'a, T>(
- mut list: (&'a mut List<T>, &'a mut List<T>),
-) -> Vec<&'a mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut (list.0).value);
- //~^ ERROR cannot borrow `list.0.value` as mutable
-
- if let Some(n) = (list.0).next.as_mut() {
- //~^ ERROR cannot borrow `list.0.next` as mutable
- list.1 = n;
- } else {
- return result;
- }
- }
-}
-
-fn assignment_through_projection_chain<'a, T>(
- mut list: (((((Box<&'a mut List<T>>, Box<&'a mut List<T>>),),),),),
-) -> Vec<&'a mut T> {
- let mut result = vec![];
- loop {
- result.push(&mut ((((list.0).0).0).0).0.value);
- //~^ ERROR cannot borrow `list.0.0.0.0.0.value` as mutable
-
- if let Some(n) = ((((list.0).0).0).0).0.next.as_mut() {
- //~^ ERROR cannot borrow `list.0.0.0.0.0.next` as mutable
- *((((list.0).0).0).0).1 = n;
- } else {
- return result;
- }
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/polonius/assignment-to-differing-field.stderr b/src/test/ui/nll/polonius/assignment-to-differing-field.stderr
deleted file mode 100644
index afa1b9344..000000000
--- a/src/test/ui/nll/polonius/assignment-to-differing-field.stderr
+++ /dev/null
@@ -1,51 +0,0 @@
-error[E0499]: cannot borrow `list.0.value` as mutable more than once at a time
- --> $DIR/assignment-to-differing-field.rs:20:21
- |
-LL | fn assignment_to_field_projection<'a, T>(
- | -- lifetime `'a` defined here
-...
-LL | result.push(&mut (list.0).value);
- | ^^^^^^^^^^^^^^^^^^^ `list.0.value` was mutably borrowed here in the previous iteration of the loop
-...
-LL | return result;
- | ------ returning this value requires that `list.0.value` is borrowed for `'a`
-
-error[E0499]: cannot borrow `list.0.next` as mutable more than once at a time
- --> $DIR/assignment-to-differing-field.rs:23:26
- |
-LL | fn assignment_to_field_projection<'a, T>(
- | -- lifetime `'a` defined here
-...
-LL | if let Some(n) = (list.0).next.as_mut() {
- | ^^^^^^^^^^^^^^^^^^^^^^
- | |
- | `list.0.next` was mutably borrowed here in the previous iteration of the loop
- | argument requires that `list.0.next` is borrowed for `'a`
-
-error[E0499]: cannot borrow `list.0.0.0.0.0.value` as mutable more than once at a time
- --> $DIR/assignment-to-differing-field.rs:37:21
- |
-LL | fn assignment_through_projection_chain<'a, T>(
- | -- lifetime `'a` defined here
-...
-LL | result.push(&mut ((((list.0).0).0).0).0.value);
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `list.0.0.0.0.0.value` was mutably borrowed here in the previous iteration of the loop
-...
-LL | return result;
- | ------ returning this value requires that `list.0.0.0.0.0.value` is borrowed for `'a`
-
-error[E0499]: cannot borrow `list.0.0.0.0.0.next` as mutable more than once at a time
- --> $DIR/assignment-to-differing-field.rs:40:26
- |
-LL | fn assignment_through_projection_chain<'a, T>(
- | -- lifetime `'a` defined here
-...
-LL | if let Some(n) = ((((list.0).0).0).0).0.next.as_mut() {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- | |
- | `list.0.0.0.0.0.next` was mutably borrowed here in the previous iteration of the loop
- | argument requires that `list.0.0.0.0.0.next` is borrowed for `'a`
-
-error: aborting due to 4 previous errors
-
-For more information about this error, try `rustc --explain E0499`.
diff --git a/src/test/ui/nll/polonius/call-kills-loans.rs b/src/test/ui/nll/polonius/call-kills-loans.rs
deleted file mode 100644
index f430e9211..000000000
--- a/src/test/ui/nll/polonius/call-kills-loans.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// `Call` terminators can write to a local which has existing loans
-// and those need to be killed like a regular assignment to a local.
-// This is a simplified version of issue 47680, is correctly accepted
-// by NLL but was incorrectly rejected by Polonius because of these
-// missing `killed` facts.
-
-// check-pass
-// compile-flags: -Z polonius
-
-struct Thing;
-
-impl Thing {
- fn next(&mut self) -> &mut Self { unimplemented!() }
-}
-
-fn main() {
- let mut temp = &mut Thing;
-
- loop {
- let v = temp.next();
- temp = v; // accepted by NLL, was incorrectly rejected by Polonius
- }
-}
diff --git a/src/test/ui/nll/polonius/issue-46589.rs b/src/test/ui/nll/polonius/issue-46589.rs
deleted file mode 100644
index 648280a1d..000000000
--- a/src/test/ui/nll/polonius/issue-46589.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// This test is a copy of `ui/nll/issue-46589.rs` which fails in NLL but succeeds in Polonius.
-// As we can't have a test here which conditionally passes depending on a test
-// revision/compile-flags. We ensure here that it passes in Polonius mode.
-
-// check-pass
-// compile-flags: -Z polonius
-
-struct Foo;
-
-impl Foo {
- fn get_self(&mut self) -> Option<&mut Self> {
- Some(self)
- }
-
- fn new_self(&mut self) -> &mut Self {
- self
- }
-
- fn trigger_bug(&mut self) {
- let other = &mut (&mut *self);
-
- *other = match (*other).get_self() {
- Some(s) => s,
- None => (*other).new_self()
- };
-
- let c = other;
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/polonius/polonius-smoke-test.rs b/src/test/ui/nll/polonius/polonius-smoke-test.rs
deleted file mode 100644
index c4344af71..000000000
--- a/src/test/ui/nll/polonius/polonius-smoke-test.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-// Check that Polonius borrow check works for simple cases.
-// compile-flags: -Z polonius
-
-pub fn return_ref_to_local() -> &'static i32 {
- let x = 0;
- &x //~ ERROR
-}
-
-pub fn use_while_mut() {
- let mut x = 0;
- let y = &mut x;
- let z = x; //~ ERROR
- let w = y;
-}
-
-pub fn use_while_mut_fr(x: &mut i32) -> &mut i32 {
- let y = &mut *x;
- let z = x; //~ ERROR
- y
-}
-
-// Cases like this are why we have Polonius.
-pub fn position_dependent_outlives(x: &mut i32, cond: bool) -> &mut i32 {
- let y = &mut *x;
- if cond {
- return y;
- } else {
- *x = 0;
- return x;
- }
-}
-
-fn foo<'a, 'b>(p: &'b &'a mut usize) -> &'b usize {
- p
-}
-
-// Check that we create constraints for well-formedness of function arguments
-fn well_formed_function_inputs() {
- let s = &mut 1;
- let r = &mut *s;
- let tmp = foo(&r);
- s; //~ ERROR
- tmp;
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/polonius/polonius-smoke-test.stderr b/src/test/ui/nll/polonius/polonius-smoke-test.stderr
deleted file mode 100644
index fa1a6a9c9..000000000
--- a/src/test/ui/nll/polonius/polonius-smoke-test.stderr
+++ /dev/null
@@ -1,43 +0,0 @@
-error[E0515]: cannot return reference to local variable `x`
- --> $DIR/polonius-smoke-test.rs:6:5
- |
-LL | &x
- | ^^ returns a reference to data owned by the current function
-
-error[E0503]: cannot use `x` because it was mutably borrowed
- --> $DIR/polonius-smoke-test.rs:12:13
- |
-LL | let y = &mut x;
- | ------ borrow of `x` occurs here
-LL | let z = x;
- | ^ use of borrowed `x`
-LL | let w = y;
- | - borrow later used here
-
-error[E0505]: cannot move out of `x` because it is borrowed
- --> $DIR/polonius-smoke-test.rs:18:13
- |
-LL | pub fn use_while_mut_fr(x: &mut i32) -> &mut i32 {
- | - let's call the lifetime of this reference `'1`
-LL | let y = &mut *x;
- | ------- borrow of `*x` occurs here
-LL | let z = x;
- | ^ move out of `x` occurs here
-LL | y
- | - returning this value requires that `*x` is borrowed for `'1`
-
-error[E0505]: cannot move out of `s` because it is borrowed
- --> $DIR/polonius-smoke-test.rs:42:5
- |
-LL | let r = &mut *s;
- | ------- borrow of `*s` occurs here
-LL | let tmp = foo(&r);
-LL | s;
- | ^ move out of `s` occurs here
-LL | tmp;
- | --- borrow later used here
-
-error: aborting due to 4 previous errors
-
-Some errors have detailed explanations: E0503, E0505, E0515.
-For more information about an error, try `rustc --explain E0503`.
diff --git a/src/test/ui/nll/polonius/storagedead-kills-loans.rs b/src/test/ui/nll/polonius/storagedead-kills-loans.rs
deleted file mode 100644
index 669e077de..000000000
--- a/src/test/ui/nll/polonius/storagedead-kills-loans.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Whenever a `StorageDead` MIR statement destroys a value `x`,
-// we should kill all loans of `x`. This is extracted from `rand 0.4.6`,
-// is correctly accepted by NLL but was incorrectly rejected by
-// Polonius because of these missing `killed` facts.
-
-// check-pass
-// compile-flags: -Z polonius
-
-use std::{io, mem};
-use std::io::Read;
-
-#[allow(dead_code)]
-fn fill(r: &mut dyn Read, mut buf: &mut [u8]) -> io::Result<()> {
- while buf.len() > 0 {
- match r.read(buf).unwrap() {
- 0 => return Err(io::Error::new(io::ErrorKind::Other,
- "end of file reached")),
- n => buf = &mut mem::replace(&mut buf, &mut [])[n..],
- // ^- Polonius had multiple errors on the previous line (where NLL has none)
- // as it didn't know `buf` was killed here, and would
- // incorrectly reject both the borrow expression, and the assignment.
- }
- }
- Ok(())
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/polonius/subset-relations.rs b/src/test/ui/nll/polonius/subset-relations.rs
deleted file mode 100644
index f223ab177..000000000
--- a/src/test/ui/nll/polonius/subset-relations.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Checks that Polonius can compute cases of universal regions errors:
-// "illegal subset relation errors", cases where analysis finds that
-// two free regions outlive each other, without any evidence that this
-// relation holds.
-
-// compile-flags: -Z polonius
-
-// returning `y` requires that `'b: 'a`, but it's not known to be true
-fn missing_subset<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 {
- y //~ ERROR
-}
-
-// `'b: 'a` is explicitly declared
-fn valid_subset<'a, 'b: 'a>(x: &'a u32, y: &'b u32) -> &'a u32 {
- y
-}
-
-// because of `x`, it is implied that `'b: 'a` holds
-fn implied_bounds_subset<'a, 'b>(x: &'a &'b mut u32) -> &'a u32 {
- x
-}
-
-// `'b: 'a` is declared, and `'a: 'c` is known via implied bounds:
-// `'b: 'c` is therefore known to hold transitively
-fn transitively_valid_subset<'a, 'b: 'a, 'c>(x: &'c &'a u32, y: &'b u32) -> &'c u32 {
- y
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/polonius/subset-relations.stderr b/src/test/ui/nll/polonius/subset-relations.stderr
deleted file mode 100644
index 6df5563ea..000000000
--- a/src/test/ui/nll/polonius/subset-relations.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/subset-relations.rs:10:5
- |
-LL | fn missing_subset<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | y
- | ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/process_or_insert_default.rs b/src/test/ui/nll/process_or_insert_default.rs
deleted file mode 100644
index 84ac9bbd0..000000000
--- a/src/test/ui/nll/process_or_insert_default.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-// run-pass
-
-use std::collections::HashMap;
-
-fn process_or_insert_default(map: &mut HashMap<usize, String>, key: usize) {
- match map.get_mut(&key) {
- Some(value) => {
- process(value);
- }
- None => {
- map.insert(key, "".to_string());
- }
- }
-}
-
-fn process(x: &str) {
- assert_eq!(x, "Hello, world");
-}
-
-fn main() {
- let map = &mut HashMap::new();
- map.insert(22, format!("Hello, world"));
- map.insert(44, format!("Goodbye, world"));
- process_or_insert_default(map, 22);
- process_or_insert_default(map, 66);
- assert_eq!(map[&66], "");
-}
diff --git a/src/test/ui/nll/projection-return.rs b/src/test/ui/nll/projection-return.rs
deleted file mode 100644
index be141339a..000000000
--- a/src/test/ui/nll/projection-return.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-// check-pass
-
-#![feature(rustc_attrs)]
-
-trait Foo {
- type Bar;
-}
-
-impl Foo for () {
- type Bar = u32;
-}
-
-fn foo() -> <() as Foo>::Bar {
- 22
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/promotable-mutable-zst-doesnt-conflict.rs b/src/test/ui/nll/promotable-mutable-zst-doesnt-conflict.rs
deleted file mode 100644
index 3b06b0db3..000000000
--- a/src/test/ui/nll/promotable-mutable-zst-doesnt-conflict.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-// Check that mutable promoted length zero arrays don't check for conflicting
-// access
-
-// check-pass
-
-pub fn main() {
- let mut x: Vec<&[i32; 0]> = Vec::new();
- for _ in 0..10 {
- x.push(&[]);
- }
-}
diff --git a/src/test/ui/nll/promoted-bounds.rs b/src/test/ui/nll/promoted-bounds.rs
deleted file mode 100644
index 5f95ae13c..000000000
--- a/src/test/ui/nll/promoted-bounds.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-fn shorten_lifetime<'a, 'b, 'min>(a: &'a i32, b: &'b i32) -> &'min i32
-where
- 'a: 'min,
- 'b: 'min,
-{
- if *a < *b {
- &a
- } else {
- &b
- }
-}
-
-fn main() {
- let promoted_fn_item_ref = &shorten_lifetime;
-
- let a = &5;
- let ptr = {
- let l = 3;
- let b = &l; //~ ERROR does not live long enough
- let c = promoted_fn_item_ref(a, b);
- c
- };
-
- println!("ptr = {:?}", ptr);
-}
diff --git a/src/test/ui/nll/promoted-bounds.stderr b/src/test/ui/nll/promoted-bounds.stderr
deleted file mode 100644
index df347f4e7..000000000
--- a/src/test/ui/nll/promoted-bounds.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0597]: `l` does not live long enough
- --> $DIR/promoted-bounds.rs:19:17
- |
-LL | let ptr = {
- | --- borrow later stored here
-LL | let l = 3;
-LL | let b = &l;
- | ^^ borrowed value does not live long enough
-...
-LL | };
- | - `l` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/promoted-closure-pair.rs b/src/test/ui/nll/promoted-closure-pair.rs
deleted file mode 100644
index cc9f17fd4..000000000
--- a/src/test/ui/nll/promoted-closure-pair.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Check that we handle multiple closures in the same promoted constant.
-
-fn foo() -> &'static i32 {
- let z = 0;
- let p = &(|y| y, |y| y);
- p.0(&z);
- p.1(&z) //~ ERROR cannot return
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/promoted-closure-pair.stderr b/src/test/ui/nll/promoted-closure-pair.stderr
deleted file mode 100644
index 000bdf858..000000000
--- a/src/test/ui/nll/promoted-closure-pair.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0515]: cannot return value referencing local variable `z`
- --> $DIR/promoted-closure-pair.rs:7:5
- |
-LL | p.1(&z)
- | ^^^^--^
- | | |
- | | `z` is borrowed here
- | returns a value referencing data owned by the current function
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0515`.
diff --git a/src/test/ui/nll/promoted-liveness.rs b/src/test/ui/nll/promoted-liveness.rs
deleted file mode 100644
index e5a8e1e5c..000000000
--- a/src/test/ui/nll/promoted-liveness.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-// Test that promoted that have larger mir bodies than their containing function
-// don't cause an ICE.
-
-// check-pass
-
-fn main() {
- &["0", "1", "2", "3", "4", "5", "6", "7"];
-}
diff --git a/src/test/ui/nll/rc-loop.rs b/src/test/ui/nll/rc-loop.rs
deleted file mode 100644
index e59303d1f..000000000
--- a/src/test/ui/nll/rc-loop.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// run-pass
-
-// A test for something that NLL enables. It sometimes happens that
-// the `while let` pattern makes some borrows from a variable (in this
-// case, `x`) that you need in order to compute the next value for
-// `x`. The lexical checker makes this very painful. The NLL checker
-// does not.
-
-use std::rc::Rc;
-
-#[derive(Debug, PartialEq, Eq)]
-enum Foo {
- Base(usize),
- Next(Rc<Foo>),
-}
-
-fn find_base(mut x: Rc<Foo>) -> Rc<Foo> {
- while let Foo::Next(n) = &*x {
- x = n.clone();
- }
- x
-}
-
-fn main() {
- let chain = Rc::new(Foo::Next(Rc::new(Foo::Base(44))));
- let base = find_base(chain);
- assert_eq!(&*base, &Foo::Base(44));
-}
diff --git a/src/test/ui/nll/ref-suggestion.rs b/src/test/ui/nll/ref-suggestion.rs
deleted file mode 100644
index 346d118f0..000000000
--- a/src/test/ui/nll/ref-suggestion.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-fn main() {
- let x = vec![1];
- let y = x;
- x; //~ ERROR use of moved value
-
- let x = vec![1];
- let mut y = x;
- x; //~ ERROR use of moved value
-
- let x = (Some(vec![1]), ());
-
- match x {
- (Some(y), ()) => {},
- _ => {},
- }
- x; //~ ERROR use of partially moved value
-}
diff --git a/src/test/ui/nll/ref-suggestion.stderr b/src/test/ui/nll/ref-suggestion.stderr
deleted file mode 100644
index b1f5117cb..000000000
--- a/src/test/ui/nll/ref-suggestion.stderr
+++ /dev/null
@@ -1,48 +0,0 @@
-error[E0382]: use of moved value: `x`
- --> $DIR/ref-suggestion.rs:4:5
- |
-LL | let x = vec![1];
- | - move occurs because `x` has type `Vec<i32>`, which does not implement the `Copy` trait
-LL | let y = x;
- | - value moved here
-LL | x;
- | ^ value used here after move
- |
-help: consider cloning the value if the performance cost is acceptable
- |
-LL | let y = x.clone();
- | ++++++++
-
-error[E0382]: use of moved value: `x`
- --> $DIR/ref-suggestion.rs:8:5
- |
-LL | let x = vec![1];
- | - move occurs because `x` has type `Vec<i32>`, which does not implement the `Copy` trait
-LL | let mut y = x;
- | - value moved here
-LL | x;
- | ^ value used here after move
- |
-help: consider cloning the value if the performance cost is acceptable
- |
-LL | let mut y = x.clone();
- | ++++++++
-
-error[E0382]: use of partially moved value: `x`
- --> $DIR/ref-suggestion.rs:16:5
- |
-LL | (Some(y), ()) => {},
- | - value partially moved here
-...
-LL | x;
- | ^ value used here after partial move
- |
- = note: partial move occurs because value has type `Vec<i32>`, which does not implement the `Copy` trait
-help: borrow this binding in the pattern to avoid moving the value
- |
-LL | (Some(ref y), ()) => {},
- | +++
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0382`.
diff --git a/src/test/ui/nll/reference-carried-through-struct-field.rs b/src/test/ui/nll/reference-carried-through-struct-field.rs
deleted file mode 100644
index effd61084..000000000
--- a/src/test/ui/nll/reference-carried-through-struct-field.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-struct Wrap<'a> { w: &'a mut u32 }
-
-fn foo() {
- let mut x = 22;
- let wrapper = Wrap { w: &mut x };
- x += 1; //~ ERROR cannot use `x` because it was mutably borrowed [E0503]
- *wrapper.w += 1;
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/reference-carried-through-struct-field.stderr b/src/test/ui/nll/reference-carried-through-struct-field.stderr
deleted file mode 100644
index 56d878e43..000000000
--- a/src/test/ui/nll/reference-carried-through-struct-field.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0503]: cannot use `x` because it was mutably borrowed
- --> $DIR/reference-carried-through-struct-field.rs:6:5
- |
-LL | let wrapper = Wrap { w: &mut x };
- | ------ borrow of `x` occurs here
-LL | x += 1;
- | ^^^^^^ use of borrowed `x`
-LL | *wrapper.w += 1;
- | --------------- borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0503`.
diff --git a/src/test/ui/nll/region-ends-after-if-condition.rs b/src/test/ui/nll/region-ends-after-if-condition.rs
deleted file mode 100644
index f67de03ca..000000000
--- a/src/test/ui/nll/region-ends-after-if-condition.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Basic test for liveness constraints: the region (`R1`) that appears
-// in the type of `p` includes the points after `&v[0]` up to (but not
-// including) the call to `use_x`. The `else` branch is not included.
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-struct MyStruct {
- field: String
-}
-
-fn foo1() {
- let mut my_struct = MyStruct { field: format!("Hello") };
-
- let value = &my_struct.field;
- if value.is_empty() {
- my_struct.field.push_str("Hello, world!");
- }
-}
-
-fn foo2() {
- let mut my_struct = MyStruct { field: format!("Hello") };
-
- let value = &my_struct.field;
- if value.is_empty() {
- my_struct.field.push_str("Hello, world!");
- //~^ ERROR [E0502]
- }
- drop(value);
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/region-ends-after-if-condition.stderr b/src/test/ui/nll/region-ends-after-if-condition.stderr
deleted file mode 100644
index c03e38579..000000000
--- a/src/test/ui/nll/region-ends-after-if-condition.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0502]: cannot borrow `my_struct.field` as mutable because it is also borrowed as immutable
- --> $DIR/region-ends-after-if-condition.rs:26:9
- |
-LL | let value = &my_struct.field;
- | ---------------- immutable borrow occurs here
-LL | if value.is_empty() {
-LL | my_struct.field.push_str("Hello, world!");
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
-...
-LL | drop(value);
- | ----- immutable borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0502`.
diff --git a/src/test/ui/nll/relate_tys/fn-subtype.rs b/src/test/ui/nll/relate_tys/fn-subtype.rs
deleted file mode 100644
index ba89fa19c..000000000
--- a/src/test/ui/nll/relate_tys/fn-subtype.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-// Test that NLL produces correct spans for higher-ranked subtyping errors.
-//
-// compile-flags:-Zno-leak-check
-
-fn main() {
- let x: fn(&'static ()) = |_| {};
- let y: for<'a> fn(&'a ()) = x; //~ ERROR mismatched types [E0308]
-}
diff --git a/src/test/ui/nll/relate_tys/fn-subtype.stderr b/src/test/ui/nll/relate_tys/fn-subtype.stderr
deleted file mode 100644
index 21073647e..000000000
--- a/src/test/ui/nll/relate_tys/fn-subtype.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0308]: mismatched types
- --> $DIR/fn-subtype.rs:7:33
- |
-LL | let y: for<'a> fn(&'a ()) = x;
- | ^ one type is more general than the other
- |
- = note: expected fn pointer `for<'a> fn(&'a ())`
- found fn pointer `fn(&())`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.rs b/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.rs
deleted file mode 100644
index 7891bab09..000000000
--- a/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Test that the NLL `relate_tys` code correctly deduces that a
-// function returning either argument CANNOT be upcast to one
-// that returns always its first argument.
-//
-// compile-flags:-Zno-leak-check
-
-fn make_it() -> for<'a> fn(&'a u32, &'a u32) -> &'a u32 {
- panic!()
-}
-
-fn foo() {
- let a: for<'a, 'b> fn(&'a u32, &'b u32) -> &'a u32 = make_it();
- //~^ ERROR mismatched types [E0308]
- drop(a);
-}
-
-fn bar() {
- // The code path for patterns is mildly different, so go ahead and
- // test that too:
- let _: for<'a, 'b> fn(&'a u32, &'b u32) -> &'a u32 = make_it();
- //~^ ERROR mismatched types [E0308]
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.stderr b/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.stderr
deleted file mode 100644
index 7d76c916d..000000000
--- a/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.stderr
+++ /dev/null
@@ -1,21 +0,0 @@
-error[E0308]: mismatched types
- --> $DIR/hr-fn-aaa-as-aba.rs:12:58
- |
-LL | let a: for<'a, 'b> fn(&'a u32, &'b u32) -> &'a u32 = make_it();
- | ^^^^^^^^^ one type is more general than the other
- |
- = note: expected fn pointer `for<'a, 'b> fn(&'a u32, &'b u32) -> &'a u32`
- found fn pointer `for<'a> fn(&'a u32, &'a u32) -> &'a u32`
-
-error[E0308]: mismatched types
- --> $DIR/hr-fn-aaa-as-aba.rs:20:12
- |
-LL | let _: for<'a, 'b> fn(&'a u32, &'b u32) -> &'a u32 = make_it();
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ one type is more general than the other
- |
- = note: expected fn pointer `for<'a, 'b> fn(&'a u32, &'b u32) -> &'a u32`
- found fn pointer `for<'a> fn(&'a u32, &'a u32) -> &'a u32`
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/nll/relate_tys/hr-fn-aau-eq-abu.rs b/src/test/ui/nll/relate_tys/hr-fn-aau-eq-abu.rs
deleted file mode 100644
index 92730341c..000000000
--- a/src/test/ui/nll/relate_tys/hr-fn-aau-eq-abu.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Test an interesting corner case that ought to be legal (though the
-// current code actually gets it wrong, see below): a fn that takes
-// two arguments that are references with the same lifetime is in fact
-// equivalent to a fn that takes two references with distinct
-// lifetimes. This is true because the two functions can call one
-// another -- effectively, the single lifetime `'a` is just inferred
-// to be the intersection of the two distinct lifetimes.
-//
-// check-pass
-// compile-flags:-Zno-leak-check
-
-use std::cell::Cell;
-
-fn make_cell_aa() -> Cell<for<'a> fn(&'a u32, &'a u32)> {
- panic!()
-}
-
-fn aa_eq_ab() {
- let a: Cell<for<'a, 'b> fn(&'a u32, &'b u32)> = make_cell_aa();
- drop(a);
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/relate_tys/hr-fn-aba-as-aaa.rs b/src/test/ui/nll/relate_tys/hr-fn-aba-as-aaa.rs
deleted file mode 100644
index 7cc0acf45..000000000
--- a/src/test/ui/nll/relate_tys/hr-fn-aba-as-aaa.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Test that the NLL `relate_tys` code correctly deduces that a
-// function returning always its first argument can be upcast to one
-// that returns either first or second argument.
-//
-// check-pass
-// compile-flags:-Zno-leak-check
-
-fn make_it() -> for<'a, 'b> fn(&'a u32, &'b u32) -> &'a u32 {
- panic!()
-}
-
-fn main() {
- let a: for<'a> fn(&'a u32, &'a u32) -> &'a u32 = make_it();
- drop(a);
-}
diff --git a/src/test/ui/nll/relate_tys/impl-fn-ignore-binder-via-bottom.rs b/src/test/ui/nll/relate_tys/impl-fn-ignore-binder-via-bottom.rs
deleted file mode 100644
index 05e2ea047..000000000
--- a/src/test/ui/nll/relate_tys/impl-fn-ignore-binder-via-bottom.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Test that the NLL solver cannot find a solution
-// for `exists<R1> { forall<R1> { R2: R1 } }`.
-//
-// In this test, the impl should match `fn(T)` for some `T`,
-// but we ask it to match `for<'a> fn(&'a ())`. Due to argument
-// contravariance, this effectively requires a `T = &'b ()` where
-// `forall<'a> { 'a: 'b }`. Therefore, we get an error.
-//
-// Note the use of `-Zno-leak-check` here. This is presently required in order
-// to skip the leak-check errors.
-//
-// c.f. Issue #57642.
-//
-// compile-flags:-Zno-leak-check
-
-trait Y {
- type F;
- fn make_f() -> Self::F;
-}
-
-impl<T> Y for fn(T) {
- type F = fn(T);
-
- fn make_f() -> Self::F {
- |_| {}
- }
-}
-
-fn main() {
- let _x = <fn(&())>::make_f();
- //~^ ERROR implementation of `Y` is not general enough
- //~| ERROR implementation of `Y` is not general enough
- //~| ERROR implementation of `Y` is not general enough
-}
diff --git a/src/test/ui/nll/relate_tys/impl-fn-ignore-binder-via-bottom.stderr b/src/test/ui/nll/relate_tys/impl-fn-ignore-binder-via-bottom.stderr
deleted file mode 100644
index b945ffedd..000000000
--- a/src/test/ui/nll/relate_tys/impl-fn-ignore-binder-via-bottom.stderr
+++ /dev/null
@@ -1,29 +0,0 @@
-error: implementation of `Y` is not general enough
- --> $DIR/impl-fn-ignore-binder-via-bottom.rs:30:14
- |
-LL | let _x = <fn(&())>::make_f();
- | ^^^^^^^^^^^^^^^^^^^ implementation of `Y` is not general enough
- |
- = note: `Y` would have to be implemented for the type `for<'a> fn(&'a ())`
- = note: ...but `Y` is actually implemented for the type `fn(&'0 ())`, for some specific lifetime `'0`
-
-error: implementation of `Y` is not general enough
- --> $DIR/impl-fn-ignore-binder-via-bottom.rs:30:14
- |
-LL | let _x = <fn(&())>::make_f();
- | ^^^^^^^^^^^^^^^^^^^ implementation of `Y` is not general enough
- |
- = note: `Y` would have to be implemented for the type `for<'a> fn(&'a ())`
- = note: ...but `Y` is actually implemented for the type `fn(&'0 ())`, for some specific lifetime `'0`
-
-error: implementation of `Y` is not general enough
- --> $DIR/impl-fn-ignore-binder-via-bottom.rs:30:14
- |
-LL | let _x = <fn(&())>::make_f();
- | ^^^^^^^^^^^^^^^^^^^ implementation of `Y` is not general enough
- |
- = note: `Y` would have to be implemented for the type `for<'a> fn(&'a ())`
- = note: ...but `Y` is actually implemented for the type `fn(&'0 ())`, for some specific lifetime `'0`
-
-error: aborting due to 3 previous errors
-
diff --git a/src/test/ui/nll/relate_tys/issue-48071.rs b/src/test/ui/nll/relate_tys/issue-48071.rs
deleted file mode 100644
index 73361a0d3..000000000
--- a/src/test/ui/nll/relate_tys/issue-48071.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Regression test for #48071. This test used to ICE because -- in
-// the leak-check -- it would pass since we knew that the return type
-// was `'static`, and hence `'static: 'a` was legal even for a
-// placeholder region, but in NLL land it would fail because we had
-// rewritten `'static` to a region variable.
-//
-// check-pass
-
-trait Foo {
- fn foo(&self) { }
-}
-
-impl Foo for () {
-}
-
-type MakeFooFn = for<'a> fn(&'a u8) -> Box<dyn Foo + 'a>;
-
-fn make_foo(x: &u8) -> Box<dyn Foo + 'static> {
- Box::new(())
-}
-
-fn main() {
- let x: MakeFooFn = make_foo as MakeFooFn;
-}
diff --git a/src/test/ui/nll/relate_tys/opaque-hrtb.rs b/src/test/ui/nll/relate_tys/opaque-hrtb.rs
deleted file mode 100644
index 261372523..000000000
--- a/src/test/ui/nll/relate_tys/opaque-hrtb.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-trait MyTrait<T> {}
-
-struct Foo;
-impl<T> MyTrait<T> for Foo {}
-
-fn bar<Input>() -> impl MyTrait<Input> {
- Foo
-}
-
-fn foo() -> impl for<'a> MyTrait<&'a str> {
- bar() //~ ERROR implementation of `MyTrait` is not general enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/relate_tys/opaque-hrtb.stderr b/src/test/ui/nll/relate_tys/opaque-hrtb.stderr
deleted file mode 100644
index d75ec2b57..000000000
--- a/src/test/ui/nll/relate_tys/opaque-hrtb.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: implementation of `MyTrait` is not general enough
- --> $DIR/opaque-hrtb.rs:11:5
- |
-LL | bar()
- | ^^^^^ implementation of `MyTrait` is not general enough
- |
- = note: `impl MyTrait<&'2 str>` must implement `MyTrait<&'1 str>`, for any lifetime `'1`...
- = note: ...but it actually implements `MyTrait<&'2 str>`, for some specific lifetime `'2`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/relate_tys/trait-hrtb.rs b/src/test/ui/nll/relate_tys/trait-hrtb.rs
deleted file mode 100644
index 7f40e93cd..000000000
--- a/src/test/ui/nll/relate_tys/trait-hrtb.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Test that NLL generates proper error spans for trait HRTB errors
-//
-// compile-flags:-Zno-leak-check
-
-trait Foo<'a> {}
-
-fn make_foo<'a>() -> Box<dyn Foo<'a>> {
- panic!()
-}
-
-fn main() {
- let x: Box<dyn Foo<'static>> = make_foo();
- let y: Box<dyn for<'a> Foo<'a>> = x; //~ ERROR mismatched types [E0308]
-}
diff --git a/src/test/ui/nll/relate_tys/trait-hrtb.stderr b/src/test/ui/nll/relate_tys/trait-hrtb.stderr
deleted file mode 100644
index aa1927711..000000000
--- a/src/test/ui/nll/relate_tys/trait-hrtb.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0308]: mismatched types
- --> $DIR/trait-hrtb.rs:13:39
- |
-LL | let y: Box<dyn for<'a> Foo<'a>> = x;
- | ^ one type is more general than the other
- |
- = note: expected trait object `dyn for<'a> Foo<'a>`
- found trait object `dyn Foo<'_>`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/nll/relate_tys/universe-violation.rs b/src/test/ui/nll/relate_tys/universe-violation.rs
deleted file mode 100644
index c5f9d4406..000000000
--- a/src/test/ui/nll/relate_tys/universe-violation.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Test that the NLL `relate_tys` code correctly deduces that a
-// function returning either argument CANNOT be upcast to one
-// that returns always its first argument.
-//
-// compile-flags:-Zno-leak-check
-
-fn make_it() -> fn(&'static u32) -> &'static u32 {
- panic!()
-}
-
-fn main() {
- let a: fn(_) -> _ = make_it();
- let b: fn(&u32) -> &u32 = a; //~ ERROR mismatched types [E0308]
- drop(a);
-}
diff --git a/src/test/ui/nll/relate_tys/universe-violation.stderr b/src/test/ui/nll/relate_tys/universe-violation.stderr
deleted file mode 100644
index fe801b42c..000000000
--- a/src/test/ui/nll/relate_tys/universe-violation.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0308]: mismatched types
- --> $DIR/universe-violation.rs:13:31
- |
-LL | let b: fn(&u32) -> &u32 = a;
- | ^ one type is more general than the other
- |
- = note: expected fn pointer `for<'a> fn(&'a u32) -> &'a u32`
- found fn pointer `fn(&u32) -> &u32`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/nll/relate_tys/var-appears-twice.rs b/src/test/ui/nll/relate_tys/var-appears-twice.rs
deleted file mode 100644
index 77129f446..000000000
--- a/src/test/ui/nll/relate_tys/var-appears-twice.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Test that the NLL `relate_tys` code correctly deduces that a
-// function returning always its first argument can be upcast to one
-// that returns either first or second argument.
-
-use std::cell::Cell;
-
-type DoubleCell<A> = Cell<(A, A)>;
-type DoublePair<A> = (A, A);
-
-fn make_cell<'b>(x: &'b u32) -> Cell<(&'static u32, &'b u32)> {
- panic!()
-}
-
-fn main() {
- let a: &'static u32 = &22;
- let b = 44;
-
- // Here we get an error because `DoubleCell<_>` requires the same type
- // on both parts of the `Cell`, and we can't have that.
- let x: DoubleCell<_> = make_cell(&b); //~ ERROR
-
- // Here we do not get an error because `DoublePair<_>` permits
- // variance on the lifetimes involved.
- let y: DoublePair<_> = make_cell(&b).get();
-}
diff --git a/src/test/ui/nll/relate_tys/var-appears-twice.stderr b/src/test/ui/nll/relate_tys/var-appears-twice.stderr
deleted file mode 100644
index d032ce6f2..000000000
--- a/src/test/ui/nll/relate_tys/var-appears-twice.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0597]: `b` does not live long enough
- --> $DIR/var-appears-twice.rs:20:38
- |
-LL | let x: DoubleCell<_> = make_cell(&b);
- | ------------- ^^ borrowed value does not live long enough
- | |
- | type annotation requires that `b` is borrowed for `'static`
-...
-LL | }
- | - `b` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/return-ref-mut-issue-46557.rs b/src/test/ui/nll/return-ref-mut-issue-46557.rs
deleted file mode 100644
index dca61d39d..000000000
--- a/src/test/ui/nll/return-ref-mut-issue-46557.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-// Regression test for issue #46557
-
-fn gimme_static_mut() -> &'static mut u32 {
- let ref mut x = 1234543;
- x //~ ERROR cannot return value referencing temporary value [E0515]
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/return-ref-mut-issue-46557.stderr b/src/test/ui/nll/return-ref-mut-issue-46557.stderr
deleted file mode 100644
index 720440a0a..000000000
--- a/src/test/ui/nll/return-ref-mut-issue-46557.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error[E0515]: cannot return value referencing temporary value
- --> $DIR/return-ref-mut-issue-46557.rs:5:5
- |
-LL | let ref mut x = 1234543;
- | ------- temporary value created here
-LL | x
- | ^ returns a value referencing data owned by the current function
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0515`.
diff --git a/src/test/ui/nll/return_from_loop.rs b/src/test/ui/nll/return_from_loop.rs
deleted file mode 100644
index 495410894..000000000
--- a/src/test/ui/nll/return_from_loop.rs
+++ /dev/null
@@ -1,35 +0,0 @@
-// Basic test for liveness constraints: the region (`R1`) that appears
-// in the type of `p` includes the points after `&v[0]` up to (but not
-// including) the call to `use_x`. The `else` branch is not included.
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-struct MyStruct {
- field: String
-}
-
-fn main() {
-}
-
-fn nll_fail() {
- let mut my_struct = MyStruct { field: format!("Hello") };
-
- let value = &mut my_struct.field;
- loop {
- my_struct.field.push_str("Hello, world!");
- //~^ ERROR [E0499]
- value.len();
- return;
- }
-}
-
-fn nll_ok() {
- let mut my_struct = MyStruct { field: format!("Hello") };
-
- let value = &mut my_struct.field;
- loop {
- my_struct.field.push_str("Hello, world!");
- return;
- }
-}
diff --git a/src/test/ui/nll/return_from_loop.stderr b/src/test/ui/nll/return_from_loop.stderr
deleted file mode 100644
index bd2b8b158..000000000
--- a/src/test/ui/nll/return_from_loop.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0499]: cannot borrow `my_struct.field` as mutable more than once at a time
- --> $DIR/return_from_loop.rs:20:9
- |
-LL | let value = &mut my_struct.field;
- | -------------------- first mutable borrow occurs here
-LL | loop {
-LL | my_struct.field.push_str("Hello, world!");
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
-LL |
-LL | value.len();
- | ----------- first borrow later used here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0499`.
diff --git a/src/test/ui/nll/self-assign-ref-mut.rs b/src/test/ui/nll/self-assign-ref-mut.rs
deleted file mode 100644
index 1ca4cf3a7..000000000
--- a/src/test/ui/nll/self-assign-ref-mut.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Check that `*y` isn't borrowed after `y = y`.
-
-// check-pass
-
-fn main() {
- let mut x = 1;
- {
- let mut y = &mut x;
- y = y;
- y;
- }
- x;
- {
- let mut y = &mut x;
- y = y;
- y = y;
- y;
- }
- x;
-}
diff --git a/src/test/ui/nll/snocat-regression.rs b/src/test/ui/nll/snocat-regression.rs
deleted file mode 100644
index b2e5995aa..000000000
--- a/src/test/ui/nll/snocat-regression.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Regression test from https://github.com/rust-lang/rust/pull/98109
-
-pub fn negotiate<S>(link: S)
-where
- for<'a> &'a S: 'a,
-{
- || {
- //~^ ERROR `S` does not live long enough
- //
- // FIXME(#98437). This regressed at some point and
- // probably should work.
- let _x = link;
- };
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/snocat-regression.stderr b/src/test/ui/nll/snocat-regression.stderr
deleted file mode 100644
index 086898473..000000000
--- a/src/test/ui/nll/snocat-regression.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error: `S` does not live long enough
- --> $DIR/snocat-regression.rs:7:5
- |
-LL | / || {
-LL | |
-LL | | //
-LL | | // FIXME(#98437). This regressed at some point and
-LL | | // probably should work.
-LL | | let _x = link;
-LL | | };
- | |_____^
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/trait-associated-constant.rs b/src/test/ui/nll/trait-associated-constant.rs
deleted file mode 100644
index e13ae80f9..000000000
--- a/src/test/ui/nll/trait-associated-constant.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Test cases where we put various lifetime constraints on trait
-// associated constants.
-
-#![feature(rustc_attrs)]
-
-use std::option::Option;
-
-trait Anything<'a: 'b, 'b> {
- const AC: Option<&'b str>;
-}
-
-struct OKStruct1 { }
-
-impl<'a: 'b, 'b> Anything<'a, 'b> for OKStruct1 {
- const AC: Option<&'b str> = None;
-}
-
-struct FailStruct { }
-
-impl<'a: 'b, 'b, 'c> Anything<'a, 'b> for FailStruct {
- const AC: Option<&'c str> = None;
- //~^ ERROR: const not compatible with trait
-}
-
-struct OKStruct2 { }
-
-impl<'a: 'b, 'b> Anything<'a, 'b> for OKStruct2 {
- const AC: Option<&'a str> = None;
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/trait-associated-constant.stderr b/src/test/ui/nll/trait-associated-constant.stderr
deleted file mode 100644
index cf1c52ba7..000000000
--- a/src/test/ui/nll/trait-associated-constant.stderr
+++ /dev/null
@@ -1,22 +0,0 @@
-error[E0308]: const not compatible with trait
- --> $DIR/trait-associated-constant.rs:21:5
- |
-LL | const AC: Option<&'c str> = None;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected enum `Option<&'b str>`
- found enum `Option<&'c str>`
-note: the lifetime `'c` as defined here...
- --> $DIR/trait-associated-constant.rs:20:18
- |
-LL | impl<'a: 'b, 'b, 'c> Anything<'a, 'b> for FailStruct {
- | ^^
-note: ...does not necessarily outlive the lifetime `'b` as defined here
- --> $DIR/trait-associated-constant.rs:20:14
- |
-LL | impl<'a: 'b, 'b, 'c> Anything<'a, 'b> for FailStruct {
- | ^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/nll/ty-outlives/impl-trait-captures.rs b/src/test/ui/nll/ty-outlives/impl-trait-captures.rs
deleted file mode 100644
index 67b31b8bc..000000000
--- a/src/test/ui/nll/ty-outlives/impl-trait-captures.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-
-trait Foo<'a> {
-}
-
-impl<'a, T> Foo<'a> for T { }
-
-fn foo<'a, T>(x: &T) -> impl Foo<'a> {
- x
- //~^ ERROR captures lifetime that does not appear in bounds
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/impl-trait-captures.stderr b/src/test/ui/nll/ty-outlives/impl-trait-captures.stderr
deleted file mode 100644
index 7b9ed171d..000000000
--- a/src/test/ui/nll/ty-outlives/impl-trait-captures.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error[E0700]: hidden type for `Opaque(DefId(0:13 ~ impl_trait_captures[1afc]::foo::{opaque#0}), [ReEarlyBound(0, 'a), T, ReEarlyBound(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> {
- | -- hidden type `&ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[1afc]::foo::'_), '_)) T` captures the anonymous lifetime defined here
-LL | x
- | ^
- |
-help: to declare that `Opaque(DefId(0:13 ~ impl_trait_captures[1afc]::foo::{opaque#0}), [ReEarlyBound(0, 'a), T, ReEarlyBound(2, 'a)])` captures `ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[1afc]::foo::'_), '_))`, you can add an explicit `ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[1afc]::foo::'_), '_))` lifetime bound
- |
-LL | fn foo<'a, T>(x: &T) -> impl Foo<'a> + ReFree(DefId(0:8 ~ impl_trait_captures[1afc]::foo), BrNamed(DefId(0:12 ~ impl_trait_captures[1afc]::foo::'_), '_)) {
- | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0700`.
diff --git a/src/test/ui/nll/ty-outlives/impl-trait-outlives.rs b/src/test/ui/nll/ty-outlives/impl-trait-outlives.rs
deleted file mode 100644
index 68ccb51fc..000000000
--- a/src/test/ui/nll/ty-outlives/impl-trait-outlives.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-
-use std::fmt::Debug;
-
-fn no_region<'a, T>(x: Box<T>) -> impl Debug + 'a
-where
- T: Debug,
-{
- x
- //~^ ERROR the parameter type `T` may not live long enough [E0309]
-}
-
-fn correct_region<'a, T>(x: Box<T>) -> impl Debug + 'a
-where
- T: 'a + Debug,
-{
- x
-}
-
-fn wrong_region<'a, 'b, T>(x: Box<T>) -> impl Debug + 'a
-where
- T: 'b + Debug,
-{
- x
- //~^ ERROR the parameter type `T` may not live long enough [E0309]
-}
-
-fn outlives_region<'a, 'b, T>(x: Box<T>) -> impl Debug + 'a
-where
- T: 'b + Debug,
- 'b: 'a,
-{
- x
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/impl-trait-outlives.stderr b/src/test/ui/nll/ty-outlives/impl-trait-outlives.stderr
deleted file mode 100644
index 64b08a9b3..000000000
--- a/src/test/ui/nll/ty-outlives/impl-trait-outlives.stderr
+++ /dev/null
@@ -1,25 +0,0 @@
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/impl-trait-outlives.rs:11:5
- |
-LL | x
- | ^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: Debug + 'a,
- | ++++
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/impl-trait-outlives.rs:26:5
- |
-LL | x
- | ^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: 'b + Debug + 'a,
- | ++++
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/issue-53789-1.rs b/src/test/ui/nll/ty-outlives/issue-53789-1.rs
deleted file mode 100644
index a5201d4bb..000000000
--- a/src/test/ui/nll/ty-outlives/issue-53789-1.rs
+++ /dev/null
@@ -1,87 +0,0 @@
-// Regression test for #53789.
-//
-// check-pass
-
-use std::collections::BTreeMap;
-
-trait ValueTree {
- type Value;
-}
-
-trait Strategy {
- type Value: ValueTree;
-}
-
-type StrategyFor<A> = StrategyType<'static, A>;
-type StrategyType<'a, A> = <A as Arbitrary<'a>>::Strategy;
-
-impl<K: ValueTree, V: ValueTree> Strategy for (K, V) {
- type Value = TupleValueTree<(K, V)>;
-}
-
-impl<K: ValueTree, V: ValueTree> ValueTree for TupleValueTree<(K, V)> {
- type Value = BTreeMapValueTree<K, V>;
-}
-
-struct TupleValueTree<T> {
- tree: T,
-}
-
-struct BTreeMapStrategy<K, V>(std::marker::PhantomData<(K, V)>)
-where
- K: Strategy,
- V: Strategy;
-
-struct BTreeMapValueTree<K, V>(std::marker::PhantomData<(K, V)>)
-where
- K: ValueTree,
- V: ValueTree;
-
-impl<K, V> Strategy for BTreeMapStrategy<K, V>
-where
- K: Strategy,
- V: Strategy,
-{
- type Value = BTreeMapValueTree<K::Value, V::Value>;
-}
-
-impl<K, V> ValueTree for BTreeMapValueTree<K, V>
-where
- K: ValueTree,
- V: ValueTree,
-{
- type Value = BTreeMap<K::Value, V::Value>;
-}
-
-trait Arbitrary<'a>: Sized {
- fn arbitrary_with(args: Self::Parameters) -> Self::Strategy;
- type Parameters;
- type Strategy: Strategy<Value = Self::ValueTree>;
- type ValueTree: ValueTree<Value = Self>;
-}
-
-impl<'a, A, B> Arbitrary<'a> for BTreeMap<A, B>
-where
- A: Arbitrary<'static>,
- B: Arbitrary<'static>,
- StrategyFor<A>: 'static,
- StrategyFor<B>: 'static,
-{
- type ValueTree = <Self::Strategy as Strategy>::Value;
- type Parameters = (A::Parameters, B::Parameters);
- type Strategy = BTreeMapStrategy<A::Strategy, B::Strategy>;
- fn arbitrary_with(args: Self::Parameters) -> BTreeMapStrategy<A::Strategy, B::Strategy> {
- let (a, b) = args;
- btree_map(any_with::<A>(a), any_with::<B>(b))
- }
-}
-
-fn btree_map<K: Strategy + 'static, V: Strategy>(key: K, value: V) -> BTreeMapStrategy<K, V> {
- unimplemented!()
-}
-
-fn any_with<'a, A: Arbitrary<'a>>(args: A::Parameters) -> StrategyType<'a, A> {
- unimplemented!()
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/ty-outlives/issue-53789-2.rs b/src/test/ui/nll/ty-outlives/issue-53789-2.rs
deleted file mode 100644
index 5109a0e4a..000000000
--- a/src/test/ui/nll/ty-outlives/issue-53789-2.rs
+++ /dev/null
@@ -1,249 +0,0 @@
-// Regression test for #53789.
-//
-// check-pass
-
-use std::cmp::Ord;
-use std::collections::BTreeMap;
-use std::ops::Range;
-
-macro_rules! valuetree {
- () => {
- type ValueTree = <Self::Strategy as $crate::Strategy>::Value;
- };
-}
-
-macro_rules! product_unpack {
- ($factor: pat) => {
- ($factor,)
- };
- ($($factor: pat),*) => {
- ( $( $factor ),* )
- };
- ($($factor: pat),*,) => {
- ( $( $factor ),* )
- };
-}
-
-macro_rules! product_type {
- ($factor: ty) => {
- ($factor,)
- };
- ($($factor: ty),*) => {
- ( $( $factor, )* )
- };
- ($($factor: ty),*,) => {
- ( $( $factor, )* )
- };
-}
-
-macro_rules! default {
- ($type: ty, $val: expr) => {
- impl Default for $type {
- fn default() -> Self {
- $val.into()
- }
- }
- };
-}
-
-// Pervasive internal sugar
-macro_rules! mapfn {
- ($(#[$meta:meta])* [$($vis:tt)*]
- fn $name:ident[$($gen:tt)*]($parm:ident: $input:ty) -> $output:ty {
- $($body:tt)*
- }) => {
- $(#[$meta])*
- #[derive(Clone, Copy)]
- $($vis)* struct $name;
- impl $($gen)* statics::MapFn<$input> for $name {
- type Output = $output;
- }
- }
-}
-
-macro_rules! opaque_strategy_wrapper {
- ($(#[$smeta:meta])* pub struct $stratname:ident
- [$($sgen:tt)*][$($swhere:tt)*]
- ($innerstrat:ty) -> $stratvtty:ty;
-
- $(#[$vmeta:meta])* pub struct $vtname:ident
- [$($vgen:tt)*][$($vwhere:tt)*]
- ($innervt:ty) -> $actualty:ty;
- ) => {
- $(#[$smeta])* struct $stratname $($sgen)* (std::marker::PhantomData<(K, V)>)
- $($swhere)*;
-
- $(#[$vmeta])* struct $vtname $($vgen)* ($innervt) $($vwhere)*;
-
- impl $($sgen)* Strategy for $stratname $($sgen)* $($swhere)* {
- type Value = $stratvtty;
- }
-
- impl $($vgen)* ValueTree for $vtname $($vgen)* $($vwhere)* {
- type Value = $actualty;
- }
- }
-}
-
-trait ValueTree {
- type Value;
-}
-
-trait Strategy {
- type Value: ValueTree;
-}
-
-#[derive(Clone)]
-struct VecStrategy<T: Strategy> {
- element: T,
- size: Range<usize>,
-}
-
-fn vec<T: Strategy>(element: T, size: Range<usize>) -> VecStrategy<T> {
- VecStrategy { element: element, size: size }
-}
-
-type ValueFor<S> = <<S as Strategy>::Value as ValueTree>::Value;
-
-trait Arbitrary<'a>: Sized {
- fn arbitrary_with(args: Self::Parameters) -> Self::Strategy;
-
- type Parameters: Default;
- type Strategy: Strategy<Value = Self::ValueTree>;
- type ValueTree: ValueTree<Value = Self>;
-}
-
-type StrategyFor<A> = StrategyType<'static, A>;
-type StrategyType<'a, A> = <A as Arbitrary<'a>>::Strategy;
-
-//#[derive(Clone, PartialEq, Eq, Hash, Debug, From, Into)]
-struct SizeBounds(Range<usize>);
-default!(SizeBounds, 0..100);
-
-impl From<Range<usize>> for SizeBounds {
- fn from(high: Range<usize>) -> Self {
- unimplemented!()
- }
-}
-
-impl From<SizeBounds> for Range<usize> {
- fn from(high: SizeBounds) -> Self {
- unimplemented!()
- }
-}
-
-fn any_with<'a, A: Arbitrary<'a>>(args: A::Parameters) -> StrategyType<'a, A> {
- unimplemented!()
-}
-
-impl<K: ValueTree, V: ValueTree> Strategy for (K, V)
-where
- <K as ValueTree>::Value: Ord,
-{
- type Value = TupleValueTree<(K, V)>;
-}
-
-impl<K: ValueTree, V: ValueTree> ValueTree for TupleValueTree<(K, V)>
-where
- <K as ValueTree>::Value: Ord,
-{
- type Value = BTreeMapValueTree<K, V>;
-}
-
-#[derive(Clone)]
-struct VecValueTree<T: ValueTree> {
- elements: Vec<T>,
-}
-
-#[derive(Clone, Copy)]
-struct TupleValueTree<T> {
- tree: T,
-}
-
-opaque_strategy_wrapper! {
- #[derive(Clone)]
- pub struct BTreeMapStrategy[<K, V>]
- [where K : Strategy, V : Strategy, ValueFor<K> : Ord](
- statics::Filter<statics::Map<VecStrategy<(K,V)>,
- VecToBTreeMap>, MinSize>)
- -> BTreeMapValueTree<K::Value, V::Value>;
-
- #[derive(Clone)]
- pub struct BTreeMapValueTree[<K, V>]
- [where K : ValueTree, V : ValueTree, K::Value : Ord](
- statics::Filter<statics::Map<VecValueTree<TupleValueTree<(K, V)>>,
- VecToBTreeMap>, MinSize>)
- -> BTreeMap<K::Value, V::Value>;
-}
-
-type RangedParams2<A, B> = product_type![SizeBounds, A, B];
-
-impl<'a, A, B> Arbitrary<'a> for BTreeMap<A, B>
-where
- A: Arbitrary<'static> + Ord,
- B: Arbitrary<'static>,
- StrategyFor<A>: 'static,
- StrategyFor<B>: 'static,
-{
- valuetree!();
- type Parameters = RangedParams2<A::Parameters, B::Parameters>;
- type Strategy = BTreeMapStrategy<A::Strategy, B::Strategy>;
- fn arbitrary_with(args: Self::Parameters) -> Self::Strategy {
- let product_unpack![range, a, b] = args;
- btree_map(any_with::<A>(a), any_with::<B>(b), range.into())
- }
-}
-
-#[derive(Clone, Copy)]
-struct MinSize(usize);
-
-mapfn! {
- [] fn VecToBTreeMap[<K : Ord, V>]
- (vec: Vec<(K, V)>) -> BTreeMap<K, V>
- {
- vec.into_iter().collect()
- }
-}
-
-fn btree_map<K: Strategy + 'static, V: Strategy + 'static>(
- key: K,
- value: V,
- size: Range<usize>,
-) -> BTreeMapStrategy<K, V>
-where
- ValueFor<K>: Ord,
-{
- unimplemented!()
-}
-
-mod statics {
- pub(super) trait MapFn<T> {
- type Output;
- }
-
- #[derive(Clone)]
- pub struct Filter<S, F> {
- source: S,
- fun: F,
- }
-
- impl<S, F> Filter<S, F> {
- pub fn new(source: S, whence: String, filter: F) -> Self {
- unimplemented!()
- }
- }
-
- #[derive(Clone)]
- pub struct Map<S, F> {
- source: S,
- fun: F,
- }
-
- impl<S, F> Map<S, F> {
- pub fn new(source: S, fun: F) -> Self {
- unimplemented!()
- }
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/issue-55756.rs b/src/test/ui/nll/ty-outlives/issue-55756.rs
deleted file mode 100644
index e1a3bc3c4..000000000
--- a/src/test/ui/nll/ty-outlives/issue-55756.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-// Regression test for #55756.
-//
-// In this test, the result of `self.callee` is a projection `<D as
-// Database<'?0>>::Guard`. As it may contain a destructor, the dropck
-// rules require that this type outlivess the scope of `state`. Unfortunately,
-// our region inference is not smart enough to figure out how to
-// translate a requirement like
-//
-// <D as Database<'0>>::guard: 'r
-//
-// into a requirement that `'0: 'r` -- in particular, it fails to do
-// so because it *also* knows that `<D as Database<'a>>::Guard: 'a`
-// from the trait definition. Faced with so many choices, the current
-// solver opts to do nothing.
-//
-// Fixed by tweaking the solver to recognize that the constraint from
-// the environment duplicates one from the trait.
-//
-// check-pass
-
-#![crate_type="lib"]
-
-pub trait Database<'a> {
- type Guard: 'a;
-}
-
-pub struct Stateful<'a, D: 'a>(&'a D);
-
-impl<'b, D: for <'a> Database<'a>> Stateful<'b, D> {
- pub fn callee<'a>(&'a self) -> <D as Database<'a>>::Guard {
- unimplemented!()
- }
- pub fn caller<'a>(&'a self) -> <D as Database<'a>>::Guard {
- let state = self.callee();
- unimplemented!()
- }
-}
diff --git a/src/test/ui/nll/ty-outlives/projection-body.rs b/src/test/ui/nll/ty-outlives/projection-body.rs
deleted file mode 100644
index b03a539eb..000000000
--- a/src/test/ui/nll/ty-outlives/projection-body.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Test that when we infer the lifetime to a subset of the fn body, it
-// works out.
-//
-// check-pass
-
-trait MyTrait<'a> {
- type Output;
-}
-
-fn foo1<T>()
-where
- for<'x> T: MyTrait<'x>,
-{
- // Here the region `'c` in `<T as MyTrait<'c>>::Output` will be
- // inferred to a subset of the fn body.
- let x = bar::<T::Output>();
- drop(x);
-}
-
-fn bar<'a, T>() -> &'a ()
-where
- T: 'a,
-{
- &()
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-implied-bounds.rs b/src/test/ui/nll/ty-outlives/projection-implied-bounds.rs
deleted file mode 100644
index e1dac0824..000000000
--- a/src/test/ui/nll/ty-outlives/projection-implied-bounds.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Test that we can deduce when projections like `T::Item` outlive the
-// function body. Test that this does not imply that `T: 'a` holds.
-
-// compile-flags:-Zverbose
-
-use std::cell::Cell;
-
-fn twice<F, T>(mut value: T, mut f: F)
-where
- F: FnMut(&T, Cell<&Option<T::Item>>),
- T: Iterator,
-{
- let mut n = value.next();
- f(&value, Cell::new(&n));
- f(&value, Cell::new(&n));
-}
-
-fn generic1<T: Iterator>(value: T) {
- // No error here:
- twice(value, |value_ref, item| invoke1(item));
-}
-
-fn invoke1<'a, T>(x: Cell<&'a Option<T>>)
-where
- T: 'a,
-{
-}
-
-fn generic2<T: Iterator>(value: T) {
- twice(value, |value_ref, item| invoke2(value_ref, item));
- //~^ ERROR the parameter type `T` may not live long enough
-}
-
-fn invoke2<'a, T, U>(a: &T, b: Cell<&'a Option<U>>)
-where
- T: 'a,
-{
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-implied-bounds.stderr b/src/test/ui/nll/ty-outlives/projection-implied-bounds.stderr
deleted file mode 100644
index d949e29b2..000000000
--- a/src/test/ui/nll/ty-outlives/projection-implied-bounds.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0310]: the parameter type `T` may not live long enough
- --> $DIR/projection-implied-bounds.rs:30:36
- |
-LL | twice(value, |value_ref, item| invoke2(value_ref, item));
- | ^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | fn generic2<T: Iterator + 'static>(value: T) {
- | +++++++++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0310`.
diff --git a/src/test/ui/nll/ty-outlives/projection-no-regions-closure.rs b/src/test/ui/nll/ty-outlives/projection-no-regions-closure.rs
deleted file mode 100644
index 2d9c008c7..000000000
--- a/src/test/ui/nll/ty-outlives/projection-no-regions-closure.rs
+++ /dev/null
@@ -1,55 +0,0 @@
-// compile-flags:-Zverbose
-
-// Tests closures that propagate an outlives relationship to their
-// creator where the subject is a projection with no regions (`<T as
-// Iterator>::Item`, to be exact).
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-trait Anything { }
-
-impl<T> Anything for T { }
-
-fn with_signature<'a, T, F>(x: Box<T>, op: F) -> Box<dyn Anything + 'a>
- where F: FnOnce(Box<T>) -> Box<dyn Anything + 'a>
-{
- op(x)
-}
-
-#[rustc_regions]
-fn no_region<'a, T>(x: Box<T>) -> Box<dyn Anything + 'a>
-where
- T: Iterator,
-{
- with_signature(x, |mut y| Box::new(y.next()))
- //~^ ERROR the associated type `<T as Iterator>::Item` may not live long enough
-}
-
-#[rustc_regions]
-fn correct_region<'a, T>(x: Box<T>) -> Box<dyn Anything + 'a>
-where
- T: 'a + Iterator,
-{
- with_signature(x, |mut y| Box::new(y.next()))
-}
-
-#[rustc_regions]
-fn wrong_region<'a, 'b, T>(x: Box<T>) -> Box<dyn Anything + 'a>
-where
- T: 'b + Iterator,
-{
- with_signature(x, |mut y| Box::new(y.next()))
- //~^ ERROR the associated type `<T as Iterator>::Item` may not live long enough
-}
-
-#[rustc_regions]
-fn outlives_region<'a, 'b, T>(x: Box<T>) -> Box<dyn Anything + 'a>
-where
- T: 'b + Iterator,
- 'b: 'a,
-{
- with_signature(x, |mut y| Box::new(y.next()))
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-no-regions-closure.stderr b/src/test/ui/nll/ty-outlives/projection-no-regions-closure.stderr
deleted file mode 100644
index 4933b9348..000000000
--- a/src/test/ui/nll/ty-outlives/projection-no-regions-closure.stderr
+++ /dev/null
@@ -1,118 +0,0 @@
-note: external requirements
- --> $DIR/projection-no-regions-closure.rs:25:23
- |
-LL | with_signature(x, |mut y| Box::new(y.next()))
- | ^^^^^^^
- |
- = note: defining type: no_region::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn Anything + '_#2r)>,
- (),
- ]
- = note: number of external vids: 3
- = note: where <T as std::iter::Iterator>::Item: '_#2r
-
-note: no external requirements
- --> $DIR/projection-no-regions-closure.rs:21:1
- |
-LL | / fn no_region<'a, T>(x: Box<T>) -> Box<dyn Anything + 'a>
-LL | | where
-LL | | T: Iterator,
- | |________________^
- |
- = note: defining type: no_region::<'_#1r, T>
-
-error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough
- --> $DIR/projection-no-regions-closure.rs:25:31
- |
-LL | with_signature(x, |mut y| Box::new(y.next()))
- | ^^^^^^^^^^^^^^^^^^
- |
- = help: consider adding an explicit lifetime bound `<T as Iterator>::Item: 'a`...
- = note: ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds
-
-note: external requirements
- --> $DIR/projection-no-regions-closure.rs:34:23
- |
-LL | with_signature(x, |mut y| Box::new(y.next()))
- | ^^^^^^^
- |
- = note: defining type: correct_region::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn Anything + '_#2r)>,
- (),
- ]
- = note: number of external vids: 3
- = note: where <T as std::iter::Iterator>::Item: '_#2r
-
-note: no external requirements
- --> $DIR/projection-no-regions-closure.rs:30:1
- |
-LL | / fn correct_region<'a, T>(x: Box<T>) -> Box<dyn Anything + 'a>
-LL | | where
-LL | | T: 'a + Iterator,
- | |_____________________^
- |
- = note: defining type: correct_region::<'_#1r, T>
-
-note: external requirements
- --> $DIR/projection-no-regions-closure.rs:42:23
- |
-LL | with_signature(x, |mut y| Box::new(y.next()))
- | ^^^^^^^
- |
- = note: defining type: wrong_region::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn Anything + '_#3r)>,
- (),
- ]
- = note: number of external vids: 4
- = note: where <T as std::iter::Iterator>::Item: '_#3r
-
-note: no external requirements
- --> $DIR/projection-no-regions-closure.rs:38:1
- |
-LL | / fn wrong_region<'a, 'b, T>(x: Box<T>) -> Box<dyn Anything + 'a>
-LL | | where
-LL | | T: 'b + Iterator,
- | |_____________________^
- |
- = note: defining type: wrong_region::<'_#1r, '_#2r, T>
-
-error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough
- --> $DIR/projection-no-regions-closure.rs:42:31
- |
-LL | with_signature(x, |mut y| Box::new(y.next()))
- | ^^^^^^^^^^^^^^^^^^
- |
- = help: consider adding an explicit lifetime bound `<T as Iterator>::Item: 'a`...
- = note: ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds
-
-note: external requirements
- --> $DIR/projection-no-regions-closure.rs:52:23
- |
-LL | with_signature(x, |mut y| Box::new(y.next()))
- | ^^^^^^^
- |
- = note: defining type: outlives_region::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn Anything + '_#3r)>,
- (),
- ]
- = note: number of external vids: 4
- = note: where <T as std::iter::Iterator>::Item: '_#3r
-
-note: no external requirements
- --> $DIR/projection-no-regions-closure.rs:47:1
- |
-LL | / fn outlives_region<'a, 'b, T>(x: Box<T>) -> Box<dyn Anything + 'a>
-LL | | where
-LL | | T: 'b + Iterator,
-LL | | 'b: 'a,
- | |___________^
- |
- = note: defining type: outlives_region::<'_#1r, '_#2r, T>
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/projection-no-regions-fn.rs b/src/test/ui/nll/ty-outlives/projection-no-regions-fn.rs
deleted file mode 100644
index a10a0366a..000000000
--- a/src/test/ui/nll/ty-outlives/projection-no-regions-fn.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-
-trait Anything { }
-
-impl<T> Anything for T { }
-
-fn no_region<'a, T>(mut x: T) -> Box<dyn Anything + 'a>
-where
- T: Iterator,
-{
- Box::new(x.next())
- //~^ ERROR the associated type `<T as Iterator>::Item` may not live long enough
-}
-
-fn correct_region<'a, T>(mut x: T) -> Box<dyn Anything + 'a>
-where
- T: 'a + Iterator,
-{
- Box::new(x.next())
-}
-
-fn wrong_region<'a, 'b, T>(mut x: T) -> Box<dyn Anything + 'a>
-where
- T: 'b + Iterator,
-{
- Box::new(x.next())
- //~^ ERROR the associated type `<T as Iterator>::Item` may not live long enough
-}
-
-fn outlives_region<'a, 'b, T>(mut x: T) -> Box<dyn Anything + 'a>
-where
- T: 'b + Iterator,
- 'b: 'a,
-{
- Box::new(x.next())
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-no-regions-fn.stderr b/src/test/ui/nll/ty-outlives/projection-no-regions-fn.stderr
deleted file mode 100644
index e0ff544fe..000000000
--- a/src/test/ui/nll/ty-outlives/projection-no-regions-fn.stderr
+++ /dev/null
@@ -1,21 +0,0 @@
-error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough
- --> $DIR/projection-no-regions-fn.rs:13:5
- |
-LL | Box::new(x.next())
- | ^^^^^^^^^^^^^^^^^^
- |
- = help: consider adding an explicit lifetime bound `<T as Iterator>::Item: 'a`...
- = note: ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds
-
-error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough
- --> $DIR/projection-no-regions-fn.rs:28:5
- |
-LL | Box::new(x.next())
- | ^^^^^^^^^^^^^^^^^^
- |
- = help: consider adding an explicit lifetime bound `<T as Iterator>::Item: 'a`...
- = note: ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-closure.rs b/src/test/ui/nll/ty-outlives/projection-one-region-closure.rs
deleted file mode 100644
index af361e990..000000000
--- a/src/test/ui/nll/ty-outlives/projection-one-region-closure.rs
+++ /dev/null
@@ -1,83 +0,0 @@
-// Test cases where we constrain `<T as Anything<'b>>::AssocType` to
-// outlive `'a` and there are no bounds in the trait definition of
-// `Anything`. This means that the constraint can only be satisfied in two
-// ways:
-//
-// - by ensuring that `T: 'a` and `'b: 'a`, or
-// - by something in the where clauses.
-//
-// As of this writing, the where clause option does not work because
-// of limitations in our region inferencing system (this is true both
-// with and without NLL). See `projection_outlives`.
-//
-// Ensuring that both `T: 'a` and `'b: 'a` holds does work (`elements_outlive`).
-
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-trait Anything<'a> {
- type AssocType;
-}
-
-fn with_signature<'a, T, F>(cell: Cell<&'a ()>, t: T, op: F)
-where
- F: FnOnce(Cell<&'a ()>, T),
-{
- op(cell, t)
-}
-
-fn require<'a, 'b, T>(_cell: Cell<&'a ()>, _t: T)
-where
- T: Anything<'b>,
- T::AssocType: 'a,
-{
-}
-
-#[rustc_regions]
-fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
- //~^ ERROR the parameter type `T` may not live long enough
- //~| ERROR
-}
-
-#[rustc_regions]
-fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
- 'a: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
- //~^ ERROR the parameter type `T` may not live long enough
- //~| ERROR
-}
-
-#[rustc_regions]
-fn projection_outlives<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
- T::AssocType: 'a,
-{
- // We are projecting `<T as Anything<'b>>::AssocType`, and we know
- // that this outlives `'a` because of the where-clause.
-
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn elements_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
- T: 'a,
- 'b: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr b/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr
deleted file mode 100644
index dbda04c42..000000000
--- a/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr
+++ /dev/null
@@ -1,155 +0,0 @@
-note: external requirements
- --> $DIR/projection-one-region-closure.rs:45:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: no_relationships_late::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
- (),
- ]
- = note: late-bound region is '_#3r
- = note: number of external vids: 4
- = note: where T: '_#2r
- = note: where '_#1r: '_#2r
-
-note: no external requirements
- --> $DIR/projection-one-region-closure.rs:41:1
- |
-LL | / fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
- | |____________________^
- |
- = note: defining type: no_relationships_late::<'_#1r, T>
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/projection-one-region-closure.rs:45:39
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: Anything<'b> + 'a,
- | ++++
-
-error: lifetime may not live long enough
- --> $DIR/projection-one-region-closure.rs:45:39
- |
-LL | fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^^^^^^^^ argument requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-note: external requirements
- --> $DIR/projection-one-region-closure.rs:56:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: no_relationships_early::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
- = note: number of external vids: 4
- = note: where T: '_#3r
- = note: where '_#2r: '_#3r
-
-note: no external requirements
- --> $DIR/projection-one-region-closure.rs:51:1
- |
-LL | / fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
-LL | | 'a: 'a,
- | |___________^
- |
- = note: defining type: no_relationships_early::<'_#1r, '_#2r, T>
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/projection-one-region-closure.rs:56:39
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: Anything<'b> + 'a,
- | ++++
-
-error: lifetime may not live long enough
- --> $DIR/projection-one-region-closure.rs:56:39
- |
-LL | fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^^^^^^^^ argument requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-note: external requirements
- --> $DIR/projection-one-region-closure.rs:70:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: projection_outlives::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
- = note: number of external vids: 4
- = note: where <T as Anything<ReEarlyBound(1, 'b)>>::AssocType: '_#3r
-
-note: no external requirements
- --> $DIR/projection-one-region-closure.rs:62:1
- |
-LL | / fn projection_outlives<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
-LL | | T::AssocType: 'a,
- | |_____________________^
- |
- = note: defining type: projection_outlives::<'_#1r, '_#2r, T>
-
-note: external requirements
- --> $DIR/projection-one-region-closure.rs:80:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: elements_outlive::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
- = note: number of external vids: 4
- = note: where T: '_#3r
- = note: where '_#2r: '_#3r
-
-note: no external requirements
- --> $DIR/projection-one-region-closure.rs:74:1
- |
-LL | / fn elements_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
-LL | | T: 'a,
-LL | | 'b: 'a,
- | |___________^
- |
- = note: defining type: elements_outlive::<'_#1r, '_#2r, T>
-
-error: aborting due to 4 previous errors
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.rs b/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.rs
deleted file mode 100644
index 6f8513491..000000000
--- a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.rs
+++ /dev/null
@@ -1,84 +0,0 @@
-// Test cases where we constrain `<T as Anything<'b>>::AssocType` to
-// outlive `'a` and there is a unique bound in the trait definition of
-// `Anything` -- i.e., we know that `AssocType` outlives `'b`. In this
-// case, the best way to satisfy the trait bound is to show that `'b:
-// 'a`, which can be done in various ways.
-
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-trait Anything<'a> {
- type AssocType: 'a;
-}
-
-fn with_signature<'a, T, F>(cell: Cell<&'a ()>, t: T, op: F)
-where
- F: FnOnce(Cell<&'a ()>, T),
-{
- op(cell, t)
-}
-
-fn require<'a, 'b, T>(_cell: Cell<&'a ()>, _t: T)
-where
- T: Anything<'b>,
- T::AssocType: 'a,
-{
-}
-
-#[rustc_regions]
-fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
- //~^ ERROR
-}
-
-#[rustc_regions]
-fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
- 'a: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
- //~^ ERROR
-}
-
-#[rustc_regions]
-fn projection_outlives<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
- T::AssocType: 'a,
-{
- // We are projecting `<T as Anything<'b>>::AssocType`, and we know
- // that this outlives `'a` because of the where-clause.
-
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn elements_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
- 'b: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn one_region<'a, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'a>,
-{
- // Note that in this case the closure still propagates an external
- // requirement between two variables in its signature, but the
- // creator maps both those two region variables to `'a` on its
- // side.
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr b/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr
deleted file mode 100644
index 250c796e2..000000000
--- a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr
+++ /dev/null
@@ -1,152 +0,0 @@
-note: external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:37:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: no_relationships_late::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
- (),
- ]
- = note: late-bound region is '_#3r
- = note: number of external vids: 4
- = note: where '_#1r: '_#2r
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:33:1
- |
-LL | / fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
- | |____________________^
- |
- = note: defining type: no_relationships_late::<'_#1r, T>
-
-error: lifetime may not live long enough
- --> $DIR/projection-one-region-trait-bound-closure.rs:37:39
- |
-LL | fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^^^^^^^^ argument requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-note: external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:47:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: no_relationships_early::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
- = note: number of external vids: 4
- = note: where '_#2r: '_#3r
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:42:1
- |
-LL | / fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
-LL | | 'a: 'a,
- | |___________^
- |
- = note: defining type: no_relationships_early::<'_#1r, '_#2r, T>
-
-error: lifetime may not live long enough
- --> $DIR/projection-one-region-trait-bound-closure.rs:47:39
- |
-LL | fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^^^^^^^^ argument requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-note: external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:60:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: projection_outlives::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
- = note: number of external vids: 4
- = note: where <T as Anything<ReEarlyBound(1, 'b)>>::AssocType: '_#3r
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:52:1
- |
-LL | / fn projection_outlives<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
-LL | | T::AssocType: 'a,
- | |_____________________^
- |
- = note: defining type: projection_outlives::<'_#1r, '_#2r, T>
-
-note: external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:69:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: elements_outlive::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
- = note: number of external vids: 4
- = note: where '_#2r: '_#3r
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:64:1
- |
-LL | / fn elements_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
-LL | | 'b: 'a,
- | |___________^
- |
- = note: defining type: elements_outlive::<'_#1r, '_#2r, T>
-
-note: external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:81:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: one_region::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
- (),
- ]
- = note: number of external vids: 3
- = note: where '_#1r: '_#2r
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-closure.rs:73:1
- |
-LL | / fn one_region<'a, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'a>,
- | |____________________^
- |
- = note: defining type: one_region::<'_#1r, T>
-
-error: aborting due to 2 previous errors
-
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-static-closure.rs b/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-static-closure.rs
deleted file mode 100644
index 7c0a3bc72..000000000
--- a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-static-closure.rs
+++ /dev/null
@@ -1,88 +0,0 @@
-// Test cases where we constrain `<T as Anything<'b>>::AssocType` to
-// outlive `'static`. In this case, we don't get any errors, and in fact
-// we don't even propagate constraints from the closures to the callers.
-
-// compile-flags:-Zverbose
-// check-pass
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-trait Anything<'a> {
- type AssocType: 'static;
-}
-
-fn with_signature<'a, T, F>(cell: Cell<&'a ()>, t: T, op: F)
-where
- F: FnOnce(Cell<&'a ()>, T),
-{
- op(cell, t)
-}
-
-fn require<'a, 'b, T>(_cell: Cell<&'a ()>, _t: T)
-where
- T: Anything<'b>,
- T::AssocType: 'a,
-{
-}
-
-#[rustc_regions]
-fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
- 'a: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn projection_outlives<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
- T::AssocType: 'a,
-{
- // This error is unfortunate. This code ought to type-check: we
- // are projecting `<T as Anything<'b>>::AssocType`, and we know
- // that this outlives `'a` because of the where-clause. However,
- // the way the region checker works, we don't register this
- // outlives obligation, and hence we get an error: this is because
- // what we see is a projection like `<T as
- // Anything<'?0>>::AssocType`, and we don't yet know if `?0` will
- // equal `'b` or not, so we ignore the where-clause. Obviously we
- // can do better here with a more involved verification step.
-
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn elements_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b>,
- 'b: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn one_region<'a, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'a>,
-{
- // Note that in this case the closure still propagates an external
- // requirement between two variables in its signature, but the
- // creator maps both those two region variables to `'a` on its
- // side.
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-static-closure.stderr b/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-static-closure.stderr
deleted file mode 100644
index b27186b05..000000000
--- a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-static-closure.stderr
+++ /dev/null
@@ -1,114 +0,0 @@
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:36:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: no_relationships_late::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
- (),
- ]
- = note: late-bound region is '_#3r
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:32:1
- |
-LL | / fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
- | |____________________^
- |
- = note: defining type: no_relationships_late::<'_#1r, T>
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:45:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: no_relationships_early::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:40:1
- |
-LL | / fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
-LL | | 'a: 'a,
- | |___________^
- |
- = note: defining type: no_relationships_early::<'_#1r, '_#2r, T>
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:64:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: projection_outlives::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:49:1
- |
-LL | / fn projection_outlives<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
-LL | | T::AssocType: 'a,
- | |_____________________^
- |
- = note: defining type: projection_outlives::<'_#1r, '_#2r, T>
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:73:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: elements_outlive::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:68:1
- |
-LL | / fn elements_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b>,
-LL | | 'b: 'a,
- | |___________^
- |
- = note: defining type: elements_outlive::<'_#1r, '_#2r, T>
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:85:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: one_region::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
- (),
- ]
-
-note: no external requirements
- --> $DIR/projection-one-region-trait-bound-static-closure.rs:77:1
- |
-LL | / fn one_region<'a, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'a>,
- | |____________________^
- |
- = note: defining type: one_region::<'_#1r, T>
-
diff --git a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs
deleted file mode 100644
index 7b4a3c03a..000000000
--- a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs
+++ /dev/null
@@ -1,112 +0,0 @@
-// Test cases where we constrain `<T as Anything<'a, 'b>>::AssocType`
-// to outlive `'a` and there are two bounds in the trait definition of
-// `Anything` -- i.e., we know that `AssocType` outlives `'a` and
-// `'b`. In this case, it's not clear what is the best way to satisfy
-// the trait bound, and hence we propagate it to the caller as a type
-// test.
-
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-trait Anything<'a, 'b> {
- type AssocType: 'a + 'b;
-}
-
-fn with_signature<'a, T, F>(cell: Cell<&'a ()>, t: T, op: F)
-where
- F: FnOnce(Cell<&'a ()>, T),
-{
- op(cell, t)
-}
-
-fn require<'a, 'b, 'c, T>(_cell: Cell<&'a ()>, _t: T)
-where
- T: Anything<'b, 'c>,
- T::AssocType: 'a,
-{
-}
-
-#[rustc_regions]
-fn no_relationships_late<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b, 'c>,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
- //~^ ERROR may not live long enough
-}
-
-#[rustc_regions]
-fn no_relationships_early<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b, 'c>,
- 'a: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
- //~^ ERROR may not live long enough
-}
-
-#[rustc_regions]
-fn projection_outlives<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b, 'c>,
- T::AssocType: 'a,
-{
- // We are projecting `<T as Anything<'b>>::AssocType`, and we know
- // that this outlives `'a` because of the where-clause.
-
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn elements_outlive1<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b, 'c>,
- 'b: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn elements_outlive2<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b, 'c>,
- 'c: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn two_regions<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b, 'b>,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
- //~^ ERROR lifetime may not live long enough
-}
-
-#[rustc_regions]
-fn two_regions_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'b, 'b>,
- 'b: 'a,
-{
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-#[rustc_regions]
-fn one_region<'a, T>(cell: Cell<&'a ()>, t: T)
-where
- T: Anything<'a, 'a>,
-{
- // Note that in this case the closure still propagates an external
- // requirement between two variables in its signature, but the
- // creator maps both those two region variables to `'a` on its
- // side.
- with_signature(cell, t, |cell, t| require(cell, t));
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr
deleted file mode 100644
index 90f049142..000000000
--- a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr
+++ /dev/null
@@ -1,236 +0,0 @@
-note: external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:38:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: no_relationships_late::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
- = note: late-bound region is '_#4r
- = note: number of external vids: 5
- = note: where <T as Anything<ReEarlyBound(0, 'b), ReEarlyBound(1, 'c)>>::AssocType: '_#3r
-
-note: no external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:34:1
- |
-LL | / fn no_relationships_late<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b, 'c>,
- | |________________________^
- |
- = note: defining type: no_relationships_late::<'_#1r, '_#2r, T>
-
-error[E0309]: the associated type `<T as Anything<ReEarlyBound(0, 'b), ReEarlyBound(1, 'c)>>::AssocType` may not live long enough
- --> $DIR/projection-two-region-trait-bound-closure.rs:38:39
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^^^^^^^^
- |
- = help: consider adding an explicit lifetime bound `<T as Anything<ReEarlyBound(0, 'b), ReEarlyBound(1, 'c)>>::AssocType: 'a`...
- = note: ...so that the type `<T as Anything<ReEarlyBound(0, 'b), ReEarlyBound(1, 'c)>>::AssocType` will meet its required lifetime bounds
-
-note: external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:48:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: no_relationships_early::<'_#1r, '_#2r, '_#3r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#4r ()>, T)),
- (),
- ]
- = note: number of external vids: 5
- = note: where <T as Anything<ReEarlyBound(1, 'b), ReEarlyBound(2, 'c)>>::AssocType: '_#4r
-
-note: no external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:43:1
- |
-LL | / fn no_relationships_early<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b, 'c>,
-LL | | 'a: 'a,
- | |___________^
- |
- = note: defining type: no_relationships_early::<'_#1r, '_#2r, '_#3r, T>
-
-error[E0309]: the associated type `<T as Anything<ReEarlyBound(1, 'b), ReEarlyBound(2, 'c)>>::AssocType` may not live long enough
- --> $DIR/projection-two-region-trait-bound-closure.rs:48:39
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^^^^^^^^
- |
- = help: consider adding an explicit lifetime bound `<T as Anything<ReEarlyBound(1, 'b), ReEarlyBound(2, 'c)>>::AssocType: 'a`...
- = note: ...so that the type `<T as Anything<ReEarlyBound(1, 'b), ReEarlyBound(2, 'c)>>::AssocType` will meet its required lifetime bounds
-
-note: external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:61:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: projection_outlives::<'_#1r, '_#2r, '_#3r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#4r ()>, T)),
- (),
- ]
- = note: number of external vids: 5
- = note: where <T as Anything<ReEarlyBound(1, 'b), ReEarlyBound(2, 'c)>>::AssocType: '_#4r
-
-note: no external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:53:1
- |
-LL | / fn projection_outlives<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b, 'c>,
-LL | | T::AssocType: 'a,
- | |_____________________^
- |
- = note: defining type: projection_outlives::<'_#1r, '_#2r, '_#3r, T>
-
-note: external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:70:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: elements_outlive1::<'_#1r, '_#2r, '_#3r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#4r ()>, T)),
- (),
- ]
- = note: number of external vids: 5
- = note: where <T as Anything<ReEarlyBound(1, 'b), ReEarlyBound(2, 'c)>>::AssocType: '_#4r
-
-note: no external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:65:1
- |
-LL | / fn elements_outlive1<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b, 'c>,
-LL | | 'b: 'a,
- | |___________^
- |
- = note: defining type: elements_outlive1::<'_#1r, '_#2r, '_#3r, T>
-
-note: external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:79:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: elements_outlive2::<'_#1r, '_#2r, '_#3r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#4r ()>, T)),
- (),
- ]
- = note: number of external vids: 5
- = note: where <T as Anything<ReEarlyBound(1, 'b), ReEarlyBound(2, 'c)>>::AssocType: '_#4r
-
-note: no external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:74:1
- |
-LL | / fn elements_outlive2<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b, 'c>,
-LL | | 'c: 'a,
- | |___________^
- |
- = note: defining type: elements_outlive2::<'_#1r, '_#2r, '_#3r, T>
-
-note: external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:87:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: two_regions::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
- (),
- ]
- = note: late-bound region is '_#3r
- = note: number of external vids: 4
- = note: where <T as Anything<ReEarlyBound(0, 'b), ReEarlyBound(0, 'b)>>::AssocType: '_#2r
-
-note: no external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:83:1
- |
-LL | / fn two_regions<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b, 'b>,
- | |________________________^
- |
- = note: defining type: two_regions::<'_#1r, T>
-
-error: lifetime may not live long enough
- --> $DIR/projection-two-region-trait-bound-closure.rs:87:5
- |
-LL | fn two_regions<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ argument requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
- = note: requirement occurs because of the type `Cell<&'_#8r ()>`, which makes the generic argument `&'_#8r ()` invariant
- = note: the struct `Cell<T>` is invariant over the parameter `T`
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-note: external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:97:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: two_regions_outlive::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
- = note: number of external vids: 4
- = note: where <T as Anything<ReEarlyBound(1, 'b), ReEarlyBound(1, 'b)>>::AssocType: '_#3r
-
-note: no external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:92:1
- |
-LL | / fn two_regions_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'b, 'b>,
-LL | | 'b: 'a,
- | |___________^
- |
- = note: defining type: two_regions_outlive::<'_#1r, '_#2r, T>
-
-note: external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:109:29
- |
-LL | with_signature(cell, t, |cell, t| require(cell, t));
- | ^^^^^^^^^
- |
- = note: defining type: one_region::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
- (),
- ]
- = note: number of external vids: 3
- = note: where <T as Anything<ReEarlyBound(0, 'a), ReEarlyBound(0, 'a)>>::AssocType: '_#2r
-
-note: no external requirements
- --> $DIR/projection-two-region-trait-bound-closure.rs:101:1
- |
-LL | / fn one_region<'a, T>(cell: Cell<&'a ()>, t: T)
-LL | | where
-LL | | T: Anything<'a, 'a>,
- | |________________________^
- |
- = note: defining type: one_region::<'_#1r, T>
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-bound.rs b/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-bound.rs
deleted file mode 100644
index dce88b88c..000000000
--- a/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-bound.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Test that we are able to establish that `<T as
-// MyTrait<'a>>::Output` outlives `'b` here. We need to prove however
-// that `<T as MyTrait<'a>>::Output` outlives `'a`, so we also have to
-// prove that `'b: 'a`.
-
-trait MyTrait<'a> {
- type Output;
-}
-
-fn foo1<'a, 'b, T>() -> &'a ()
-where
- T: MyTrait<'a>,
- <T as MyTrait<'a>>::Output: 'b,
-{
- bar::<T::Output>() //~ ERROR may not live long enough
-}
-
-fn foo2<'a, 'b, T>() -> &'a ()
-where
- T: MyTrait<'a>,
- <T as MyTrait<'a>>::Output: 'b,
- 'b: 'a,
-{
- bar::<T::Output>() // OK
-}
-
-fn bar<'a, T>() -> &'a ()
-where
- T: 'a,
-{
- &()
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-bound.stderr b/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-bound.stderr
deleted file mode 100644
index b4435fe06..000000000
--- a/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-bound.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0309]: the associated type `<T as MyTrait<'_>>::Output` may not live long enough
- --> $DIR/projection-where-clause-env-wrong-bound.rs:15:5
- |
-LL | bar::<T::Output>()
- | ^^^^^^^^^^^^^^^^
- |
- = help: consider adding an explicit lifetime bound `<T as MyTrait<'_>>::Output: 'a`...
- = note: ...so that the type `<T as MyTrait<'_>>::Output` will meet its required lifetime bounds
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-lifetime.rs b/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-lifetime.rs
deleted file mode 100644
index 987148dce..000000000
--- a/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-lifetime.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Test that if we need to prove that `<T as MyTrait<'a>>::Output:
-// 'a`, but we only know that `<T as MyTrait<'b>>::Output: 'a`, that
-// doesn't suffice.
-
-trait MyTrait<'a> {
- type Output;
-}
-
-fn foo1<'a, 'b, T>() -> &'a ()
-where
- for<'x> T: MyTrait<'x>,
- <T as MyTrait<'b>>::Output: 'a,
-{
- bar::<<T as MyTrait<'a>>::Output>()
- //~^ ERROR the associated type `<T as MyTrait<'_>>::Output` may not live long enough
-}
-
-fn bar<'a, T>() -> &'a ()
-where
- T: 'a,
-{
- &()
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-lifetime.stderr b/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-lifetime.stderr
deleted file mode 100644
index ddeaf3c1f..000000000
--- a/src/test/ui/nll/ty-outlives/projection-where-clause-env-wrong-lifetime.stderr
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0309]: the associated type `<T as MyTrait<'_>>::Output` may not live long enough
- --> $DIR/projection-where-clause-env-wrong-lifetime.rs:14:5
- |
-LL | bar::<<T as MyTrait<'a>>::Output>()
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = help: consider adding an explicit lifetime bound `<T as MyTrait<'_>>::Output: 'a`...
- = note: ...so that the type `<T as MyTrait<'_>>::Output` will meet its required lifetime bounds
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/projection-where-clause-env.rs b/src/test/ui/nll/ty-outlives/projection-where-clause-env.rs
deleted file mode 100644
index a41116232..000000000
--- a/src/test/ui/nll/ty-outlives/projection-where-clause-env.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Test that when we have a `<T as MyTrait<'a>>::Output: 'a`
-// relationship in the environment we take advantage of it. In this
-// case, that means we **don't** have to prove that `T: 'a`.
-//
-// Regression test for #53121.
-//
-// check-pass
-
-trait MyTrait<'a> {
- type Output;
-}
-
-fn foo<'a, T>() -> &'a ()
-where
- T: MyTrait<'a>,
- <T as MyTrait<'a>>::Output: 'a,
-{
- bar::<T::Output>()
-}
-
-fn bar<'a, T>() -> &'a ()
-where
- T: 'a,
-{
- &()
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-where-clause-none.rs b/src/test/ui/nll/ty-outlives/projection-where-clause-none.rs
deleted file mode 100644
index bb201e5c0..000000000
--- a/src/test/ui/nll/ty-outlives/projection-where-clause-none.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Test that we are NOT able to establish that `<T as
-// MyTrait<'a>>::Output: 'a` outlives `'a` here -- we have only one
-// recourse, which is to prove that `T: 'a` and `'a: 'a`, but we don't
-// know that `T: 'a`.
-
-trait MyTrait<'a> {
- type Output;
-}
-
-fn foo<'a, T>() -> &'a ()
-where
- T: MyTrait<'a>,
-{
- bar::<T::Output>() //~ ERROR the parameter type `T` may not live long enough
-}
-
-fn bar<'a, T>() -> &'a ()
-where
- T: 'a,
-{
- &()
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/projection-where-clause-none.stderr b/src/test/ui/nll/ty-outlives/projection-where-clause-none.stderr
deleted file mode 100644
index 0df44644d..000000000
--- a/src/test/ui/nll/ty-outlives/projection-where-clause-none.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/projection-where-clause-none.rs:14:5
- |
-LL | bar::<T::Output>()
- | ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: MyTrait<'a> + 'a,
- | ++++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/projection-where-clause-trait.rs b/src/test/ui/nll/ty-outlives/projection-where-clause-trait.rs
deleted file mode 100644
index 1a40d3b4c..000000000
--- a/src/test/ui/nll/ty-outlives/projection-where-clause-trait.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Test that we are able to establish that `<T as
-// MyTrait<'a>>::Output: 'a` outlives `'a` (because the trait says
-// so).
-//
-// check-pass
-
-trait MyTrait<'a> {
- type Output: 'a;
-}
-
-fn foo<'a, T>() -> &'a ()
-where
- T: MyTrait<'a>,
-{
- bar::<T::Output>()
-}
-
-fn bar<'a, T>() -> &'a ()
-where
- T: 'a,
-{
- &()
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/ty-param-closure-approximate-lower-bound.rs b/src/test/ui/nll/ty-outlives/ty-param-closure-approximate-lower-bound.rs
deleted file mode 100644
index 4d8380599..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-closure-approximate-lower-bound.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-// Invoke in such a way that the callee knows:
-//
-// - 'a: 'x
-//
-// and it must prove that `T: 'x`. Callee passes along `T: 'a`.
-fn twice<'a, F, T>(v: Cell<&'a ()>, value: T, mut f: F)
-where
- F: for<'x> FnMut(Option<Cell<&'a &'x ()>>, &T),
-{
- f(None, &value);
- f(None, &value);
-}
-
-#[rustc_regions]
-fn generic<T>(value: T) {
- let cell = Cell::new(&());
- twice(cell, value, |a, b| invoke(a, b));
-}
-
-#[rustc_regions]
-fn generic_fail<'a, T>(cell: Cell<&'a ()>, value: T) {
- twice(cell, value, |a, b| invoke(a, b));
- //~^ ERROR the parameter type `T` may not live long enough
-}
-
-fn invoke<'a, 'x, T>(x: Option<Cell<&'x &'a ()>>, y: &T)
-where
- T: 'x,
-{
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/ty-param-closure-approximate-lower-bound.stderr b/src/test/ui/nll/ty-outlives/ty-param-closure-approximate-lower-bound.stderr
deleted file mode 100644
index a442cf12d..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-closure-approximate-lower-bound.stderr
+++ /dev/null
@@ -1,59 +0,0 @@
-note: external requirements
- --> $DIR/ty-param-closure-approximate-lower-bound.rs:24:24
- |
-LL | twice(cell, value, |a, b| invoke(a, b));
- | ^^^^^^
- |
- = note: defining type: generic::<T>::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((std::option::Option<std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) ()>>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) T)),
- (),
- ]
- = note: number of external vids: 2
- = note: where T: '_#1r
-
-note: no external requirements
- --> $DIR/ty-param-closure-approximate-lower-bound.rs:22:1
- |
-LL | fn generic<T>(value: T) {
- | ^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: generic::<T>
-
-note: external requirements
- --> $DIR/ty-param-closure-approximate-lower-bound.rs:29:24
- |
-LL | twice(cell, value, |a, b| invoke(a, b));
- | ^^^^^^
- |
- = note: defining type: generic_fail::<T>::{closure#0} with closure substs [
- i16,
- for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((std::option::Option<std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) ()>>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) T)),
- (),
- ]
- = note: late-bound region is '_#2r
- = note: number of external vids: 3
- = note: where T: '_#1r
-
-note: no external requirements
- --> $DIR/ty-param-closure-approximate-lower-bound.rs:28:1
- |
-LL | fn generic_fail<'a, T>(cell: Cell<&'a ()>, value: T) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: generic_fail::<T>
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/ty-param-closure-approximate-lower-bound.rs:29:31
- |
-LL | twice(cell, value, |a, b| invoke(a, b));
- | ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | fn generic_fail<'a, T: 'a>(cell: Cell<&'a ()>, value: T) {
- | ++++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-return-type.rs b/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-return-type.rs
deleted file mode 100644
index 4343c3aee..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-return-type.rs
+++ /dev/null
@@ -1,53 +0,0 @@
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-use std::fmt::Debug;
-
-fn with_signature<'a, T, F>(x: Box<T>, op: F) -> Box<dyn Debug + 'a>
- where F: FnOnce(Box<T>) -> Box<dyn Debug + 'a>
-{
- op(x)
-}
-
-#[rustc_regions]
-fn no_region<'a, T>(x: Box<T>) -> Box<dyn Debug + 'a>
-where
- T: Debug,
-{
- // Here, the closure winds up being required to prove that `T:
- // 'a`. In principle, it could know that, except that it is
- // type-checked in a fully generic way, and hence it winds up with
- // a propagated requirement that `T: '_#2`, where `'_#2` appears
- // in the return type. The caller makes the mapping from `'_#2` to
- // `'a` (and subsequently reports an error).
-
- with_signature(x, |y| y)
- //~^ ERROR the parameter type `T` may not live long enough
-}
-
-fn correct_region<'a, T>(x: Box<T>) -> Box<Debug + 'a>
-where
- T: 'a + Debug,
-{
- x
-}
-
-fn wrong_region<'a, 'b, T>(x: Box<T>) -> Box<Debug + 'a>
-where
- T: 'b + Debug,
-{
- x
- //~^ ERROR the parameter type `T` may not live long enough
-}
-
-fn outlives_region<'a, 'b, T>(x: Box<T>) -> Box<Debug + 'a>
-where
- T: 'b + Debug,
- 'b: 'a,
-{
- x
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-return-type.stderr b/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-return-type.stderr
deleted file mode 100644
index 35979c8bf..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-return-type.stderr
+++ /dev/null
@@ -1,49 +0,0 @@
-note: external requirements
- --> $DIR/ty-param-closure-outlives-from-return-type.rs:26:23
- |
-LL | with_signature(x, |y| y)
- | ^^^
- |
- = note: defining type: no_region::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn std::fmt::Debug + '_#2r)>,
- (),
- ]
- = note: number of external vids: 3
- = note: where T: '_#2r
-
-note: no external requirements
- --> $DIR/ty-param-closure-outlives-from-return-type.rs:15:1
- |
-LL | / fn no_region<'a, T>(x: Box<T>) -> Box<dyn Debug + 'a>
-LL | | where
-LL | | T: Debug,
- | |_____________^
- |
- = note: defining type: no_region::<'_#1r, T>
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/ty-param-closure-outlives-from-return-type.rs:26:27
- |
-LL | with_signature(x, |y| y)
- | ^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: Debug + 'a,
- | ++++
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/ty-param-closure-outlives-from-return-type.rs:41:5
- |
-LL | x
- | ^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: 'b + Debug + 'a,
- | ++++
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-where-clause.rs b/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-where-clause.rs
deleted file mode 100644
index b80287610..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-where-clause.rs
+++ /dev/null
@@ -1,82 +0,0 @@
-// Test that we can propagate `T: 'a` obligations to our caller. See
-// `correct_region` for an explanation of how this test is setup; it's
-// somewhat intricate.
-
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-use std::cell::Cell;
-
-fn with_signature<'a, T, F>(a: Cell<&'a ()>, b: T, op: F)
-where
- F: FnOnce(Cell<&'a ()>, T),
-{
- op(a, b)
-}
-
-fn require<'a, T>(_a: &Cell<&'a ()>, _b: &T)
-where
- T: 'a,
-{
-}
-
-#[rustc_regions]
-fn no_region<'a, T>(a: Cell<&'a ()>, b: T) {
- with_signature(a, b, |x, y| {
- // See `correct_region`, which explains the point of this
- // test. The only difference is that, in the case of this
- // function, there is no where clause *anywhere*, and hence we
- // get an error (but reported by the closure creator).
- require(&x, &y)
- //~^ ERROR the parameter type `T` may not live long enough
- })
-}
-
-#[rustc_regions]
-fn correct_region<'a, T>(a: Cell<&'a ()>, b: T)
-where
- T: 'a,
-{
- with_signature(a, b, |x, y| {
- // Key point of this test:
- //
- // The *closure* is being type-checked with all of its free
- // regions "universalized". In particular, it does not know
- // that `x` has the type `Cell<&'a ()>`, but rather treats it
- // as if the type of `x` is `Cell<&'A ()>`, where `'A` is some
- // fresh, independent region distinct from the `'a` which
- // appears in the environment. The call to `require` here
- // forces us then to prove that `T: 'A`, but the closure
- // cannot do it on its own. It has to surface this requirement
- // to its creator (which knows that `'a == 'A`).
- require(&x, &y)
- })
-}
-
-#[rustc_regions]
-fn wrong_region<'a, 'b, T>(a: Cell<&'a ()>, b: T)
-where
- T: 'b,
-{
- with_signature(a, b, |x, y| {
- // See `correct_region`
- require(&x, &y)
- //~^ ERROR the parameter type `T` may not live long enough
- })
-}
-
-#[rustc_regions]
-fn outlives_region<'a, 'b, T>(a: Cell<&'a ()>, b: T)
-where
- T: 'b,
- 'b: 'a,
-{
- with_signature(a, b, |x, y| {
- // See `correct_region`
- require(&x, &y)
- })
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-where-clause.stderr b/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-where-clause.stderr
deleted file mode 100644
index 4c97db58c..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-closure-outlives-from-where-clause.stderr
+++ /dev/null
@@ -1,122 +0,0 @@
-note: external requirements
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:27:26
- |
-LL | with_signature(a, b, |x, y| {
- | ^^^^^^
- |
- = note: defining type: no_region::<T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#1r ()>, T)),
- (),
- ]
- = note: late-bound region is '_#2r
- = note: number of external vids: 3
- = note: where T: '_#1r
-
-note: no external requirements
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:26:1
- |
-LL | fn no_region<'a, T>(a: Cell<&'a ()>, b: T) {
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: defining type: no_region::<T>
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:32:9
- |
-LL | require(&x, &y)
- | ^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | fn no_region<'a, T: 'a>(a: Cell<&'a ()>, b: T) {
- | ++++
-
-note: external requirements
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:42:26
- |
-LL | with_signature(a, b, |x, y| {
- | ^^^^^^
- |
- = note: defining type: correct_region::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
- (),
- ]
- = note: number of external vids: 3
- = note: where T: '_#2r
-
-note: no external requirements
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:38:1
- |
-LL | / fn correct_region<'a, T>(a: Cell<&'a ()>, b: T)
-LL | | where
-LL | | T: 'a,
- | |__________^
- |
- = note: defining type: correct_region::<'_#1r, T>
-
-note: external requirements
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:63:26
- |
-LL | with_signature(a, b, |x, y| {
- | ^^^^^^
- |
- = note: defining type: wrong_region::<'_#1r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
- (),
- ]
- = note: late-bound region is '_#3r
- = note: number of external vids: 4
- = note: where T: '_#2r
-
-note: no external requirements
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:59:1
- |
-LL | / fn wrong_region<'a, 'b, T>(a: Cell<&'a ()>, b: T)
-LL | | where
-LL | | T: 'b,
- | |__________^
- |
- = note: defining type: wrong_region::<'_#1r, T>
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:65:9
- |
-LL | require(&x, &y)
- | ^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: 'b + 'a,
- | ++++
-
-note: external requirements
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:76:26
- |
-LL | with_signature(a, b, |x, y| {
- | ^^^^^^
- |
- = note: defining type: outlives_region::<'_#1r, '_#2r, T>::{closure#0} with closure substs [
- i32,
- extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
- (),
- ]
- = note: number of external vids: 4
- = note: where T: '_#3r
-
-note: no external requirements
- --> $DIR/ty-param-closure-outlives-from-where-clause.rs:71:1
- |
-LL | / fn outlives_region<'a, 'b, T>(a: Cell<&'a ()>, b: T)
-LL | | where
-LL | | T: 'b,
-LL | | 'b: 'a,
- | |___________^
- |
- = note: defining type: outlives_region::<'_#1r, '_#2r, T>
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/ty-param-fn-body.rs b/src/test/ui/nll/ty-outlives/ty-param-fn-body.rs
deleted file mode 100644
index 98239f416..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-fn-body.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Test that we assume that universal types like `T` outlive the
-// function body.
-
-#![allow(warnings)]
-
-use std::cell::Cell;
-
-// No errors here, because `'a` is local to the body.
-fn region_within_body<T>(t: T) {
- let some_int = 22;
- let cell = Cell::new(&some_int);
- outlives(cell, t)
-}
-
-// Error here, because T: 'a is not satisfied.
-fn region_static<'a, T>(cell: Cell<&'a usize>, t: T) {
- outlives(cell, t)
- //~^ ERROR the parameter type `T` may not live long enough
-}
-
-fn outlives<'a, T>(x: Cell<&'a usize>, y: T)
-where
- T: 'a,
-{
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/ty-param-fn-body.stderr b/src/test/ui/nll/ty-outlives/ty-param-fn-body.stderr
deleted file mode 100644
index 5fb69255d..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-fn-body.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/ty-param-fn-body.rs:17:5
- |
-LL | outlives(cell, t)
- | ^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | fn region_static<'a, T: 'a>(cell: Cell<&'a usize>, t: T) {
- | ++++
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/ty-param-fn.rs b/src/test/ui/nll/ty-outlives/ty-param-fn.rs
deleted file mode 100644
index 4393a3b41..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-fn.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-#![allow(warnings)]
-
-use std::fmt::Debug;
-
-fn no_region<'a, T>(x: Box<T>) -> Box<Debug + 'a>
-where
- T: Debug,
-{
- x
- //~^ ERROR the parameter type `T` may not live long enough
-}
-
-fn correct_region<'a, T>(x: Box<T>) -> Box<Debug + 'a>
-where
- T: 'a + Debug,
-{
- x
-}
-
-fn wrong_region<'a, 'b, T>(x: Box<T>) -> Box<Debug + 'a>
-where
- T: 'b + Debug,
-{
- x
- //~^ ERROR the parameter type `T` may not live long enough
-}
-
-fn outlives_region<'a, 'b, T>(x: Box<T>) -> Box<Debug + 'a>
-where
- T: 'b + Debug,
- 'b: 'a,
-{
- x
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/ty-param-fn.stderr b/src/test/ui/nll/ty-outlives/ty-param-fn.stderr
deleted file mode 100644
index 825b26d2f..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-fn.stderr
+++ /dev/null
@@ -1,25 +0,0 @@
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/ty-param-fn.rs:9:5
- |
-LL | x
- | ^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: Debug + 'a,
- | ++++
-
-error[E0309]: the parameter type `T` may not live long enough
- --> $DIR/ty-param-fn.rs:24:5
- |
-LL | x
- | ^ ...so that the type `T` will meet its required lifetime bounds
- |
-help: consider adding an explicit lifetime bound...
- |
-LL | T: 'b + Debug + 'a,
- | ++++
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0309`.
diff --git a/src/test/ui/nll/ty-outlives/ty-param-implied-bounds.rs b/src/test/ui/nll/ty-outlives/ty-param-implied-bounds.rs
deleted file mode 100644
index 9042844e8..000000000
--- a/src/test/ui/nll/ty-outlives/ty-param-implied-bounds.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// compile-flags:-Zverbose
-// check-pass
-
-// Test that we assume that universal types like `T` outlive the
-// function body.
-
-use std::cell::Cell;
-
-fn twice<F, T>(value: T, mut f: F)
-where
- F: FnMut(Cell<&T>),
-{
- f(Cell::new(&value));
- f(Cell::new(&value));
-}
-
-fn generic<T>(value: T) {
- // No error here:
- twice(value, |r| invoke(r));
-}
-
-fn invoke<'a, T>(x: Cell<&'a T>)
-where
- T: 'a,
-{
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/wf-unreachable.rs b/src/test/ui/nll/ty-outlives/wf-unreachable.rs
deleted file mode 100644
index c6f4c4afa..000000000
--- a/src/test/ui/nll/ty-outlives/wf-unreachable.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-// Test that we check that user type annotations are well-formed, even in dead
-// code.
-
-fn uninit<'a>() {
- return;
- let x: &'static &'a (); //~ ERROR lifetime may not live long enough
-}
-
-fn var_type<'a>() {
- return;
- let x: &'static &'a () = &&(); //~ ERROR lifetime may not live long enough
-}
-
-fn uninit_infer<'a>() {
- let x: &'static &'a _; //~ ERROR lifetime may not live long enough
- x = && ();
-}
-
-fn infer<'a>() {
- return;
- let x: &'static &'a _ = &&(); //~ ERROR lifetime may not live long enough
-}
-
-fn uninit_no_var<'a>() {
- return;
- let _: &'static &'a (); //~ ERROR lifetime may not live long enough
-}
-
-fn no_var<'a>() {
- return;
- let _: &'static &'a () = &&(); //~ ERROR lifetime may not live long enough
-}
-
-fn infer_no_var<'a>() {
- return;
- let _: &'static &'a _ = &&(); //~ ERROR lifetime may not live long enough
-}
-
-trait X<'a, 'b> {}
-
-struct C<'a, 'b, T: X<'a, 'b>>(T, &'a (), &'b ());
-
-impl X<'_, '_> for i32 {}
-impl<'a> X<'a, 'a> for () {}
-
-// This type annotation is not well-formed because we substitute `()` for `_`.
-fn required_substs<'a>() {
- return;
- let _: C<'static, 'a, _> = C((), &(), &()); //~ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/ty-outlives/wf-unreachable.stderr b/src/test/ui/nll/ty-outlives/wf-unreachable.stderr
deleted file mode 100644
index a62157f44..000000000
--- a/src/test/ui/nll/ty-outlives/wf-unreachable.stderr
+++ /dev/null
@@ -1,73 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/wf-unreachable.rs:6:12
- |
-LL | fn uninit<'a>() {
- | -- lifetime `'a` defined here
-LL | return;
-LL | let x: &'static &'a ();
- | ^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/wf-unreachable.rs:11:12
- |
-LL | fn var_type<'a>() {
- | -- lifetime `'a` defined here
-LL | return;
-LL | let x: &'static &'a () = &&();
- | ^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/wf-unreachable.rs:15:12
- |
-LL | fn uninit_infer<'a>() {
- | -- lifetime `'a` defined here
-LL | let x: &'static &'a _;
- | ^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/wf-unreachable.rs:21:12
- |
-LL | fn infer<'a>() {
- | -- lifetime `'a` defined here
-LL | return;
-LL | let x: &'static &'a _ = &&();
- | ^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/wf-unreachable.rs:26:12
- |
-LL | fn uninit_no_var<'a>() {
- | -- lifetime `'a` defined here
-LL | return;
-LL | let _: &'static &'a ();
- | ^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/wf-unreachable.rs:31:12
- |
-LL | fn no_var<'a>() {
- | -- lifetime `'a` defined here
-LL | return;
-LL | let _: &'static &'a () = &&();
- | ^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/wf-unreachable.rs:36:12
- |
-LL | fn infer_no_var<'a>() {
- | -- lifetime `'a` defined here
-LL | return;
-LL | let _: &'static &'a _ = &&();
- | ^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/wf-unreachable.rs:49:12
- |
-LL | fn required_substs<'a>() {
- | -- lifetime `'a` defined here
-LL | return;
-LL | let _: C<'static, 'a, _> = C((), &(), &());
- | ^^^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: aborting due to 8 previous errors
-
diff --git a/src/test/ui/nll/type-alias-free-regions.rs b/src/test/ui/nll/type-alias-free-regions.rs
deleted file mode 100644
index fd5566f35..000000000
--- a/src/test/ui/nll/type-alias-free-regions.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Test that we don't assume that type aliases have the same type parameters
-// as the type they alias and then panic when we see this.
-
-type A<'a> = &'a isize;
-type B<'a> = Box<A<'a>>;
-
-struct C<'a> {
- f: Box<B<'a>>
-}
-
-trait FromBox<'a> {
- fn from_box(b: Box<B>) -> Self;
-}
-
-impl<'a> FromBox<'a> for C<'a> {
- fn from_box(b: Box<B>) -> Self {
- C { f: b } //~ ERROR
- }
-}
-
-trait FromTuple<'a> {
- fn from_tuple( b: (B,)) -> Self;
-}
-
-impl<'a> FromTuple<'a> for C<'a> {
- fn from_tuple(b: (B,)) -> Self {
- C { f: Box::new(b.0) } //~ ERROR
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/type-alias-free-regions.stderr b/src/test/ui/nll/type-alias-free-regions.stderr
deleted file mode 100644
index 45fd5a2f1..000000000
--- a/src/test/ui/nll/type-alias-free-regions.stderr
+++ /dev/null
@@ -1,22 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/type-alias-free-regions.rs:17:9
- |
-LL | impl<'a> FromBox<'a> for C<'a> {
- | -- lifetime `'a` defined here
-LL | fn from_box(b: Box<B>) -> Self {
- | - has type `Box<Box<&'1 isize>>`
-LL | C { f: b }
- | ^^^^^^^^^^ associated function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1`
-
-error: lifetime may not live long enough
- --> $DIR/type-alias-free-regions.rs:27:9
- |
-LL | impl<'a> FromTuple<'a> for C<'a> {
- | -- lifetime `'a` defined here
-LL | fn from_tuple(b: (B,)) -> Self {
- | - has type `(Box<&'1 isize>,)`
-LL | C { f: Box::new(b.0) }
- | ^^^^^^^^^^^^^^^^^^^^^^ associated function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1`
-
-error: aborting due to 2 previous errors
-
diff --git a/src/test/ui/nll/type-check-pointer-coercions.rs b/src/test/ui/nll/type-check-pointer-coercions.rs
deleted file mode 100644
index 66da57248..000000000
--- a/src/test/ui/nll/type-check-pointer-coercions.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-fn shared_to_const<'a, 'b>(x: &&'a i32) -> *const &'b i32 {
- x //~ ERROR
-}
-
-fn unique_to_const<'a, 'b>(x: &mut &'a i32) -> *const &'b i32 {
- x //~ ERROR
-}
-
-fn unique_to_mut<'a, 'b>(x: &mut &'a i32) -> *mut &'b i32 {
- // Two errors because *mut is invariant
- x //~ ERROR
- //~| ERROR
-}
-
-fn mut_to_const<'a, 'b>(x: *mut &'a i32) -> *const &'b i32 {
- x //~ ERROR
-}
-
-fn array_elem<'a, 'b>(x: &'a i32) -> *const &'b i32 {
- let z = &[x; 3];
- let y = z as *const &i32;
- y //~ ERROR
-}
-
-fn array_coerce<'a, 'b>(x: &'a i32) -> *const [&'b i32; 3] {
- let z = &[x; 3];
- let y = z as *const [&i32; 3];
- y //~ ERROR
-}
-
-fn nested_array<'a, 'b>(x: &'a i32) -> *const [&'b i32; 2] {
- let z = &[[x; 2]; 3];
- let y = z as *const [&i32; 2];
- y //~ ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/type-check-pointer-coercions.stderr b/src/test/ui/nll/type-check-pointer-coercions.stderr
deleted file mode 100644
index ef2d92878..000000000
--- a/src/test/ui/nll/type-check-pointer-coercions.stderr
+++ /dev/null
@@ -1,111 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-coercions.rs:2:5
- |
-LL | fn shared_to_const<'a, 'b>(x: &&'a i32) -> *const &'b i32 {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | x
- | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-coercions.rs:6:5
- |
-LL | fn unique_to_const<'a, 'b>(x: &mut &'a i32) -> *const &'b i32 {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | x
- | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-coercions.rs:11:5
- |
-LL | fn unique_to_mut<'a, 'b>(x: &mut &'a i32) -> *mut &'b i32 {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | // Two errors because *mut is invariant
-LL | x
- | ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
- |
- = help: consider adding the following bound: `'b: 'a`
- = note: requirement occurs because of a mutable pointer to `&i32`
- = note: mutable pointers are invariant over their type parameter
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-coercions.rs:11:5
- |
-LL | fn unique_to_mut<'a, 'b>(x: &mut &'a i32) -> *mut &'b i32 {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | // Two errors because *mut is invariant
-LL | x
- | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
- = note: requirement occurs because of a mutable pointer to `&i32`
- = note: mutable pointers are invariant over their type parameter
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-help: `'b` and `'a` must be the same: replace one with the other
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-coercions.rs:16:5
- |
-LL | fn mut_to_const<'a, 'b>(x: *mut &'a i32) -> *const &'b i32 {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | x
- | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-coercions.rs:22:5
- |
-LL | fn array_elem<'a, 'b>(x: &'a i32) -> *const &'b i32 {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | y
- | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-coercions.rs:28:5
- |
-LL | fn array_coerce<'a, 'b>(x: &'a i32) -> *const [&'b i32; 3] {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | y
- | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-coercions.rs:34:5
- |
-LL | fn nested_array<'a, 'b>(x: &'a i32) -> *const [&'b i32; 2] {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-...
-LL | y
- | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: aborting due to 8 previous errors
-
diff --git a/src/test/ui/nll/type-check-pointer-comparisons.rs b/src/test/ui/nll/type-check-pointer-comparisons.rs
deleted file mode 100644
index 7b0ffeaef..000000000
--- a/src/test/ui/nll/type-check-pointer-comparisons.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Check that we assert that pointers have a common subtype for comparisons
-
-fn compare_const<'a, 'b>(x: *const &mut &'a i32, y: *const &mut &'b i32) {
- x == y;
- //~^ ERROR lifetime may not live long enough
- //~| ERROR lifetime may not live long enough
-}
-
-fn compare_mut<'a, 'b>(x: *mut &'a i32, y: *mut &'b i32) {
- x == y;
- //~^ ERROR lifetime may not live long enough
- //~| ERROR lifetime may not live long enough
-}
-
-fn compare_fn_ptr<'a, 'b, 'c>(f: fn(&'c mut &'a i32), g: fn(&'c mut &'b i32)) {
- f == g;
- //~^ ERROR lifetime may not live long enough
- //~| ERROR lifetime may not live long enough
-}
-
-fn compare_hr_fn_ptr<'a>(f: fn(&'a i32), g: fn(&i32)) {
- // Ideally this should compile with the operands swapped as well, but HIR
- // type checking prevents it (and stops compilation) for now.
- f == g; // OK
-}
-
-fn compare_const_fn_ptr<'a>(f: *const fn(&'a i32), g: *const fn(&i32)) {
- f == g; // OK
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/type-check-pointer-comparisons.stderr b/src/test/ui/nll/type-check-pointer-comparisons.stderr
deleted file mode 100644
index 0d8480a42..000000000
--- a/src/test/ui/nll/type-check-pointer-comparisons.stderr
+++ /dev/null
@@ -1,98 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-comparisons.rs:4:5
- |
-LL | fn compare_const<'a, 'b>(x: *const &mut &'a i32, y: *const &mut &'b i32) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | x == y;
- | ^ requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
- = note: requirement occurs because of a mutable reference to `&i32`
- = note: mutable references are invariant over their type parameter
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-comparisons.rs:4:10
- |
-LL | fn compare_const<'a, 'b>(x: *const &mut &'a i32, y: *const &mut &'b i32) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | x == y;
- | ^ requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
- = note: requirement occurs because of a mutable reference to `&i32`
- = note: mutable references are invariant over their type parameter
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-help: `'a` and `'b` must be the same: replace one with the other
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-comparisons.rs:10:5
- |
-LL | fn compare_mut<'a, 'b>(x: *mut &'a i32, y: *mut &'b i32) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | x == y;
- | ^ requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
- = note: requirement occurs because of a mutable pointer to `&i32`
- = note: mutable pointers are invariant over their type parameter
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-comparisons.rs:10:10
- |
-LL | fn compare_mut<'a, 'b>(x: *mut &'a i32, y: *mut &'b i32) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | x == y;
- | ^ requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
- = note: requirement occurs because of a mutable pointer to `&i32`
- = note: mutable pointers are invariant over their type parameter
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-help: `'a` and `'b` must be the same: replace one with the other
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-comparisons.rs:16:5
- |
-LL | fn compare_fn_ptr<'a, 'b, 'c>(f: fn(&'c mut &'a i32), g: fn(&'c mut &'b i32)) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | f == g;
- | ^ requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
- = note: requirement occurs because of a mutable reference to `&i32`
- = note: mutable references are invariant over their type parameter
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-error: lifetime may not live long enough
- --> $DIR/type-check-pointer-comparisons.rs:16:10
- |
-LL | fn compare_fn_ptr<'a, 'b, 'c>(f: fn(&'c mut &'a i32), g: fn(&'c mut &'b i32)) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | f == g;
- | ^ requires that `'b` must outlive `'a`
- |
- = help: consider adding the following bound: `'b: 'a`
- = note: requirement occurs because of a mutable reference to `&i32`
- = note: mutable references are invariant over their type parameter
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-help: `'a` and `'b` must be the same: replace one with the other
-
-error: aborting due to 6 previous errors
-
diff --git a/src/test/ui/nll/type-test-universe.rs b/src/test/ui/nll/type-test-universe.rs
deleted file mode 100644
index f9801c07d..000000000
--- a/src/test/ui/nll/type-test-universe.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Regression test for #98095: make sure that
-// we detect that S needs to outlive 'static.
-
-fn outlives_forall<T>()
-where
- for<'u> T: 'u,
-{
-}
-
-fn test1<S>() {
- outlives_forall::<S>();
- //~^ ERROR `S` does not live long enough
-}
-
-struct Value<'a>(&'a ());
-fn test2<'a>() {
- outlives_forall::<Value<'a>>();
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/type-test-universe.stderr b/src/test/ui/nll/type-test-universe.stderr
deleted file mode 100644
index 31e17d64b..000000000
--- a/src/test/ui/nll/type-test-universe.stderr
+++ /dev/null
@@ -1,22 +0,0 @@
-error: `S` does not live long enough
- --> $DIR/type-test-universe.rs:11:5
- |
-LL | outlives_forall::<S>();
- | ^^^^^^^^^^^^^^^^^^^^^^
-
-error: lifetime may not live long enough
- --> $DIR/type-test-universe.rs:17:5
- |
-LL | fn test2<'a>() {
- | -- lifetime `'a` defined here
-LL | outlives_forall::<Value<'a>>();
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ requires that `'a` must outlive `'static`
- |
-note: due to current limitations in the borrow checker, this implies a `'static` lifetime
- --> $DIR/type-test-universe.rs:6:16
- |
-LL | for<'u> T: 'u,
- | ^^
-
-error: aborting due to 2 previous errors
-
diff --git a/src/test/ui/nll/unused-mut-issue-50343.fixed b/src/test/ui/nll/unused-mut-issue-50343.fixed
deleted file mode 100644
index 5632de1cd..000000000
--- a/src/test/ui/nll/unused-mut-issue-50343.fixed
+++ /dev/null
@@ -1,9 +0,0 @@
-// run-rustfix
-
-#![deny(unused_mut)]
-#![allow(unused_variables)] // for rustfix
-
-fn main() {
- vec![(42, 22)].iter().map(|(x, _y)| ()).count();
- //~^ ERROR: variable does not need to be mutable
-}
diff --git a/src/test/ui/nll/unused-mut-issue-50343.rs b/src/test/ui/nll/unused-mut-issue-50343.rs
deleted file mode 100644
index c849ac8c7..000000000
--- a/src/test/ui/nll/unused-mut-issue-50343.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-// run-rustfix
-
-#![deny(unused_mut)]
-#![allow(unused_variables)] // for rustfix
-
-fn main() {
- vec![(42, 22)].iter().map(|(mut x, _y)| ()).count();
- //~^ ERROR: variable does not need to be mutable
-}
diff --git a/src/test/ui/nll/unused-mut-issue-50343.stderr b/src/test/ui/nll/unused-mut-issue-50343.stderr
deleted file mode 100644
index cb02d7620..000000000
--- a/src/test/ui/nll/unused-mut-issue-50343.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error: variable does not need to be mutable
- --> $DIR/unused-mut-issue-50343.rs:7:33
- |
-LL | vec![(42, 22)].iter().map(|(mut x, _y)| ()).count();
- | ----^
- | |
- | help: remove this `mut`
- |
-note: the lint level is defined here
- --> $DIR/unused-mut-issue-50343.rs:3:9
- |
-LL | #![deny(unused_mut)]
- | ^^^^^^^^^^
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/user-annotations/adt-brace-enums.rs b/src/test/ui/nll/user-annotations/adt-brace-enums.rs
deleted file mode 100644
index 0d9828342..000000000
--- a/src/test/ui/nll/user-annotations/adt-brace-enums.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-enum SomeEnum<T> {
- SomeVariant { t: T }
-}
-
-fn no_annot() {
- let c = 66;
- SomeEnum::SomeVariant { t: &c };
-}
-
-fn annot_underscore() {
- let c = 66;
- SomeEnum::SomeVariant::<_> { t: &c };
-}
-
-fn annot_reference_any_lifetime() {
- let c = 66;
- SomeEnum::SomeVariant::<&u32> { t: &c };
-}
-
-fn annot_reference_static_lifetime() {
- let c = 66;
- SomeEnum::SomeVariant::<&'static u32> { t: &c }; //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let c = 66;
- SomeEnum::SomeVariant::<&'a u32> { t: &c }; //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
- SomeEnum::SomeVariant::<&'a u32> { t: c };
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let _closure = || {
- let c = 66;
- SomeEnum::SomeVariant::<&'a u32> { t: &c }; //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
- let _closure = || {
- SomeEnum::SomeVariant::<&'a u32> { t: c };
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/adt-brace-enums.stderr b/src/test/ui/nll/user-annotations/adt-brace-enums.stderr
deleted file mode 100644
index 253e38251..000000000
--- a/src/test/ui/nll/user-annotations/adt-brace-enums.stderr
+++ /dev/null
@@ -1,42 +0,0 @@
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-brace-enums.rs:25:48
- |
-LL | SomeEnum::SomeVariant::<&'static u32> { t: &c };
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'static`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-brace-enums.rs:30:43
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-LL | let c = 66;
-LL | SomeEnum::SomeVariant::<&'a u32> { t: &c };
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'a`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-brace-enums.rs:40:47
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | SomeEnum::SomeVariant::<&'a u32> { t: &c };
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'a`
-LL | };
- | - `c` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/adt-brace-structs.rs b/src/test/ui/nll/user-annotations/adt-brace-structs.rs
deleted file mode 100644
index bdbfd87d5..000000000
--- a/src/test/ui/nll/user-annotations/adt-brace-structs.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-struct SomeStruct<T> { t: T }
-
-fn no_annot() {
- let c = 66;
- SomeStruct { t: &c };
-}
-
-fn annot_underscore() {
- let c = 66;
- SomeStruct::<_> { t: &c };
-}
-
-fn annot_reference_any_lifetime() {
- let c = 66;
- SomeStruct::<&u32> { t: &c };
-}
-
-fn annot_reference_static_lifetime() {
- let c = 66;
- SomeStruct::<&'static u32> { t: &c }; //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let c = 66;
- SomeStruct::<&'a u32> { t: &c }; //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
- SomeStruct::<&'a u32> { t: c };
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let _closure = || {
- let c = 66;
- SomeStruct::<&'a u32> { t: &c }; //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
- let _closure = || {
- SomeStruct::<&'a u32> { t: c };
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/adt-brace-structs.stderr b/src/test/ui/nll/user-annotations/adt-brace-structs.stderr
deleted file mode 100644
index 8b9d1705d..000000000
--- a/src/test/ui/nll/user-annotations/adt-brace-structs.stderr
+++ /dev/null
@@ -1,42 +0,0 @@
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-brace-structs.rs:23:37
- |
-LL | SomeStruct::<&'static u32> { t: &c };
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'static`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-brace-structs.rs:28:32
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-LL | let c = 66;
-LL | SomeStruct::<&'a u32> { t: &c };
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'a`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-brace-structs.rs:38:36
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | SomeStruct::<&'a u32> { t: &c };
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'a`
-LL | };
- | - `c` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/adt-nullary-enums.rs b/src/test/ui/nll/user-annotations/adt-nullary-enums.rs
deleted file mode 100644
index 53853668d..000000000
--- a/src/test/ui/nll/user-annotations/adt-nullary-enums.rs
+++ /dev/null
@@ -1,69 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-#![allow(warnings)]
-
-use std::cell::Cell;
-
-enum SomeEnum<T> {
- SomeVariant(T),
- SomeOtherVariant,
-}
-
-fn combine<T>(_: T, _: T) { }
-
-fn no_annot() {
- let c = 66;
- combine(SomeEnum::SomeVariant(Cell::new(&c)), SomeEnum::SomeOtherVariant);
-}
-
-fn annot_underscore() {
- let c = 66;
- combine(SomeEnum::SomeVariant(Cell::new(&c)), SomeEnum::SomeOtherVariant::<Cell<_>>);
-}
-
-fn annot_reference_any_lifetime() {
- let c = 66;
- combine(SomeEnum::SomeVariant(Cell::new(&c)), SomeEnum::SomeOtherVariant::<Cell<&u32>>);
-}
-
-fn annot_reference_static_lifetime() {
- let c = 66;
- combine(
- SomeEnum::SomeVariant(Cell::new(&c)), //~ ERROR
- SomeEnum::SomeOtherVariant::<Cell<&'static u32>>,
- );
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let c = 66;
- combine(
- SomeEnum::SomeVariant(Cell::new(&c)), //~ ERROR
- SomeEnum::SomeOtherVariant::<Cell<&'a u32>>,
- );
-}
-
-fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
- combine(SomeEnum::SomeVariant(Cell::new(c)), SomeEnum::SomeOtherVariant::<Cell<&'a u32>>);
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let _closure = || {
- let c = 66;
- combine(
- SomeEnum::SomeVariant(Cell::new(&c)), //~ ERROR
- SomeEnum::SomeOtherVariant::<Cell<&'a u32>>,
- );
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
- let _closure = || {
- combine(
- SomeEnum::SomeVariant(Cell::new(c)),
- SomeEnum::SomeOtherVariant::<Cell<&'a u32>>,
- );
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/adt-nullary-enums.stderr b/src/test/ui/nll/user-annotations/adt-nullary-enums.stderr
deleted file mode 100644
index 3326fa521..000000000
--- a/src/test/ui/nll/user-annotations/adt-nullary-enums.stderr
+++ /dev/null
@@ -1,45 +0,0 @@
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-nullary-enums.rs:33:41
- |
-LL | / combine(
-LL | | SomeEnum::SomeVariant(Cell::new(&c)),
- | | ^^ borrowed value does not live long enough
-LL | | SomeEnum::SomeOtherVariant::<Cell<&'static u32>>,
-LL | | );
- | |_____- argument requires that `c` is borrowed for `'static`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-nullary-enums.rs:41:41
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | SomeEnum::SomeVariant(Cell::new(&c)),
- | ----------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-...
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-nullary-enums.rs:54:45
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | SomeEnum::SomeVariant(Cell::new(&c)),
- | ----------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-...
-LL | };
- | - `c` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/adt-tuple-enums.rs b/src/test/ui/nll/user-annotations/adt-tuple-enums.rs
deleted file mode 100644
index efe8dfda1..000000000
--- a/src/test/ui/nll/user-annotations/adt-tuple-enums.rs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-#![allow(warnings)]
-
-enum SomeEnum<T> {
- SomeVariant(T),
- SomeOtherVariant,
-}
-
-fn no_annot() {
- let c = 66;
- SomeEnum::SomeVariant(&c);
-}
-
-fn annot_underscore() {
- let c = 66;
- SomeEnum::SomeVariant::<_>(&c);
-}
-
-fn annot_reference_any_lifetime() {
- let c = 66;
- SomeEnum::SomeVariant::<&u32>(&c);
-}
-
-fn annot_reference_static_lifetime() {
- let c = 66;
- SomeEnum::SomeVariant::<&'static u32>(&c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let c = 66;
- SomeEnum::SomeVariant::<&'a u32>(&c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
- SomeEnum::SomeVariant::<&'a u32>(c);
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let _closure = || {
- let c = 66;
- SomeEnum::SomeVariant::<&'a u32>(&c); //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
- let _closure = || {
- SomeEnum::SomeVariant::<&'a u32>(c);
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/adt-tuple-enums.stderr b/src/test/ui/nll/user-annotations/adt-tuple-enums.stderr
deleted file mode 100644
index 2fa704263..000000000
--- a/src/test/ui/nll/user-annotations/adt-tuple-enums.stderr
+++ /dev/null
@@ -1,42 +0,0 @@
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-enums.rs:28:43
- |
-LL | SomeEnum::SomeVariant::<&'static u32>(&c);
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'static`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-enums.rs:33:38
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-LL | let c = 66;
-LL | SomeEnum::SomeVariant::<&'a u32>(&c);
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'a`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-enums.rs:43:42
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | SomeEnum::SomeVariant::<&'a u32>(&c);
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'a`
-LL | };
- | - `c` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/adt-tuple-struct-calls.rs b/src/test/ui/nll/user-annotations/adt-tuple-struct-calls.rs
deleted file mode 100644
index 116583223..000000000
--- a/src/test/ui/nll/user-annotations/adt-tuple-struct-calls.rs
+++ /dev/null
@@ -1,71 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-struct SomeStruct<T>(T);
-
-fn no_annot() {
- let c = 66;
- let f = SomeStruct;
- f(&c);
-}
-
-fn annot_underscore() {
- let c = 66;
- let f = SomeStruct::<_>;
- f(&c);
-}
-
-fn annot_reference_any_lifetime() {
- let c = 66;
- let f = SomeStruct::<&u32>;
- f(&c);
-}
-
-fn annot_reference_static_lifetime() {
- let c = 66;
- let f = SomeStruct::<&'static u32>;
- f(&c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let c = 66;
- let f = SomeStruct::<&'a u32>;
- f(&c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
- let f = SomeStruct::<&'a u32>;
- f(c);
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let _closure = || {
- let c = 66;
- let f = SomeStruct::<&'a u32>;
- f(&c); //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_across_closure<'a>(_: &'a u32) {
- let f = SomeStruct::<&'a u32>;
- let _closure = || {
- let c = 66;
- f(&c); //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
- let _closure = || {
- let f = SomeStruct::<&'a u32>;
- f(c);
- };
-}
-
-fn annot_reference_named_lifetime_across_closure_ok<'a>(c: &'a u32) {
- let f = SomeStruct::<&'a u32>;
- let _closure = || {
- f(c);
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/adt-tuple-struct-calls.stderr b/src/test/ui/nll/user-annotations/adt-tuple-struct-calls.stderr
deleted file mode 100644
index 9664fb9f5..000000000
--- a/src/test/ui/nll/user-annotations/adt-tuple-struct-calls.stderr
+++ /dev/null
@@ -1,56 +0,0 @@
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-struct-calls.rs:27:7
- |
-LL | f(&c);
- | --^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'static`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-struct-calls.rs:33:7
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | f(&c);
- | --^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-struct-calls.rs:45:11
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | f(&c);
- | --^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-LL | };
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-struct-calls.rs:53:11
- |
-LL | let f = SomeStruct::<&'a u32>;
- | - lifetime `'1` appears in the type of `f`
-...
-LL | f(&c);
- | --^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'1`
-LL | };
- | - `c` dropped here while still borrowed
-
-error: aborting due to 4 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/adt-tuple-struct.rs b/src/test/ui/nll/user-annotations/adt-tuple-struct.rs
deleted file mode 100644
index 37284e1fd..000000000
--- a/src/test/ui/nll/user-annotations/adt-tuple-struct.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-struct SomeStruct<T>(T);
-
-fn no_annot() {
- let c = 66;
- SomeStruct(&c);
-}
-
-fn annot_underscore() {
- let c = 66;
- SomeStruct::<_>(&c);
-}
-
-fn annot_reference_any_lifetime() {
- let c = 66;
- SomeStruct::<&u32>(&c);
-}
-
-fn annot_reference_static_lifetime() {
- let c = 66;
- SomeStruct::<&'static u32>(&c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let c = 66;
- SomeStruct::<&'a u32>(&c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
- SomeStruct::<&'a u32>(c);
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let _closure = || {
- let c = 66;
- SomeStruct::<&'a u32>(&c); //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
- let _closure = || {
- SomeStruct::<&'a u32>(c);
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/adt-tuple-struct.stderr b/src/test/ui/nll/user-annotations/adt-tuple-struct.stderr
deleted file mode 100644
index 76b525225..000000000
--- a/src/test/ui/nll/user-annotations/adt-tuple-struct.stderr
+++ /dev/null
@@ -1,42 +0,0 @@
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-struct.rs:23:32
- |
-LL | SomeStruct::<&'static u32>(&c);
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'static`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-struct.rs:28:27
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-LL | let c = 66;
-LL | SomeStruct::<&'a u32>(&c);
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'a`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/adt-tuple-struct.rs:38:31
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | SomeStruct::<&'a u32>(&c);
- | ^^
- | |
- | borrowed value does not live long enough
- | this usage requires that `c` is borrowed for `'a`
-LL | };
- | - `c` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/ascribed-type-wf.rs b/src/test/ui/nll/user-annotations/ascribed-type-wf.rs
deleted file mode 100644
index 14460dea5..000000000
--- a/src/test/ui/nll/user-annotations/ascribed-type-wf.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// check-pass
-// known-bug: #101350
-
-trait Trait {
- type Ty;
-}
-
-impl Trait for &'static () {
- type Ty = ();
-}
-
-fn extend<'a>() {
- None::<<&'a () as Trait>::Ty>;
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/cast_static_lifetime.rs b/src/test/ui/nll/user-annotations/cast_static_lifetime.rs
deleted file mode 100644
index bb6129dac..000000000
--- a/src/test/ui/nll/user-annotations/cast_static_lifetime.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-#![allow(warnings)]
-
-fn main() {
- let x = 22_u32;
- let y: &u32 = (&x) as &'static u32; //~ ERROR `x` does not live long enough
-}
diff --git a/src/test/ui/nll/user-annotations/cast_static_lifetime.stderr b/src/test/ui/nll/user-annotations/cast_static_lifetime.stderr
deleted file mode 100644
index 4599d04e7..000000000
--- a/src/test/ui/nll/user-annotations/cast_static_lifetime.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0597]: `x` does not live long enough
- --> $DIR/cast_static_lifetime.rs:5:19
- |
-LL | let y: &u32 = (&x) as &'static u32;
- | ^^^^----------------
- | |
- | borrowed value does not live long enough
- | type annotation requires that `x` is borrowed for `'static`
-LL | }
- | - `x` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/closure-substs.polonius.stderr b/src/test/ui/nll/user-annotations/closure-substs.polonius.stderr
deleted file mode 100644
index af159a6cd..000000000
--- a/src/test/ui/nll/user-annotations/closure-substs.polonius.stderr
+++ /dev/null
@@ -1,61 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/closure-substs.rs:8:16
- |
-LL | fn foo<'a>() {
- | -- lifetime `'a` defined here
-...
-LL | return x;
- | ^ returning this value requires that `'a` must outlive `'static`
- |
- = help: consider replacing `'a` with `'static`
-
-error: lifetime may not live long enough
- --> $DIR/closure-substs.rs:15:16
- |
-LL | |x: &i32| -> &'static i32 {
- | - let's call the lifetime of this reference `'1`
-LL | return x;
- | ^ returning this value requires that `'1` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/closure-substs.rs:15:16
- |
-LL | |x: &i32| -> &'static i32 {
- | - - let's call the lifetime of this reference `'2`
- | |
- | let's call the lifetime of this reference `'1`
-LL | return x;
- | ^ returning this value requires that `'1` must outlive `'2`
-
-error: lifetime may not live long enough
- --> $DIR/closure-substs.rs:22:9
- |
-LL | fn bar<'a>() {
- | -- lifetime `'a` defined here
-...
-LL | b(x);
- | ^^^^ argument requires that `'a` must outlive `'static`
- |
- = help: consider replacing `'a` with `'static`
-
-error[E0521]: borrowed data escapes outside of closure
- --> $DIR/closure-substs.rs:29:9
- |
-LL | |x: &i32, b: fn(&'static i32)| {
- | - `x` is a reference that is only valid in the closure body
-LL | b(x);
- | ^^^^ `x` escapes the closure body here
-
-error[E0521]: borrowed data escapes outside of closure
- --> $DIR/closure-substs.rs:29:9
- |
-LL | |x: &i32, b: fn(&'static i32)| {
- | - - `b` declared here, outside of the closure body
- | |
- | `x` is a reference that is only valid in the closure body
-LL | b(x);
- | ^^^^ `x` escapes the closure body here
-
-error: aborting due to 6 previous errors
-
-For more information about this error, try `rustc --explain E0521`.
diff --git a/src/test/ui/nll/user-annotations/closure-substs.rs b/src/test/ui/nll/user-annotations/closure-substs.rs
deleted file mode 100644
index f7af54e8d..000000000
--- a/src/test/ui/nll/user-annotations/closure-substs.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Test that we enforce user-provided type annotations on closures.
-
-fn foo<'a>() {
- // Here `x` is free in the closure sig:
- |x: &'a i32| -> &'static i32 {
- return x; //~ ERROR lifetime may not live long enough
- };
-}
-
-fn foo1() {
- // Here `x` is bound in the closure sig:
- |x: &i32| -> &'static i32 {
- return x; //~ ERROR lifetime may not live long enough
- };
-}
-
-fn bar<'a>() {
- // Here `x` is free in the closure sig:
- |x: &'a i32, b: fn(&'static i32)| {
- b(x); //~ ERROR lifetime may not live long enough
- };
-}
-
-fn bar1() {
- // Here `x` is bound in the closure sig:
- |x: &i32, b: fn(&'static i32)| {
- b(x); //~ ERROR borrowed data escapes outside of closure
- };
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/closure-substs.stderr b/src/test/ui/nll/user-annotations/closure-substs.stderr
deleted file mode 100644
index 1e8de4ba9..000000000
--- a/src/test/ui/nll/user-annotations/closure-substs.stderr
+++ /dev/null
@@ -1,42 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/closure-substs.rs:6:16
- |
-LL | fn foo<'a>() {
- | -- lifetime `'a` defined here
-...
-LL | return x;
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/closure-substs.rs:13:16
- |
-LL | |x: &i32| -> &'static i32 {
- | - let's call the lifetime of this reference `'1`
-LL | return x;
- | ^ returning this value requires that `'1` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/closure-substs.rs:20:9
- |
-LL | fn bar<'a>() {
- | -- lifetime `'a` defined here
-...
-LL | b(x);
- | ^^^^ argument requires that `'a` must outlive `'static`
-
-error[E0521]: borrowed data escapes outside of closure
- --> $DIR/closure-substs.rs:27:9
- |
-LL | |x: &i32, b: fn(&'static i32)| {
- | - - let's call the lifetime of this reference `'1`
- | |
- | `x` is a reference that is only valid in the closure body
-LL | b(x);
- | ^^^^
- | |
- | `x` escapes the closure body here
- | argument requires that `'1` must outlive `'static`
-
-error: aborting due to 4 previous errors
-
-For more information about this error, try `rustc --explain E0521`.
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.rs b/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.rs
deleted file mode 100644
index e3a8a5f58..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-struct Foo<'a> { x: &'a u32 }
-
-impl<'a> Foo<'a> {
- const C: &'a u32 = &22;
-}
-
-fn foo<'a>(_: &'a u32) -> &'static u32 {
- <Foo<'a>>::C //~ ERROR
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr
deleted file mode 100644
index c39301588..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/constant-in-expr-inherent-1.rs:8:5
- |
-LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | <Foo<'a>>::C
- | ^^^^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-2.rs b/src/test/ui/nll/user-annotations/constant-in-expr-inherent-2.rs
deleted file mode 100644
index 90696d4b1..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-2.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Test that we still check constants are well-formed, even when we there's no
-// type annotation to check.
-
-const FUN: fn(&'static ()) = |_| {};
-struct A;
-impl A {
- const ASSOCIATED_FUN: fn(&'static ()) = |_| {};
-}
-
-struct B<'a>(&'a ());
-impl B<'static> {
- const ALSO_ASSOCIATED_FUN: fn(&'static ()) = |_| {};
-}
-
-trait Z: 'static {
- const TRAIT_ASSOCIATED_FUN: fn(&'static Self) = |_| ();
-}
-
-impl Z for () {}
-
-fn main() {
- let x = ();
- FUN(&x); //~ ERROR `x` does not live long enough
- A::ASSOCIATED_FUN(&x); //~ ERROR `x` does not live long enough
- B::ALSO_ASSOCIATED_FUN(&x); //~ ERROR `x` does not live long enough
- <_>::TRAIT_ASSOCIATED_FUN(&x); //~ ERROR `x` does not live long enough
-}
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-2.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-inherent-2.stderr
deleted file mode 100644
index 12065a85a..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-2.stderr
+++ /dev/null
@@ -1,50 +0,0 @@
-error[E0597]: `x` does not live long enough
- --> $DIR/constant-in-expr-inherent-2.rs:23:9
- |
-LL | FUN(&x);
- | ----^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `x` is borrowed for `'static`
-...
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/constant-in-expr-inherent-2.rs:24:23
- |
-LL | A::ASSOCIATED_FUN(&x);
- | ------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `x` is borrowed for `'static`
-...
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/constant-in-expr-inherent-2.rs:25:28
- |
-LL | B::ALSO_ASSOCIATED_FUN(&x);
- | -----------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `x` is borrowed for `'static`
-LL | <_>::TRAIT_ASSOCIATED_FUN(&x);
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/constant-in-expr-inherent-2.rs:26:31
- |
-LL | <_>::TRAIT_ASSOCIATED_FUN(&x);
- | --------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `x` is borrowed for `'static`
-LL | }
- | - `x` dropped here while still borrowed
-
-error: aborting due to 4 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-normalize.rs b/src/test/ui/nll/user-annotations/constant-in-expr-normalize.rs
deleted file mode 100644
index b7095430d..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-normalize.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-trait Mirror {
- type Me;
-}
-
-impl<T> Mirror for T {
- type Me = T;
-}
-
-trait Foo<'a> {
- const C: <&'a u32 as Mirror>::Me;
-}
-
-impl<'a, T> Foo<'a> for T {
- const C: &'a u32 = &22;
-}
-
-fn foo<'a>(_: &'a u32) -> &'static u32 {
- <() as Foo<'a>>::C //~ ERROR
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr
deleted file mode 100644
index 541a2cfaf..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/constant-in-expr-normalize.rs:18:5
- |
-LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | <() as Foo<'a>>::C
- | ^^^^^^^^^^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.rs b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.rs
deleted file mode 100644
index e0400b2cc..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-trait Foo<'a> {
- const C: &'a u32;
-}
-
-impl<'a, T> Foo<'a> for T {
- const C: &'a u32 = &22;
-}
-
-fn foo<'a>(_: &'a u32) -> &'static u32 {
- <() as Foo<'a>>::C //~ ERROR
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr
deleted file mode 100644
index ea0fcb6d6..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/constant-in-expr-trait-item-1.rs:10:5
- |
-LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | <() as Foo<'a>>::C
- | ^^^^^^^^^^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.rs b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.rs
deleted file mode 100644
index 73c4e577b..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-trait Foo<'a> {
- const C: &'a u32;
-}
-
-impl<'a, T> Foo<'a> for T {
- const C: &'a u32 = &22;
-}
-
-fn foo<'a, T: Foo<'a>>() -> &'static u32 {
- <T as Foo<'a>>::C //~ ERROR
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr
deleted file mode 100644
index ff549f1d8..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/constant-in-expr-trait-item-2.rs:10:5
- |
-LL | fn foo<'a, T: Foo<'a>>() -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | <T as Foo<'a>>::C
- | ^^^^^^^^^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.rs b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.rs
deleted file mode 100644
index 567e31ef9..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-trait Foo<'a> {
- const C: &'a u32;
-}
-
-impl<'a, T> Foo<'a> for T {
- const C: &'a u32 = &22;
-}
-
-fn foo<'a, T: Foo<'a>>() -> &'static u32 {
- T::C //~ ERROR
-}
-
-fn main() {
-}
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr
deleted file mode 100644
index 7f160d8e3..000000000
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/constant-in-expr-trait-item-3.rs:10:5
- |
-LL | fn foo<'a, T: Foo<'a>>() -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | T::C
- | ^^^^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/user-annotations/downcast-infer.rs b/src/test/ui/nll/user-annotations/downcast-infer.rs
deleted file mode 100644
index b27429f4d..000000000
--- a/src/test/ui/nll/user-annotations/downcast-infer.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-// check-pass
-
-// Check that we don't try to downcast `_` when type-checking the annotation.
-fn main() {
- let x = Some(Some(Some(1)));
-
- match x {
- Some::<Option<_>>(Some(Some(v))) => (),
- _ => (),
- }
-}
diff --git a/src/test/ui/nll/user-annotations/dump-adt-brace-struct.rs b/src/test/ui/nll/user-annotations/dump-adt-brace-struct.rs
deleted file mode 100644
index ccda9129d..000000000
--- a/src/test/ui/nll/user-annotations/dump-adt-brace-struct.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-// compile-flags:-Zverbose
-
-#![allow(warnings)]
-#![feature(rustc_attrs)]
-
-struct SomeStruct<T> { t: T }
-
-#[rustc_dump_user_substs]
-fn main() {
- SomeStruct { t: 22 }; // Nothing given, no annotation.
-
- SomeStruct::<_> { t: 22 }; // Nothing interesting given, no annotation.
-
- SomeStruct::<u32> { t: 22 }; // No lifetime bounds given.
-
- SomeStruct::<&'static u32> { t: &22 }; //~ ERROR [&ReStatic u32]
-}
diff --git a/src/test/ui/nll/user-annotations/dump-adt-brace-struct.stderr b/src/test/ui/nll/user-annotations/dump-adt-brace-struct.stderr
deleted file mode 100644
index 586062190..000000000
--- a/src/test/ui/nll/user-annotations/dump-adt-brace-struct.stderr
+++ /dev/null
@@ -1,8 +0,0 @@
-error: user substs: UserSubsts { substs: [&ReStatic u32], user_self_ty: None }
- --> $DIR/dump-adt-brace-struct.rs:19:5
- |
-LL | SomeStruct::<&'static u32> { t: &22 };
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/user-annotations/dump-fn-method.rs b/src/test/ui/nll/user-annotations/dump-fn-method.rs
deleted file mode 100644
index 148d63d84..000000000
--- a/src/test/ui/nll/user-annotations/dump-fn-method.rs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-// compile-flags:-Zverbose
-
-#![feature(rustc_attrs)]
-
-// Note: we reference the names T and U in the comments below.
-trait Bazoom<T> {
- fn method<U>(&self, arg: T, arg2: U) { }
-}
-
-impl<S, T> Bazoom<T> for S {
-}
-
-fn foo<'a, T>(_: T) { }
-
-#[rustc_dump_user_substs]
-fn main() {
- // Here: nothing is given, so we don't have any annotation.
- let x = foo;
- x(22);
-
- // Here: `u32` is given, which doesn't contain any lifetimes, so we don't
- // have any annotation.
- let x = foo::<u32>;
- x(22);
-
- let x = foo::<&'static u32>; //~ ERROR [&ReStatic u32]
- x(&22);
-
- // Here: we only want the `T` to be given, the rest should be variables.
- //
- // (`T` refers to the declaration of `Bazoom`)
- let x = <_ as Bazoom<u32>>::method::<_>; //~ ERROR [^0, u32, ^1]
- x(&22, 44, 66);
-
- // Here: all are given and definitely contain no lifetimes, so we
- // don't have any annotation.
- let x = <u8 as Bazoom<u16>>::method::<u32>;
- x(&22, 44, 66);
-
- // Here: all are given and we have a lifetime.
- let x = <u8 as Bazoom<&'static u16>>::method::<u32>; //~ ERROR [u8, &ReStatic u16, u32]
- x(&22, &44, 66);
-
- // Here: we want in particular that *only* the method `U`
- // annotation is given, the rest are variables.
- //
- // (`U` refers to the declaration of `Bazoom`)
- let y = 22_u32;
- y.method::<u32>(44, 66); //~ ERROR [^0, ^1, u32]
-
- // Here: nothing is given, so we don't have any annotation.
- let y = 22_u32;
- y.method(44, 66);
-}
diff --git a/src/test/ui/nll/user-annotations/dump-fn-method.stderr b/src/test/ui/nll/user-annotations/dump-fn-method.stderr
deleted file mode 100644
index d139efa88..000000000
--- a/src/test/ui/nll/user-annotations/dump-fn-method.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-error: user substs: UserSubsts { substs: [&ReStatic u32], user_self_ty: None }
- --> $DIR/dump-fn-method.rs:29:13
- |
-LL | let x = foo::<&'static u32>;
- | ^^^^^^^^^^^^^^^^^^^
-
-error: user substs: UserSubsts { substs: [^0, u32, ^1], user_self_ty: None }
- --> $DIR/dump-fn-method.rs:35:13
- |
-LL | let x = <_ as Bazoom<u32>>::method::<_>;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: user substs: UserSubsts { substs: [u8, &ReStatic u16, u32], user_self_ty: None }
- --> $DIR/dump-fn-method.rs:44:13
- |
-LL | let x = <u8 as Bazoom<&'static u16>>::method::<u32>;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: user substs: UserSubsts { substs: [^0, ^1, u32], user_self_ty: None }
- --> $DIR/dump-fn-method.rs:52:5
- |
-LL | y.method::<u32>(44, 66);
- | ^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 4 previous errors
-
diff --git a/src/test/ui/nll/user-annotations/fns.rs b/src/test/ui/nll/user-annotations/fns.rs
deleted file mode 100644
index 38db6d1c4..000000000
--- a/src/test/ui/nll/user-annotations/fns.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-fn some_fn<T>(arg: T) { }
-
-fn no_annot() {
- let c = 66;
- some_fn(&c); // OK
-}
-
-fn annot_underscore() {
- let c = 66;
- some_fn::<_>(&c); // OK
-}
-
-fn annot_reference_any_lifetime() {
- let c = 66;
- some_fn::<&u32>(&c); // OK
-}
-
-fn annot_reference_static_lifetime() {
- let c = 66;
- some_fn::<&'static u32>(&c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let c = 66;
- some_fn::<&'a u32>(&c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
- some_fn::<&'a u32>(c);
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let _closure = || {
- let c = 66;
- some_fn::<&'a u32>(&c); //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
- let _closure = || {
- some_fn::<&'a u32>(c);
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/fns.stderr b/src/test/ui/nll/user-annotations/fns.stderr
deleted file mode 100644
index e0640da39..000000000
--- a/src/test/ui/nll/user-annotations/fns.stderr
+++ /dev/null
@@ -1,42 +0,0 @@
-error[E0597]: `c` does not live long enough
- --> $DIR/fns.rs:23:29
- |
-LL | some_fn::<&'static u32>(&c);
- | ------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'static`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/fns.rs:28:24
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-LL | let c = 66;
-LL | some_fn::<&'a u32>(&c);
- | -------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/fns.rs:38:28
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | some_fn::<&'a u32>(&c);
- | -------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-LL | };
- | - `c` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/inherent-associated-constants.rs b/src/test/ui/nll/user-annotations/inherent-associated-constants.rs
deleted file mode 100644
index fe2641fd6..000000000
--- a/src/test/ui/nll/user-annotations/inherent-associated-constants.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-struct A<'a>(&'a ());
-
-impl A<'static> {
- const IC: i32 = 10;
-}
-
-fn non_wf_associated_const<'a>(x: i32) {
- A::<'a>::IC; //~ ERROR lifetime may not live long enough
-}
-
-fn wf_associated_const<'a>(x: i32) {
- A::<'static>::IC;
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/inherent-associated-constants.stderr b/src/test/ui/nll/user-annotations/inherent-associated-constants.stderr
deleted file mode 100644
index ffbfc40f5..000000000
--- a/src/test/ui/nll/user-annotations/inherent-associated-constants.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/inherent-associated-constants.rs:8:5
- |
-LL | fn non_wf_associated_const<'a>(x: i32) {
- | -- lifetime `'a` defined here
-LL | A::<'a>::IC;
- | ^^^^^^^^^^^ requires that `'a` must outlive `'static`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/user-annotations/issue-54124.rs b/src/test/ui/nll/user-annotations/issue-54124.rs
deleted file mode 100644
index 5ae03c894..000000000
--- a/src/test/ui/nll/user-annotations/issue-54124.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-fn test<'a>() {
- let _:fn(&()) = |_:&'a ()| {}; //~ ERROR lifetime may not live long enough
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() {
- test();
-}
diff --git a/src/test/ui/nll/user-annotations/issue-54124.stderr b/src/test/ui/nll/user-annotations/issue-54124.stderr
deleted file mode 100644
index 2556af2dd..000000000
--- a/src/test/ui/nll/user-annotations/issue-54124.stderr
+++ /dev/null
@@ -1,20 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-54124.rs:2:22
- |
-LL | fn test<'a>() {
- | -- lifetime `'a` defined here
-LL | let _:fn(&()) = |_:&'a ()| {};
- | ^ - let's call the lifetime of this reference `'1`
- | |
- | requires that `'1` must outlive `'a`
-
-error: lifetime may not live long enough
- --> $DIR/issue-54124.rs:2:22
- |
-LL | fn test<'a>() {
- | -- lifetime `'a` defined here
-LL | let _:fn(&()) = |_:&'a ()| {};
- | ^ requires that `'a` must outlive `'static`
-
-error: aborting due to 2 previous errors
-
diff --git a/src/test/ui/nll/user-annotations/issue-54570-bootstrapping.rs b/src/test/ui/nll/user-annotations/issue-54570-bootstrapping.rs
deleted file mode 100644
index ff5b2244e..000000000
--- a/src/test/ui/nll/user-annotations/issue-54570-bootstrapping.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// check-pass
-
-// This test is reduced from a scenario pnkfelix encountered while
-// bootstrapping the compiler.
-
-#[derive(Copy, Clone)]
-pub struct Spanned<T> {
- pub node: T,
- pub span: Span,
-}
-
-pub type Variant = Spanned<VariantKind>;
-// #[derive(Clone)] pub struct Variant { pub node: VariantKind, pub span: Span, }
-
-#[derive(Clone)]
-pub struct VariantKind { }
-
-#[derive(Copy, Clone)]
-pub struct Span;
-
-pub fn variant_to_span(variant: Variant) {
- match variant {
- Variant {
- span: _span,
- ..
- } => { }
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/issue-55219.rs b/src/test/ui/nll/user-annotations/issue-55219.rs
deleted file mode 100644
index 147413663..000000000
--- a/src/test/ui/nll/user-annotations/issue-55219.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Regression test for #55219:
-//
-// The `Self::HASH_LEN` here expands to a "self-type" where `T` is not
-// known. This unbound inference variable was causing an ICE.
-//
-// check-pass
-
-pub struct Foo<T>(T);
-
-impl<T> Foo<T> {
- const HASH_LEN: usize = 20;
-
- fn stuff() {
- let _ = Self::HASH_LEN;
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/issue-55241.rs b/src/test/ui/nll/user-annotations/issue-55241.rs
deleted file mode 100644
index 29969c7b4..000000000
--- a/src/test/ui/nll/user-annotations/issue-55241.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Regression test for #55241:
-//
-// The reference to `C::HASHED_NULL_NODE` resulted in a type like `<C
-// as NodeCodec<_>>::Out`; normalizing this type requires knowing the
-// value of `_`; solving that requires having normalized, so we can
-// test against `C: NodeCodec<H>` in the environment.
-//
-// run-pass
-
-pub trait Hasher {
- type Out: Eq;
-}
-
-pub trait NodeCodec<H: Hasher> {
- const HASHED_NULL_NODE: H::Out;
-}
-
-pub trait Trie<H: Hasher, C: NodeCodec<H>> {
- /// Returns the root of the trie.
- fn root(&self) -> &H::Out;
-
- /// Is the trie empty?
- fn is_empty(&self) -> bool { *self.root() == C::HASHED_NULL_NODE }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/issue-55748-pat-types-constrain-bindings.rs b/src/test/ui/nll/user-annotations/issue-55748-pat-types-constrain-bindings.rs
deleted file mode 100644
index c71937a50..000000000
--- a/src/test/ui/nll/user-annotations/issue-55748-pat-types-constrain-bindings.rs
+++ /dev/null
@@ -1,68 +0,0 @@
-// This test is ensuring that type ascriptions on let bindings
-// constrain both:
-//
-// 1. the input expression on the right-hand side (after any potential
-// coercion, and allowing for covariance), *and*
-//
-// 2. the bindings (if any) nested within the pattern on the left-hand
-// side (and here, the type-constraint is *invariant*).
-
-#![allow(dead_code, unused_mut)]
-type PairUncoupled<'a, 'b, T> = (&'a T, &'b T);
-type PairCoupledRegions<'a, T> = (&'a T, &'a T);
-type PairCoupledTypes<T> = (T, T);
-
-fn uncoupled_lhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((mut y, mut _z),): (PairUncoupled<u32>,) = ((s, &_x),); // ok
- // Above compiling does *not* imply below would compile.
- // ::std::mem::swap(&mut y, &mut _z);
- y
-}
-
-fn swap_regions((mut y, mut _z): PairCoupledRegions<u32>) {
- ::std::mem::swap(&mut y, &mut _z);
-}
-
-fn coupled_regions_lhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((y, _z),): (PairCoupledRegions<u32>,) = ((s, &_x),);
- // If above line compiled, so should line below ...
-
- // swap_regions((y, _z));
-
- // ... but the ascribed type also invalidates this use of `y`
- y //~ ERROR lifetime may not live long enough
-}
-
-fn swap_types((mut y, mut _z): PairCoupledTypes<&u32>) {
- ::std::mem::swap(&mut y, &mut _z);
-}
-
-fn coupled_types_lhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((y, _z),): (PairCoupledTypes<&u32>,) = ((s, &_x),);
- // If above line compiled, so should line below ...
-
- // swap_types((y, _z));
-
- // ... but the ascribed type also invalidates this use of `y`
- y //~ ERROR lifetime may not live long enough
-}
-
-fn swap_wilds((mut y, mut _z): PairCoupledTypes<&u32>) {
- ::std::mem::swap(&mut y, &mut _z);
-}
-
-fn coupled_wilds_lhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((y, _z),): (PairCoupledTypes<_>,) = ((s, &_x),);
- // If above line compiled, so should line below
- // swap_wilds((y, _z));
-
- // ... but the ascribed type also invalidates this use of `y`
- y //~ ERROR lifetime may not live long enough
-}
-
-fn main() {
- uncoupled_lhs(&3, &4);
- coupled_regions_lhs(&3, &4);
- coupled_types_lhs(&3, &4);
- coupled_wilds_lhs(&3, &4);
-}
diff --git a/src/test/ui/nll/user-annotations/issue-55748-pat-types-constrain-bindings.stderr b/src/test/ui/nll/user-annotations/issue-55748-pat-types-constrain-bindings.stderr
deleted file mode 100644
index 8399ef04e..000000000
--- a/src/test/ui/nll/user-annotations/issue-55748-pat-types-constrain-bindings.stderr
+++ /dev/null
@@ -1,29 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-55748-pat-types-constrain-bindings.rs:33:5
- |
-LL | fn coupled_regions_lhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-...
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/issue-55748-pat-types-constrain-bindings.rs:47:5
- |
-LL | fn coupled_types_lhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-...
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/issue-55748-pat-types-constrain-bindings.rs:60:5
- |
-LL | fn coupled_wilds_lhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-...
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to 3 previous errors
-
diff --git a/src/test/ui/nll/user-annotations/issue-57731-ascibed-coupled-types.rs b/src/test/ui/nll/user-annotations/issue-57731-ascibed-coupled-types.rs
deleted file mode 100644
index 95c655654..000000000
--- a/src/test/ui/nll/user-annotations/issue-57731-ascibed-coupled-types.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Check that repeated type variables are correctly handled
-
-#![allow(unused)]
-#![feature(type_ascription)]
-
-type PairUncoupled<'a, 'b, T> = (&'a T, &'b T);
-type PairCoupledTypes<T> = (T, T);
-type PairCoupledRegions<'a, T> = (&'a T, &'a T);
-
-fn uncoupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((y, _z),) = type_ascribe!(((s, _x),), (PairUncoupled<_>,));
- y // OK
-}
-
-fn coupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((y, _z),) = type_ascribe!(((s, _x),), (PairCoupledTypes<_>,));
- y //~ ERROR lifetime may not live long enough
-}
-
-fn coupled_regions_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((y, _z),) = type_ascribe!(((s, _x),), (PairCoupledRegions<_>,));
- y //~ ERROR lifetime may not live long enough
-}
-
-fn cast_uncoupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((y, _z),) = ((s, _x),) as (PairUncoupled<_>,);
- y // OK
-}
-
-fn cast_coupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((y, _z),) = ((s, _x),) as (PairCoupledTypes<_>,);
- y //~ ERROR lifetime may not live long enough
-}
-
-fn cast_coupled_regions_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- let ((y, _z),) = ((s, _x),) as (PairCoupledRegions<_>,);
- y //~ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/issue-57731-ascibed-coupled-types.stderr b/src/test/ui/nll/user-annotations/issue-57731-ascibed-coupled-types.stderr
deleted file mode 100644
index 8601691e8..000000000
--- a/src/test/ui/nll/user-annotations/issue-57731-ascibed-coupled-types.stderr
+++ /dev/null
@@ -1,38 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/issue-57731-ascibed-coupled-types.rs:17:5
- |
-LL | fn coupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | let ((y, _z),) = type_ascribe!(((s, _x),), (PairCoupledTypes<_>,));
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/issue-57731-ascibed-coupled-types.rs:22:5
- |
-LL | fn coupled_regions_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | let ((y, _z),) = type_ascribe!(((s, _x),), (PairCoupledRegions<_>,));
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/issue-57731-ascibed-coupled-types.rs:32:5
- |
-LL | fn cast_coupled_wilds_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | let ((y, _z),) = ((s, _x),) as (PairCoupledTypes<_>,);
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/issue-57731-ascibed-coupled-types.rs:37:5
- |
-LL | fn cast_coupled_regions_rhs<'a>(_x: &'a u32, s: &'static u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | let ((y, _z),) = ((s, _x),) as (PairCoupledRegions<_>,);
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: aborting due to 4 previous errors
-
diff --git a/src/test/ui/nll/user-annotations/method-call.rs b/src/test/ui/nll/user-annotations/method-call.rs
deleted file mode 100644
index beafc597a..000000000
--- a/src/test/ui/nll/user-annotations/method-call.rs
+++ /dev/null
@@ -1,69 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-trait Bazoom<T> {
- fn method<U>(&self, arg: T, arg2: U) { }
-}
-
-impl<T, U> Bazoom<U> for T {
-}
-
-fn no_annot() {
- let a = 22;
- let b = 44;
- let c = 66;
- a.method(b, &c); // OK
-}
-
-fn annot_underscore() {
- let a = 22;
- let b = 44;
- let c = 66;
- a.method::<_>(b, &c); // OK
-}
-
-fn annot_reference_any_lifetime() {
- let a = 22;
- let b = 44;
- let c = 66;
- a.method::<&u32>(b, &c); // OK
-}
-
-fn annot_reference_static_lifetime() {
- let a = 22;
- let b = 44;
- let c = 66;
- a.method::<&'static u32>(b, &c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let a = 22;
- let b = 44;
- let c = 66;
- a.method::<&'a u32>(b, &c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
- let a = 22;
- let b = 44;
- a.method::<&'a u32>(b, c);
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let a = 22;
- let b = 44;
- let _closure = || {
- let c = 66;
- a.method::<&'a u32>(b, &c); //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
- let a = 22;
- let b = 44;
- let _closure = || {
- a.method::<&'a u32>(b, c);
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/method-call.stderr b/src/test/ui/nll/user-annotations/method-call.stderr
deleted file mode 100644
index 10447e45a..000000000
--- a/src/test/ui/nll/user-annotations/method-call.stderr
+++ /dev/null
@@ -1,42 +0,0 @@
-error[E0597]: `c` does not live long enough
- --> $DIR/method-call.rs:36:34
- |
-LL | a.method::<&'static u32>(b, &c);
- | -----------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'static`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/method-call.rs:43:29
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | a.method::<&'a u32>(b, &c);
- | ------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/method-call.rs:57:33
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | a.method::<&'a u32>(b, &c);
- | ------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-LL | };
- | - `c` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-1.rs b/src/test/ui/nll/user-annotations/method-ufcs-1.rs
deleted file mode 100644
index 950771f35..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-1.rs
+++ /dev/null
@@ -1,63 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-trait Bazoom<T>: Sized {
- fn method<U>(self, arg: T, arg2: U) { }
-}
-
-impl<T, U> Bazoom<U> for T {
-}
-
-fn annot_underscore() {
- let a = 22;
- let b = 44;
- let c = 66;
- <_ as Bazoom<_>>::method::<_>(&a, b, c); // OK
-}
-
-fn annot_reference_any_lifetime() {
- let a = 22;
- let b = 44;
- let c = 66;
- <&u32 as Bazoom<_>>::method(&a, b, c); // OK
-}
-
-fn annot_reference_static_lifetime() {
- let a = 22;
- let b = 44;
- let c = 66;
- let x = <&'static u32 as Bazoom<_>>::method;
- x(&a, b, c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let a = 22;
- let b = 44;
- let c = 66;
- <&'a u32 as Bazoom<_>>::method(&a, b, c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(a: &'a u32) {
- let b = 44;
- let c = 66;
- <&'a u32 as Bazoom<_>>::method(&a, b, c);
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let a = 22;
- let b = 44;
- let _closure = || {
- let c = 66;
- <&'a u32 as Bazoom<_>>::method(&a, b, c); //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(a: &'a u32) {
- let b = 44;
- let c = 66;
- let _closure = || {
- <&'a u32 as Bazoom<_>>::method(&a, b, c);
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-1.stderr b/src/test/ui/nll/user-annotations/method-ufcs-1.stderr
deleted file mode 100644
index 962ddfd2b..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-1.stderr
+++ /dev/null
@@ -1,46 +0,0 @@
-error[E0597]: `a` does not live long enough
- --> $DIR/method-ufcs-1.rs:30:7
- |
-LL | x(&a, b, c);
- | --^^-------
- | | |
- | | borrowed value does not live long enough
- | argument requires that `a` is borrowed for `'static`
-LL | }
- | - `a` dropped here while still borrowed
-
-error[E0597]: `a` does not live long enough
- --> $DIR/method-ufcs-1.rs:37:36
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | <&'a u32 as Bazoom<_>>::method(&a, b, c);
- | -------------------------------^^-------
- | | |
- | | borrowed value does not live long enough
- | argument requires that `a` is borrowed for `'a`
-LL | }
- | - `a` dropped here while still borrowed
-
-error[E0597]: `a` does not live long enough
- --> $DIR/method-ufcs-1.rs:51:41
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | let _closure = || {
- | -- value captured here
-LL | let c = 66;
-LL | <&'a u32 as Bazoom<_>>::method(&a, b, c);
- | --------------------------------^-------
- | | |
- | | borrowed value does not live long enough
- | argument requires that `a` is borrowed for `'a`
-LL | };
-LL | }
- | - `a` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-2.rs b/src/test/ui/nll/user-annotations/method-ufcs-2.rs
deleted file mode 100644
index 7dc0f0c12..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-2.rs
+++ /dev/null
@@ -1,63 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-trait Bazoom<T>: Sized {
- fn method<U>(self, arg: T, arg2: U) { }
-}
-
-impl<T, U> Bazoom<U> for T {
-}
-
-fn annot_underscore() {
- let a = 22;
- let b = 44;
- let c = 66;
- <_ as Bazoom<_>>::method(a, &b, c); // OK
-}
-
-fn annot_reference_any_lifetime() {
- let a = 22;
- let b = 44;
- let c = 66;
- <_ as Bazoom<&u32>>::method(a, &b, c); // OK
-}
-
-fn annot_reference_static_lifetime() {
- let a = 22;
- let b = 44;
- let c = 66;
- let x = <&'static u32 as Bazoom<_>>::method;
- x(&a, b, c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let a = 22;
- let b = 44;
- let c = 66;
- <_ as Bazoom<&'a u32>>::method(a, &b, c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(b: &'a u32) {
- let a = 44;
- let c = 66;
- <_ as Bazoom<&'a u32>>::method(a, &b, c);
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let a = 22;
- let b = 44;
- let _closure = || {
- let c = 66;
- <_ as Bazoom<&'a u32>>::method(a, &b, c); //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(b: &'a u32) {
- let a = 44;
- let c = 66;
- let _closure = || {
- <_ as Bazoom<&'a u32>>::method(a, &b, c);
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-2.stderr b/src/test/ui/nll/user-annotations/method-ufcs-2.stderr
deleted file mode 100644
index 63d59905e..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-2.stderr
+++ /dev/null
@@ -1,46 +0,0 @@
-error[E0597]: `a` does not live long enough
- --> $DIR/method-ufcs-2.rs:30:7
- |
-LL | x(&a, b, c);
- | --^^-------
- | | |
- | | borrowed value does not live long enough
- | argument requires that `a` is borrowed for `'static`
-LL | }
- | - `a` dropped here while still borrowed
-
-error[E0597]: `b` does not live long enough
- --> $DIR/method-ufcs-2.rs:37:39
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | <_ as Bazoom<&'a u32>>::method(a, &b, c);
- | ----------------------------------^^----
- | | |
- | | borrowed value does not live long enough
- | argument requires that `b` is borrowed for `'a`
-LL | }
- | - `b` dropped here while still borrowed
-
-error[E0597]: `b` does not live long enough
- --> $DIR/method-ufcs-2.rs:51:44
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | let _closure = || {
- | -- value captured here
-LL | let c = 66;
-LL | <_ as Bazoom<&'a u32>>::method(a, &b, c);
- | -----------------------------------^----
- | | |
- | | borrowed value does not live long enough
- | argument requires that `b` is borrowed for `'a`
-LL | };
-LL | }
- | - `b` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-3.rs b/src/test/ui/nll/user-annotations/method-ufcs-3.rs
deleted file mode 100644
index 59d2009d1..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-3.rs
+++ /dev/null
@@ -1,69 +0,0 @@
-// Unit test for the "user substitutions" that are annotated on each
-// node.
-
-trait Bazoom<T> {
- fn method<U>(&self, arg: T, arg2: U) { }
-}
-
-impl<T, U> Bazoom<U> for T {
-}
-
-fn no_annot() {
- let a = 22;
- let b = 44;
- let c = 66;
- <_ as Bazoom<_>>::method(&a, b, &c); // OK
-}
-
-fn annot_underscore() {
- let a = 22;
- let b = 44;
- let c = 66;
- <_ as Bazoom<_>>::method::<_>(&a, b, &c); // OK
-}
-
-fn annot_reference_any_lifetime() {
- let a = 22;
- let b = 44;
- let c = 66;
- <_ as Bazoom<_>>::method::<&u32>(&a, b, &c); // OK
-}
-
-fn annot_reference_static_lifetime() {
- let a = 22;
- let b = 44;
- let c = 66;
- <_ as Bazoom<_>>::method::<&'static u32>(&a, b, &c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- let a = 22;
- let b = 44;
- let c = 66;
- <_ as Bazoom<_>>::method::<&'a u32>(&a, b, &c); //~ ERROR
-}
-
-fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
- let a = 22;
- let b = 44;
- <_ as Bazoom<_>>::method::<&'a u32>(&a, b, c);
-}
-
-fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- let a = 22;
- let b = 44;
- let _closure = || {
- let c = 66;
- <_ as Bazoom<_>>::method::<&'a u32>(&a, b, &c); //~ ERROR
- };
-}
-
-fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
- let a = 22;
- let b = 44;
- let _closure = || {
- <_ as Bazoom<_>>::method::<&'a u32>(&a, b, c);
- };
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-3.stderr b/src/test/ui/nll/user-annotations/method-ufcs-3.stderr
deleted file mode 100644
index e7851833e..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-3.stderr
+++ /dev/null
@@ -1,42 +0,0 @@
-error[E0597]: `c` does not live long enough
- --> $DIR/method-ufcs-3.rs:36:53
- |
-LL | <_ as Bazoom<_>>::method::<&'static u32>(&a, b, &c);
- | ------------------------------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'static`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/method-ufcs-3.rs:43:48
- |
-LL | fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | <_ as Bazoom<_>>::method::<&'a u32>(&a, b, &c);
- | -------------------------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-LL | }
- | - `c` dropped here while still borrowed
-
-error[E0597]: `c` does not live long enough
- --> $DIR/method-ufcs-3.rs:57:52
- |
-LL | fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
- | -- lifetime `'a` defined here
-...
-LL | <_ as Bazoom<_>>::method::<&'a u32>(&a, b, &c);
- | -------------------------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `c` is borrowed for `'a`
-LL | };
- | - `c` dropped here while still borrowed
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-inherent-1.rs b/src/test/ui/nll/user-annotations/method-ufcs-inherent-1.rs
deleted file mode 100644
index 7bfed61d4..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-inherent-1.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Check that substitutions given on the self type (here, `A`) carry
-// through to NLL.
-
-struct A<'a> { x: &'a u32 }
-
-impl<'a> A<'a> {
- fn new<'b, T>(x: &'a u32, y: T) -> Self {
- Self { x }
- }
-}
-
-fn foo<'a>() {
- let v = 22;
- let x = A::<'a>::new(&v, 22);
- //~^ ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-inherent-1.stderr b/src/test/ui/nll/user-annotations/method-ufcs-inherent-1.stderr
deleted file mode 100644
index 94861babd..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-inherent-1.stderr
+++ /dev/null
@@ -1,18 +0,0 @@
-error[E0597]: `v` does not live long enough
- --> $DIR/method-ufcs-inherent-1.rs:14:26
- |
-LL | fn foo<'a>() {
- | -- lifetime `'a` defined here
-LL | let v = 22;
-LL | let x = A::<'a>::new(&v, 22);
- | -------------^^-----
- | | |
- | | borrowed value does not live long enough
- | argument requires that `v` is borrowed for `'a`
-LL |
-LL | }
- | - `v` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-inherent-2.rs b/src/test/ui/nll/user-annotations/method-ufcs-inherent-2.rs
deleted file mode 100644
index cfbc0bcf6..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-inherent-2.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Check that substitutions given on the self type (here, `A`) can be
-// used in combination with annotations given for method arguments.
-
-struct A<'a> { x: &'a u32 }
-
-impl<'a> A<'a> {
- fn new<'b, T>(x: &'a u32, y: T) -> Self {
- Self { x }
- }
-}
-
-fn foo<'a>() {
- let v = 22;
- let x = A::<'a>::new::<&'a u32>(&v, &v);
- //~^ ERROR
- //~| ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-inherent-2.stderr b/src/test/ui/nll/user-annotations/method-ufcs-inherent-2.stderr
deleted file mode 100644
index 06f20d9b2..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-inherent-2.stderr
+++ /dev/null
@@ -1,33 +0,0 @@
-error[E0597]: `v` does not live long enough
- --> $DIR/method-ufcs-inherent-2.rs:14:37
- |
-LL | fn foo<'a>() {
- | -- lifetime `'a` defined here
-LL | let v = 22;
-LL | let x = A::<'a>::new::<&'a u32>(&v, &v);
- | ------------------------^^-----
- | | |
- | | borrowed value does not live long enough
- | argument requires that `v` is borrowed for `'a`
-...
-LL | }
- | - `v` dropped here while still borrowed
-
-error[E0597]: `v` does not live long enough
- --> $DIR/method-ufcs-inherent-2.rs:14:41
- |
-LL | fn foo<'a>() {
- | -- lifetime `'a` defined here
-LL | let v = 22;
-LL | let x = A::<'a>::new::<&'a u32>(&v, &v);
- | ----------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `v` is borrowed for `'a`
-...
-LL | }
- | - `v` dropped here while still borrowed
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-inherent-3.rs b/src/test/ui/nll/user-annotations/method-ufcs-inherent-3.rs
deleted file mode 100644
index 7ddb13360..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-inherent-3.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Check that inherent methods invoked with `<T>::new` style
-// carry their annotations through to NLL.
-
-struct A<'a> { x: &'a u32 }
-
-impl<'a> A<'a> {
- fn new<'b, T>(x: &'a u32, y: T) -> Self {
- Self { x }
- }
-}
-
-fn foo<'a>() {
- let v = 22;
- let x = <A<'a>>::new(&v, 22);
- //~^ ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-inherent-3.stderr b/src/test/ui/nll/user-annotations/method-ufcs-inherent-3.stderr
deleted file mode 100644
index 4ad61dc81..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-inherent-3.stderr
+++ /dev/null
@@ -1,18 +0,0 @@
-error[E0597]: `v` does not live long enough
- --> $DIR/method-ufcs-inherent-3.rs:14:26
- |
-LL | fn foo<'a>() {
- | -- lifetime `'a` defined here
-LL | let v = 22;
-LL | let x = <A<'a>>::new(&v, 22);
- | -------------^^-----
- | | |
- | | borrowed value does not live long enough
- | argument requires that `v` is borrowed for `'a`
-LL |
-LL | }
- | - `v` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-inherent-4.rs b/src/test/ui/nll/user-annotations/method-ufcs-inherent-4.rs
deleted file mode 100644
index 85e759739..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-inherent-4.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Check that inherent methods invoked with `<T>::new` style
-// carry their annotations through to NLL in connection with
-// method type parameters.
-
-struct A<'a> { x: &'a u32 }
-
-impl<'a> A<'a> {
- fn new<'b, T>(x: &'a u32, y: T) -> Self {
- Self { x }
- }
-}
-
-fn foo<'a>() {
- let v = 22;
- let x = <A<'a>>::new::<&'a u32>(&v, &v);
- //~^ ERROR
- //~| ERROR
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/method-ufcs-inherent-4.stderr b/src/test/ui/nll/user-annotations/method-ufcs-inherent-4.stderr
deleted file mode 100644
index 0f83e99cd..000000000
--- a/src/test/ui/nll/user-annotations/method-ufcs-inherent-4.stderr
+++ /dev/null
@@ -1,33 +0,0 @@
-error[E0597]: `v` does not live long enough
- --> $DIR/method-ufcs-inherent-4.rs:15:37
- |
-LL | fn foo<'a>() {
- | -- lifetime `'a` defined here
-LL | let v = 22;
-LL | let x = <A<'a>>::new::<&'a u32>(&v, &v);
- | ------------------------^^-----
- | | |
- | | borrowed value does not live long enough
- | argument requires that `v` is borrowed for `'a`
-...
-LL | }
- | - `v` dropped here while still borrowed
-
-error[E0597]: `v` does not live long enough
- --> $DIR/method-ufcs-inherent-4.rs:15:41
- |
-LL | fn foo<'a>() {
- | -- lifetime `'a` defined here
-LL | let v = 22;
-LL | let x = <A<'a>>::new::<&'a u32>(&v, &v);
- | ----------------------------^^-
- | | |
- | | borrowed value does not live long enough
- | argument requires that `v` is borrowed for `'a`
-...
-LL | }
- | - `v` dropped here while still borrowed
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/normalization.rs b/src/test/ui/nll/user-annotations/normalization.rs
deleted file mode 100644
index 870e3d811..000000000
--- a/src/test/ui/nll/user-annotations/normalization.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Test that we enforce a `&'static` requirement that is only visible
-// after normalization.
-
-trait Foo { type Out; }
-impl Foo for () { type Out = &'static u32; }
-
-fn main() {
- let a = 22;
- let b: <() as Foo>::Out = &a; //~ ERROR
-}
diff --git a/src/test/ui/nll/user-annotations/normalization.stderr b/src/test/ui/nll/user-annotations/normalization.stderr
deleted file mode 100644
index 4c7893789..000000000
--- a/src/test/ui/nll/user-annotations/normalization.stderr
+++ /dev/null
@@ -1,13 +0,0 @@
-error[E0597]: `a` does not live long enough
- --> $DIR/normalization.rs:9:31
- |
-LL | let b: <() as Foo>::Out = &a;
- | ---------------- ^^ borrowed value does not live long enough
- | |
- | type annotation requires that `a` is borrowed for `'static`
-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/src/test/ui/nll/user-annotations/normalize-self-ty.rs b/src/test/ui/nll/user-annotations/normalize-self-ty.rs
deleted file mode 100644
index df905c878..000000000
--- a/src/test/ui/nll/user-annotations/normalize-self-ty.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Regression test for #55183: check a case where the self type from
-// the inherent impl requires normalization to be equal to the
-// user-provided type.
-//
-// check-pass
-
-trait Mirror {
- type Me;
-}
-
-impl<T> Mirror for T {
- type Me = T;
-}
-
-struct Foo<A, B>(A, B);
-
-impl<A> Foo<A, <A as Mirror>::Me> {
- fn m(_: A) { }
-}
-
-fn main() {
- <Foo<&'static u32, &u32>>::m(&22);
-}
diff --git a/src/test/ui/nll/user-annotations/pattern_substs_on_brace_enum_variant.rs b/src/test/ui/nll/user-annotations/pattern_substs_on_brace_enum_variant.rs
deleted file mode 100644
index 59cd69c0c..000000000
--- a/src/test/ui/nll/user-annotations/pattern_substs_on_brace_enum_variant.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-enum Foo<'a> {
- Bar { field: &'a u32 }
-}
-
-fn in_let() {
- let y = 22;
- let foo = Foo::Bar { field: &y };
- //~^ ERROR `y` does not live long enough
- let Foo::Bar::<'static> { field: _z } = foo;
-}
-
-fn in_match() {
- let y = 22;
- let foo = Foo::Bar { field: &y };
- //~^ ERROR `y` does not live long enough
- match foo {
- Foo::Bar::<'static> { field: _z } => {
- }
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/pattern_substs_on_brace_enum_variant.stderr b/src/test/ui/nll/user-annotations/pattern_substs_on_brace_enum_variant.stderr
deleted file mode 100644
index a97e7a9fd..000000000
--- a/src/test/ui/nll/user-annotations/pattern_substs_on_brace_enum_variant.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-error[E0597]: `y` does not live long enough
- --> $DIR/pattern_substs_on_brace_enum_variant.rs:7:33
- |
-LL | let foo = Foo::Bar { field: &y };
- | ^^ borrowed value does not live long enough
-LL |
-LL | let Foo::Bar::<'static> { field: _z } = foo;
- | --------------------------------- type annotation requires that `y` is borrowed for `'static`
-LL | }
- | - `y` dropped here while still borrowed
-
-error[E0597]: `y` does not live long enough
- --> $DIR/pattern_substs_on_brace_enum_variant.rs:14:33
- |
-LL | let foo = Foo::Bar { field: &y };
- | ^^ borrowed value does not live long enough
-...
-LL | Foo::Bar::<'static> { field: _z } => {
- | --------------------------------- type annotation requires that `y` is borrowed for `'static`
-...
-LL | }
- | - `y` dropped here while still borrowed
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/pattern_substs_on_brace_struct.rs b/src/test/ui/nll/user-annotations/pattern_substs_on_brace_struct.rs
deleted file mode 100644
index 1586c4ea3..000000000
--- a/src/test/ui/nll/user-annotations/pattern_substs_on_brace_struct.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-struct Foo<'a> { field: &'a u32 }
-
-fn in_let() {
- let y = 22;
- let foo = Foo { field: &y };
- //~^ ERROR `y` does not live long enough
- let Foo::<'static> { field: _z } = foo;
-}
-
-fn in_main() {
- let y = 22;
- let foo = Foo { field: &y };
- //~^ ERROR `y` does not live long enough
- match foo {
- Foo::<'static> { field: _z } => {
- }
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/pattern_substs_on_brace_struct.stderr b/src/test/ui/nll/user-annotations/pattern_substs_on_brace_struct.stderr
deleted file mode 100644
index 408d7c2a5..000000000
--- a/src/test/ui/nll/user-annotations/pattern_substs_on_brace_struct.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-error[E0597]: `y` does not live long enough
- --> $DIR/pattern_substs_on_brace_struct.rs:5:28
- |
-LL | let foo = Foo { field: &y };
- | ^^ borrowed value does not live long enough
-LL |
-LL | let Foo::<'static> { field: _z } = foo;
- | ---------------------------- type annotation requires that `y` is borrowed for `'static`
-LL | }
- | - `y` dropped here while still borrowed
-
-error[E0597]: `y` does not live long enough
- --> $DIR/pattern_substs_on_brace_struct.rs:12:28
- |
-LL | let foo = Foo { field: &y };
- | ^^ borrowed value does not live long enough
-...
-LL | Foo::<'static> { field: _z } => {
- | ---------------------------- type annotation requires that `y` is borrowed for `'static`
-...
-LL | }
- | - `y` dropped here while still borrowed
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_enum_variant.rs b/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_enum_variant.rs
deleted file mode 100644
index 6fa59fdd8..000000000
--- a/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_enum_variant.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-enum Foo<'a> {
- Bar(&'a u32)
-}
-
-fn in_let() {
- let y = 22;
- let foo = Foo::Bar(&y);
- //~^ ERROR `y` does not live long enough
- let Foo::Bar::<'static>(_z) = foo;
-}
-
-fn in_match() {
- let y = 22;
- let foo = Foo::Bar(&y);
- //~^ ERROR `y` does not live long enough
- match foo {
- Foo::Bar::<'static>(_z) => {
- }
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_enum_variant.stderr b/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_enum_variant.stderr
deleted file mode 100644
index 920c906f6..000000000
--- a/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_enum_variant.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-error[E0597]: `y` does not live long enough
- --> $DIR/pattern_substs_on_tuple_enum_variant.rs:7:24
- |
-LL | let foo = Foo::Bar(&y);
- | ^^ borrowed value does not live long enough
-LL |
-LL | let Foo::Bar::<'static>(_z) = foo;
- | ----------------------- type annotation requires that `y` is borrowed for `'static`
-LL | }
- | - `y` dropped here while still borrowed
-
-error[E0597]: `y` does not live long enough
- --> $DIR/pattern_substs_on_tuple_enum_variant.rs:14:24
- |
-LL | let foo = Foo::Bar(&y);
- | ^^ borrowed value does not live long enough
-...
-LL | Foo::Bar::<'static>(_z) => {
- | ----------------------- type annotation requires that `y` is borrowed for `'static`
-...
-LL | }
- | - `y` dropped here while still borrowed
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_struct.rs b/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_struct.rs
deleted file mode 100644
index 7486aab0e..000000000
--- a/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_struct.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-struct Foo<'a>(&'a u32);
-
-fn in_let() {
- let y = 22;
- let foo = Foo(&y);
- //~^ ERROR `y` does not live long enough
- let Foo::<'static>(_z) = foo;
-}
-
-fn in_match() {
- let y = 22;
- let foo = Foo(&y);
- //~^ ERROR `y` does not live long enough
- match foo {
- Foo::<'static>(_z) => {
- }
- }
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_struct.stderr b/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_struct.stderr
deleted file mode 100644
index 3f01638d8..000000000
--- a/src/test/ui/nll/user-annotations/pattern_substs_on_tuple_struct.stderr
+++ /dev/null
@@ -1,26 +0,0 @@
-error[E0597]: `y` does not live long enough
- --> $DIR/pattern_substs_on_tuple_struct.rs:5:19
- |
-LL | let foo = Foo(&y);
- | ^^ borrowed value does not live long enough
-LL |
-LL | let Foo::<'static>(_z) = foo;
- | ------------------ type annotation requires that `y` is borrowed for `'static`
-LL | }
- | - `y` dropped here while still borrowed
-
-error[E0597]: `y` does not live long enough
- --> $DIR/pattern_substs_on_tuple_struct.rs:12:19
- |
-LL | let foo = Foo(&y);
- | ^^ borrowed value does not live long enough
-...
-LL | Foo::<'static>(_z) => {
- | ------------------ type annotation requires that `y` is borrowed for `'static`
-...
-LL | }
- | - `y` dropped here while still borrowed
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/patterns.rs b/src/test/ui/nll/user-annotations/patterns.rs
deleted file mode 100644
index 1f635d7f5..000000000
--- a/src/test/ui/nll/user-annotations/patterns.rs
+++ /dev/null
@@ -1,136 +0,0 @@
-// Test that various patterns also enforce types.
-
-fn variable_no_initializer() {
- let x = 22;
- let y: &'static u32;
- y = &x; //~ ERROR
-}
-
-fn tuple_no_initializer() {
-
-
- let x = 22;
- let (y, z): (&'static u32, &'static u32);
- y = &x; //~ ERROR
-}
-
-fn ref_with_ascribed_static_type() -> u32 {
- // Check the behavior in some wacky cases.
- let x = 22;
- let y = &x; //~ ERROR
- let ref z: &'static u32 = y;
- **z
-}
-
-fn ref_with_ascribed_any_type() -> u32 {
- let x = 22;
- let y = &x;
- let ref z: &u32 = y;
- **z
-}
-
-struct Single<T> { value: T }
-
-fn struct_no_initializer() {
-
-
- let x = 22;
- let Single { value: y }: Single<&'static u32>;
- y = &x; //~ ERROR
-}
-
-
-fn struct_no_initializer_must_normalize() {
- trait Indirect { type Assoc; }
- struct StaticU32;
- impl Indirect for StaticU32 { type Assoc = &'static u32; }
- struct Single2<T: Indirect> { value: <T as Indirect>::Assoc }
-
- let x = 22;
- let Single2 { value: mut _y }: Single2<StaticU32>;
- _y = &x; //~ ERROR
-}
-
-fn variable_with_initializer() {
- let x = 22;
- let y: &'static u32 = &x; //~ ERROR
-}
-
-fn underscore_with_initializer() {
- let x = 22;
- let _: &'static u32 = &x; //~ ERROR
-
- let _: Vec<&'static String> = vec![&String::new()];
- //~^ ERROR temporary value dropped while borrowed [E0716]
-
- let (_, a): (Vec<&'static String>, _) = (vec![&String::new()], 44);
- //~^ ERROR temporary value dropped while borrowed [E0716]
-
- let (_a, b): (Vec<&'static String>, _) = (vec![&String::new()], 44);
- //~^ ERROR temporary value dropped while borrowed [E0716]
-}
-
-fn pair_underscores_with_initializer() {
- let x = 22;
- let (_, _): (&'static u32, u32) = (&x, 44); //~ ERROR
-}
-
-fn pair_variable_with_initializer() {
- let x = 22;
- let (y, _): (&'static u32, u32) = (&x, 44); //~ ERROR
-}
-
-fn struct_single_field_variable_with_initializer() {
- let x = 22;
- let Single { value: y }: Single<&'static u32> = Single { value: &x }; //~ ERROR
-}
-
-fn struct_single_field_underscore_with_initializer() {
- let x = 22;
- let Single { value: _ }: Single<&'static u32> = Single { value: &x }; //~ ERROR
-}
-
-struct Double<T> { value1: T, value2: T }
-
-fn struct_double_field_underscore_with_initializer() {
- let x = 22;
- let Double { value1: _, value2: _ }: Double<&'static u32> = Double {
- value1: &x, //~ ERROR
- value2: &44,
- };
-}
-
-fn static_to_a_to_static_through_variable<'a>(x: &'a u32) -> &'static u32 {
-
-
-
-
-
-
- let y: &'a u32 = &22;
- y //~ ERROR
-}
-
-fn static_to_a_to_static_through_tuple<'a>(x: &'a u32) -> &'static u32 {
-
-
-
-
-
-
-
- let (y, _z): (&'a u32, u32) = (&22, 44);
- y //~ ERROR
-}
-
-fn static_to_a_to_static_through_struct<'a>(_x: &'a u32) -> &'static u32 {
- let Single { value: y }: Single<&'a u32> = Single { value: &22 };
- y //~ ERROR
-}
-
-fn a_to_static_then_static<'a>(x: &'a u32) -> &'static u32 {
- let (y, _z): (&'static u32, u32) = (x, 44); //~ ERROR
- y
-}
-
-fn main() { }
diff --git a/src/test/ui/nll/user-annotations/patterns.stderr b/src/test/ui/nll/user-annotations/patterns.stderr
deleted file mode 100644
index de6f8f80f..000000000
--- a/src/test/ui/nll/user-annotations/patterns.stderr
+++ /dev/null
@@ -1,189 +0,0 @@
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:6:9
- |
-LL | let y: &'static u32;
- | ------------ type annotation requires that `x` is borrowed for `'static`
-LL | y = &x;
- | ^^ borrowed value does not live long enough
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:14:9
- |
-LL | let (y, z): (&'static u32, &'static u32);
- | ---------------------------- type annotation requires that `x` is borrowed for `'static`
-LL | y = &x;
- | ^^ borrowed value does not live long enough
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:20:13
- |
-LL | let y = &x;
- | ^^ borrowed value does not live long enough
-LL | let ref z: &'static u32 = y;
- | ------------ type annotation requires that `x` is borrowed for `'static`
-LL | **z
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:39:9
- |
-LL | let Single { value: y }: Single<&'static u32>;
- | -------------------- type annotation requires that `x` is borrowed for `'static`
-LL | y = &x;
- | ^^ borrowed value does not live long enough
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:51:10
- |
-LL | let Single2 { value: mut _y }: Single2<StaticU32>;
- | ------------------ type annotation requires that `x` is borrowed for `'static`
-LL | _y = &x;
- | ^^ borrowed value does not live long enough
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:56:27
- |
-LL | let y: &'static u32 = &x;
- | ------------ ^^ borrowed value does not live long enough
- | |
- | type annotation requires that `x` is borrowed for `'static`
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:61:27
- |
-LL | let _: &'static u32 = &x;
- | ------------ ^^ borrowed value does not live long enough
- | |
- | type annotation requires that `x` is borrowed for `'static`
-...
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0716]: temporary value dropped while borrowed
- --> $DIR/patterns.rs:63:41
- |
-LL | let _: Vec<&'static String> = vec![&String::new()];
- | -------------------- ^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
- | | |
- | | creates a temporary value which is freed while still in use
- | type annotation requires that borrow lasts for `'static`
-
-error[E0716]: temporary value dropped while borrowed
- --> $DIR/patterns.rs:66:52
- |
-LL | let (_, a): (Vec<&'static String>, _) = (vec![&String::new()], 44);
- | ------------------------- ^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
- | | |
- | | creates a temporary value which is freed while still in use
- | type annotation requires that borrow lasts for `'static`
-
-error[E0716]: temporary value dropped while borrowed
- --> $DIR/patterns.rs:69:53
- |
-LL | let (_a, b): (Vec<&'static String>, _) = (vec![&String::new()], 44);
- | ------------------------- ^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
- | | |
- | | creates a temporary value which is freed while still in use
- | type annotation requires that borrow lasts for `'static`
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:75:40
- |
-LL | let (_, _): (&'static u32, u32) = (&x, 44);
- | ------------------- ^^ borrowed value does not live long enough
- | |
- | type annotation requires that `x` is borrowed for `'static`
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:80:40
- |
-LL | let (y, _): (&'static u32, u32) = (&x, 44);
- | ------------------- ^^ borrowed value does not live long enough
- | |
- | type annotation requires that `x` is borrowed for `'static`
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:85:69
- |
-LL | let Single { value: y }: Single<&'static u32> = Single { value: &x };
- | -------------------- ^^ borrowed value does not live long enough
- | |
- | type annotation requires that `x` is borrowed for `'static`
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:90:69
- |
-LL | let Single { value: _ }: Single<&'static u32> = Single { value: &x };
- | -------------------- ^^ borrowed value does not live long enough
- | |
- | type annotation requires that `x` is borrowed for `'static`
-LL | }
- | - `x` dropped here while still borrowed
-
-error[E0597]: `x` does not live long enough
- --> $DIR/patterns.rs:98:17
- |
-LL | let Double { value1: _, value2: _ }: Double<&'static u32> = Double {
- | -------------------- type annotation requires that `x` is borrowed for `'static`
-LL | value1: &x,
- | ^^ borrowed value does not live long enough
-...
-LL | }
- | - `x` dropped here while still borrowed
-
-error: lifetime may not live long enough
- --> $DIR/patterns.rs:111:5
- |
-LL | fn static_to_a_to_static_through_variable<'a>(x: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-...
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/patterns.rs:123:5
- |
-LL | fn static_to_a_to_static_through_tuple<'a>(x: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-...
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/patterns.rs:128:5
- |
-LL | fn static_to_a_to_static_through_struct<'a>(_x: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | let Single { value: y }: Single<&'a u32> = Single { value: &22 };
-LL | y
- | ^ returning this value requires that `'a` must outlive `'static`
-
-error: lifetime may not live long enough
- --> $DIR/patterns.rs:132:18
- |
-LL | fn a_to_static_then_static<'a>(x: &'a u32) -> &'static u32 {
- | -- lifetime `'a` defined here
-LL | let (y, _z): (&'static u32, u32) = (x, 44);
- | ^^^^^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static`
-
-error: aborting due to 19 previous errors
-
-Some errors have detailed explanations: E0597, E0716.
-For more information about an error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/promoted-annotation.rs b/src/test/ui/nll/user-annotations/promoted-annotation.rs
deleted file mode 100644
index b92f8bfd2..000000000
--- a/src/test/ui/nll/user-annotations/promoted-annotation.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Test that type annotations are checked in promoted constants correctly.
-
-fn foo<'a>() {
- let x = 0;
- let f = &drop::<&'a i32>;
- f(&x);
- //~^ ERROR `x` does not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/promoted-annotation.stderr b/src/test/ui/nll/user-annotations/promoted-annotation.stderr
deleted file mode 100644
index cb99a6a36..000000000
--- a/src/test/ui/nll/user-annotations/promoted-annotation.stderr
+++ /dev/null
@@ -1,17 +0,0 @@
-error[E0597]: `x` does not live long enough
- --> $DIR/promoted-annotation.rs:6:7
- |
-LL | fn foo<'a>() {
- | -- lifetime `'a` defined here
-LL | let x = 0;
-LL | let f = &drop::<&'a i32>;
- | ---------------- assignment requires that `x` is borrowed for `'a`
-LL | f(&x);
- | ^^ borrowed value does not live long enough
-LL |
-LL | }
- | - `x` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/type-annotation-with-hrtb.rs b/src/test/ui/nll/user-annotations/type-annotation-with-hrtb.rs
deleted file mode 100644
index 1f7c06038..000000000
--- a/src/test/ui/nll/user-annotations/type-annotation-with-hrtb.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Regression test for issue #69490
-
-// check-pass
-
-pub trait Trait<T> {
- const S: &'static str;
-}
-
-impl<T> Trait<()> for T
-where
- T: for<'a> Trait<&'a ()>,
-{
- // Use of `T::S` here caused an ICE
- const S: &'static str = T::S;
-}
-
-// Some similar cases that didn't ICE:
-
-impl<'a, T> Trait<()> for (T,)
-where
- T: Trait<&'a ()>,
-{
- const S: &'static str = T::S;
-}
-
-impl<T> Trait<()> for [T; 1]
-where
- T: Trait<for<'a> fn(&'a ())>,
-{
- const S: &'static str = T::S;
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/type_ascription_static_lifetime.rs b/src/test/ui/nll/user-annotations/type_ascription_static_lifetime.rs
deleted file mode 100644
index 88d646dee..000000000
--- a/src/test/ui/nll/user-annotations/type_ascription_static_lifetime.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-#![allow(warnings)]
-#![feature(type_ascription)]
-
-fn main() {
- let x = 22_u32;
- let y: &u32 = type_ascribe!(&x, &'static u32); //~ ERROR E0597
-}
diff --git a/src/test/ui/nll/user-annotations/type_ascription_static_lifetime.stderr b/src/test/ui/nll/user-annotations/type_ascription_static_lifetime.stderr
deleted file mode 100644
index ccbf3c1d9..000000000
--- a/src/test/ui/nll/user-annotations/type_ascription_static_lifetime.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0597]: `x` does not live long enough
- --> $DIR/type_ascription_static_lifetime.rs:6:33
- |
-LL | let y: &u32 = type_ascribe!(&x, &'static u32);
- | --------------^^---------------
- | | |
- | | borrowed value does not live long enough
- | type annotation requires that `x` is borrowed for `'static`
-LL | }
- | - `x` dropped here while still borrowed
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0597`.
diff --git a/src/test/ui/nll/user-annotations/wf-self-type.rs b/src/test/ui/nll/user-annotations/wf-self-type.rs
deleted file mode 100644
index 539226aab..000000000
--- a/src/test/ui/nll/user-annotations/wf-self-type.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-struct Foo<'a, 'b: 'a>(&'a &'b ());
-
-impl<'a, 'b> Foo<'a, 'b> {
- fn xmute(a: &'b ()) -> &'a () {
- unreachable!()
- }
-}
-
-pub fn foo<'a, 'b>(u: &'b ()) -> &'a () {
- Foo::xmute(u) //~ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/user-annotations/wf-self-type.stderr b/src/test/ui/nll/user-annotations/wf-self-type.stderr
deleted file mode 100644
index 1d3ae7cfb..000000000
--- a/src/test/ui/nll/user-annotations/wf-self-type.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/wf-self-type.rs:10:5
- |
-LL | pub fn foo<'a, 'b>(u: &'b ()) -> &'a () {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | Foo::xmute(u)
- | ^^^^^^^^^^^^^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
- |
- = help: consider adding the following bound: `'b: 'a`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/vimwiki-core-regression.rs b/src/test/ui/nll/vimwiki-core-regression.rs
deleted file mode 100644
index 0a4ed7e0a..000000000
--- a/src/test/ui/nll/vimwiki-core-regression.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-// check-pass
-//
-// Regression test from crater run for
-// <https://github.com/rust-lang/rust/pull/98109>.
-
-
-pub trait ElementLike {}
-
-pub struct Located<T> where T: ElementLike {
- inner: T,
-}
-
-pub struct BlockElement<'a>(&'a str);
-
-impl ElementLike for BlockElement<'_> {}
-
-
-pub struct Page<'a> {
- /// Comprised of the elements within a page
- pub elements: Vec<Located<BlockElement<'a>>>,
-}
-
-impl<'a, __IdxT> std::ops::Index<__IdxT> for Page<'a> where
- Vec<Located<BlockElement<'a>>>: std::ops::Index<__IdxT>
-{
- type Output =
- <Vec<Located<BlockElement<'a>>> as
- std::ops::Index<__IdxT>>::Output;
-
- #[inline]
- fn index(&self, idx: __IdxT) -> &Self::Output {
- <Vec<Located<BlockElement<'a>>> as
- std::ops::Index<__IdxT>>::index(&self.elements, idx)
- }
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/where_clauses_in_functions.rs b/src/test/ui/nll/where_clauses_in_functions.rs
deleted file mode 100644
index 826065d02..000000000
--- a/src/test/ui/nll/where_clauses_in_functions.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-#![allow(dead_code)]
-
-fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> (&'a u32, &'b u32)
-where
- 'a: 'b,
-{
- (x, y)
-}
-
-fn bar<'a, 'b>(x: &'a u32, y: &'b u32) -> (&'a u32, &'b u32) {
- foo(x, y)
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/where_clauses_in_functions.stderr b/src/test/ui/nll/where_clauses_in_functions.stderr
deleted file mode 100644
index afb25e3bc..000000000
--- a/src/test/ui/nll/where_clauses_in_functions.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/where_clauses_in_functions.rs:11:5
- |
-LL | fn bar<'a, 'b>(x: &'a u32, y: &'b u32) -> (&'a u32, &'b u32) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | foo(x, y)
- | ^^^^^^^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
- |
- = help: consider adding the following bound: `'a: 'b`
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/nll/where_clauses_in_structs.rs b/src/test/ui/nll/where_clauses_in_structs.rs
deleted file mode 100644
index fae5d3811..000000000
--- a/src/test/ui/nll/where_clauses_in_structs.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-#![allow(dead_code)]
-
-use std::cell::Cell;
-
-struct Foo<'a: 'b, 'b> {
- x: Cell<&'a u32>,
- y: Cell<&'b u32>,
-}
-
-fn bar<'a, 'b>(x: Cell<&'a u32>, y: Cell<&'b u32>) {
- Foo { x, y };
- //~^ ERROR lifetime may not live long enough
-}
-
-fn main() {}
diff --git a/src/test/ui/nll/where_clauses_in_structs.stderr b/src/test/ui/nll/where_clauses_in_structs.stderr
deleted file mode 100644
index c46cfcb41..000000000
--- a/src/test/ui/nll/where_clauses_in_structs.stderr
+++ /dev/null
@@ -1,17 +0,0 @@
-error: lifetime may not live long enough
- --> $DIR/where_clauses_in_structs.rs:11:11
- |
-LL | fn bar<'a, 'b>(x: Cell<&'a u32>, y: Cell<&'b u32>) {
- | -- -- lifetime `'b` defined here
- | |
- | lifetime `'a` defined here
-LL | Foo { x, y };
- | ^ this usage requires that `'a` must outlive `'b`
- |
- = help: consider adding the following bound: `'a: 'b`
- = note: requirement occurs because of the type `Cell<&u32>`, which makes the generic argument `&u32` invariant
- = note: the struct `Cell<T>` is invariant over the parameter `T`
- = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
-
-error: aborting due to previous error
-