summary refs log tree commit diff
path: root/compiler/rustc_expand/src
AgeCommit message (Collapse)AuthorLines
2024-10-07Auto merge of #131235 - ↵bors-8/+8
codemountains:rename-nestedmetaitem-to-metaitemlnner, r=nnethercote Rename `NestedMetaItem` to `MetaItemInner` Fixes #131087 r? `@nnethercote`
2024-10-07Rename nested_meta to meta_item_innercodemountains-1/+1
2024-10-06Auto merge of #129670 - est31:cfg_attr_crate_type_name_error, r=Urgaubors-14/+19
Make deprecated_cfg_attr_crate_type_name a hard error Turns the forward compatibility lint added by #83744 into a hard error, so now, while the `#![crate_name]` and `#![crate_type]` attributes are still allowed in raw form, they are now forbidden to be nested inside a `#![cfg_attr()]` attribute. The following will now be an error: ```Rust #![cfg_attr(foo, crate_name = "foobar")] #![cfg_attr(foo, crate_type = "bin")] ``` This code will continue working and is not deprecated: ```Rust #![crate_name = "foobar"] #![crate_type = "lib"] ``` The reasoning for this is explained in #83744: it allows us to not have to cfg-expand in order to determine the crate's type and name. As of filing the PR, exactly two years have passed since #99784 has been merged, which has turned the lint's default warning level into an error, so there has been ample time to move off the now-forbidden syntax. cc #91632 - tracking issue for the lint
2024-10-06Rename NestedMetaItem to MetaItemInnercodemountains-7/+7
2024-10-05Make deprecated_cfg_attr_crate_type_name a hard errorest31-14/+19
2024-10-04Rollup merge of #131034 - Urgau:cfg-true-false, r=nnethercoteGuillaume Gomez-3/+5
Implement RFC3695 Allow boolean literals as cfg predicates This PR implements https://github.com/rust-lang/rfcs/pull/3695: allow boolean literals as cfg predicates, i.e. `cfg(true)` and `cfg(false)`. r? `@nnethercote` *(or anyone with parser knowledge)* cc `@clubby789`
2024-10-01Implement boolean lit support in cfg predicatesUrgau-3/+3
2024-10-01Use `ast::NestedMetaItem` when evaluating cfg predicateUrgau-5/+7
2024-10-01Stabilize expr_2021 fragment in all editionsEric Holk-36/+6
Co-authored-by: Michael Goulet <michael@errs.io> Co-authored-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
2024-09-29cleanup: don't manually `unwrap_or_default()`Matthias Krüger-4/+2
2024-09-22Reformat using the new identifier sorting from rustfmtMichael Goulet-114/+102
2024-09-22Auto merge of #130246 - dianne:issue-97589-fix, r=petrochenkovbors-3/+11
rustc_expand: remember module `#[path]`s during expansion During invocation collection, if a module item parsed from a `#[path]` attribute needed a second pass after parsing, its path wouldn't get added to the file path stack, so cycle detection broke. This checks the `#[path]` in such cases, so that it gets added appropriately. I think it should work identically to the case for external modules that don't need a second pass, but I'm not 100% sure. Fixes #97589
2024-09-13Remove unnecessary lifetimes from `rustc_expand`.Nicholas Nethercote-4/+4
2024-09-11rustc_expand: remember module #[path]s during expansiondianne-3/+11
this fixes cycle detection for modules that need a second invocation collection pass after parsing
2024-09-09Remove needless returns detected by clippy in the compilerEduardo Sánchez Muñoz-8/+8
2024-09-06Add initial support for raw lifetimesMichael Goulet-8/+11
2024-08-27Add `warn(unreachable_pub)` to `rustc_expand`.Nicholas Nethercote-21/+22
Plus a tiny bit of reformatting.
2024-08-21Use bool in favor of Option<()> for diagnosticsMichael Goulet-2/+2
2024-08-17Auto merge of #128771 - carbotaniuman:stabilize_unsafe_attr, r=nnethercotebors-12/+3
Stabilize `unsafe_attributes` # Stabilization report ## Summary This is a tracking issue for the RFC 3325: unsafe attributes We are stabilizing `#![feature(unsafe_attributes)]`, which makes certain attributes considered 'unsafe', meaning that they must be surrounded by an `unsafe(...)`, as in `#[unsafe(no_mangle)]`. RFC: rust-lang/rfcs#3325 Tracking issue: #123757 ## What is stabilized ### Summary of stabilization Certain attributes will now be designated as unsafe attributes, namely, `no_mangle`, `export_name`, and `link_section` (stable only), and these attributes will need to be called by surrounding them in `unsafe(...)` syntax. On editions prior to 2024, this is simply an edition lint, but it will become a hard error in 2024. This also works in `cfg_attr`, but `unsafe` is not allowed for any other attributes, including proc-macros ones. ```rust #[unsafe(no_mangle)] fn a() {} #[cfg_attr(any(), unsafe(export_name = "c"))] fn b() {} ``` For a table showing the attributes that were considered to be included in the list to require unsafe, and subsequent reasoning about why each such attribute was or was not included, see [this comment here](https://github.com/rust-lang/rust/pull/124214#issuecomment-2124753464) ## Tests The relevant tests are in `tests/ui/rust-2024/unsafe-attributes` and `tests/ui/attributes/unsafe`.
2024-08-16Fix wrong source location for some incorrect macro definitionsWafarm-6/+13
2024-08-14Use `impl PartialEq<TokenKind> for Token` more.Nicholas Nethercote-1/+1
This lets us compare a `Token` with a `TokenKind`. It's used a lot, but can be used even more, avoiding the need for some `.kind` uses.
2024-08-12Rollup merge of #128886 - GrigorenkoPV:untranslatable-diagnostic, r=nnethercoteGuillaume Gomez-5/+2
Get rid of some `#[allow(rustc::untranslatable_diagnostic)]` `@rustbot` label +A-translation cc https://github.com/rust-lang/rust/issues/100717
2024-08-11Rollup merge of #128762 - fmease:use-more-slice-pats, r=compiler-errorsMatthias Krüger-4/+4
Use more slice patterns inside the compiler Nothing super noteworthy. Just replacing the common 'fragile' pattern of "length check followed by indexing or unwrap" with slice patterns for legibility and 'robustness'. r? ghost
2024-08-10rustc_expand: make a message translatablePavel Grigorenko-2/+2
2024-08-10rustc_expand: remove some redundant `#[allow(rustc::untranslatable_diagnostic)]`Pavel Grigorenko-3/+0
2024-08-07refactor(rustc_expand::mbe): Don't require full ExtCtxt when not necessaryFelix Rath-28/+28
2024-08-07Use more slice patterns inside the compilerLeón Orell Valerian Liehr-4/+4
2024-08-07Stabilize `unsafe_attributes`carbotaniuman-12/+3
2024-07-30Add toggle for `parse_meta_item` unsafe parsingcarbotaniuman-1/+3
This makes it possible for the `unsafe(...)` syntax to only be valid at the top level, and the `NestedMetaItem`s will automatically reject `unsafe(...)`.
2024-07-29Deny unsafe on more builtin attributescarbotaniuman-1/+15
2024-07-29Rollup merge of #128202 - compiler-errors:internal-lib-features, r=oli-obkMatthias Krüger-0/+6
Tell users not to file a bug when using internal library features Actually fixes #97501. I don't think we should suppress the suggestion to add `#![feature(..)]`, though I guess I could be convinced otherwise. r? `@Nilstrieb` cc `@RalfJung` Didn't add a test b/c I don't think we test this for lang features either, but I can confirm it does work. ``` warning: the feature `core_intrinsics` is internal to the compiler or standard library --> /home/michael/test.rs:1:12 | 1 | #![feature(core_intrinsics)] | ^^^^^^^^^^^^^^^ | = note: using it is strongly discouraged = note: `#[warn(internal_features)]` on by default thread 'rustc' panicked at compiler/rustc_mir_transform/src/validate.rs:94:25: broken MIR in Item(DefId(0:6 ~ test[42db]::{impl#0}::add)) (after phase change to runtime-optimized) at bb0[0]: Cannot perform arithmetic Add on type WrapInt8 stack backtrace: 0: begin_panic_handler at ./library/std/src/panicking.rs:665:5 1: panic_fmt at ./library/core/src/panicking.rs:74:14 2: fail<alloc::string::String> at ./compiler/rustc_mir_transform/src/validate.rs:146:9 3: run_pass at ./compiler/rustc_mir_transform/src/validate.rs:94:13 4: validate_body at ./compiler/rustc_mir_transform/src/pass_manager.rs:193:5 5: run_passes_inner at ./compiler/rustc_mir_transform/src/pass_manager.rs:176:13 6: rustc_mir_transform::pass_manager::run_passes at ./compiler/rustc_mir_transform/src/pass_manager.rs:87:5 7: run_optimization_passes at ./compiler/rustc_mir_transform/src/lib.rs:561:5 8: inner_optimized_mir at ./compiler/rustc_mir_transform/src/lib.rs:667:5 9: optimized_mir at ./compiler/rustc_mir_transform/src/lib.rs:630:21 10: {closure#0} at ./compiler/rustc_query_impl/src/plumbing.rs:285:13 [... omitted 22 frames ...] 11: query_get_at<rustc_query_system::query::caches::DefIdCache<rustc_middle::query::erase::Erased<[u8; 8]>>> at ./compiler/rustc_middle/src/query/plumbing.rs:145:17 12: instance_mir 13: collect_items_of_instance at ./compiler/rustc_monomorphize/src/collector.rs:1203:16 14: {closure#0} at ./compiler/rustc_monomorphize/src/collector.rs:447:17 15: maybe_grow<(), rustc_monomorphize::collector::collect_items_rec::{closure_env#0}> at /home/michael/.cargo/registry/src/index.crates.io-6f17d22bba15001f/stacker-0.1.15/src/lib.rs:55:9 16: ensure_sufficient_stack<(), rustc_monomorphize::collector::collect_items_rec::{closure_env#0}> at ./compiler/rustc_data_structures/src/stack.rs:17:5 17: collect_items_rec at ./compiler/rustc_monomorphize/src/collector.rs:446:13 18: collect_items_rec at ./compiler/rustc_monomorphize/src/collector.rs:526:13 19: {closure#0} at ./compiler/rustc_monomorphize/src/collector.rs:1597:17 20: {closure#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}> at ./compiler/rustc_data_structures/src/sync/parallel.rs:182:34 21: call_once<(), rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure#0}::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>> at ./library/core/src/panic/unwind_safe.rs:272:9 22: do_call<core::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure#0}::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>, ()> at ./library/std/src/panicking.rs:557:40 23: try<(), core::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure#0}::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>> at ./library/std/src/panicking.rs:521:19 24: run<(), rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure#1}::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>> at ./compiler/rustc_data_structures/src/sync/parallel.rs:28:9 25: {closure#1}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}> at ./compiler/rustc_data_structures/src/sync/parallel.rs:186:21 26: {closure#0}<rustc_middle::mir::mono::MonoItem, rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure_env#1}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>> at ./library/core/src/iter/traits/iterator.rs:815:29 27: fold<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global, (), core::iter::traits::iterator::Iterator::for_each::call::{closure_env#0}<rustc_middle::mir::mono::MonoItem, rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure_env#1}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>> at ./library/alloc/src/vec/into_iter.rs:317:25 28: for_each<alloc::vec::into_iter::IntoIter<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure_env#1}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>> at ./library/core/src/iter/traits/iterator.rs:818:9 29: {closure#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}> at ./compiler/rustc_data_structures/src/sync/parallel.rs:185:17 30: parallel_guard<(), rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>> at ./compiler/rustc_data_structures/src/sync/parallel.rs:44:15 31: par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}> at ./compiler/rustc_data_structures/src/sync/parallel.rs:178:9 32: {closure#1} at ./compiler/rustc_monomorphize/src/collector.rs:1595:13 33: run<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure_env#1}> at ./compiler/rustc_data_structures/src/profiling.rs:754:9 34: time<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure_env#1}> at ./compiler/rustc_session/src/utils.rs:16:9 35: collect_crate_mono_items at ./compiler/rustc_monomorphize/src/collector.rs:1594:9 36: collect_and_partition_mono_items at ./compiler/rustc_monomorphize/src/partitioning.rs:1124:30 37: {closure#0} at ./compiler/rustc_query_impl/src/plumbing.rs:281:9 [... omitted 22 frames ...] 38: query_get_at<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 24]>>> at ./compiler/rustc_middle/src/query/plumbing.rs:145:17 39: collect_and_partition_mono_items at ./compiler/rustc_middle/src/query/plumbing.rs:423:31 40: collect_and_partition_mono_items at ./compiler/rustc_middle/src/query/plumbing.rs:414:17 41: codegen_crate<rustc_codegen_llvm::LlvmCodegenBackend> at ./compiler/rustc_codegen_ssa/src/base.rs:596:25 42: codegen_crate at ./compiler/rustc_codegen_llvm/src/lib.rs:361:18 43: {closure#0} at ./compiler/rustc_interface/src/passes.rs:1027:9 44: run<alloc::boxed::Box<dyn core::any::Any, alloc::alloc::Global>, rustc_interface::passes::start_codegen::{closure_env#0}> at ./compiler/rustc_data_structures/src/profiling.rs:754:9 45: time<alloc::boxed::Box<dyn core::any::Any, alloc::alloc::Global>, rustc_interface::passes::start_codegen::{closure_env#0}> at ./compiler/rustc_session/src/utils.rs:16:9 46: start_codegen at ./compiler/rustc_interface/src/passes.rs:1026:19 47: codegen_and_build_linker at ./compiler/rustc_interface/src/queries.rs:128:31 48: {closure#6} at ./compiler/rustc_driver_impl/src/lib.rs:451:25 49: {closure#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>> at ./compiler/rustc_middle/src/ty/context.rs:1336:37 50: {closure#0}<rustc_middle::ty::context::{impl#19}::enter::{closure_env#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>> at ./compiler/rustc_middle/src/ty/context/tls.rs:82:9 51: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_middle::ty::context::{impl#19}::enter::{closure_env#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>> at ./library/std/src/thread/local.rs:283:12 52: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_middle::ty::context::{impl#19}::enter::{closure_env#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>> at ./library/std/src/thread/local.rs:260:9 53: enter_context<rustc_middle::ty::context::{impl#19}::enter::{closure_env#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>> at ./compiler/rustc_middle/src/ty/context/tls.rs:79:5 54: enter<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>> at ./compiler/rustc_middle/src/ty/context.rs:1336:9 55: <rustc_interface::queries::QueryResult<&rustc_middle::ty::context::GlobalCtxt>>::enter::<core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure#6}> at ./compiler/rustc_interface/src/queries.rs:64:9 56: {closure#1} at ./compiler/rustc_driver_impl/src/lib.rs:450:13 57: enter<rustc_driver_impl::run_compiler::{closure#0}::{closure_env#1}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>> at ./compiler/rustc_interface/src/queries.rs:209:19 58: {closure#0} at ./compiler/rustc_driver_impl/src/lib.rs:388:22 59: {closure#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}> at ./compiler/rustc_interface/src/interface.rs:502:27 60: {closure#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>> at ./compiler/rustc_interface/src/util.rs:154:13 61: {closure#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>> at ./compiler/rustc_interface/src/util.rs:106:21 62: set<rustc_span::SessionGlobals, rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>> at /home/michael/.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:137:9 63: create_session_globals_then<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>>> at ./compiler/rustc_span/src/lib.rs:134:5 64: {closure#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>> at ./compiler/rustc_interface/src/util.rs:105:17 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. error: the compiler unexpectedly panicked. this is a bug. note: using internal features is not supported and expected to cause internal compiler errors when used incorrectly note: rustc 1.82.0-dev running on x86_64-unknown-linux-gnu query stack during panic: #0 [optimized_mir] optimizing MIR for `<impl at /home/michael/test.rs:9:1: 9:32>::add` #1 [collect_and_partition_mono_items] collect_and_partition_mono_items end of query stack ```
2024-07-29Reformat `use` declarations.Nicholas Nethercote-118/+130
The previous commit updated `rustfmt.toml` appropriately. This commit is the outcome of running `x fmt --all` with the new formatting options.
2024-07-27Make `missing_fragment_specifier` an error in edition 2024Trevor Gross-7/+35
`missing_fragment_specifier` has been a future compatibility warning since 2017. Uplifting it to an unconditional hard error was attempted in 2020, but eventually reverted due to fallout. Make it an error only in edition >= 2024, leaving the lint for older editions. This change will make it easier to support more macro syntax that relies on usage of `$`. Fixes <https://github.com/rust-lang/rust/issues/40107>
2024-07-25Tell users not to file a bug when using internal library featuresMichael Goulet-0/+6
2024-07-24Rollup merge of #128133 - nnethercote:fix-cfg_attr-spans, r=petrochenkovMatthias Krüger-28/+28
Improve spans on evaluated `cfg_attr`s. When converting something like `#![cfg_attr(cond, attr)]` into `#![attr]`, we currently duplicate the `#` token and the `!` token. But weirdly, there is also this comment: // We don't really have a good span to use for the synthesized `[]` // in `#[attr]`, so just use the span of the `#` token. Maybe that comment used to be true? But now it is false: we can duplicate the existing delimiters (and their spans and spacing), much like we do for the `#` and `!`. This commit does that, thus removing the incorrect comment, and improving the spans on `Group`s in a few proc-macro tests. `@petrochenkov`
2024-07-24Improve spans on evaluated `cfg_attr`s.Nicholas Nethercote-28/+28
When converting something like `#![cfg_attr(cond, attr)]` into `#![attr]`, we currently duplicate the `#` token and the `!` token. But weirdly, there is also this comment: // We don't really have a good span to use for the synthesized `[]` // in `#[attr]`, so just use the span of the `#` token. Maybe that comment used to be true? But now it is false: we can duplicate the existing delimiters (and their spans and spacing), much like we do for the `#` and `!`. This commit does that, thus removing the incorrect comment, and improving the spans on `Group`s in a few proc-macro tests.
2024-07-22Avoid passing state that will not be visitedOli Scherer-7/+7
2024-07-22Always pass the visitor as the first argument to walk* functionsOli Scherer-40/+40
2024-07-22Sync `mut_visit` function names with immut `visit` ones (s/noop_visit/walk/)Oli Scherer-70/+70
2024-07-22Make function items in mut visitors all go through the same visit_fn ↵Oli Scherer-7/+7
function, just like with immutable visitors
2024-07-22Merge impl and trait item mut visitor methods to mirror immut visitorOli Scherer-39/+38
2024-07-19Allow concat in repetitionsCaio-45/+72
2024-07-17Rollup merge of #127542 - c410-f3r:concat-again, r=petrochenkovTrevor Gross-24/+37
[`macro_metavar_expr_concat`] Add support for literals Adds support for literals in macro parameters. ```rust macro_rules! with_literal { ($literal:literal) => { const ${concat(FOO, $literal)}: i32 = 1; } } fn main() { with_literal!("_BAR"); assert_eq!(FOO_BAR, 1); } ``` cc #124225 r? ``@petrochenkov``
2024-07-17Add support for literalsCaio-24/+37
2024-07-13Rollup merge of #127558 - nnethercote:more-Attribute-cleanups, r=petrochenkovJubilee-13/+17
More attribute cleanups A follow-up to #127308. r? ```@petrochenkov```
2024-07-10Add some comments.Nicholas Nethercote-0/+3
Explaining things that took me some time to work out.
2024-07-10Factor out `AttrsTarget` flattening code.Nicholas Nethercote-1/+4
This commit does the following. - Pulls the code out of `AttrTokenStream::to_token_trees` into a new function `attrs_and_tokens_to_token_trees`. - Simplifies `TokenStream::from_ast` by calling the new function. This is nicer than the old way, which created a temporary `AttrTokenStream` containing a single `AttrsTarget` (which required some cloning) just to call `to_token_trees` on it. (It is good to remove this use of `AttrsTarget` which isn't related to `cfg_attr` expansion.)
2024-07-10Use `cfg_attr` as a name more.Nicholas Nethercote-11/+11
In various functions where the attribute being processed is known to be a `#[cfg_attr(...)]` attribute. I find this a helpful reminder.
2024-07-10Rework `Attribute::get_tokens`.Nicholas Nethercote-3/+1
Returning `Vec<TokenTree>` works better for the call sites than returning `TokenStream`.
2024-07-08Rollup merge of #126841 - c410-f3r:concat-again, r=petrochenkov许杰友 Jieyou Xu (Joe)-26/+80
[`macro_metavar_expr_concat`] Add support for literals Adds support for things like `${concat($variable, 123)}` or `${concat("hello", "_world")}` . cc #124225