rust/tests/ui/macros
bors 2d17294d18 Auto merge of #111590 - dtolnay:panictemporaries, r=bjorn3
Shorten even more panic temporary lifetimes

Followup to #104134. As pointed out by `@bjorn3` in https://github.com/rust-lang/rust/pull/104134#pullrequestreview-1425585948, there are other cases in the panic macros which would also benefit from dropping their non-Send temporaries as soon as possible, avoiding pointlessly holding them across an await point.

For the tests added in this PR, here are the failures you get today on master without the macro changes in this PR:

<details>
<summary>tests/ui/macros/panic-temporaries-2018.rs</summary>

```console
error: future cannot be sent between threads safely
  --> tests/ui/macros/panic-temporaries-2018.rs:52:18
   |
LL |     require_send(panic_display());
   |                  ^^^^^^^^^^^^^^^ future returned by `panic_display` is not `Send`
   |
   = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `*const u8`
note: future is not `Send` as this value is used across an await
  --> tests/ui/macros/panic-temporaries-2018.rs:35:31
   |
LL |     f(panic!("{}", NOT_SEND)).await;
   |                    --------   ^^^^^- `NOT_SEND` is later dropped here
   |                    |          |
   |                    |          await occurs here, with `NOT_SEND` maybe used later
   |                    has type `NotSend` which is not `Send`
note: required by a bound in `require_send`
  --> tests/ui/macros/panic-temporaries-2018.rs:48:25
   |
LL | fn require_send(_: impl Send) {}
   |                         ^^^^ required by this bound in `require_send`

error: future cannot be sent between threads safely
  --> tests/ui/macros/panic-temporaries-2018.rs:52:18
   |
LL |     require_send(panic_display());
   |                  ^^^^^^^^^^^^^^^ future returned by `panic_display` is not `Send`
   |
   = help: within `NotSend`, the trait `Sync` is not implemented for `*const u8`
note: future is not `Send` as this value is used across an await
  --> tests/ui/macros/panic-temporaries-2018.rs:35:31
   |
LL |     f(panic!("{}", NOT_SEND)).await;
   |       ----------------------  ^^^^^- the value is later dropped here
   |       |                       |
   |       |                       await occurs here, with the value maybe used later
   |       has type `&NotSend` which is not `Send`
note: required by a bound in `require_send`
  --> tests/ui/macros/panic-temporaries-2018.rs:48:25
   |
LL | fn require_send(_: impl Send) {}
   |                         ^^^^ required by this bound in `require_send`

error: future cannot be sent between threads safely
  --> tests/ui/macros/panic-temporaries-2018.rs:53:18
   |
LL |     require_send(panic_str());
   |                  ^^^^^^^^^^^ future returned by `panic_str` is not `Send`
   |
   = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `*const u8`
note: future is not `Send` as this value is used across an await
  --> tests/ui/macros/panic-temporaries-2018.rs:40:36
   |
LL |     f(panic!((NOT_SEND, "...").1)).await;
   |               --------             ^^^^^- `NOT_SEND` is later dropped here
   |               |                    |
   |               |                    await occurs here, with `NOT_SEND` maybe used later
   |               has type `NotSend` which is not `Send`
note: required by a bound in `require_send`
  --> tests/ui/macros/panic-temporaries-2018.rs:48:25
   |
LL | fn require_send(_: impl Send) {}
   |                         ^^^^ required by this bound in `require_send`

error: future cannot be sent between threads safely
  --> tests/ui/macros/panic-temporaries-2018.rs:54:18
   |
LL |     require_send(unreachable_display());
   |                  ^^^^^^^^^^^^^^^^^^^^^ future returned by `unreachable_display` is not `Send`
   |
   = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `*const u8`
note: future is not `Send` as this value is used across an await
  --> tests/ui/macros/panic-temporaries-2018.rs:45:31
   |
LL |     f(unreachable!(NOT_SEND)).await;
   |                    --------   ^^^^^- `NOT_SEND` is later dropped here
   |                    |          |
   |                    |          await occurs here, with `NOT_SEND` maybe used later
   |                    has type `NotSend` which is not `Send`
note: required by a bound in `require_send`
  --> tests/ui/macros/panic-temporaries-2018.rs:48:25
   |
LL | fn require_send(_: impl Send) {}
   |                         ^^^^ required by this bound in `require_send`

error: future cannot be sent between threads safely
  --> tests/ui/macros/panic-temporaries-2018.rs:54:18
   |
LL |     require_send(unreachable_display());
   |                  ^^^^^^^^^^^^^^^^^^^^^ future returned by `unreachable_display` is not `Send`
   |
   = help: within `NotSend`, the trait `Sync` is not implemented for `*const u8`
note: future is not `Send` as this value is used across an await
  --> tests/ui/macros/panic-temporaries-2018.rs:45:31
   |
LL |     f(unreachable!(NOT_SEND)).await;
   |       ----------------------  ^^^^^- the value is later dropped here
   |       |                       |
   |       |                       await occurs here, with the value maybe used later
   |       has type `&NotSend` which is not `Send`
note: required by a bound in `require_send`
  --> tests/ui/macros/panic-temporaries-2018.rs:48:25
   |
LL | fn require_send(_: impl Send) {}
   |                         ^^^^ required by this bound in `require_send`

error: aborting due to 5 previous errors
```
</details>

