Commit Graph

84 Commits

Author SHA1 Message Date
Nicholas Nethercote 75b164d836 Use `tidy` to sort crate attributes for all compiler crates.
We already do this for a number of crates, e.g. `rustc_middle`,
`rustc_span`, `rustc_metadata`, `rustc_span`, `rustc_errors`.

For the ones we don't, in many cases the attributes are a mess.
- There is no consistency about order of attribute kinds (e.g.
  `allow`/`deny`/`feature`).
- Within attribute kind groups (e.g. the `feature` attributes),
  sometimes the order is alphabetical, and sometimes there is no
  particular order.
- Sometimes the attributes of a particular kind aren't even grouped
  all together, e.g. there might be a `feature`, then an `allow`, then
  another `feature`.

This commit extends the existing sorting to all compiler crates,
increasing consistency. If any new attribute line is added there is now
only one place it can go -- no need for arbitrary decisions.

Exceptions:
- `rustc_log`, `rustc_next_trait_solver` and `rustc_type_ir_macros`,
  because they have no crate attributes.
- `rustc_codegen_gcc`, because it's quasi-external to rustc (e.g. it's
  ignored in `rustfmt.toml`).
2024-06-12 15:49:10 +10:00
Ralf Jung b58f647d54 rename ptr::invalid -> ptr::without_provenance
also introduce ptr::dangling matching NonNull::dangling
2024-02-21 20:15:52 +01:00
Nicholas Nethercote 0ac1195ee0 Invert diagnostic lints.
That is, change `diagnostic_outside_of_impl` and
`untranslatable_diagnostic` from `allow` to `deny`, because more than
half of the compiler has be converted to use translated diagnostics.

This commit removes more `deny` attributes than it adds `allow`
attributes, which proves that this change is warranted.
2024-02-06 13:12:33 +11:00
Oli Scherer 61361c16aa Fix `Stable` trait and its impls to work with the new `with_tables` 2024-01-19 09:42:51 +00:00
Josh Stone 92bf40ffe3 rustc_arena: add `alloc_str`
Two places called `from_utf8_unchecked` for strings from `alloc_slice`,
and one's SAFETY comment said this was for lack of `alloc_str` -- so
let's just add that instead!
2023-12-05 17:52:51 -08:00
Nadrieril c1774a137d Document reentrancy in `*Arena::alloc_from_iter` 2023-12-04 02:24:10 +01:00
Mark Rousskov db3e2bacb6 Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
Nicholas Nethercote 8ff624a9f2 Clean up `rustc_*/Cargo.toml`.
- Sort dependencies and features sections.
- Add `tidy` markers to the sorted sections so they stay sorted.
- Remove empty `[lib`] sections.
- Remove "See more keys..." comments.

Excluded files:
- rustc_codegen_{cranelift,gcc}, because they're external.
- rustc_lexer, because it has external use.
- stable_mir, because it has external use.
2023-10-30 08:46:02 +11:00
Maybe Waffle e36224118f Stabilize `[const_]pointer_byte_offsets` 2023-10-25 22:35:12 +00:00
Michael Howell c6e6ecb1af rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
Nicholas Nethercote 816383c60d Remove the `TypedArena::alloc_from_iter` specialization.
It was added in #78569. It's complicated and doesn't actually help
performance.

