rust/compiler
bors 8cc6f34653 Auto merge of #119427 - dtolnay:maccall, r=compiler-errors
Fix, document, and test parser and pretty-printer edge cases related to braced macro calls

_Review note: this is a deceptively small PR because it comes with 145 lines of docs and 196 lines of tests, and only 25 lines of compiler code changed. However, I recommend reviewing it 1 commit at a time because much of the effect of the code changes is non-local i.e. affecting code that is not visible in the final state of the PR. I have paid attention that reviewing the PR one commit at a time is as easy as I can make it. All of the code you need to know about is touched in those commits, even if some of those changes disappear by the end of the stack._

This is a follow-up to https://github.com/rust-lang/rust/pull/119105. One case that is not relevant to `-Zunpretty=expanded`, but which came up as I'm porting #119105 and #118726 into `syn`'s printer and `prettyplease`'s printer where it **is** relevant, and is also relevant to rustc's `stringify!`, is statement boundaries in the vicinity of braced macro calls.

Rustc's AST pretty-printer produces invalid syntax for statements that begin with a braced macro call:

```rust
macro_rules! stringify_item {
    ($i:item) => {
        stringify!($i)
    };
}

macro_rules! repro {
    ($e:expr) => {
        stringify_item!(fn main() { $e + 1; })
    };
}

fn main() {
    println!("{}", repro!(m! {}));
}
```

**Before this PR:** output is not valid Rust syntax.

```console
fn main() { m! {} + 1; }
```

```console
error: leading `+` is not supported
 --> <anon>:1:19
  |
1 | fn main() { m! {} + 1; }
  |                   ^ unexpected `+`
  |
help: try removing the `+`
  |
1 - fn main() { m! {} + 1; }
1 + fn main() { m! {}  1; }
  |
```

**After this PR:** valid syntax.