<details>
<summary>tests/ui/macros/panic-temporaries.rs</summary>

```console
error: future cannot be sent between threads safely
  --> tests/ui/macros/panic-temporaries.rs:42:18
   |
LL |     require_send(panic_display());
   |                  ^^^^^^^^^^^^^^^ future returned by `panic_display` is not `Send`
   |
   = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `*const u8`
note: future is not `Send` as this value is used across an await
  --> tests/ui/macros/panic-temporaries.rs:35:31
   |
LL |     f(panic!("{}", NOT_SEND)).await;
   |                    --------   ^^^^^- `NOT_SEND` is later dropped here
   |                    |          |
   |                    |          await occurs here, with `NOT_SEND` maybe used later
   |                    has type `NotSend` which is not `Send`
note: required by a bound in `require_send`
  --> tests/ui/macros/panic-temporaries.rs:38:25
   |
LL | fn require_send(_: impl Send) {}
   |                         ^^^^ required by this bound in `require_send`

error: future cannot be sent between threads safely
  --> tests/ui/macros/panic-temporaries.rs:42:18
   |
LL |     require_send(panic_display());
   |                  ^^^^^^^^^^^^^^^ future returned by `panic_display` is not `Send`
   |
   = help: within `NotSend`, the trait `Sync` is not implemented for `*const u8`
note: future is not `Send` as this value is used across an await
  --> tests/ui/macros/panic-temporaries.rs:35:31
   |
LL |     f(panic!("{}", NOT_SEND)).await;
   |       ----------------------  ^^^^^- the value is later dropped here
   |       |                       |
   |       |                       await occurs here, with the value maybe used later
   |       has type `&NotSend` which is not `Send`
note: required by a bound in `require_send`
  --> tests/ui/macros/panic-temporaries.rs:38:25
   |
LL | fn require_send(_: impl Send) {}
   |                         ^^^^ required by this bound in `require_send`

error: aborting due to 2 previous errors
```
</details>