Also, add a comment explaining why the two `alloc_from_iter` functions
are so different.
2023-10-03 18:12:08 +11:00
Nicholas Nethercote bb5344a1bf Inline and remove `DroplessArena::alloc_raw_without_grow`.
It has a single call site. I find the code clearer with it gone.
2023-09-28 17:58:56 +10:00
Nicholas Nethercote 55a1a5223a Reduce `grow_and_alloc_raw` to a single call site.
The current structure is clumsy, calling `alloc_raw_without_grow` in one
function, and then if that fails, calling another function that calls
`alloc_raw_without_grow` again.
2023-09-28 17:58:54 +10:00
Nicholas Nethercote 25407bc0bb Make `DroplessArena::alloc` call `DroplessArena::alloc_raw`.
They're very similar.
2023-09-28 15:44:48 +10:00
Nicholas Nethercote 98d97b7323 Use `Layout::new` consistently in `DroplessArena::alloc`. 2023-09-28 15:44:48 +10:00
Nicholas Nethercote 51edc21990 Remove `unsafe` from `TypedArena::alloc_raw_slice`.
There's no good reason for it.
2023-09-28 15:44:48 +10:00
Nicholas Nethercote 55de23ed5d Inline and remove `TypedArena::ensure_capacity`.
It has a single callsite.
2023-09-28 15:44:48 +10:00
Nicholas Nethercote 0001eddb93 Inline and remove `DroplessArena::grow_and_alloc`.
It has a single callsite.
2023-09-28 15:44:48 +10:00
Nicholas Nethercote a11f7e4c0f Remove some unnecessary lifetimes. 2023-09-28 15:44:48 +10:00
Nicholas Nethercote 79b11f0802 rustc_arena: tweak some comments. 2023-09-28 15:44:48 +10:00
John Kåre Alsaker 2c507cae36 Rename `cold_path` to `outline` 2023-09-25 22:54:07 +02:00
Mark Rousskov 0a916062aa Bump cfg(bootstrap) 2023-08-23 20:05:14 -04:00
John Kåre Alsaker 6f86591b87 Address comments 2023-08-14 21:29:19 +02:00
John Kåre Alsaker d5d72168fa Allocate extra space to account for alignment losses 2023-08-14 20:51:58 +02:00
John Kåre Alsaker 67b1d2aec1 Optimize DroplessArena arena allocation 2023-08-14 20:51:57 +02:00
Nilstrieb 5830ca216d Add `internal_features` lint
It lints against features that are inteded to be internal to the
compiler and standard library. Implements MCP #596.

We allow `internal_features` in the standard library and compiler as those
use many features and this _is_ the standard library from the "internal to the compiler and
standard library" after all.

Marking some features as internal wasn't exactly the most scientific approach, I just marked some
mostly obvious features. While there is a categorization in the macro,
it's not very well upheld (should probably be fixed in another PR).

We always pass `-Ainternal_features` in the testsuite
About 400 UI tests and several other tests use internal features.
Instead of throwing the attribute on each one, just always allow them.
There's nothing wrong with testing internal features^^
2023-08-03 14:50:50 +02:00
许杰友 Jieyou Xu (Joe) 72b3b58efc
Extend `unused_must_use` to cover block exprs 2023-06-15 17:59:13 +08:00
John Bobbo 47fb8e6c70
Deny the `unsafe_op_in_unsafe_fn` lint in
`rustc_arena`.
2023-04-28 21:00:54 -07:00
John Bobbo 618841b815
Use `NonNull::new_unchecked` and `NonNull::len` in
`rustc_arena`.
2023-04-27 19:48:37 -07:00
Nilstrieb 968be98756 Allow `clippy::from_mut_ref`
This pattern is fine for arena allocators.
2023-04-09 22:29:56 +02:00
KaDiWa 9bc69925cb
compiler: remove unnecessary imports and qualified paths 2022-12-10 18:45:34 +01:00
Maybe Waffle a603635670 `rustc_arena`: remove a couple of `ref` patterns 2022-11-22 18:49:29 +00:00
Maybe Waffle 53565b23ac Make use of `[wrapping_]byte_{add,sub}`
...replacing `.cast().wrapping_offset().cast()` & similar code.
2022-08-23 19:32:37 +04:00
Matthias Krüger a45f69f27d
Rollup merge of #100822 - WaffleLapkin:no_offset_question_mark, r=scottmcm
Replace most uses of `pointer::offset` with `add` and `sub`

As PR title says, it replaces `pointer::offset` in compiler and standard library with `pointer::add` and `pointer::sub`. This generally makes code cleaner, easier to grasp and removes (or, well, hides) integer casts.

This is generally trivially correct, `.offset(-constant)` is just `.sub(constant)`, `.offset(usized as isize)` is just `.add(usized)`, etc. However in some cases we need to be careful with signs of things.

