rust/compiler
Michael Goulet e6a3ca0c65
Rollup merge of #117988 - estebank:issue-106020, r=cjgillot
Handle attempts to have multiple `cfg`d tail expressions

When encountering code that seems like it might be trying to have multiple tail expressions depending on `cfg` information, suggest alternatives that will success to parse.

```rust
fn foo() -> String {
    #[cfg(feature = "validation")]
    [1, 2, 3].iter().map(|c| c.to_string()).collect::<String>()
    #[cfg(not(feature = "validation"))]
    String::new()
}
```

```
error: expected `;`, found `#`
  --> $DIR/multiple-tail-expr-behind-cfg.rs:5:64
   |
LL |     #[cfg(feature = "validation")]
   |     ------------------------------ only `;` terminated statements or tail expressions are allowed after this attribute
LL |     [1, 2, 3].iter().map(|c| c.to_string()).collect::<String>()
   |                                                                ^ expected `;` here
LL |     #[cfg(not(feature = "validation"))]
   |     - unexpected token
   |
help: add `;` here
   |
LL |     [1, 2, 3].iter().map(|c| c.to_string()).collect::<String>();
   |                                                                +
help: alternatively, consider surrounding the expression with a block
   |
LL |     { [1, 2, 3].iter().map(|c| c.to_string()).collect::<String>() }
   |     +                                                             +
help: it seems like you are trying to provide different expressions depending on `cfg`, consider using `if cfg!(..)`
   |
LL ~     if cfg!(feature = "validation") {
LL ~         [1, 2, 3].iter().map(|c| c.to_string()).collect::<String>()
LL ~     } else if cfg!(not(feature = "validation")) {
LL ~         String::new()
LL +     }
   |
```

Fix #106020.

r? `@oli-obk`
2023-11-19 19:14:34 -08:00
..
rustc
rustc_abi
rustc_arena
rustc_ast Auto merge of #114292 - estebank:issue-71039, r=b-naber 2023-11-17 20:57:12 +00:00
rustc_ast_lowering Rollup merge of #117549 - DaniPopes:more-copied, r=b-naber 2023-11-17 23:04:22 +01:00
rustc_ast_passes
rustc_ast_pretty
rustc_attr
rustc_baked_icu_data
rustc_borrowck Auto merge of #117944 - lcnr:region-refactor-uwu, r=BoxyUwU 2023-11-17 14:27:20 +00:00
rustc_builtin_macros
rustc_codegen_cranelift
rustc_codegen_gcc
rustc_codegen_llvm Auto merge of #117500 - RalfJung:aggregate-abi, r=davidtwco 2023-11-19 18:42:20 +00:00
rustc_codegen_ssa Rollup merge of #117832 - RalfJung:interpret-shift, r=cjgillot 2023-11-19 19:14:33 -08:00
rustc_const_eval Rollup merge of #117832 - RalfJung:interpret-shift, r=cjgillot 2023-11-19 19:14:33 -08:00
rustc_data_structures
rustc_driver
rustc_driver_impl Auto merge of #118002 - nnethercote:unify-input-no-input, r=bjorn3 2023-11-18 16:43:47 +00:00
rustc_error_codes
rustc_error_messages
rustc_errors Remove unnecessary .collect() 2023-11-19 17:50:47 +00:00
rustc_expand
rustc_feature
rustc_fluent_macro
rustc_fs_util
rustc_graphviz
rustc_hir
rustc_hir_analysis Rollup merge of #117828 - Nilstrieb:astconv-hashmaps, r=petrochenkov 2023-11-19 19:14:32 -08:00
rustc_hir_pretty
rustc_hir_typeck fix rebase 2023-11-19 18:07:22 +00:00
rustc_incremental
rustc_index Begin nightly-ifying rustc_type_ir 2023-11-18 00:20:00 +00:00
rustc_index_macros Begin nightly-ifying rustc_type_ir 2023-11-18 00:20:00 +00:00
rustc_infer Rollup merge of #117549 - DaniPopes:more-copied, r=b-naber 2023-11-17 23:04:22 +01:00
rustc_interface
rustc_lexer
rustc_lint catch pinned must_use types in unused_must_use 2023-11-18 20:04:50 -08:00
rustc_lint_defs
rustc_llvm
rustc_log
rustc_macros Don't sort span_suggestions, leave that to caller 2023-11-19 17:50:45 +00:00
rustc_metadata
rustc_middle Rollup merge of #117832 - RalfJung:interpret-shift, r=cjgillot 2023-11-19 19:14:33 -08:00
rustc_mir_build Rollup merge of #117832 - RalfJung:interpret-shift, r=cjgillot 2023-11-19 19:14:33 -08:00
rustc_mir_dataflow
rustc_mir_transform Auto merge of #116828 - compiler-errors:nightlyify-rustc_type_ir, r=jackh726 2023-11-19 22:55:15 +00:00
rustc_monomorphize
rustc_parse Rollup merge of #117988 - estebank:issue-106020, r=cjgillot 2023-11-19 19:14:34 -08:00
rustc_parse_format
rustc_passes
rustc_privacy
rustc_query_impl
rustc_query_system
rustc_resolve fix rebase 2023-11-19 18:07:22 +00:00
rustc_serialize
rustc_session change smir to StableMir 2023-11-17 13:28:07 +03:00
rustc_smir use new apis and add new function 2023-11-17 23:28:17 +03:00
rustc_span
rustc_symbol_mangling
rustc_target Auto merge of #117500 - RalfJung:aggregate-abi, r=davidtwco 2023-11-19 18:42:20 +00:00
rustc_trait_selection Auto merge of #117742 - weiznich:turn_overlapping_diagnostic_options_into_warnings, r=compiler-errors 2023-11-18 02:57:09 +00:00
rustc_traits
rustc_transmute
rustc_ty_utils Auto merge of #117500 - RalfJung:aggregate-abi, r=davidtwco 2023-11-19 18:42:20 +00:00
rustc_type_ir Begin nightly-ifying rustc_type_ir 2023-11-18 00:20:00 +00:00
stable_mir use new apis and add new function 2023-11-17 23:28:17 +03:00