r? bjorn3
2023-05-19 07:15:38 +00:00
..
auxiliary
issue-69838-dir
macro-expanded-include Add some reasons why tests are ignored. 2023-04-15 16:11:42 -07:00
rfc-2011-nicer-assert-messages Shorten lifetime of panic temporaries in panic_fmt case 2023-05-14 07:27:20 -07:00
rfc-3086-metavar-expr
syntax-extension-source-utils-files
ambiguity-legacy-vs-modern.rs
ambiguity-legacy-vs-modern.stderr
assert-as-macro.rs
assert-eq-macro-msg.rs
assert-eq-macro-panic.rs
assert-eq-macro-success.rs
assert-eq-macro-unsized.rs
assert-format-lazy.rs
assert-macro-explicit.rs
assert-macro-fmt.rs
assert-macro-owned.rs
assert-macro-static.rs
assert-matches-macro-msg.rs
assert-ne-macro-msg.rs
assert-ne-macro-panic.rs
assert-ne-macro-success.rs
assert-ne-macro-unsized.rs
assert-trailing-junk.rs
assert-trailing-junk.with-generic-asset.stderr
assert-trailing-junk.without-generic-asset.stderr
assert.rs
assert.with-generic-asset.stderr
assert.without-generic-asset.stderr
attr-empty-expr.rs
attr-empty-expr.stderr
attr-from-macro.rs
bad_hello.rs
bad_hello.stderr
bad-concat.rs
bad-concat.stderr
bang-after-name.fixed
bang-after-name.rs
bang-after-name.stderr
best-failure.rs
best-failure.stderr
builtin-prelude-no-accidents.rs
builtin-prelude-no-accidents.stderr refactor(resolve): clean up the early error return caused by non-call 2023-05-10 22:35:01 +08:00
builtin-std-paths-fail.rs
builtin-std-paths-fail.stderr
builtin-std-paths.rs
cfg.rs
cfg.stderr
colorful-write-macros.rs
concat-bytes-error.rs
concat-bytes-error.stderr
concat-bytes.rs
concat-rpass.rs
concat.rs
concat.stderr
conditional-debug-macro-on.rs
cross-crate-pat-span.rs
derive-in-eager-expansion-hang.rs
derive-in-eager-expansion-hang.stderr
die-macro-2.rs
die-macro-expr.rs
die-macro-pure.rs
die-macro.rs
doc-comment.rs
dollar-crate-nested-encoding.rs
duplicate-builtin.rs
duplicate-builtin.stderr
edition-macro-pats.rs
empty-trailing-stmt.rs
empty-trailing-stmt.stderr
format-args-temporaries-async.rs
format-args-temporaries-in-write.rs
format-args-temporaries-in-write.stderr
format-args-temporaries.rs
format-foreign.rs
format-foreign.stderr
format-parse-errors.rs
format-parse-errors.stderr
format-unused-lables.rs
format-unused-lables.stderr
global-asm.rs
global-asm.stderr
html-literals.rs
include-single-expr-helper-1.rs
include-single-expr-helper.rs
include-single-expr.rs
include-single-expr.stderr
issue-2804-2.rs Move tests 2023-05-08 17:58:01 -03:00
issue-5060.rs
issue-6596-1.rs
issue-6596-1.stderr
issue-8709.rs
issue-8851.rs
issue-10536.rs
issue-10536.stderr
issue-16098.rs
issue-16098.stderr
issue-19163.rs
issue-19163.stderr
issue-21356.rs
issue-21356.stderr
issue-22463.rs
issue-25274.rs
issue-25385.rs
issue-25385.stderr
issue-26094.rs Move test files 2023-04-20 15:06:17 -03:00
issue-26094.stderr Move test files 2023-04-20 15:06:17 -03:00
issue-26322.rs
issue-29084.rs
issue-29084.stderr
issue-30143.rs
issue-30143.stderr
issue-33185.rs
issue-34171.rs
issue-34421-mac-expr-bad-stmt-good-add-semi.rs
issue-34421-mac-expr-bad-stmt-good-add-semi.stderr
issue-35450.rs
issue-35450.stderr
issue-37175.rs
issue-38715.rs
issue-38715.stderr
issue-39388.rs
issue-39388.stderr
issue-39404.rs
issue-39404.stderr
issue-40469.rs
issue-40770.rs
issue-41776.rs
issue-41776.stderr
issue-41803.rs
issue-42954.fixed
issue-42954.rs
issue-42954.stderr
issue-44127.rs
issue-51848.rs
issue-51848.stderr
issue-52169.rs
issue-54441.rs
issue-54441.stderr
issue-57597.rs
issue-57597.stderr
issue-58490.rs
issue-58490.stderr
issue-61033-1.rs
issue-61033-1.stderr
issue-61033-2.rs
issue-61033-2.stderr
issue-61053-different-kleene.rs
issue-61053-different-kleene.stderr
issue-61053-duplicate-binder.rs
issue-61053-duplicate-binder.stderr
issue-61053-missing-repetition.rs
issue-61053-missing-repetition.stderr
issue-61053-unbound.rs
issue-61053-unbound.stderr
issue-63102.rs
issue-68058.rs
issue-68060.rs
issue-68060.stderr
issue-69396-const-no-type-in-macro.rs Move test files 2023-04-20 15:06:17 -03:00
issue-69396-const-no-type-in-macro.stderr Move test files 2023-04-20 15:06:17 -03:00
issue-69838-mods-relative-to-included-path.rs
issue-70446.rs
issue-75982-foreign-macro-weird-mod.rs
issue-77475.rs
issue-78325-inconsistent-resolution.rs
issue-78325-inconsistent-resolution.stderr
issue-78333.rs
issue-78892-substitution-in-statement-attr.rs
issue-81006.rs
issue-81006.stderr
issue-83340.rs
issue-83340.stderr
issue-83344.rs
issue-83344.stderr
issue-84195-lint-anon-const.rs
issue-84195-lint-anon-const.stderr
issue-84429-matches-edition.rs
issue-84632-eager-expansion-recursion-limit.rs
issue-84632-eager-expansion-recursion-limit.stderr
issue-86082-option-env-invalid-char.rs
issue-86865.rs
issue-86865.stderr
issue-87877.rs
issue-88206.rs
issue-88206.stderr
issue-88228.rs
issue-88228.stderr
issue-92267.rs
issue-92267.stderr
issue-95267.rs
issue-95533.rs
issue-98466-allow.rs
issue-98466.fixed
issue-98466.rs
issue-98466.stderr
issue-98790.rs
issue-99261.rs
issue-99265.fixed
issue-99265.rs
issue-99265.stderr
issue-99907.fixed
issue-99907.rs
issue-99907.stderr
issue-100199.rs
issue-100199.stderr
issue-102878.rs
issue-102878.stderr
issue-103529.rs
issue-103529.stderr
issue-104769-concat_bytes-invalid-literal.rs
issue-104769-concat_bytes-invalid-literal.stderr
issue-105011.rs
issue-105011.stderr
issue-106837.rs
issue-106837.stderr
issue-109237.rs
issue-109237.stderr
lint-trailing-macro-call.rs
lint-trailing-macro-call.stderr
local-ambiguity-multiple-parsing-options.rs
local-ambiguity-multiple-parsing-options.stderr
log_syntax-trace_macros-macro-locations.rs
log_syntax-trace_macros-macro-locations.stdout
macro_path_as_generic_bound.rs
macro_path_as_generic_bound.stderr
macro_rules-unmatchable-literals.rs
macro_rules-unmatchable-literals.stderr
macro_undefined.rs
macro_undefined.stderr
macro_with_super_2.rs
macro-2.rs
macro-as-fn-body.rs
macro-at-most-once-rep-2015-rpass.rs
macro-at-most-once-rep-2015.rs
macro-at-most-once-rep-2015.stderr
macro-at-most-once-rep-2018-rpass.rs
macro-at-most-once-rep-2018.rs
macro-at-most-once-rep-2018.stderr
macro-attribute-expansion.rs
macro-attribute.rs
macro-attribute.stderr
macro-attributes.rs
macro-backtrace-invalid-internals.rs
macro-backtrace-invalid-internals.stderr
macro-backtrace-nested.rs
macro-backtrace-nested.stderr
macro-backtrace-println.rs
macro-backtrace-println.stderr
macro-block-nonterminal.rs
macro-comma-behavior-rpass.rs
macro-comma-behavior.core.stderr
macro-comma-behavior.rs
macro-comma-behavior.std.stderr
macro-comma-support-rpass.rs
macro-comma-support.rs
macro-comma-support.stderr
macro-context.rs
macro-context.stderr
macro-crate-def-only.rs
macro-crate-nonterminal-non-root.rs
macro-crate-nonterminal-non-root.stderr
macro-crate-nonterminal-renamed.rs
macro-crate-nonterminal.rs
macro-crate-use.rs
macro-deep_expansion.rs
macro-def-site-super.rs
macro-delimiter-significance.rs
macro-deprecation.rs
macro-deprecation.stderr
macro-doc-comments.rs
macro-doc-escapes.rs
macro-doc-raw-str-hashes.rs
macro-error.rs
macro-error.stderr
macro-expansion-tests.rs
macro-expansion-tests.stderr
macro-export-inner-module.rs
macro-first-set.rs
macro-follow-rpass.rs
macro-follow.rs
macro-follow.stderr
macro-followed-by-seq-bad.rs
macro-followed-by-seq-bad.stderr
macro-followed-by-seq.rs
macro-in-expression-context-2.rs
macro-in-expression-context-2.stderr
macro-in-expression-context.fixed
macro-in-expression-context.rs
macro-in-expression-context.stderr
macro-in-fn.rs
macro-include-items.rs
macro-inner-attributes.rs
macro-inner-attributes.stderr
macro-input-future-proofing.rs
macro-input-future-proofing.stderr
macro-interpolation.rs
macro-invalid-fragment-spec.rs
macro-invalid-fragment-spec.stderr
macro-invocation-in-count-expr-fixed-array-type.rs
macro-lifetime-used-with-bound.rs
macro-lifetime-used-with-labels.rs
macro-lifetime-used-with-static.rs
macro-lifetime.rs
macro-literal.rs
macro-local-data-key-priv.rs
macro-local-data-key-priv.stderr Update tests. 2023-04-26 21:02:56 +02:00
macro-match-nonterminal.rs
macro-match-nonterminal.stderr
macro-meta-items-modern.rs
macro-meta-items.rs
macro-method-issue-4621.rs
macro-missing-delimiters.rs
macro-missing-delimiters.stderr
macro-missing-fragment-deduplication.rs
macro-missing-fragment-deduplication.stderr
macro-missing-fragment.rs
macro-missing-fragment.stderr
macro-multiple-items.rs
macro-multiple-matcher-bindings.rs
macro-multiple-matcher-bindings.stderr
macro-name-typo.rs
macro-name-typo.stderr
macro-named-default.rs
macro-nested_definition_issue-31946.rs
macro-nested_expr.rs
macro-nested_stmt_macros.rs
macro-non-lifetime.rs
macro-non-lifetime.stderr
macro-nt-list.rs
macro-of-higher-order.rs
macro-or-patterns-back-compat.fixed
macro-or-patterns-back-compat.rs
macro-or-patterns-back-compat.stderr
macro-outer-attributes.rs
macro-outer-attributes.stderr
macro-parameter-span.rs
macro-parameter-span.stderr
macro-pat2021-pattern-followed-by-or.rs
macro-pat2021-pattern-followed-by-or.stderr
macro-pat-follow-2018.rs
macro-pat-follow.rs
macro-pat-neg-lit.rs
macro-pat-pattern-followed-by-or-in-2021.rs
macro-pat-pattern-followed-by-or-in-2021.stderr
macro-pat-pattern-followed-by-or.rs
macro-pat.rs
macro-path-prelude-fail-1.rs
macro-path-prelude-fail-1.stderr
macro-path-prelude-fail-2.rs
macro-path-prelude-fail-2.stderr
macro-path-prelude-fail-3.rs
macro-path-prelude-fail-3.stderr
macro-path-prelude-fail-4.rs
macro-path-prelude-fail-4.stderr
macro-path-prelude-fail-5.rs
macro-path-prelude-fail-5.stderr
macro-path-prelude-pass.rs
macro-path-prelude-shadowing.rs
macro-path-prelude-shadowing.stderr
macro-path.rs
macro-pub-matcher.rs
macro-reexport-removed.rs
macro-reexport-removed.stderr
macro-seq-followed-by-seq.rs
macro-shadowing-relaxed.rs
macro-shadowing.rs
macro-shadowing.stderr
macro-stability-rpass.rs
macro-stability.rs
macro-stability.stderr
macro-stmt_macro_in_expr_macro.rs
macro-stmt-matchers.rs
macro-stmt.rs
macro-tt-followed-by-seq.rs
macro-tt-matchers.rs
macro-use-all-and-none.rs
macro-use-all-and-none.stderr
macro-use-all.rs
macro-use-bad-args-1.rs
macro-use-bad-args-1.stderr
macro-use-bad-args-2.rs
macro-use-bad-args-2.stderr
macro-use-both.rs
macro-use-one.rs
macro-use-scope.rs
macro-use-undef.rs
macro-use-undef.stderr
macro-use-wrong-name.rs
macro-use-wrong-name.stderr
macro-with-attrs1.rs
macro-with-attrs2.rs
macro-with-braces-in-expr-position.rs
macros-in-extern.rs
macros-nonfatal-errors.rs
macros-nonfatal-errors.stderr
malformed_macro_lhs.rs
malformed_macro_lhs.stderr
meta-item-absolute-path.rs
meta-item-absolute-path.stderr
meta-variable-depth-outside-repeat.rs
meta-variable-depth-outside-repeat.stderr
meta-variable-misuse.rs
missing-bang-in-decl.fixed
missing-bang-in-decl.rs
missing-bang-in-decl.stderr Migrate trivially translatable rustc_parse diagnostics 2023-04-27 01:53:06 +01:00
missing-comma.rs
missing-comma.stderr
missing-writer.rs
missing-writer.stderr
must-use-in-macro-55516.rs
must-use-in-macro-55516.stderr
nested-use-as.rs
no-std-macros.rs
none-delim-lookahead.rs
nonterminal-matching.rs
nonterminal-matching.stderr
not-utf8.bin
not-utf8.rs
not-utf8.stderr
out-of-order-shadowing.rs
out-of-order-shadowing.stderr
panic-temporaries-2018.rs Add test coverage of more varieties of panic temporaries 2023-05-15 03:47:37 -07:00
panic-temporaries.rs Add test coverage of more varieties of panic temporaries 2023-05-15 03:47:37 -07:00
parse-complex-macro-invoc-op.rs Adjust tests for new drop and forget lints 2023-05-10 19:36:02 +02:00
paths-in-macro-invocations.rs
proc_macro.rs
pub-item-inside-macro.rs
pub-method-inside-macro.rs
recovery-allowed.rs
recovery-allowed.stderr
recovery-forbidden.rs
restricted-shadowing-legacy.rs
restricted-shadowing-legacy.stderr
restricted-shadowing-modern.rs
restricted-shadowing-modern.stderr
same-sequence-span.rs
same-sequence-span.stderr
semi-after-macro-ty.rs
span-covering-argument-1.rs
span-covering-argument-1.stderr
stmt_expr_attr_macro_parse.rs
stringify.rs Rip it out 2023-05-01 16:15:13 +08:00
syntax-error-recovery.rs
syntax-error-recovery.stderr
syntax-extension-cfg.rs
syntax-extension-source-utils.rs
trace_faulty_macros.rs
trace_faulty_macros.stderr
trace_macros-format.rs
trace_macros-format.stderr
trace-macro.rs
trace-macro.stderr
try-macro.rs
two-macro-use.rs
type-macros-hlist.rs
type-macros-simple.rs
typeck-macro-interaction-issue-8852.rs
unimplemented-macro-panic.rs
unknown-builtin.rs
unknown-builtin.stderr
unreachable-arg.edition_2021.stderr
unreachable-arg.rs
unreachable-fmt-msg.rs
unreachable-format-arg.rs
unreachable-format-args.edition_2015.stderr
unreachable-format-args.rs
unreachable-macro-panic.rs
unreachable-static-msg.rs
unreachable.rs
use-macro-self.rs
user-defined-macro-rules.rs offset_of 2023-04-21 02:14:02 -07:00
vec-macro-in-pattern.rs
vec-macro-in-pattern.stderr