```console
fn main() { (m! {}) + 1; }
```
2024-05-12 04:18:20 +00:00
..
rustc Change SIGPIPE ui from #[unix_sigpipe = "..."] to -Zon-broken-pipe=... 2024-05-02 19:48:29 +02:00
rustc_abi Rollup merge of #124797 - beetrees:primitive-float, r=davidtwco 2024-05-10 16:10:46 +02:00
rustc_arena
rustc_ast Add classify::expr_is_complete 2024-05-11 18:18:20 -07:00
rustc_ast_ir Remove extern crate rustc_macros from numerous crates. 2024-04-29 10:21:54 +10:00
rustc_ast_lowering Add ErrorGuaranteed to Recovered::Yes and use it more. 2024-05-09 20:12:07 +10:00
rustc_ast_passes Stabilize exclusive_range 2024-05-02 19:42:31 -04:00
rustc_ast_pretty Fix redundant parens around braced macro call in match arms 2024-05-11 18:18:20 -07:00
rustc_attr Remove extern crate rustc_macros from numerous crates. 2024-04-29 10:21:54 +10:00
rustc_baked_icu_data
rustc_borrowck Consolidate obligation cause codes for where clauses 2024-05-11 02:10:45 -04:00
rustc_builtin_macros Rollup merge of #124919 - nnethercote:Recovered-Yes-ErrorGuaranteed, r=compiler-errors 2024-05-09 19:09:30 +02:00
rustc_codegen_cranelift Rollup merge of #124957 - compiler-errors:builtin-deref, r=michaelwoerister 2024-05-10 16:10:47 +02:00
rustc_codegen_gcc Auto merge of #124972 - matthiaskrgr:rollup-3fablim, r=matthiaskrgr 2024-05-10 16:04:26 +00:00
rustc_codegen_llvm Auto merge of #124972 - matthiaskrgr:rollup-3fablim, r=matthiaskrgr 2024-05-10 16:04:26 +00:00
rustc_codegen_ssa Refactoring after the PlaceValue addition 2024-05-10 20:09:37 -07:00
rustc_const_eval Consolidate obligation cause codes for where clauses 2024-05-11 02:10:45 -04:00
rustc_data_structures Rollup merge of #124818 - compiler-errors:ena, r=Mark-Simulacrum 2024-05-11 08:00:15 +02:00
rustc_driver
rustc_driver_impl compiler: upgrade time from 0.3.34 to 0.3.36 2024-05-04 21:18:41 -07:00
rustc_error_codes Stabilize exclusive_range 2024-05-02 19:42:31 -04:00
rustc_error_messages
rustc_errors Uplift NormalizesTo, CoercePredicate, and SubtypePredicate 2024-05-11 18:20:00 -04:00
rustc_expand Add ErrorGuaranteed to Recovered::Yes and use it more. 2024-05-09 20:12:07 +10:00
rustc_feature Auto merge of #124747 - MasterAwesome:master, r=davidtwco 2024-05-06 00:55:49 +00:00
rustc_fluent_macro
rustc_fs_util Stabilize std::path::absolute 2024-04-24 14:35:02 +00:00
rustc_graphviz
rustc_hir Rollup merge of #124919 - nnethercote:Recovered-Yes-ErrorGuaranteed, r=compiler-errors 2024-05-09 19:09:30 +02:00
rustc_hir_analysis Apply nits, uplift ExistentialPredicate too 2024-05-11 18:20:00 -04:00
rustc_hir_pretty put hir::AnonConst on the hir arena 2024-04-26 12:57:02 +00:00
rustc_hir_typeck Auto merge of #124988 - compiler-errors:name-span, r=lcnr 2024-05-11 19:48:04 +00:00
rustc_incremental Auto merge of #123441 - saethlin:fixed-len-file-names, r=oli-obk 2024-05-03 17:41:48 +00:00
rustc_index Simplify static_assert_sizes. 2024-04-18 15:36:25 +10:00
rustc_index_macros rustc_index: Add a ZERO constant to index types 2024-04-03 19:06:22 +03:00
rustc_infer Consolidate obligation cause codes for where clauses 2024-05-11 02:10:45 -04:00
rustc_interface Improve check-cfg CLI errors with more structured diagnostics 2024-05-06 07:44:41 +02:00
rustc_lexer Improved the compiler code with clippy 2024-04-24 09:41:44 +02:00
rustc_lint Auto merge of #119427 - dtolnay:maccall, r=compiler-errors 2024-05-12 04:18:20 +00:00
rustc_lint_defs Stabilize exclusive_range 2024-05-02 19:42:31 -04:00
rustc_llvm Update cc crate to v1.0.97 2024-05-08 15:06:35 +00:00
rustc_log Construct SourceMap at the same time as SessionGlobals. 2024-04-16 13:02:53 +10:00
rustc_macros Lift Lift 2024-05-10 15:44:03 -04:00
rustc_metadata Rename Generics::params to Generics::own_params 2024-05-09 20:58:46 -04:00
rustc_middle And ImplPolarity too 2024-05-11 19:29:26 -04:00
rustc_mir_build Use fewer origins when creating type variables. 2024-05-10 09:47:46 +10:00
rustc_mir_dataflow Inline & delete Ty::new_unit, since it's just a field access 2024-05-02 17:49:23 +02:00
rustc_mir_transform Rollup merge of #124957 - compiler-errors:builtin-deref, r=michaelwoerister 2024-05-10 16:10:47 +02:00
rustc_monomorphize Lift TraitRef into rustc_type_ir 2024-05-10 15:44:03 -04:00
rustc_next_trait_solver Lift TraitRef into rustc_type_ir 2024-05-10 15:44:03 -04:00
rustc_parse Add classify::expr_is_complete 2024-05-11 18:18:20 -07:00
rustc_parse_format Simplify static_assert_sizes. 2024-04-18 15:36:25 +10:00
rustc_passes Rollup merge of #124904 - RalfJung:reachable, r=tmiasko 2024-05-11 01:15:10 +01:00
rustc_pattern_analysis Stabilize exclusive_range 2024-05-02 19:42:31 -04:00
rustc_privacy Lift TraitRef into rustc_type_ir 2024-05-10 15:44:03 -04:00
rustc_query_impl Simplify use crate::rustc_foo::bar occurrences. 2024-05-08 16:57:31 +10:00
rustc_query_system Remove some unneeded Cargo.toml dependencies. 2024-05-03 15:33:52 +10:00
rustc_resolve Rollup merge of #123344 - pietroalbini:pa-unused-imports, r=Nilstrieb 2024-05-08 23:33:24 +02:00
rustc_sanitizers Apply nits, uplift ExistentialPredicate too 2024-05-11 18:20:00 -04:00
rustc_serialize Step bootstrap cfgs 2024-05-01 22:19:11 -04:00
rustc_session Add rustfmt cfg to well known cfgs list 2024-05-05 14:30:35 +02:00
rustc_smir Rollup merge of #124797 - beetrees:primitive-float, r=davidtwco 2024-05-10 16:10:46 +02:00
rustc_span Auto merge of #124747 - MasterAwesome:master, r=davidtwco 2024-05-06 00:55:49 +00:00
rustc_symbol_mangling Make builtin_deref just return a Ty 2024-05-09 22:55:00 -04:00
rustc_target Auto merge of #124762 - madsmtm:refactor-apple-target-abi, r=lcnr,BlackHoleFox 2024-05-11 08:32:35 +00:00
rustc_trait_selection Apply nits, uplift ExistentialPredicate too 2024-05-11 18:20:00 -04:00
rustc_traits Apply nits, make some bounds into supertraits on inherent traits 2024-05-10 15:44:03 -04:00
rustc_transmute Align: add bytes_usize and bits_usize 2024-05-01 15:57:33 +02:00
rustc_ty_utils Rollup merge of #124797 - beetrees:primitive-float, r=davidtwco 2024-05-10 16:10:46 +02:00
rustc_type_ir And ImplPolarity too 2024-05-11 19:29:26 -04:00
rustc_type_ir_macros Uplift TraitPredicate 2024-05-11 18:20:00 -04:00
stable_mir Use generic NonZero. 2024-05-08 21:37:55 +02:00