Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Closed
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
870f848
Add support for trait associated items
GuillaumeGomez Jan 20, 2025
ef39e42
Better handling of paths in link to def feature
GuillaumeGomez Jan 26, 2025
9457a32
Update to last rustc_hir Visitor changes
GuillaumeGomez Jan 26, 2025
687ac3f
Fix panic if an item does not have a body
GuillaumeGomez May 4, 2025
5b2c61e
Document guarantees of poisoning
purplesyringa Jul 19, 2025
45231fa
[rustdoc] Display unsafe attrs with edition 2024 `unsafe()` wrappers.
obi1kenobi Jul 23, 2025
5ae2d42
get rid of some false negatives in rustdoc::broken_intra_doc_links
lolbinarycat Nov 7, 2024
87d7d80
adjust more unit tests to reflect more aggressive intra-doc linting
lolbinarycat Nov 8, 2024
a7da4b8
rustdoc::broken_intra_doc_links: no backticks = use old behavior
lolbinarycat Apr 18, 2025
0413481
rustdoc: update tests to match new lint behavior
lolbinarycat Apr 18, 2025
6a7d488
rustdoc::broken_intra_doc_links: only be lenient with shortcut links
lolbinarycat Apr 19, 2025
bd85df1
move bad-intra-doc test into intra-doc dir
lolbinarycat Apr 19, 2025
a73d7e3
fix up issues with internal compiler docs revealed by stricter lint
lolbinarycat Jul 24, 2025
da4687b
Link to Mutex poisoning docs from RwLock docs
purplesyringa Jul 25, 2025
5b8c614
Add a list of failure conditions for poisoning
purplesyringa Jul 25, 2025
c1d06cc
Add a note on foreign exceptions
purplesyringa Jul 25, 2025
3352dfc
Skip formatting for some compiler documentation code
joshtriplett Jul 26, 2025
7150880
Improve and regularize comment placement in doc code
joshtriplett Jul 26, 2025
b6c54a9
Avoid placing `// FIXME` comments inside doc code blocks
joshtriplett Jul 26, 2025
56c5b1d
Add parentheses around expression arguments to `..`
joshtriplett Jul 26, 2025
1e2d587
Avoid making the start of a doc code block conditional
joshtriplett Jul 26, 2025
91bccd6
use `minicore` for fortanix assembly tests
folkertdev Jul 24, 2025
8b90847
update fortanix run-make test
folkertdev Jul 24, 2025
0e53d85
Fortify RemoveUnneededDrops test.
cjgillot Jun 16, 2025
ee0118f
[test][AIX] ignore extern_weak linkage test
daltenty Jul 30, 2025
5aec437
detect infinite recursion with tail calls in ctfe
WaffleLapkin Jul 31, 2025
040f71e
loop match: error on `#[const_continue]` outside `#[loop_match]`
folkertdev Jul 25, 2025
f909918
Add human readable name "Cygwin"
Berrysoft Aug 1, 2025
9377e0a
Constify additional Result functions
Randl Aug 1, 2025
bd7b8b3
Properly pass path to staged `rustc` to `compiletest` self-tests
jieyouxu Aug 1, 2025
d5ffb06
compiletest: Improve diagnostics for line annotation mismatches 2
petrochenkov Jul 31, 2025
32cf3d4
Cleanup the definition of `group_type`
JonathanBrouwer Aug 1, 2025
21ab47e
Add my previous commit name to .mailmap
scrabsha Aug 1, 2025
4c7c9de
Fix safety comment for new_unchecked in niche_types
nilehmann Aug 1, 2025
f618a05
Correctly handle `--no-run` rustdoc test option
GuillaumeGomez Jul 13, 2025
202a05b
Correctly handle `should_panic` doctest attribute
GuillaumeGomez Jul 7, 2025
cc60a24
Add regression test for #143009
GuillaumeGomez Jul 4, 2025
d67a4a5
Update std doctests
GuillaumeGomez Jul 7, 2025
0a01e8e
Add regression test for #143858
GuillaumeGomez Jul 13, 2025
7b8015c
Add FIXME comments to use `test::ERROR_EXIT_CODE` once public and fix…
GuillaumeGomez Aug 1, 2025
e6256b7
Rollup merge of #132748 - lolbinarycat:rustdoc-intra-doc-link-warn-mo…
samueltardieu Aug 2, 2025
b6e103f
Rollup merge of #135771 - GuillaumeGomez:jump-to-def-perf, r=fmease
samueltardieu Aug 2, 2025
d5942fa
Rollup merge of #143360 - folkertdev:const-continue-outside-loop-matc…
samueltardieu Aug 2, 2025
7ce24fd
Rollup merge of #143662 - obi1kenobi:pg/unsafe-attribute-wrappers, r=…
samueltardieu Aug 2, 2025
9d089e3
Rollup merge of #143771 - Randl:const-result, r=tgross35
samueltardieu Aug 2, 2025
4ceba56
Rollup merge of #143900 - GuillaumeGomez:fix-no-run, r=lolbinarycat,f…
samueltardieu Aug 2, 2025
6673017
Rollup merge of #144185 - purplesyringa:poisoning-wording, r=Amanieu
samueltardieu Aug 2, 2025
5db12cd
Rollup merge of #144395 - folkertdev:fortanix-run-make-test, r=jieyouxu
samueltardieu Aug 2, 2025
52407c7
Rollup merge of #144478 - joshtriplett:doc-code-formatting-prep, r=Am…
samueltardieu Aug 2, 2025
3af4da8
Rollup merge of #144614 - cjgillot:fortify-unneeded, r=scottmcm
samueltardieu Aug 2, 2025
28315df
Rollup merge of #144703 - daltenty:daltenty/extern-weak, r=Noratrieb
samueltardieu Aug 2, 2025
b639abf
Rollup merge of #144747 - petrochenkov:annusexp2, r=RalfJung
samueltardieu Aug 2, 2025
272d7fb
Rollup merge of #144756 - WaffleLapkin:inf-rec-etc-ctfe, r=lqd
samueltardieu Aug 2, 2025
aa62f13
Rollup merge of #144766 - Berrysoft:patch-1, r=GuillaumeGomez
samueltardieu Aug 2, 2025
06a7a89
Rollup merge of #144782 - jieyouxu:compiletest-selftests, r=Kobzol
samueltardieu Aug 2, 2025
d2f7196
Rollup merge of #144786 - JonathanBrouwer:cleanup-group-type, r=jdons…
samueltardieu Aug 2, 2025
78e1e21
Rollup merge of #144796 - scrabsha:push-lsnwwpwpnpxr, r=jdonszelmann
samueltardieu Aug 2, 2025
90a04e2
Rollup merge of #144797 - nilehmann:safety-comment-niche, r=Noratrieb
samueltardieu Aug 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion compiler/rustc_borrowck/src/region_infer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
/// minimum values.
///
/// For example:
/// ```
/// ```ignore (illustrative)
/// fn foo<'a, 'b>( /* ... */ ) where 'a: 'b { /* ... */ }
/// ```
/// would initialize two variables like so:
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_hir/src/def.rs
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ impl DefKind {
/// For example, everything prefixed with `/* Res */` in this example has
/// an associated `Res`:
///
/// ```
/// ```ignore (illustrative)
/// fn str_to_string(s: & /* Res */ str) -> /* Res */ String {
/// /* Res */ String::from(/* Res */ s)
/// }
Expand Down Expand Up @@ -421,7 +421,7 @@ pub enum Res<Id = hir::HirId> {
/// }
///
/// impl Foo for Bar {
/// fn foo() -> Box<Self> { // SelfTyAlias
/// fn foo() -> Box<Self /* SelfTyAlias */> {
/// let _: Self; // SelfTyAlias
///
/// todo!()
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_hir_analysis/src/check/compare_impl_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for RemapLateParam<'tcx> {
///
/// trait Foo {
/// fn bar() -> impl Deref<Target = impl Sized>;
/// // ^- RPITIT #1 ^- RPITIT #2
/// // ^- RPITIT #1 ^- RPITIT #2
/// }
///
/// impl Foo for () {
Expand Down
4 changes: 1 addition & 3 deletions compiler/rustc_hir_typeck/src/upvar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2391,13 +2391,11 @@ fn migration_suggestion_for_2229(
/// let mut p = Point { x: 10, y: 10 };
///
/// let c = || {
/// p.x += 10;
/// // ^ E1 ^
/// p.x += 10; // E1
/// // ...
/// // More code
/// // ...
/// p.x += 10; // E2
/// // ^ E2 ^
/// };
/// ```
/// `CaptureKind` associated with both `E1` and `E2` will be ByRef(MutBorrow),
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_infer/src/infer/outlives/obligations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
//! fn bar<T>(a: T, b: impl for<'a> Fn(&'a T)) {}
//! fn foo<T>(x: T) {
//! bar(x, |y| { /* ... */})
//! // ^ closure arg
//! // ^ closure arg
//! }
//! ```
//!
Expand Down
12 changes: 8 additions & 4 deletions compiler/rustc_middle/src/hir/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -533,8 +533,10 @@ impl<'tcx> TyCtxt<'tcx> {
/// ```
/// fn foo(x: usize) -> bool {
/// if x == 1 {
/// true // If `get_fn_id_for_return_block` gets passed the `id` corresponding
/// } else { // to this, it will return `foo`'s `HirId`.
/// // If `get_fn_id_for_return_block` gets passed the `id` corresponding to this, it
/// // will return `foo`'s `HirId`.
/// true
/// } else {
/// false
/// }
/// }
Expand All @@ -543,8 +545,10 @@ impl<'tcx> TyCtxt<'tcx> {
/// ```compile_fail,E0308
/// fn foo(x: usize) -> bool {
/// loop {
/// true // If `get_fn_id_for_return_block` gets passed the `id` corresponding
/// } // to this, it will return `None`.
/// // If `get_fn_id_for_return_block` gets passed the `id` corresponding to this, it
/// // will return `None`.
/// true
/// }
/// false
/// }
/// ```
Expand Down
3 changes: 2 additions & 1 deletion compiler/rustc_middle/src/mir/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1017,7 +1017,8 @@ pub struct LocalDecl<'tcx> {
/// ```
/// fn foo(x: &str) {
/// #[allow(unused_mut)]
/// let mut x: u32 = { // <- one unused mut
/// let mut x: u32 = {
/// //^ one unused mut
/// let mut y: u32 = x.parse().unwrap();
/// y + 2
/// };
Expand Down
4 changes: 3 additions & 1 deletion compiler/rustc_mir_build/src/builder/expr/as_operand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,9 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
/// ```
/// #![feature(unsized_fn_params)]
/// # use core::fmt::Debug;
/// fn foo(_p: dyn Debug) { /* ... */ }
/// fn foo(_p: dyn Debug) {
/// /* ... */
/// }
///
/// fn bar(box_p: Box<dyn Debug>) { foo(*box_p); }
/// ```
Expand Down
3 changes: 3 additions & 0 deletions compiler/rustc_mir_dataflow/src/impls/initialized.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ impl<'tcx> MaybePlacesSwitchIntData<'tcx> {
///
/// ```rust
/// struct S;
/// #[rustfmt::skip]
/// fn foo(pred: bool) { // maybe-init:
/// // {}
/// let a = S; let mut b = S; let c; let d; // {a, b}
Expand Down Expand Up @@ -197,6 +198,7 @@ impl<'a, 'tcx> HasMoveData<'tcx> for MaybeInitializedPlaces<'a, 'tcx> {
///
/// ```rust
/// struct S;
/// #[rustfmt::skip]
/// fn foo(pred: bool) { // maybe-uninit:
/// // {a, b, c, d}
/// let a = S; let mut b = S; let c; let d; // { c, d}
Expand Down Expand Up @@ -289,6 +291,7 @@ impl<'tcx> HasMoveData<'tcx> for MaybeUninitializedPlaces<'_, 'tcx> {
///
/// ```rust
/// struct S;
/// #[rustfmt::skip]
/// fn foo(pred: bool) { // ever-init:
/// // { }
/// let a = S; let mut b = S; let c; let d; // {a, b }
Expand Down
4 changes: 3 additions & 1 deletion compiler/rustc_span/src/hygiene.rs
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,9 @@ impl SyntaxContext {
///
/// ```rust
/// #![feature(decl_macro)]
/// mod foo { pub fn f() {} } // `f`'s `SyntaxContext` is empty.
/// mod foo {
/// pub fn f() {} // `f`'s `SyntaxContext` is empty.
/// }
/// m!(f);
/// macro m($f:ident) {
/// mod bar {
Expand Down
6 changes: 3 additions & 3 deletions compiler/rustc_thread_pool/src/scope/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -501,9 +501,9 @@ impl<'scope> Scope<'scope> {
/// let mut value_c = None;
/// rayon::scope(|s| {
/// s.spawn(|s1| {
/// // ^ this is the same scope as `s`; this handle `s1`
/// // is intended for use by the spawned task,
/// // since scope handles cannot cross thread boundaries.
/// // ^ this is the same scope as `s`; this handle `s1`
/// // is intended for use by the spawned task,
/// // since scope handles cannot cross thread boundaries.
///
/// value_a = Some(22);
///
Expand Down
4 changes: 2 additions & 2 deletions library/alloc/src/string.rs
Original file line number Diff line number Diff line change
Expand Up @@ -265,12 +265,12 @@ use crate::vec::{self, Vec};
/// You can look at these with the [`as_ptr`], [`len`], and [`capacity`]
/// methods:
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// ```
/// use std::mem;
///
/// let story = String::from("Once upon a time...");
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// // Prevent automatically dropping the String's data
/// let mut story = mem::ManuallyDrop::new(story);
///
Expand Down Expand Up @@ -970,13 +970,13 @@ impl String {
///
/// # Examples
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// ```
/// use std::mem;
///
/// unsafe {
/// let s = String::from("hello");
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// // Prevent automatically dropping the String's data
/// let mut s = mem::ManuallyDrop::new(s);
///
Expand Down
10 changes: 5 additions & 5 deletions library/alloc/src/vec/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -566,13 +566,13 @@ impl<T> Vec<T> {
///
/// # Examples
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// ```
/// use std::ptr;
/// use std::mem;
///
/// let v = vec![1, 2, 3];
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// // Prevent running `v`'s destructor so we are in complete control
/// // of the allocation.
/// let mut v = mem::ManuallyDrop::new(v);
Expand Down Expand Up @@ -674,6 +674,7 @@ impl<T> Vec<T> {
///
/// # Examples
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// ```
/// #![feature(box_vec_non_null)]
///
Expand All @@ -682,7 +683,6 @@ impl<T> Vec<T> {
///
/// let v = vec![1, 2, 3];
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// // Prevent running `v`'s destructor so we are in complete control
/// // of the allocation.
/// let mut v = mem::ManuallyDrop::new(v);
Expand Down Expand Up @@ -994,6 +994,7 @@ impl<T, A: Allocator> Vec<T, A> {
///
/// # Examples
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// ```
/// #![feature(allocator_api)]
///
Expand All @@ -1007,7 +1008,6 @@ impl<T, A: Allocator> Vec<T, A> {
/// v.push(2);
/// v.push(3);
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// // Prevent running `v`'s destructor so we are in complete control
/// // of the allocation.
/// let mut v = mem::ManuallyDrop::new(v);
Expand Down Expand Up @@ -1114,6 +1114,7 @@ impl<T, A: Allocator> Vec<T, A> {
///
/// # Examples
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// ```
/// #![feature(allocator_api, box_vec_non_null)]
///
Expand All @@ -1127,7 +1128,6 @@ impl<T, A: Allocator> Vec<T, A> {
/// v.push(2);
/// v.push(3);
///
// FIXME Update this when vec_into_raw_parts is stabilized
/// // Prevent running `v`'s destructor so we are in complete control
/// // of the allocation.
/// let mut v = mem::ManuallyDrop::new(v);
Expand Down Expand Up @@ -3872,8 +3872,8 @@ impl<T, A: Allocator> Vec<T, A> {
/// while i < vec.len() - end_items {
/// if some_predicate(&mut vec[i]) {
/// let val = vec.remove(i);
/// # extracted.push(val);
/// // your code here
/// # extracted.push(val);
/// } else {
/// i += 1;
/// }
Expand Down
6 changes: 3 additions & 3 deletions library/core/src/cell.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2068,9 +2068,9 @@ impl<T: ?Sized + fmt::Display> fmt::Display for RefMut<'_, T> {
/// implies exclusive access to its `T`:
///
/// ```rust
/// #![forbid(unsafe_code)] // with exclusive accesses,
/// // `UnsafeCell` is a transparent no-op wrapper,
/// // so no need for `unsafe` here.
/// #![forbid(unsafe_code)]
/// // with exclusive accesses, `UnsafeCell` is a transparent no-op wrapper, so no need for
/// // `unsafe` here.
/// use std::cell::UnsafeCell;
///
/// let mut x: UnsafeCell<i32> = 42.into();
Expand Down
2 changes: 0 additions & 2 deletions library/core/src/hint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -649,8 +649,6 @@ pub const fn must_use<T>(value: T) -> T {
/// }
/// }
/// ```
///
///
#[unstable(feature = "likely_unlikely", issue = "136873")]
#[inline(always)]
pub const fn likely(b: bool) -> bool {
Expand Down
6 changes: 4 additions & 2 deletions library/core/src/iter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -233,10 +233,12 @@
//!
//! ```
//! let mut values = vec![41];
//! for x in &mut values { // same as `values.iter_mut()`
//! for x in &mut values {
//! // ^ same as `values.iter_mut()`
//! *x += 1;
//! }
//! for x in &values { // same as `values.iter()`
//! for x in &values {
//! // ^ same as `values.iter()`
//! assert_eq!(*x, 42);
//! }
//! assert_eq!(values.len(), 1);
Expand Down
2 changes: 1 addition & 1 deletion library/core/src/iter/traits/iterator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -807,7 +807,7 @@ pub trait Iterator {
/// might be preferable to keep a functional style with longer iterators:
///
/// ```
/// (0..5).flat_map(|x| x * 100 .. x * 110)
/// (0..5).flat_map(|x| (x * 100)..(x * 110))
/// .enumerate()
/// .filter(|&(i, x)| (i + x) % 3 == 0)
/// .for_each(|(i, x)| println!("{i}:{x}"));
Expand Down
10 changes: 8 additions & 2 deletions library/core/src/macros/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,10 @@ pub macro cfg_select($($tt:tt)*) {
/// // expression given.
/// debug_assert!(true);
///
/// fn some_expensive_computation() -> bool { true } // a very simple function
/// fn some_expensive_computation() -> bool {
/// // Some expensive computation here
/// true
/// }
/// debug_assert!(some_expensive_computation());
///
/// // assert with a custom message
Expand Down Expand Up @@ -1547,7 +1550,10 @@ pub(crate) mod builtin {
/// // expression given.
/// assert!(true);
///
/// fn some_computation() -> bool { true } // a very simple function
/// fn some_computation() -> bool {
/// // Some expensive computation here
/// true
/// }
///
/// assert!(some_computation());
///
Expand Down
3 changes: 1 addition & 2 deletions library/core/src/marker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,7 @@ unsafe impl<T: Sync + PointeeSized> Send for &T {}
/// impl Bar for Impl { }
///
/// let x: &dyn Foo = &Impl; // OK
/// // let y: &dyn Bar = &Impl; // error: the trait `Bar` cannot
/// // be made into an object
/// // let y: &dyn Bar = &Impl; // error: the trait `Bar` cannot be made into an object
/// ```
///
/// [trait object]: ../../book/ch17-02-trait-objects.html
Expand Down
21 changes: 10 additions & 11 deletions library/core/src/mem/maybe_uninit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -773,8 +773,7 @@ impl<T> MaybeUninit<T> {
/// // Initialize the `MaybeUninit` using `Cell::set`:
/// unsafe {
/// b.assume_init_ref().set(true);
/// // ^^^^^^^^^^^^^^^
/// // Reference to an uninitialized `Cell<bool>`: UB!
/// //^^^^^^^^^^^^^^^ Reference to an uninitialized `Cell<bool>`: UB!
/// }
/// ```
#[stable(feature = "maybe_uninit_ref", since = "1.55.0")]
Expand Down Expand Up @@ -864,9 +863,9 @@ impl<T> MaybeUninit<T> {
/// {
/// let mut buffer = MaybeUninit::<[u8; 64]>::uninit();
/// reader.read_exact(unsafe { buffer.assume_init_mut() })?;
/// // ^^^^^^^^^^^^^^^^^^^^^^^^
/// // (mutable) reference to uninitialized memory!
/// // This is undefined behavior.
/// // ^^^^^^^^^^^^^^^^^^^^^^^^
/// // (mutable) reference to uninitialized memory!
/// // This is undefined behavior.
/// Ok(unsafe { buffer.assume_init() })
/// }
/// ```
Expand All @@ -884,13 +883,13 @@ impl<T> MaybeUninit<T> {
/// let foo: Foo = unsafe {
/// let mut foo = MaybeUninit::<Foo>::uninit();
/// ptr::write(&mut foo.assume_init_mut().a as *mut u32, 1337);
/// // ^^^^^^^^^^^^^^^^^^^^^
/// // (mutable) reference to uninitialized memory!
/// // This is undefined behavior.
/// // ^^^^^^^^^^^^^^^^^^^^^
/// // (mutable) reference to uninitialized memory!
/// // This is undefined behavior.
/// ptr::write(&mut foo.assume_init_mut().b as *mut u8, 42);
/// // ^^^^^^^^^^^^^^^^^^^^^
/// // (mutable) reference to uninitialized memory!
/// // This is undefined behavior.
/// // ^^^^^^^^^^^^^^^^^^^^^
/// // (mutable) reference to uninitialized memory!
/// // This is undefined behavior.
/// foo.assume_init()
/// };
/// ```
Expand Down
2 changes: 1 addition & 1 deletion library/core/src/primitive_docs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ mod prim_bool {}
/// When the compiler sees a value of type `!` in a [coercion site], it implicitly inserts a
/// coercion to allow the type checker to infer any type:
///
// FIXME: use `core::convert::absurd` here instead, once it's merged
/// ```rust,ignore (illustrative-and-has-placeholders)
/// // this
/// let x: u8 = panic!();
Expand All @@ -281,7 +282,6 @@ mod prim_bool {}
/// // where absurd is a function with the following signature
/// // (it's sound, because `!` always marks unreachable code):
/// fn absurd<T>(_: !) -> T { ... }
// FIXME: use `core::convert::absurd` here instead, once it's merged
/// ```
///
/// This can lead to compilation errors if the type cannot be inferred:
Expand Down
Loading