rust/compiler
Dylan DPC 19a90c7018
Rollup merge of #95553 - jam1garner:naked-function-compile-error, r=tmiasko
Don't emit non-asm contents error for naked function composed of errors

## Motivation

For naked functions an error is emitted when they are composed of anything other than a single asm!() block. However, this error triggers in a couple situations in which it adds no additional information or is actively misleading.

One example is if you do have an asm!() block but simply one with a syntax error:
```rust
#[naked]
unsafe extern "C" fn compiler_errors() {
    asm!(invalid_syntax)
}
```

This results in two errors, one for the syntax error itself and another telling you that you need an asm block in your function:

```rust
error[E0787]: naked functions must contain a single asm block
 --> src/main.rs:6:1
  |
6 | / unsafe extern "C" fn naked_compile_error() {
7 | |     asm!(blah)
8 | | }
  | |_^
```

This issue also comes up when [utilizing `compile_error!()` for improving your diagnostics](https://twitter.com/steveklabnik/status/1509538243020218372), such as raising a compiler error when compiling for an unsupported target.

## Implementation

The rules this PR implements are as follows:

1. If any non-erroneous  non-asm statement is included, an error will still occur
2. If multiple asm statements are included, an error will still occur
3. If 0 or 1 asm statements are present, as well as any non-zero number of erroneous statements, then this error will *not* be raised as it is likely either redundant or incorrect

The rule of thumb is effectively "if an error is present and its correction could change things, don't raise an error".
2022-04-03 23:21:42 +02:00
..
rustc Propagate parallel_compiler feature through rustc crates. Turned off feature gives change of builded crates: 238 -> 224. 2022-03-28 08:41:12 +03:00
rustc_apfloat Addressed comments by @compiler-errors and @bjorn3 2022-03-30 17:04:46 -04:00
rustc_arena mark FIXMES for all the places found that are probably offset_from 2022-03-29 20:18:28 -04:00
rustc_ast Rollup merge of #95497 - nyurik:compiler-spell-comments, r=compiler-errors 2022-03-31 04:57:28 +02:00
rustc_ast_lowering Record item-likes in ItemLowerer. 2022-03-31 13:48:16 +02:00
rustc_ast_passes Stabilize native library modifier syntax and the whole-archive modifier specifically 2022-03-30 23:53:21 +03:00
rustc_ast_pretty Remove Nonterminal::NtTT. 2022-03-28 10:03:02 +11:00
rustc_attr Rollup merge of #94948 - jhpratt:rustc_deprecated, r=Dylan-DPC 2022-03-20 09:14:59 +01:00
rustc_borrowck update comment 2022-03-31 15:41:52 +02:00
rustc_builtin_macros Spellchecking some comments 2022-03-30 01:39:38 -04:00
rustc_codegen_cranelift Cleanup after some refactoring in rustc_target 2022-04-03 21:29:57 +02:00
rustc_codegen_gcc Cleanup after some refactoring in rustc_target 2022-04-03 21:29:57 +02:00
rustc_codegen_llvm Replace every String in Target(Options) with Cow<'static, str> 2022-04-03 21:29:57 +02:00
rustc_codegen_ssa Cleanup after some refactoring in rustc_target 2022-04-03 21:29:57 +02:00
rustc_const_eval Auto merge of #94883 - cjgillot:flat-metadata, r=oli-obk 2022-04-01 21:16:41 +00:00
rustc_data_structures Auto merge of #92686 - saethlin:unsafe-debug-asserts, r=Amanieu 2022-04-03 16:04:47 +00:00
rustc_driver Address review comments and add a test 2022-04-02 17:26:39 +02:00
rustc_error_codes rework error messages for incorrect inherent impls 2022-03-30 11:23:58 +02:00
rustc_errors Spellchecking some comments 2022-03-30 01:39:38 -04:00
rustc_expand Auto merge of #95509 - nnethercote:simplify-MatcherPos-some-more, r=petrochenkov 2022-04-02 04:59:16 +00:00
rustc_feature Rollup merge of #94869 - jackh726:gats_extended, r=compiler-errors 2022-03-31 00:26:29 +02:00
rustc_fs_util
rustc_graphviz eplace usages of vec![].into_iter with [].into_iter 2022-01-09 14:09:25 +11:00
rustc_hir Store next_disambiguator in Definitions. 2022-03-31 13:34:54 +02:00
rustc_hir_pretty resolve: Fix incorrect results of opt_def_kind query for some built-in macros 2022-02-24 22:54:36 +03:00
rustc_incremental Spellchecking some comments 2022-03-30 01:39:38 -04:00
rustc_index Spellchecking compiler comments 2022-03-30 15:14:15 -04:00
rustc_infer Rollup merge of #95560 - lcnr:obligation-cause, r=oli-obk 2022-04-02 03:34:27 +02:00
rustc_interface Address review comments and add a test 2022-04-02 17:26:39 +02:00
rustc_lexer Reduce max hash in raw strings from u16 to u8 2022-03-23 22:13:55 +01:00
rustc_lint invalid_value lint: detect invalid initialization of arrays 2022-04-01 09:59:11 -04:00
rustc_lint_defs Spellchecking compiler comments 2022-03-30 15:14:15 -04:00
rustc_llvm Stabilize native library modifier syntax and the whole-archive modifier specifically 2022-03-30 23:53:21 +03:00
rustc_log Make rustc_log doc test runnable 2022-01-03 22:31:56 -08:00
rustc_macros add #[rustc_pass_by_value] to more types 2022-03-08 15:39:52 +01:00
rustc_metadata Replace every String in Target(Options) with Cow<'static, str> 2022-04-03 21:29:57 +02:00
rustc_middle Auto merge of #95537 - GuillaumeGomez:type_of-doc, r=Dylan-DPC 2022-04-02 12:13:11 +00:00
rustc_mir_build obligation cause: RepeatVec -> RepeatValueCopy 2022-03-31 12:51:46 +02:00
rustc_mir_dataflow Spellchecking compiler comments 2022-03-30 15:14:15 -04:00
rustc_mir_transform Less manipulation of the callee_def_id. 2022-04-02 23:28:09 +02:00
rustc_monomorphize Rollup merge of #95478 - InfRandomness:infrandomness/lint_largemove_note, r=compiler-errors 2022-03-31 13:09:53 +02:00
rustc_parse Auto merge of #88672 - camelid:inc-parser-sugg, r=davidtwco 2022-04-03 05:24:20 +00:00
rustc_parse_format Spellchecking compiler comments 2022-03-30 15:14:15 -04:00
rustc_passes Rollup merge of #95553 - jam1garner:naked-function-compile-error, r=tmiasko 2022-04-03 23:21:42 +02:00
rustc_plugin_impl replace dynamic library module with libloading 2021-12-06 12:03:47 -05:00
rustc_privacy Rollup merge of #95497 - nyurik:compiler-spell-comments, r=compiler-errors 2022-03-31 04:57:28 +02:00
rustc_query_impl rework implementation for inherent impls for builtin types 2022-03-30 11:23:58 +02:00
rustc_query_system Spellchecking compiler comments 2022-03-30 15:14:15 -04:00
rustc_resolve Stop emitting lints during lowering. 2022-03-31 13:46:06 +02:00
rustc_save_analysis Rollup merge of #95497 - nyurik:compiler-spell-comments, r=compiler-errors 2022-03-31 04:57:28 +02:00
rustc_serialize Replace every Vec in Target(Options) with it's Cow equivalent 2022-04-03 21:29:57 +02:00
rustc_session Cleanup after some refactoring in rustc_target 2022-04-03 21:29:57 +02:00
rustc_span Rollup merge of #95497 - nyurik:compiler-spell-comments, r=compiler-errors 2022-03-31 04:57:28 +02:00
rustc_symbol_mangling resolve the conflict in compiler/rustc_session/src/parse.rs 2022-03-16 20:12:30 +08:00
rustc_target Cleanup after some refactoring in rustc_target 2022-04-03 21:29:57 +02:00
rustc_trait_selection Auto merge of #94911 - jackh726:gats_extended_2, r=compiler-errors 2022-04-02 18:34:26 +00:00
rustc_traits Remove opaque type obligation and just register opaque types as they are encountered. 2022-03-28 16:57:45 +00:00
rustc_ty_utils Auto merge of #94883 - cjgillot:flat-metadata, r=oli-obk 2022-04-01 21:16:41 +00:00
rustc_type_ir Revert "Auto merge of #93893 - oli-obk:sad_revert, r=oli-obk" 2022-03-28 16:27:14 +00:00
rustc_typeck Rollup merge of #95560 - lcnr:obligation-cause, r=oli-obk 2022-04-02 03:34:27 +02:00