r? ````@scottmcm````

_split off from #100746_
2022-08-21 16:54:07 +02:00
Maybe Waffle e4720e1cf2 Replace most uses of `pointer::offset` with `add` and `sub` 2022-08-21 02:21:41 +04:00
5225225 09ea9f0a87 Add diagnostic translation lints to crates that don't emit them 2022-08-18 19:29:02 +01:00
Martin Habovstiak 2a3ce7890c Stabilize ptr_const_cast
This stabilizes `ptr_const_cast` feature as was decided in a recent
[FCP](https://github.com/rust-lang/rust/issues/92675#issuecomment-1190660233)

Closes #92675
2022-08-10 17:22:58 +02:00
Dylan DPC d63c713947
Rollup merge of #97711 - Nilstrieb:rustc-arena-ub, r=wesleywiser
Improve soundness of rustc_arena

Make it runnable in miri by changing the loop iteration count for some tests in miri. Also fix a stacked borrows issue with box.
2022-07-07 18:06:49 +05:30
Nilstrieb 211fb66810 Fix stacked borrows violation in rustc_arena
There was a problem with storing a `Box<T>` in a struct, where
the current rules would invalidate the value. this makes it store
a raw pointer instead, circumventing the aliasing problems.
2022-07-06 20:02:45 +02:00
Nicholas Nethercote 7c40661ddb Update `smallvec` to 1.8.1.
This pulls in https://github.com/servo/rust-smallvec/pull/282, which
gives some small wins for rustc.
2022-06-27 08:48:55 +10:00
Nilstrieb 907ea55841 Adapt tests to be able to run in miri
Decrease the Ns of bug loops to a smaller N, which
makes them a lot faster in miri.
2022-06-03 22:46:01 +02:00
Aria Beingessner 28576e9c51 mark FIXMES for all the places found that are probably offset_from 2022-03-29 20:18:28 -04:00
Aria Beingessner 68643603ad Make some rustc code conform to strict provenance.
There's some really bad stuff around `ty` and pointer tagging stuff that
was too much work to handle here.
2022-03-29 20:18:27 -04:00
est31 3cb7618f58 Remove unused dep from rustc_arena 2022-02-02 17:37:14 +01:00
Nicholas Nethercote 6035487715 Clarify `ArenaAllocatable`'s second parameter.
It's simply a binary thing to allow different behaviour for `Copy` vs
`!Copy` types. The new code makes this much clearer; I was scratching my
head over the old code for some time.
2022-01-28 07:37:10 +11:00
Nicholas Nethercote 9065c7ced6 Add some comments. 2022-01-28 07:37:07 +11:00
Nicholas Nethercote 0c17893d49 Rename `TypedArenaChunk` as `ArenaChunk`.
Because it's used within both `TypedArena` and `DroplessArena`.

The commit also makes `<u8>` the default parameter.
2022-01-26 01:35:52 +11:00
Nicholas Nethercote 0a89598dbd Add some comments.
Also use `Default::default()` in one `TypedArena::default()`, for
consistency with `DroplessArena::default()`.
2021-11-19 07:52:59 +11:00
Nicholas Nethercote 552073701f Remove unnecessary lifetime argument from arena macros.
Because it's always `'tcx`. In fact, some of them use a mixture of
passed-in `$tcx` and hard-coded `'tcx`, so no other lifetime would even
work.

This makes the code easier to read.
2021-11-17 09:38:30 +11:00
Nicholas Nethercote fb80c73fb3 Remove `DropArena`.
Most arena-allocate types that impl `Drop` get their own `TypedArena`, but a
few infrequently used ones share a `DropArena`. This sharing adds complexity
but doesn't help performance or memory usage. Perhaps it was more effective in
the past prior to some other improvements to arenas.

This commit removes `DropArena` and the sharing of arenas via the `few`
attribute of the `arena_types` macro. This change removes over 100 lines of
code and nine uses of `unsafe` (one of which affects the parallel compiler) and
makes the remaining code easier to read.
2021-11-15 18:33:43 +11:00