rust/compiler
bors 05cccdc9b3 Auto merge of #88019 - inquisitivecrystal:macro-def, r=cjgillot
Treat macros as HIR items

Macros have historically been treated differently from other items at the HIR level. This PR makes them just like normal items. There are a few special cases left over, which I've attempted to lay out below. By normalizing the treatment of macro items, this PR simplifies a fair bit of code and fixes some bugs at the same time. For more information, see #87406.

r? `@cjgillot`

## Backwards incompatibility

This is backwards incompatible in one small way. Due to a mistake, it was previously possible to apply stability attributes to an exported macro, even without enabling the `staged_api` feature. This never should have worked. After this PR, it will error, as it should. We could make it a warning instead, but that would require a special case for a feature that shouldn't ever have worked and is likely used by no or very few crates, so I'm not thrilled about the idea.

## Notes for reviewers
### Commit seperation

I'd recommend reviewing this PR commit by commit. The commit chunking wasn't perfect, but it's better than looking at the combined diff, which is quite overwhelming. The compiler and standard library build after each commit, although tests do not necessarily pass and tools do not necessarily build till the end of the series.

### Special cases
There are a few special cases that remain after this change. Here are the notable ones I remember:

1. Visibility works a bit differently for `macro_rules!` macros than other items, since they aren't generally marked with `pub` but instead with `#[macro_export]`.
2. Since `#[macro_export]` macros always have paths at the top level of the crate, some additional handling needs to be done on the reexport to top level.
### Performance impact

I don't know for sure, but theses changes may slightly hurt performance. They create more work for the compiler in a few places. For instance, some operations that were previously run only for exported macros are now run for all macros. A perf run is probably advisable. For all I know we'll see performance improvements instead. :)

## Issues resolved

This resolves #87406 (the tracking issue for this change). It also fixes several bugs:

Fixes #59306.
Fixes #73754.
Fixes #87257.
2021-08-28 10:45:28 +00:00
..
rustc rfc3052: Remove authors field from Cargo manifests 2021-07-29 14:56:05 -07:00
rustc_apfloat rfc3052: Remove authors field from Cargo manifests 2021-07-29 14:56:05 -07:00
rustc_arena rfc3052: Remove authors field from Cargo manifests 2021-07-29 14:56:05 -07:00
rustc_ast Introduce ~const 2021-08-27 05:07:37 +00:00
rustc_ast_lowering Treat macros as HIR items 2021-08-28 00:16:34 -07:00
rustc_ast_passes Fix visiting twice 2021-08-27 05:07:37 +00:00
rustc_ast_pretty Treat macros as HIR items 2021-08-28 00:16:34 -07:00
rustc_attr Remove Session.used_attrs and move logic to CheckAttrVisitor 2021-08-21 13:27:27 -05:00
rustc_builtin_macros Move named_asm_labels to a HIR lint 2021-08-24 08:23:58 -04:00
rustc_codegen_cranelift make unevaluated const substs optional 2021-08-26 11:00:30 +02:00
rustc_codegen_llvm Auto merge of #88245 - Sl1mb0:s390-asm, r=Amanieu 2021-08-28 08:04:41 +00:00
rustc_codegen_ssa Auto merge of #88227 - 12101111:nobundle-link-order, r=petrochenkov 2021-08-27 09:18:14 +00:00
rustc_data_structures Also fix “a OwningRef 2021-08-24 02:28:38 +02:00
rustc_driver Reduce verbosity of RUSTC_LOG 2021-08-09 21:39:39 -04:00
rustc_error_codes Detect incorrect number of lang item generics 2021-08-23 10:15:25 -04:00
rustc_errors Use if-let guards in the codebase 2021-08-25 20:24:35 +02:00
rustc_expand Various pattern cleanups 2021-08-25 20:24:39 +02:00
rustc_feature Introduce ~const 2021-08-27 05:07:37 +00:00
rustc_fs_util rfc3052: Remove authors field from Cargo manifests 2021-07-29 14:56:05 -07:00
rustc_graphviz rfc3052: Remove authors field from Cargo manifests 2021-07-29 14:56:05 -07:00
rustc_hir Remove obsolete MacroDef variant of OwnerNode 2021-08-28 00:24:30 -07:00
rustc_hir_pretty Remove obsolete MacroDef variant of OwnerNode 2021-08-28 00:24:30 -07:00
rustc_incremental Remove Session.used_attrs and move logic to CheckAttrVisitor 2021-08-21 13:27:27 -05:00
rustc_index rfc3052: Remove authors field from Cargo manifests 2021-07-29 14:56:05 -07:00
rustc_infer review 2021-08-26 11:14:31 +02:00
rustc_interface don't generate partially-undef consts 2021-08-25 17:49:28 -04:00
rustc_lexer Fix more “a”/“an” typos 2021-08-22 17:27:18 +02:00
rustc_lint Treat macros as HIR items 2021-08-28 00:16:34 -07:00
rustc_lint_defs Tracking issue for UNSUPPORTED_CALLING_CONVENTIONS 2021-08-27 20:47:00 +03:00
rustc_llvm RustWrapper: adapt to LLVM change 0f45c16f2caa 2021-08-26 10:40:27 -04:00
rustc_macros Rollup merge of #86123 - Aaron1011:query-span, r=cjgillot 2021-08-19 19:30:04 +02:00
rustc_metadata Treat macros as HIR items 2021-08-28 00:16:34 -07:00
rustc_middle Remove obsolete MacroDef variant of OwnerNode 2021-08-28 00:24:30 -07:00
rustc_mir Treat macros as HIR items 2021-08-28 00:16:34 -07:00
rustc_mir_build Auto merge of #88371 - Manishearth:rollup-pkkjsme, r=Manishearth 2021-08-27 01:07:17 +00:00
rustc_parse Introduce ~const 2021-08-27 05:07:37 +00:00
rustc_parse_format rfc3052: Remove authors field from Cargo manifests 2021-07-29 14:56:05 -07:00
rustc_passes Remove obsolete MacroDef variant of OwnerNode 2021-08-28 00:24:30 -07:00
rustc_plugin_impl Remove Session.used_attrs and move logic to CheckAttrVisitor 2021-08-21 13:27:27 -05:00
rustc_privacy Treat macros as HIR items 2021-08-28 00:16:34 -07:00
rustc_query_impl shrink ty::PredicateKind again 2021-08-26 11:00:30 +02:00
rustc_query_system Prevent double panic when handling incremental fingerprint mismatch 2021-08-12 15:11:39 -05:00
rustc_resolve Treat macros as HIR items 2021-08-28 00:16:34 -07:00
rustc_save_analysis Treat macros as HIR items 2021-08-28 00:16:34 -07:00
rustc_serialize Fix more “a”/“an” typos 2021-08-22 16:35:29 +02:00
rustc_session don't generate partially-undef consts 2021-08-25 17:49:28 -04:00
rustc_span Use if-let guards in the codebase 2021-08-25 20:24:35 +02:00
rustc_symbol_mangling Auto merge of #87280 - lcnr:lazy-anon-const-default-substs, r=nikomatsakis 2021-08-26 22:26:23 +00:00
rustc_target Auto merge of #88245 - Sl1mb0:s390-asm, r=Amanieu 2021-08-28 08:04:41 +00:00
rustc_trait_selection fmt 2021-08-27 08:09:00 +00:00
rustc_traits Auto merge of #88371 - Manishearth:rollup-pkkjsme, r=Manishearth 2021-08-27 01:07:17 +00:00
rustc_ty_utils Auto merge of #88371 - Manishearth:rollup-pkkjsme, r=Manishearth 2021-08-27 01:07:17 +00:00
rustc_type_ir update TypeFlags to deal with missing ct substs 2021-08-26 11:00:30 +02:00
rustc_typeck Treat macros as HIR items 2021-08-28 00:16:34 -07:00