GNU bug report logs - #77914
31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Eval Exec <execvy@HIDDEN>; dated Sat, 19 Apr 2025 05:12:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 77914 <at> debbugs.gnu.org:


Received: (at 77914) by debbugs.gnu.org; 20 Apr 2025 09:29:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Apr 20 05:29:17 2025
Received: from localhost ([127.0.0.1]:45009 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6QzE-0000ne-OZ
	for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 05:29:17 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:36790)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1u6QzD-0000nP-Ch
 for 77914 <at> debbugs.gnu.org; Sun, 20 Apr 2025 05:29:15 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1u6Qz8-0004sj-3i; Sun, 20 Apr 2025 05:29:10 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=luoh+FL9qh0vNn7c/w0bLf0B1vMA5ShllzPK7wtDzWc=; b=j5/zwrQPO/od
 8M1jqc2F91NKaUEhcZpCvNXEJKgTpK/B1SvZdok2vGh+gN2eUdmeixZR91ktgRFQF8u9aleLCQc+B
 8/4ulN4V324giiJTYeUsse3QFHLzAUMgl4Pl/Pj8gHVOpnO6XiziLPWPkTovDuQSiom/fiyO5oq02
 sLkzgOtfDOWqfjod2kXkk68Np1JYHiEtKNhrkvAc9E4WunTIuQxq20gaDhE6KPuaQzOF3870j/T9j
 GC8BsLD6a+cJxWc63s8UrfE10tTWX8uK0+Ml0nYlyAuGNtIE9CHFIfM2QJMztUhn0g0Z4GRTvvFcC
 8K6kl84qWbjE7bxkNjxSPw==;
Date: Sun, 20 Apr 2025 12:29:07 +0300
Message-Id: <86wmbf5ggs.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Eval Exec <execvy@HIDDEN>
In-Reply-To: <5af658c9-70e0-4dd2-82ba-d528021771c1@HIDDEN> (message from
 Eval Exec on Sun, 20 Apr 2025 15:19:20 +0800)
Subject: Re: bug#77914: 31.0.50;
 treesit-font-lock-level set to 4 cause rust-ts-mode lost all color
References: <877c3gka72.fsf@HIDDEN> <3523927.LZWGnKmheA@fedora>
 <5af658c9-70e0-4dd2-82ba-d528021771c1@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 77914
Cc: v.pupillo@HIDDEN, 77914 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 20 Apr 2025 15:19:20 +0800
> From: Eval Exec <execvy@HIDDEN>
> 
> Oh! In the reproduce step, I write a typo, the bug can be reproduced by 
> setting different `treesit-font-lock-level`, wen 
> `treesit-font-lock-level` is 3, all colors are good, when 
> treesit-font-lock-level is 4, all colors are lost.
> To reproduce this: use this rust file:
> 
> Then eval:
> 1. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
> all color are lost.
> 
> 2. (progn  (setq treesit-font-lock-level 3) (revert-buffer))
> colors are good. !Important, level 3 is good, but level 4 lost colors.
> 
> 3. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
> all color are lost again.

Don't use setq, use setopt.  treesit-font-lock-level is a defcustom,
and it has a setter function.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#77914; Package emacs. Full text available.

Message received at 77914 <at> debbugs.gnu.org:


Received: (at 77914) by debbugs.gnu.org; 20 Apr 2025 08:17:55 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Apr 20 04:17:55 2025
Received: from localhost ([127.0.0.1]:44892 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6PsB-0005mn-57
	for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 04:17:55 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:43102)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1u6Ps8-0005mV-Lo
 for 77914 <at> debbugs.gnu.org; Sun, 20 Apr 2025 04:17:53 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1u6Ps2-00050K-Qo; Sun, 20 Apr 2025 04:17:46 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=YUwyfiEDtzXvOE4+CZFuL5yjwAKaYo6fnju/S4mN768=; b=UdFxCDSedEke
 lQ8KUXfozFc4Esj6zMrCGftxDIXElR1DDHY+bH+ths6A420LdCD1ZWPNStLsanWVKTDllAzv9DqxY
 wEpsqPKpbib528YuEaLSJoXox4dyoshPeHjBl/7TJx8l2MuYfawg4J9WZb4V1Q6fpnm03Gb3LJGj1
 sNWCUBIIxIPshwiNdObjthO5vtS5vMETOsi8BiOlRm3mudxBHHmL5Z5+HUFAW/W8MhU1BRfXLiSEn
 4W3IWHRpOF1AFPxwH/iVbfsBFdq1APpPUdM7Q/CT8b7gjttswl43VihkyH/+KAMJndXt7GlOb+adv
 q0UoNKY+nMOuiCQ7IvqzuQ==;
Date: Sun, 20 Apr 2025 11:17:44 +0300
Message-Id: <865xiz6yc7.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Juri Linkov <juri@HIDDEN>
In-Reply-To: <87mscbe5a8.fsf@HIDDEN> (message from Juri Linkov on
 Sun, 20 Apr 2025 09:15:51 +0300)
Subject: Re: bug#77914: 31.0.50;
 treesit-font-lock-level set to 4 cause rust-ts-mode lost all color
References: <877c3gka72.fsf@HIDDEN> <3523927.LZWGnKmheA@fedora>
 <87mscbe5a8.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 77914
Cc: execvy@HIDDEN, v.pupillo@HIDDEN, 77914 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Cc: Eval Exec <execvy@HIDDEN>, 77914 <at> debbugs.gnu.org
> From: Juri Linkov <juri@HIDDEN>
> Date: Sun, 20 Apr 2025 09:15:51 +0300
> 
> > If the attached file is correct, it appears to be a grammar bug (the tree-
> > sitter-rust grammar). Take a look at the attached screenshot (libtree-
> > sitter-0.25.2 and tree-sitter-rust v0.24.0)
> 
> Maybe this is related to Rust grammar version mismatch
> where the current rust-ts-mode works only with
> tree-sitter-rust v0.23.0:
> 
> https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00430.html

If this is the reason, it would be good to adapt rust-ts-mode to a
newer grammar version.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#77914; Package emacs. Full text available.

Message received at 77914 <at> debbugs.gnu.org:


Received: (at 77914) by debbugs.gnu.org; 20 Apr 2025 07:19:43 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Apr 20 03:19:43 2025
Received: from localhost ([127.0.0.1]:44276 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6Oxn-000056-5S
	for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 03:19:43 -0400
Received: from mail-pl1-x643.google.com ([2607:f8b0:4864:20::643]:44086)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <execvy@HIDDEN>) id 1u6Oxf-0008WM-Pq
 for 77914 <at> debbugs.gnu.org; Sun, 20 Apr 2025 03:19:36 -0400
Received: by mail-pl1-x643.google.com with SMTP id
 d9443c01a7336-2255003f4c6so35538335ad.0
 for <77914 <at> debbugs.gnu.org>; Sun, 20 Apr 2025 00:19:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1745133565; x=1745738365; darn=debbugs.gnu.org;
 h=content-transfer-encoding:in-reply-to:autocrypt:from
 :content-language:references:to:subject:user-agent:mime-version:date
 :message-id:from:to:cc:subject:date:message-id:reply-to;
 bh=66FkkO0nThuk+v+ot92XcoRd/UnRY/Q0mreicvF4ayo=;
 b=eiWR/YdpABYjs5PeMlYF9B+MyWdM4QoWUoMIWverRhe16YIw9Qv97JoEBbGtsus05e
 yShmD37xQ/wWcpd3ItvB6bUGWHHHhaNLdiqABrU0N+Da34t+a6HYNGp2K2N47CwmVMFN
 t2gCWYb92b7jKjLAiDq63H9VC0ARz04QPGdbQ759y7DFN679OY/QGOWGdWpQ1gf5DhO3
 cCP/qm486xOqBQw5lXoxunPpfBhFahavsdG5gREKCGQ1HnBQKTneiVJUxIpHZ1QHsj+O
 xQvHDoB36BiLXn4eG0NFagDopV7apayL88Wv5EC/ADnqxe2CGzo8YKXlXhQdjw7uEHyN
 s2fA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1745133565; x=1745738365;
 h=content-transfer-encoding:in-reply-to:autocrypt:from
 :content-language:references:to:subject:user-agent:mime-version:date
 :message-id:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=66FkkO0nThuk+v+ot92XcoRd/UnRY/Q0mreicvF4ayo=;
 b=oTfhiGIkWmwsT8EdbTL/YU7qUYXBqI3jMRwkDlMDpDMMpnaiFjRF4aFCXVC0gOkpcJ
 QlzVjGGn/0EI4gXihULrv506tyJLHo7qHTKo2v6keVHZTo0h4mM4RW0u2OYbNNyMpUyb
 QXzY4L8qe8cCnUEGNjEdb8kkpzjIisOZeTvrHBD0czoNlv4dTVIuN6ppET3Dgbiq2WMR
 Ozw50I204jKob0lsj2lsGMAgsGj/s223hjAIweikcWOf3w+6YziQJIxLrA5karKpBv1F
 0ngqIwy+Qh6ilwWAdA9RqoimEmEKCW7ZmW/7SH5PsyHNAb5VKk8xheGWThOYYNHPPDw8
 Keeg==
X-Forwarded-Encrypted: i=1;
 AJvYcCUQxzGrw0ZlUrR921cdr7YLAZEJvVlmJnRhy2Ym7jGZdHNxXoBTYModW/0I8s+xaP/URZI/Bg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzwKhO7c8xIPr5ip5w8yVoLhayeUmMQ6Yb0MXorD4oXMJXgsj4P
 ZL+OP0zR6zhJHTbLL+dbkaubn9Hoya+Xf+yr9ixz1oEXcCxIMT7L
X-Gm-Gg: ASbGncv7I/hSshs57WWAQoLJxbOkZdBYSvpUPKC0GwAHfTqFpCrCrph5fgyf7fhItml
 R2XEMZw96YbdNAmtA/2EYw6YXzVmkzP2kZE8z1Zjebp0DbA28i8HFuYlBb2xL8V0gyDhtGGXLbZ
 ZZWeS8uVlm5qkRoSUGl9A7ypMrKWGHrbk2ZJfJMNBUl6z+EjGHlKBBzO+xaZ883XJmhVxVxhYud
 KCzPTgW5Um2C1z/ZO3WYBuEHYO7n3lHam+skhmi5Zi1UFVZjVgfx47vU6bALrTwhdUDUpdMUGEL
 Wk8cdH/4i9epIP+h200T5zCLbcYdmoxrOg==
X-Google-Smtp-Source: AGHT+IFR+AucwWhh2c4EFMr0EnrZcZ7/2dmXkamqx61nmaJ/L56skSoNBTnci3hbPqA+fY036iFpyg==
X-Received: by 2002:a17:902:dac7:b0:224:b60:3cd3 with SMTP id
 d9443c01a7336-22c53583e10mr110402305ad.19.1745133564579; 
 Sun, 20 Apr 2025 00:19:24 -0700 (PDT)
Received: from [28.0.0.1] ([124.64.126.60]) by smtp.gmail.com with ESMTPSA id
 d9443c01a7336-22c50bf3eb1sm44145935ad.82.2025.04.20.00.19.22
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sun, 20 Apr 2025 00:19:24 -0700 (PDT)
Message-ID: <5af658c9-70e0-4dd2-82ba-d528021771c1@HIDDEN>
Date: Sun, 20 Apr 2025 15:19:20 +0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause
 rust-ts-mode lost all color
To: Vincenzo Pupillo <v.pupillo@HIDDEN>, 77914 <at> debbugs.gnu.org,
 bug-gnu-emacs@HIDDEN
References: <877c3gka72.fsf@HIDDEN> <3523927.LZWGnKmheA@fedora>
Content-Language: en-US
From: Eval Exec <execvy@HIDDEN>
Autocrypt: addr=execvy@HIDDEN; keydata=
 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
In-Reply-To: <3523927.LZWGnKmheA@fedora>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 77914
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Oh! In the reproduce step, I write a typo, the bug can be reproduced by 
setting different `treesit-font-lock-level`, wen 
`treesit-font-lock-level` is 3, all colors are good, when 
treesit-font-lock-level is 4, all colors are lost.
To reproduce this: use this rust file:

Then eval:
1. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
all color are lost.

2. (progn  (setq treesit-font-lock-level 3) (revert-buffer))
colors are good. !Important, level 3 is good, but level 4 lost colors.

3. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
all color are lost again.


Can you reproduce this?

On 4/20/25 06:12, Vincenzo Pupillo wrote:
> If the attached file is correct, it appears to be a grammar bug (the tree-
> sitter-rust grammar). Take a look at the attached screenshot (libtree-
> sitter-0.25.2 and tree-sitter-rust v0.24.0)
> 
> Vincenzo
> 
> In data sabato 19 aprile 2025 07:10:57 Ora legale dell’Europa centrale, Eval
> Exec ha scritto:
>> Hello,
>> I'm visiting a rust file, when I set treesit-font-lock-level to 3, all
>> color are good, when I set treesit-font-lock-level to 4, all color as
>> lost.
>> To reproduce this: use this rust file:
>>
>> Then eval:
>> 1. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
>> all color are lost.
>>
>> 2. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
>> colors are good.
>>
>> 3. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
>> all color are lost again.
>>
>>
>> ```rust
>>
>> //! Primitive traits and types representing basic properties of types.
>> //!
>> //! Rust types can be classified in various useful ways according to
>> //! their intrinsic properties. These classifications are represented
>> //! as traits.
>>
>> #![stable(feature = "rust1", since = "1.0.0")]
>>
>> use crate::cell::UnsafeCell;
>> use crate::cmp;
>> use crate::fmt::Debug;
>> use crate::hash::{Hash, Hasher};
>>
>> /// Implements a given marker trait for multiple types at the same time.
>> ///
>> /// The basic syntax looks like this:
>> /// ```ignore private macro
>> /// marker_impls! { MarkerTrait for u8, i8 }
>> /// ```
>> /// You can also implement `unsafe` traits
>> /// ```ignore private macro
>> /// marker_impls! { unsafe MarkerTrait for u8, i8 }
>> /// ```
>> /// Add attributes to all impls:
>> /// ```ignore private macro
>> /// marker_impls! {
>> ///     #[allow(lint)]
>> ///     #[unstable(feature = "marker_trait", issue = "none")]
>> ///     MarkerTrait for u8, i8
>> /// }
>> /// ```
>> /// And use generics:
>> /// ```ignore private macro
>> /// marker_impls! {
>> ///     MarkerTrait for
>> ///         u8, i8,
>> ///         {T: ?Sized} *const T,
>> ///         {T: ?Sized} *mut T,
>> ///         {T: MarkerTrait} PhantomData<T>,
>> ///         u32,
>> /// }
>> /// ```
>> #[unstable(feature = "internal_impls_macro", issue = "none")]
>> // Allow implementations of `UnsizedConstParamTy` even though std cannot use
>> that feature. #[allow_internal_unstable(unsized_const_params)]
>> macro marker_impls {
>>      ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty $(,
>> $($rest:tt)*)? ) => { $(#[$($meta)*])* impl< $($($bounds)*)? > $Trait for
>> $T {}
>>          marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? }
>>      },
>>      ( $(#[$($meta:tt)*])* $Trait:ident for ) => {},
>>
>>      ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? $T:ty
>> $(, $($rest:tt)*)? ) => { $(#[$($meta)*])* unsafe impl< $($($bounds)*)? >
>> $Trait for $T {} marker_impls! { $(#[$($meta)*])* unsafe $Trait for
>> $($($rest)*)? } },
>>      ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) => {},
>> }
>>
>> /// Types that can be transferred across thread boundaries.
>> ///
>> /// This trait is automatically implemented when the compiler determines
>> it's /// appropriate.
>> ///
>> /// An example of a non-`Send` type is the reference-counting pointer
>> /// [`rc::Rc`][`Rc`]. If two threads attempt to clone [`Rc`]s that point to
>> the same /// reference-counted value, they might try to update the
>> reference count at the /// same time, which is [undefined behavior][ub]
>> because [`Rc`] doesn't use atomic /// operations. Its cousin
>> [`sync::Arc`][arc] does use atomic operations (incurring /// some overhead)
>> and thus is `Send`.
>> ///
>> /// See [the Nomicon](../../nomicon/send-and-sync.html) and the [`Sync`]
>> trait for more details. ///
>> /// [`Rc`]: ../../std/rc/struct.Rc.html
>> /// [arc]: ../../std/sync/struct.Arc.html
>> /// [ub]: ../../reference/behavior-considered-undefined.html
>> #[stable(feature = "rust1", since = "1.0.0")]
>> #[cfg_attr(not(test), rustc_diagnostic_item = "Send")]
>> #[diagnostic::on_unimplemented(
>>      message = "`{Self}` cannot be sent between threads safely",
>>      label = "`{Self}` cannot be sent between threads safely"
>> )]
>> pub unsafe auto trait Send {
>>      // empty.
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> !Send for *const T {}
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> !Send for *mut T {}
>>
>> // Most instances arise automatically, but this instance is needed to link
>> up `T: Sync` with // `&T: Send` (and it also removes the unsound default
>> instance `T Send` -> `&T: Send` that would // otherwise exist).
>> #[stable(feature = "rust1", since = "1.0.0")]
>> unsafe impl<T: Sync + ?Sized> Send for &T {}
>>
>> /// Types with a constant size known at compile time.
>> ///
>> /// All type parameters have an implicit bound of `Sized`. The special
>> syntax /// `?Sized` can be used to remove this bound if it's not
>> appropriate. ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// struct Foo<T>(T);
>> /// struct Bar<T: ?Sized>(T);
>> ///
>> /// // struct FooUse(Foo<[i32]>); // error: Sized is not implemented for
>> [i32] /// struct BarUse(Bar<[i32]>); // OK
>> /// ```
>> ///
>> /// The one exception is the implicit `Self` type of a trait. A trait does
>> not /// have an implicit `Sized` bound as this is incompatible with [trait
>> object]s /// where, by definition, the trait needs to work with all
>> possible implementors, /// and thus could be any size.
>> ///
>> /// Although Rust will let you bind `Sized` to a trait, you won't
>> /// be able to use it to form a trait object later:
>> ///
>> /// ```
>> /// # #![allow(unused_variables)]
>> /// trait Foo { }
>> /// trait Bar: Sized { }
>> ///
>> /// struct Impl;
>> /// impl Foo for Impl { }
>> /// 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
>> /// ```
>> ///
>> /// [trait object]: ../../book/ch17-02-trait-objects.html
>> #[doc(alias = "?", alias = "?Sized")]
>> #[stable(feature = "rust1", since = "1.0.0")]
>> #[lang = "sized"]
>> #[diagnostic::on_unimplemented(
>>      message = "the size for values of type `{Self}` cannot be known at
>> compilation time", label = "doesn't have a size known at compile-time"
>> )]
>> #[fundamental] // for Default, for example, which requires that `[T]:
>> !Default` be evaluatable #[rustc_specialization_trait]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> #[rustc_coinductive]
>> pub trait Sized {
>>      // Empty.
>> }
>>
>> /// Types that can be "unsized" to a dynamically-sized type.
>> ///
>> /// For example, the sized array type `[i8; 2]` implements `Unsize<[i8]>`
>> and /// `Unsize<dyn fmt::Debug>`.
>> ///
>> /// All implementations of `Unsize` are provided automatically by the
>> compiler. /// Those implementations are:
>> ///
>> /// - Arrays `[T; N]` implement `Unsize<[T]>`.
>> /// - A type implements `Unsize<dyn Trait + 'a>` if all of these conditions
>> are met: ///   - The type implements `Trait`.
>> ///   - `Trait` is dyn-compatible[^1].
>> ///   - The type is sized.
>> ///   - The type outlives `'a`.
>> /// - Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize<Foo<..., U1,
>> ..., Un, ...>>` /// where any number of (type and const) parameters may be
>> changed if all of these conditions /// are met:
>> ///   - Only the last field of `Foo` has a type involving the parameters
>> `T1`, ..., `Tn`. ///   - All other parameters of the struct are equal.
>> ///   - `Field<T1, ..., Tn>: Unsize<Field<U1, ..., Un>>`, where `Field<...>`
>> stands for the actual ///     type of the struct's last field.
>> ///
>> /// `Unsize` is used along with [`ops::CoerceUnsized`] to allow
>> /// "user-defined" containers such as [`Rc`] to contain dynamically-sized
>> /// types. See the [DST coercion RFC][RFC982] and [the nomicon entry on
>> coercion][nomicon-coerce] /// for more details.
>> ///
>> /// [`ops::CoerceUnsized`]: crate::ops::CoerceUnsized
>> /// [`Rc`]: ../../std/rc/struct.Rc.html
>> /// [RFC982]:
>> https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md ///
>> [nomicon-coerce]: ../../nomicon/coercions.html
>> /// [^1]: Formerly known as *object safe*.
>> #[unstable(feature = "unsize", issue = "18598")]
>> #[lang = "unsize"]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait Unsize<T: ?Sized> {
>>      // Empty.
>> }
>>
>> /// Required trait for constants used in pattern matches.
>> ///
>> /// Any type that derives `PartialEq` automatically implements this trait,
>> /// *regardless* of whether its type-parameters implement `PartialEq`.
>> ///
>> /// If a `const` item contains some type that does not implement this trait,
>> /// then that type either (1.) does not implement `PartialEq` (which means
>> the /// constant will not provide that comparison method, which code
>> generation /// assumes is available), or (2.) it implements *its own*
>> version of /// `PartialEq` (which we assume does not conform to a
>> structural-equality /// comparison).
>> ///
>> /// In either of the two scenarios above, we reject usage of such a constant
>> in /// a pattern match.
>> ///
>> /// See also the [structural match RFC][RFC1445], and [issue 63438] which
>> /// motivated migrating from an attribute-based design to this trait.
>> ///
>> /// [RFC1445]:
>> https://github.com/rust-lang/rfcs/blob/master/text/1445-restrict-constants-> in-patterns.md /// [issue 63438]:
>> https://github.com/rust-lang/rust/issues/63438
>> #[unstable(feature = "structural_match", issue = "31434")]
>> #[diagnostic::on_unimplemented(message = "the type `{Self}` does not
>> `#[derive(PartialEq)]`")] #[lang = "structural_peq"]
>> pub trait StructuralPartialEq {
>>      // Empty.
>> }
>>
>> marker_impls! {
>>      #[unstable(feature = "structural_match", issue = "31434")]
>>      StructuralPartialEq for
>>          usize, u8, u16, u32, u64, u128,
>>          isize, i8, i16, i32, i64, i128,
>>          bool,
>>          char,
>>          str /* Technically requires `[u8]: StructuralPartialEq` */,
>>          (),
>>          {T, const N: usize} [T; N],
>>          {T} [T],
>>          {T: ?Sized} &T,
>> }
>>
>> /// Types whose values can be duplicated simply by copying bits.
>> ///
>> /// By default, variable bindings have 'move semantics.' In other
>> /// words:
>> ///
>> /// ```
>> /// #[derive(Debug)]
>> /// struct Foo;
>> ///
>> /// let x = Foo;
>> ///
>> /// let y = x;
>> ///
>> /// // `x` has moved into `y`, and so cannot be used
>> ///
>> /// // println!("{x:?}"); // error: use of moved value
>> /// ```
>> ///
>> /// However, if a type implements `Copy`, it instead has 'copy semantics':
>> ///
>> /// ```
>> /// // We can derive a `Copy` implementation. `Clone` is also required, as
>> it's /// // a supertrait of `Copy`.
>> /// #[derive(Debug, Copy, Clone)]
>> /// struct Foo;
>> ///
>> /// let x = Foo;
>> ///
>> /// let y = x;
>> ///
>> /// // `y` is a copy of `x`
>> ///
>> /// println!("{x:?}"); // A-OK!
>> /// ```
>> ///
>> /// It's important to note that in these two examples, the only difference
>> is whether you /// are allowed to access `x` after the assignment. Under
>> the hood, both a copy and a move /// can result in bits being copied in
>> memory, although this is sometimes optimized away. ///
>> /// ## How can I implement `Copy`?
>> ///
>> /// There are two ways to implement `Copy` on your type. The simplest is to
>> use `derive`: ///
>> /// ```
>> /// #[derive(Copy, Clone)]
>> /// struct MyStruct;
>> /// ```
>> ///
>> /// You can also implement `Copy` and `Clone` manually:
>> ///
>> /// ```
>> /// struct MyStruct;
>> ///
>> /// impl Copy for MyStruct { }
>> ///
>> /// impl Clone for MyStruct {
>> ///     fn clone(&self) -> MyStruct {
>> ///         *self
>> ///     }
>> /// }
>> /// ```
>> ///
>> /// There is a small difference between the two. The `derive` strategy will
>> also place a `Copy` /// bound on type parameters:
>> ///
>> /// ```
>> /// #[derive(Clone)]
>> /// struct MyStruct<T>(T);
>> ///
>> /// impl<T: Copy> Copy for MyStruct<T> { }
>> /// ```
>> ///
>> /// This isn't always desired. For example, shared references (`&T`) can be
>> copied regardless of /// whether `T` is `Copy`. Likewise, a generic struct
>> containing markers such as [`PhantomData`] /// could potentially be
>> duplicated with a bit-wise copy.
>> ///
>> /// ## What's the difference between `Copy` and `Clone`?
>> ///
>> /// Copies happen implicitly, for example as part of an assignment `y = x`.
>> The behavior of /// `Copy` is not overloadable; it is always a simple
>> bit-wise copy. ///
>> /// Cloning is an explicit action, `x.clone()`. The implementation of
>> [`Clone`] can /// provide any type-specific behavior necessary to duplicate
>> values safely. For example, /// the implementation of [`Clone`] for
>> [`String`] needs to copy the pointed-to string /// buffer in the heap. A
>> simple bitwise copy of [`String`] values would merely copy the /// pointer,
>> leading to a double free down the line. For this reason, [`String`] is
>> [`Clone`] /// but not `Copy`.
>> ///
>> /// [`Clone`] is a supertrait of `Copy`, so everything which is `Copy` must
>> also implement /// [`Clone`]. If a type is `Copy` then its [`Clone`]
>> implementation only needs to return `*self` /// (see the example above).
>> ///
>> /// ## When can my type be `Copy`?
>> ///
>> /// A type can implement `Copy` if all of its components implement `Copy`.
>> For example, this /// struct can be `Copy`:
>> ///
>> /// ```
>> /// # #[allow(dead_code)]
>> /// #[derive(Copy, Clone)]
>> /// struct Point {
>> ///    x: i32,
>> ///    y: i32,
>> /// }
>> /// ```
>> ///
>> /// A struct can be `Copy`, and [`i32`] is `Copy`, therefore `Point` is
>> eligible to be `Copy`. /// By contrast, consider
>> ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// # struct Point;
>> /// struct PointList {
>> ///     points: Vec<Point>,
>> /// }
>> /// ```
>> ///
>> /// The struct `PointList` cannot implement `Copy`, because [`Vec<T>`] is
>> not `Copy`. If we /// attempt to derive a `Copy` implementation, we'll get
>> an error: ///
>> /// ```text
>> /// the trait `Copy` cannot be implemented for this type; field `points`
>> does not implement `Copy` /// ```
>> ///
>> /// Shared references (`&T`) are also `Copy`, so a type can be `Copy`, even
>> when it holds /// shared references of types `T` that are *not* `Copy`.
>> Consider the following struct, /// which can implement `Copy`, because it
>> only holds a *shared reference* to our non-`Copy` /// type `PointList` from
>> above:
>> ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// # struct PointList;
>> /// #[derive(Copy, Clone)]
>> /// struct PointListWrapper<'a> {
>> ///     point_list_ref: &'a PointList,
>> /// }
>> /// ```
>> ///
>> /// ## When *can't* my type be `Copy`?
>> ///
>> /// Some types can't be copied safely. For example, copying `&mut T` would
>> create an aliased /// mutable reference. Copying [`String`] would duplicate
>> responsibility for managing the /// [`String`]'s buffer, leading to a
>> double free.
>> ///
>> /// Generalizing the latter case, any type implementing [`Drop`] can't be
>> `Copy`, because it's /// managing some resource besides its own
>> [`size_of::<T>`] bytes. ///
>> /// If you try to implement `Copy` on a struct or enum containing non-`Copy`
>> data, you will get /// the error [E0204].
>> ///
>> /// [E0204]: ../../error_codes/E0204.html
>> ///
>> /// ## When *should* my type be `Copy`?
>> ///
>> /// Generally speaking, if your type _can_ implement `Copy`, it should. Keep
>> in mind, though, /// that implementing `Copy` is part of the public API of
>> your type. If the type might become /// non-`Copy` in the future, it could
>> be prudent to omit the `Copy` implementation now, to /// avoid a breaking
>> API change.
>> ///
>> /// ## Additional implementors
>> ///
>> /// In addition to the [implementors listed below][impls],
>> /// the following types also implement `Copy`:
>> ///
>> /// * Function item types (i.e., the distinct types defined for each
>> function) /// * Function pointer types (e.g., `fn() -> i32`)
>> /// * Closure types, if they capture no value from the environment
>> ///   or if all such captured values implement `Copy` themselves.
>> ///   Note that variables captured by shared reference always implement
>> `Copy` ///   (even if the referent doesn't),
>> ///   while variables captured by mutable reference never implement `Copy`.
>> ///
>> /// [`Vec<T>`]: ../../std/vec/struct.Vec.html
>> /// [`String`]: ../../std/string/struct.String.html
>> /// [`size_of::<T>`]: crate::mem::size_of
>> /// [impls]: #implementors
>> #[stable(feature = "rust1", since = "1.0.0")]
>> #[lang = "copy"]
>> // FIXME(matthewjasper) This allows copying a type that doesn't implement
>> // `Copy` because of unsatisfied lifetime bounds (copying `A<'_>` when only
>> // `A<'static>: Copy` and `A<'_>: Clone`).
>> // We have this attribute here for now only because there are quite a few
>> // existing specializations on `Copy` that already exist in the standard
>> // library, and there's no way to safely have this behavior right now.
>> #[rustc_unsafe_specialization_marker]
>> #[rustc_diagnostic_item = "Copy"]
>> pub trait Copy: Clone {
>>      // Empty.
>> }
>>
>> /// Derive macro generating an impl of the trait `Copy`.
>> #[rustc_builtin_macro]
>> #[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
>> #[allow_internal_unstable(core_intrinsics, derive_clone_copy)]
>> pub macro Copy($item:item) {
>>      /* compiler built-in */
>> }
>>
>> // Implementations of `Copy` for primitive types.
>> //
>> // Implementations that cannot be described in Rust
>> // are implemented in `traits::SelectionContext::copy_clone_conditions()`
>> // in `rustc_trait_selection`.
>> marker_impls! {
>>      #[stable(feature = "rust1", since = "1.0.0")]
>>      Copy for
>>          usize, u8, u16, u32, u64, u128,
>>          isize, i8, i16, i32, i64, i128,
>>          f16, f32, f64, f128,
>>          bool, char,
>>          {T: ?Sized} *const T,
>>          {T: ?Sized} *mut T,
>>
>> }
>>
>> #[unstable(feature = "never_type", issue = "35121")]
>> impl Copy for ! {}
>>
>> /// Shared references can be copied, but mutable references *cannot*!
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Copy for &T {}
>>
>> /// Types for which it is safe to share references between threads.
>> ///
>> /// This trait is automatically implemented when the compiler determines
>> /// it's appropriate.
>> ///
>> /// The precise definition is: a type `T` is [`Sync`] if and only if `&T` is
>> /// [`Send`]. In other words, if there is no possibility of
>> /// [undefined behavior][ub] (including data races) when passing
>> /// `&T` references between threads.
>> ///
>> /// As one would expect, primitive types like [`u8`] and [`f64`]
>> /// are all [`Sync`], and so are simple aggregate types containing them,
>> /// like tuples, structs and enums. More examples of basic [`Sync`]
>> /// types include "immutable" types like `&T`, and those with simple
>> /// inherited mutability, such as [`Box<T>`][box], [`Vec<T>`][vec] and
>> /// most other collection types. (Generic parameters need to be [`Sync`]
>> /// for their container to be [`Sync`].)
>> ///
>> /// A somewhat surprising consequence of the definition is that `&mut T`
>> /// is `Sync` (if `T` is `Sync`) even though it seems like that might
>> /// provide unsynchronized mutation. The trick is that a mutable
>> /// reference behind a shared reference (that is, `& &mut T`)
>> /// becomes read-only, as if it were a `& &T`. Hence there is no risk
>> /// of a data race.
>> ///
>> /// A shorter overview of how [`Sync`] and [`Send`] relate to referencing:
>> /// * `&T` is [`Send`] if and only if `T` is [`Sync`]
>> /// * `&mut T` is [`Send`] if and only if `T` is [`Send`]
>> /// * `&T` and `&mut T` are [`Sync`] if and only if `T` is [`Sync`]
>> ///
>> /// Types that are not `Sync` are those that have "interior
>> /// mutability" in a non-thread-safe form, such as [`Cell`][cell]
>> /// and [`RefCell`][refcell]. These types allow for mutation of
>> /// their contents even through an immutable, shared reference. For
>> /// example the `set` method on [`Cell<T>`][cell] takes `&self`, so it
>> requires /// only a shared reference [`&Cell<T>`][cell]. The method
>> performs no /// synchronization, thus [`Cell`][cell] cannot be `Sync`.
>> ///
>> /// Another example of a non-`Sync` type is the reference-counting
>> /// pointer [`Rc`][rc]. Given any reference [`&Rc<T>`][rc], you can clone
>> /// a new [`Rc<T>`][rc], modifying the reference counts in a non-atomic way.
>> ///
>> /// For cases when one does need thread-safe interior mutability,
>> /// Rust provides [atomic data types], as well as explicit locking via
>> /// [`sync::Mutex`][mutex] and [`sync::RwLock`][rwlock]. These types
>> /// ensure that any mutation cannot cause data races, hence the types
>> /// are `Sync`. Likewise, [`sync::Arc`][arc] provides a thread-safe
>> /// analogue of [`Rc`][rc].
>> ///
>> /// Any types with interior mutability must also use the
>> /// [`cell::UnsafeCell`][unsafecell] wrapper around the value(s) which
>> /// can be mutated through a shared reference. Failing to doing this is
>> /// [undefined behavior][ub]. For example, [`transmute`][transmute]-ing
>> /// from `&T` to `&mut T` is invalid.
>> ///
>> /// See [the Nomicon][nomicon-send-and-sync] for more details about `Sync`.
>> ///
>> /// [box]: ../../std/boxed/struct.Box.html
>> /// [vec]: ../../std/vec/struct.Vec.html
>> /// [cell]: crate::cell::Cell
>> /// [refcell]: crate::cell::RefCell
>> /// [rc]: ../../std/rc/struct.Rc.html
>> /// [arc]: ../../std/sync/struct.Arc.html
>> /// [atomic data types]: crate::sync::atomic
>> /// [mutex]: ../../std/sync/struct.Mutex.html
>> /// [rwlock]: ../../std/sync/struct.RwLock.html
>> /// [unsafecell]: crate::cell::UnsafeCell
>> /// [ub]: ../../reference/behavior-considered-undefined.html
>> /// [transmute]: crate::mem::transmute
>> /// [nomicon-send-and-sync]: ../../nomicon/send-and-sync.html
>> #[stable(feature = "rust1", since = "1.0.0")]
>> #[cfg_attr(not(test), rustc_diagnostic_item = "Sync")]
>> #[lang = "sync"]
>> #[rustc_on_unimplemented(
>>      on(
>>          _Self = "core::cell::once::OnceCell<T>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::OnceLock` instead" ),
>>      on(
>>          _Self = "core::cell::Cell<u8>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead",
>> ),
>>      on(
>>          _Self = "core::cell::Cell<u16>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<u32>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<u64>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<usize>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<i8>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead",
>> ),
>>      on(
>>          _Self = "core::cell::Cell<i16>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<i32>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<i64>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<isize>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<bool>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool`
>> instead", ),
>>      on(
>>          all(
>>              _Self = "core::cell::Cell<T>",
>>              not(_Self = "core::cell::Cell<u8>"),
>>              not(_Self = "core::cell::Cell<u16>"),
>>              not(_Self = "core::cell::Cell<u32>"),
>>              not(_Self = "core::cell::Cell<u64>"),
>>              not(_Self = "core::cell::Cell<usize>"),
>>              not(_Self = "core::cell::Cell<i8>"),
>>              not(_Self = "core::cell::Cell<i16>"),
>>              not(_Self = "core::cell::Cell<i32>"),
>>              not(_Self = "core::cell::Cell<i64>"),
>>              not(_Self = "core::cell::Cell<isize>"),
>>              not(_Self = "core::cell::Cell<bool>")
>>          ),
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock`", ),
>>      on(
>>          _Self = "core::cell::RefCell<T>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` instead", ),
>>      message = "`{Self}` cannot be shared between threads safely",
>>      label = "`{Self}` cannot be shared between threads safely"
>> )]
>> pub unsafe auto trait Sync {
>>      // FIXME(estebank): once support to add notes in
>> `rustc_on_unimplemented` // lands in beta, and it has been extended to
>> check whether a closure is // anywhere in the requirement chain, extend it
>> as such (#48534): // ```
>>      // on(
>>      //     closure,
>>      //     note="`{Self}` cannot be shared safely, consider marking the
>> closure `move`" // ),
>>      // ```
>>
>>      // Empty
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> !Sync for *const T {}
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> !Sync for *mut T {}
>>
>> /// Zero-sized type used to mark things that "act like" they own a `T`.
>> ///
>> /// Adding a `PhantomData<T>` field to your type tells the compiler that
>> your /// type acts as though it stores a value of type `T`, even though it
>> doesn't /// really. This information is used when computing certain safety
>> properties. ///
>> /// For a more in-depth explanation of how to use `PhantomData<T>`, please
>> see /// [the Nomicon](../../nomicon/phantom-data.html).
>> ///
>> /// # A ghastly note 👻👻👻
>> ///
>> /// Though they both have scary names, `PhantomData` and 'phantom types' are
>> /// related, but not identical. A phantom type parameter is simply a type
>> /// parameter which is never used. In Rust, this often causes the compiler
>> to /// complain, and the solution is to add a "dummy" use by way of
>> `PhantomData`. ///
>> /// # Examples
>> ///
>> /// ## Unused lifetime parameters
>> ///
>> /// Perhaps the most common use case for `PhantomData` is a struct that has
>> an /// unused lifetime parameter, typically as part of some unsafe code.
>> For /// example, here is a struct `Slice` that has two pointers of type
>> `*const T`, /// presumably pointing into an array somewhere:
>> ///
>> /// ```compile_fail,E0392
>> /// struct Slice<'a, T> {
>> ///     start: *const T,
>> ///     end: *const T,
>> /// }
>> /// ```
>> ///
>> /// The intention is that the underlying data is only valid for the
>> /// lifetime `'a`, so `Slice` should not outlive `'a`. However, this
>> /// intent is not expressed in the code, since there are no uses of
>> /// the lifetime `'a` and hence it is not clear what data it applies
>> /// to. We can correct this by telling the compiler to act *as if* the
>> /// `Slice` struct contained a reference `&'a T`:
>> ///
>> /// ```
>> /// use std::marker::PhantomData;
>> ///
>> /// # #[allow(dead_code)]
>> /// struct Slice<'a, T> {
>> ///     start: *const T,
>> ///     end: *const T,
>> ///     phantom: PhantomData<&'a T>,
>> /// }
>> /// ```
>> ///
>> /// This also in turn infers the lifetime bound `T: 'a`, indicating
>> /// that any references in `T` are valid over the lifetime `'a`.
>> ///
>> /// When initializing a `Slice` you simply provide the value
>> /// `PhantomData` for the field `phantom`:
>> ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// # use std::marker::PhantomData;
>> /// # struct Slice<'a, T> {
>> /// #     start: *const T,
>> /// #     end: *const T,
>> /// #     phantom: PhantomData<&'a T>,
>> /// # }
>> /// fn borrow_vec<T>(vec: &Vec<T>) -> Slice<'_, T> {
>> ///     let ptr = vec.as_ptr();
>> ///     Slice {
>> ///         start: ptr,
>> ///         end: unsafe { ptr.add(vec.len()) },
>> ///         phantom: PhantomData,
>> ///     }
>> /// }
>> /// ```
>> ///
>> /// ## Unused type parameters
>> ///
>> /// It sometimes happens that you have unused type parameters which
>> /// indicate what type of data a struct is "tied" to, even though that
>> /// data is not actually found in the struct itself. Here is an
>> /// example where this arises with [FFI]. The foreign interface uses
>> /// handles of type `*mut ()` to refer to Rust values of different
>> /// types. We track the Rust type using a phantom type parameter on
>> /// the struct `ExternalResource` which wraps a handle.
>> ///
>> /// [FFI]:
>> ../../book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-external
>> -code ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// # trait ResType { }
>> /// # struct ParamType;
>> /// # mod foreign_lib {
>> /// #     pub fn new(_: usize) -> *mut () { 42 as *mut () }
>> /// #     pub fn do_stuff(_: *mut (), _: usize) {}
>> /// # }
>> /// # fn convert_params(_: ParamType) -> usize { 42 }
>> /// use std::marker::PhantomData;
>> /// use std::mem;
>> ///
>> /// struct ExternalResource<R> {
>> ///    resource_handle: *mut (),
>> ///    resource_type: PhantomData<R>,
>> /// }
>> ///
>> /// impl<R: ResType> ExternalResource<R> {
>> ///     fn new() -> Self {
>> ///         let size_of_res = mem::size_of::<R>();
>> ///         Self {
>> ///             resource_handle: foreign_lib::new(size_of_res),
>> ///             resource_type: PhantomData,
>> ///         }
>> ///     }
>> ///
>> ///     fn do_stuff(&self, param: ParamType) {
>> ///         let foreign_params = convert_params(param);
>> ///         foreign_lib::do_stuff(self.resource_handle, foreign_params);
>> ///     }
>> /// }
>> /// ```
>> ///
>> /// ## Ownership and the drop check
>> ///
>> /// The exact interaction of `PhantomData` with drop check **may change in
>> the future**. ///
>> /// Currently, adding a field of type `PhantomData<T>` indicates that your
>> type *owns* data of type /// `T` in very rare circumstances. This in turn
>> has effects on the Rust compiler's [drop check] /// analysis. For the exact
>> rules, see the [drop check] documentation. ///
>> /// ## Layout
>> ///
>> /// For all `T`, the following are guaranteed:
>> /// * `size_of::<PhantomData<T>>() == 0`
>> /// * `align_of::<PhantomData<T>>() == 1`
>> ///
>> /// [drop check]: Drop#drop-check
>> #[lang = "phantom_data"]
>> #[stable(feature = "rust1", since = "1.0.0")]
>> pub struct PhantomData<T: ?Sized>;
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Hash for PhantomData<T> {
>>      #[inline]
>>      fn hash<H: Hasher>(&self, _: &mut H) {}
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> cmp::PartialEq for PhantomData<T> {
>>      fn eq(&self, _other: &PhantomData<T>) -> bool {
>>          true
>>      }
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> cmp::Eq for PhantomData<T> {}
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> cmp::PartialOrd for PhantomData<T> {
>>      fn partial_cmp(&self, _other: &PhantomData<T>) -> Option<cmp::Ordering>
>> { Option::Some(cmp::Ordering::Equal)
>>      }
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> cmp::Ord for PhantomData<T> {
>>      fn cmp(&self, _other: &PhantomData<T>) -> cmp::Ordering {
>>          cmp::Ordering::Equal
>>      }
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Copy for PhantomData<T> {}
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Clone for PhantomData<T> {
>>      fn clone(&self) -> Self {
>>          Self
>>      }
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Default for PhantomData<T> {
>>      fn default() -> Self {
>>          Self
>>      }
>> }
>>
>> #[unstable(feature = "structural_match", issue = "31434")]
>> impl<T: ?Sized> StructuralPartialEq for PhantomData<T> {}
>>
>> /// Compiler-internal trait used to indicate the type of enum discriminants.
>> ///
>> /// This trait is automatically implemented for every type and does not add
>> any /// guarantees to [`mem::Discriminant`]. It is **undefined behavior**
>> to transmute /// between `DiscriminantKind::Discriminant` and
>> `mem::Discriminant`. ///
>> /// [`mem::Discriminant`]: crate::mem::Discriminant
>> #[unstable(
>>      feature = "discriminant_kind",
>>      issue = "none",
>>      reason = "this trait is unlikely to ever be stabilized, use
>> `mem::discriminant` instead" )]
>> #[lang = "discriminant_kind"]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait DiscriminantKind {
>>      /// The type of the discriminant, which must satisfy the trait
>>      /// bounds required by `mem::Discriminant`.
>>      #[lang = "discriminant_type"]
>>      type Discriminant: Clone + Copy + Debug + Eq + PartialEq + Hash + Send +
>> Sync + Unpin; }
>>
>> /// Used to determine whether a type contains
>> /// any `UnsafeCell` internally, but not through an indirection.
>> /// This affects, for example, whether a `static` of that type is
>> /// placed in read-only static memory or writable static memory.
>> /// This can be used to declare that a constant with a generic type
>> /// will not contain interior mutability, and subsequently allow
>> /// placing the constant behind references.
>> ///
>> /// # Safety
>> ///
>> /// This trait is a core part of the language, it is just expressed as a
>> trait in libcore for /// convenience. Do *not* implement it for other
>> types.
>> // FIXME: Eventually this trait should become `#[rustc_deny_explicit_impl]`.
>> // That requires porting the impls below to native internal impls. #[lang =
>> "freeze"]
>> #[unstable(feature = "freeze", issue = "121675")]
>> pub unsafe auto trait Freeze {}
>>
>> #[unstable(feature = "freeze", issue = "121675")]
>> impl<T: ?Sized> !Freeze for UnsafeCell<T> {}
>> marker_impls! {
>>      #[unstable(feature = "freeze", issue = "121675")]
>>      unsafe Freeze for
>>          {T: ?Sized} PhantomData<T>,
>>          {T: ?Sized} *const T,
>>          {T: ?Sized} *mut T,
>>          {T: ?Sized} &T,
>>          {T: ?Sized} &mut T,
>> }
>>
>> /// Types that do not require any pinning guarantees.
>> ///
>> /// For information on what "pinning" is, see the [`pin` module]
>> documentation. ///
>> /// Implementing the `Unpin` trait for `T` expresses the fact that `T` is
>> pinning-agnostic: /// it shall not expose nor rely on any pinning
>> guarantees. This, in turn, means that a /// `Pin`-wrapped pointer to such a
>> type can feature a *fully unrestricted* API. /// In other words, if `T:
>> Unpin`, a value of type `T` will *not* be bound by the invariants /// which
>> pinning otherwise offers, even when "pinned" by a [`Pin<Ptr>`] pointing at
>> it. /// When a value of type `T` is pointed at by a [`Pin<Ptr>`], [`Pin`]
>> will not restrict access /// to the pointee value like it normally would,
>> thus allowing the user to do anything that they /// normally could with a
>> non-[`Pin`]-wrapped `Ptr` to that value. ///
>> /// The idea of this trait is to alleviate the reduced ergonomics of APIs
>> that require the use /// of [`Pin`] for soundness for some types, but which
>> also want to be used by other types that /// don't care about pinning. The
>> prime example of such an API is [`Future::poll`]. There are many ///
>> [`Future`] types that don't care about pinning. These futures can implement
>> `Unpin` and /// therefore get around the pinning related restrictions in
>> the API, while still allowing the /// subset of [`Future`]s which *do*
>> require pinning to be implemented soundly. ///
>> /// For more discussion on the consequences of [`Unpin`] within the wider
>> scope of the pinning /// system, see the [section about `Unpin`] in the
>> [`pin` module]. ///
>> /// `Unpin` has no consequence at all for non-pinned data. In particular,
>> [`mem::replace`] happily /// moves `!Unpin` data, which would be immovable
>> when pinned ([`mem::replace`] works for any /// `&mut T`, not just when `T:
>> Unpin`).
>> ///
>> /// *However*, you cannot use [`mem::replace`] on `!Unpin` data which is
>> *pinned* by being wrapped /// inside a [`Pin<Ptr>`] pointing at it. This is
>> because you cannot (safely) use a /// [`Pin<Ptr>`] to get a `&mut T` to its
>> pointee value, which you would need to call /// [`mem::replace`], and
>> *that* is what makes this system work.
>> ///
>> /// So this, for example, can only be done on types implementing `Unpin`:
>> ///
>> /// ```rust
>> /// # #![allow(unused_must_use)]
>> /// use std::mem;
>> /// use std::pin::Pin;
>> ///
>> /// let mut string = "this".to_string();
>> /// let mut pinned_string = Pin::new(&mut string);
>> ///
>> /// // We need a mutable reference to call `mem::replace`.
>> /// // We can obtain such a reference by (implicitly) invoking
>> `Pin::deref_mut`, /// // but that is only possible because `String`
>> implements `Unpin`. /// mem::replace(&mut *pinned_string,
>> "other".to_string());
>> /// ```
>> ///
>> /// This trait is automatically implemented for almost every type. The
>> compiler is free /// to take the conservative stance of marking types as
>> [`Unpin`] so long as all of the types that /// compose its fields are also
>> [`Unpin`]. This is because if a type implements [`Unpin`], then it /// is
>> unsound for that type's implementation to rely on pinning-related
>> guarantees for soundness, /// *even* when viewed through a "pinning"
>> pointer! It is the responsibility of the implementor of /// a type that
>> relies upon pinning for soundness to ensure that type is *not* marked as
>> [`Unpin`] /// by adding [`PhantomPinned`] field. For more details, see the
>> [`pin` module] docs. ///
>> /// [`mem::replace`]: crate::mem::replace "mem replace"
>> /// [`Future`]: crate::future::Future "Future"
>> /// [`Future::poll`]: crate::future::Future::poll "Future poll"
>> /// [`Pin`]: crate::pin::Pin "Pin"
>> /// [`Pin<Ptr>`]: crate::pin::Pin "Pin"
>> /// [`pin` module]: crate::pin "pin module"
>> /// [section about `Unpin`]: crate::pin#unpin "pin module docs about unpin"
>> /// [`unsafe`]: ../../std/keyword.unsafe.html "keyword unsafe"
>> #[stable(feature = "pin", since = "1.33.0")]
>> #[diagnostic::on_unimplemented(
>>      note = "consider using the `pin!` macro\nconsider using `Box::pin` if
>> you need to access the pinned value outside of the current scope", message
>> = "`{Self}` cannot be unpinned"
>> )]
>> #[lang = "unpin"]
>> pub auto trait Unpin {}
>>
>> /// A marker type which does not implement `Unpin`.
>> ///
>> /// If a type contains a `PhantomPinned`, it will not implement `Unpin` by
>> default. #[stable(feature = "pin", since = "1.33.0")]
>> #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
>> pub struct PhantomPinned;
>>
>> #[stable(feature = "pin", since = "1.33.0")]
>> impl !Unpin for PhantomPinned {}
>>
>> marker_impls! {
>>      #[stable(feature = "pin", since = "1.33.0")]
>>      Unpin for
>>          {T: ?Sized} &T,
>>          {T: ?Sized} &mut T,
>> }
>>
>> marker_impls! {
>>      #[stable(feature = "pin_raw", since = "1.38.0")]
>>      Unpin for
>>          {T: ?Sized} *const T,
>>          {T: ?Sized} *mut T,
>> }
>>
>> /// A marker for types that can be dropped.
>> ///
>> /// This should be used for `~const` bounds,
>> /// as non-const bounds will always hold for every type.
>> #[unstable(feature = "const_destruct", issue = "133214")]
>> #[lang = "destruct"]
>> #[rustc_on_unimplemented(message = "can't drop `{Self}`", append_const_msg)]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> #[cfg_attr(not(bootstrap), const_trait)]
>> pub trait Destruct {}
>>
>> /// A marker for tuple types.
>> ///
>> /// The implementation of this trait is built-in and cannot be implemented
>> /// for any user type.
>> #[unstable(feature = "tuple_trait", issue = "none")]
>> #[lang = "tuple_trait"]
>> #[diagnostic::on_unimplemented(message = "`{Self}` is not a tuple")]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait Tuple {}
>>
>> /// A marker for pointer-like types.
>> ///
>> /// This trait can only be implemented for types that are certain to have
>> /// the same size and alignment as a [`usize`] or [`*const ()`](pointer).
>> /// To ensure this, there are special requirements on implementations
>> /// of `PointerLike` (other than the already-provided implementations
>> /// for built-in types):
>> ///
>> /// * The type must have `#[repr(transparent)]`.
>> /// * The type’s sole non-zero-sized field must itself implement
>> `PointerLike`. #[unstable(feature = "pointer_like_trait", issue = "none")]
>> #[lang = "pointer_like"]
>> #[diagnostic::on_unimplemented(
>>      message = "`{Self}` needs to have the same ABI as a pointer",
>>      label = "`{Self}` needs to be a pointer-like type"
>> )]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait PointerLike {}
>>
>> #[cfg(not(bootstrap))]
>> marker_impls! {
>>      #[unstable(feature = "pointer_like_trait", issue = "none")]
>>      PointerLike for
>>          isize,
>>          usize,
>>          {T} &T,
>>          {T} &mut T,
>>          {T} *const T,
>>          {T} *mut T,
>>          {T: PointerLike} crate::pin::Pin<T>,
>> }
>>
>> /// A marker for types which can be used as types of `const` generic
>> parameters. ///
>> /// These types must have a proper equivalence relation (`Eq`) and it must
>> be automatically /// derived (`StructuralPartialEq`). There's a hard-coded
>> check in the compiler ensuring /// that all fields are also `ConstParamTy`,
>> which implies that recursively, all fields /// are `StructuralPartialEq`.
>> #[lang = "const_param_ty"]
>> #[unstable(feature = "unsized_const_params", issue = "95174")]
>> #[diagnostic::on_unimplemented(message = "`{Self}` can't be used as a const
>> parameter type")] #[allow(multiple_supertrait_upcastable)]
>> // We name this differently than the derive macro so that the
>> `adt_const_params` can // be used independently of `unsized_const_params`
>> without requiring a full path // to the derive macro every time it is used.
>> This should be renamed on stabilization. pub trait ConstParamTy_:
>> UnsizedConstParamTy + StructuralPartialEq + Eq {}
>>
>> /// Derive macro generating an impl of the trait `ConstParamTy`.
>> #[rustc_builtin_macro]
>> #[allow_internal_unstable(unsized_const_params)]
>> #[unstable(feature = "adt_const_params", issue = "95174")]
>> pub macro ConstParamTy($item:item) {
>>      /* compiler built-in */
>> }
>>
>> #[lang = "unsized_const_param_ty"]
>> #[unstable(feature = "unsized_const_params", issue = "95174")]
>> #[diagnostic::on_unimplemented(message = "`{Self}` can't be used as a const
>> parameter type")] /// A marker for types which can be used as types of
>> `const` generic parameters. ///
>> /// Equivalent to [`ConstParamTy_`] except that this is used by
>> /// the `unsized_const_params` to allow for fake unstable impls.
>> pub trait UnsizedConstParamTy: StructuralPartialEq + Eq {}
>>
>> /// Derive macro generating an impl of the trait `ConstParamTy`.
>> #[rustc_builtin_macro]
>> #[allow_internal_unstable(unsized_const_params)]
>> #[unstable(feature = "unsized_const_params", issue = "95174")]
>> pub macro UnsizedConstParamTy($item:item) {
>>      /* compiler built-in */
>> }
>>
>> // FIXME(adt_const_params): handle `ty::FnDef`/`ty::Closure`
>> marker_impls! {
>>      #[unstable(feature = "adt_const_params", issue = "95174")]
>>      ConstParamTy_ for
>>          usize, u8, u16, u32, u64, u128,
>>          isize, i8, i16, i32, i64, i128,
>>          bool,
>>          char,
>>          (),
>>          {T: ConstParamTy_, const N: usize} [T; N],
>> }
>>
>> marker_impls! {
>>      #[unstable(feature = "unsized_const_params", issue = "95174")]
>>      UnsizedConstParamTy for
>>          usize, u8, u16, u32, u64, u128,
>>          isize, i8, i16, i32, i64, i128,
>>          bool,
>>          char,
>>          (),
>>          {T: UnsizedConstParamTy, const N: usize} [T; N],
>>
>>          str,
>>          {T: UnsizedConstParamTy} [T],
>>          {T: UnsizedConstParamTy + ?Sized} &T,
>> }
>>
>> /// A common trait implemented by all function pointers.
>> #[unstable(
>>      feature = "fn_ptr_trait",
>>      issue = "none",
>>      reason = "internal trait for implementing various traits for all
>> function pointers" )]
>> #[lang = "fn_ptr_trait"]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait FnPtr: Copy + Clone {
>>      /// Returns the address of the function pointer.
>>      #[lang = "fn_ptr_addr"]
>>      fn addr(self) -> *const ();
>> }
>>
>> /// Derive macro generating impls of traits related to smart pointers.
>> #[rustc_builtin_macro(CoercePointee, attributes(pointee))]
>> #[allow_internal_unstable(dispatch_from_dyn, coerce_unsized, unsize)]
>> #[unstable(feature = "derive_coerce_pointee", issue = "123430")]
>> #[cfg(not(bootstrap))]
>> pub macro CoercePointee($item:item) {
>>      /* compiler built-in */
>> }
>>
>>
>> ```
>>
>>
>> In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
>>   3.24.43, cairo version 1.18.2) of 2025-04-17 built on Mufasa
>> Repository revision: 7b35a5062231ec5a11c7a87d4797cfb5dba25121
>> Repository branch: feature/igc
>> System Description: NixOS 24.11 (Vicuna)
>>
>> Configured using:
>>   'configure 'CFLAGS=-O3 -march=native'
>>   --prefix=/home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_i
>> gc-7b35a5062231ec5a11c7a87d4797cfb5dba25121-O3 --with-mps=yes
>> --with-imagemagick --with-modules --with-pgtk
>>   --with-cairo --with-cairo-xcb --without-compress-install
>>   --with-mailutils --with-tree-sitter --with-xinput2
>>   --enable-link-time-optimization --with-file-notification=inotify'
>>
>> Configured features:
>> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ
>> IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 MODULES MPS NATIVE_COMP NOTIFY
>> INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
>> TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB
>>
>> Important settings:
>>    value of $LC_COLLATE: C
>>    value of $LC_MONETARY: en_US.UTF-8
>>    value of $LC_NUMERIC: en_US.UTF-8
>>    value of $LC_TIME: C
>>    value of $LANG: en_US.UTF-8
>>    value of $XMODIFIERS: @im=fcitx
>>    locale-coding-system: utf-8-unix
>>
>> Major mode: Elisp/l
>>
>> Minor modes in effect:
>>    restore-point-mode: t
>>    global-atomic-chrome-edit-mode: t
>>    global-git-gutter-mode: t
>>    git-gutter-mode: t
>>    marginalia-mode: t
>>    elisp-def-mode: t
>>    flycheck-posframe-mode: t
>>    hungry-delete-mode: t
>>    symbol-overlay-mode: t
>>    keycast-tab-bar-mode: t
>>    vertico-truncate-mode: t
>>    vertico-multiform-mode: t
>>    vertico-mode: t
>>    telega-root-auto-fill-mode: t
>>    telega-contact-birthdays-mode: t
>>    telega-active-video-chats-mode: t
>>    telega-active-locations-mode: t
>>    telega-patrons-mode: t
>>    telega-active-stories-mode: t
>>    tab-line-nerd-icons-global-mode: t
>>    global-tab-line-mode: t
>>    tab-line-mode: t
>>    ultra-scroll-mode: t
>>    pixel-scroll-precision-mode: t
>>    org-roam-db-autosync-mode: t
>>    global-org-modern-mode: t
>>    mu4e-modeline-mode: t
>>    global-kkp-mode: t
>>    global-git-commit-mode: t
>>    flycheck-mode: t
>>    engine-mode: t
>>    symex-mode: t
>>    global-evil-surround-mode: t
>>    evil-surround-mode: t
>>    yas-global-mode: t
>>    yas-minor-mode: t
>>    corfu-terminal-mode: t
>>    corfu-history-mode: t
>>    global-corfu-mode: t
>>    corfu-mode: t
>>    rainbow-mode: t
>>    elisp-autofmt-mode: t
>>    highlight-defined-mode: t
>>    highlight-numbers-mode: t
>>    hes-mode: t
>>    rainbow-delimiters-mode: t
>>    burly-tabs-mode: t
>>    global-form-feed-st-mode: t
>>    form-feed-st-mode: t
>>    eat-eshell-mode: t
>>    sly-symbol-completion-mode: t
>>    super-save-mode: t
>>    savehist-mode: t
>>    which-key-mode: t
>>    super-hint-xref-mode: t
>>    super-hint-rg-mode: t
>>    windmove-mode: t
>>    server-mode: t
>>    save-place-mode: t
>>    recentf-mode: t
>>    winner-mode: t
>>    persistent-scratch-autosave-mode: t
>>    global-dash-fontify-mode: t
>>    dash-fontify-mode: t
>>    nerd-icons-completion-mode: t
>>    sudo-edit-indicator-mode: t
>>    global-evil-visualstar-mode: t
>>    evil-visualstar-mode: t
>>    evil-commentary-mode: t
>>    global-evil-mc-mode: t
>>    evil-mc-mode: t
>>    evil-lion-mode: t
>>    global-evil-collection-unimpaired-mode: t
>>    evil-collection-unimpaired-mode: t
>>    buffer-face-mode: t
>>    TeX-PDF-mode: t
>>    display-line-numbers-mode: t
>>    electric-pair-mode: t
>>    global-auto-revert-mode: t
>>    evil-mode: t
>>    evil-local-mode: t
>>    general-override-mode: t
>>    minions-mode: t
>>    el-patch-use-package-mode: t
>>    elpaca-use-package-mode: t
>>    override-global-mode: t
>>    tooltip-mode: t
>>    global-eldoc-mode: t
>>    eldoc-mode: t
>>    show-paren-mode: t
>>    electric-indent-mode: t
>>    mouse-wheel-mode: t
>>    tab-bar-mode: t
>>    file-name-shadow-mode: t
>>    context-menu-mode: t
>>    global-font-lock-mode: t
>>    font-lock-mode: t
>>    minibuffer-regexp-mode: t
>>    column-number-mode: -1
>>    line-number-mode: -1
>>    transient-mark-mode: t
>>    auto-composition-mode: t
>>    auto-encryption-mode: t
>>    auto-compression-mode: t
>>
>> Load-path shadows:
>> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
>> /home/exec/.emacs.d/elpaca/builds/standard-themes/theme-loaddefs
>> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
>> /home/exec/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs
>> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
>> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5
>> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/theme-loaddef
>> s /home/exec/.emacs.d/elpaca/builds/transient/transient hides
>> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5
>> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/transient
>>
>> Features:
>> (shadow sort mail-extr expand-region yaml-mode-expansions
>> subword-mode-expansions text-mode-expansions cc-mode-expansions
>> the-org-mode-expansions python-el-fgallina-expansions
>> latex-mode-expansions js2-mode-expansions js-mode-expansions
>> web-mode-expansions html-mode-expansions clojure-mode-expansions
>> er-basic-expansions expand-region-core expand-region-custom
>> evil-collection-embark embark-org embark-consult embark gptel-curl
>> nerd-icons-dired diredfl info-colors vertico-sort cus-start descr-text
>> dabbrev cape lsp-diagnostics lsp-modeline lsp-icons lsp-zig lsp-yang
>> lsp-yaml lsp-xml lsp-wgsl lsp-volar lsp-vimscript lsp-vhdl lsp-vetur
>> lsp-html lsp-verilog lsp-vala lsp-v lsp-typespec lsp-typeprof lsp-ttcn3
>> lsp-ts-query lsp-trunk lsp-toml lsp-tilt lsp-tex lsp-terraform
>> lsp-svelte lsp-steep lsp-sqls lsp-sql lsp-sorbet lsp-solidity
>> lsp-solargraph lsp-semgrep lsp-ruff lsp-ruby-syntax-tree lsp-ruby-lsp
>> lsp-rubocop lsp-roslyn lsp-roc lsp-rf lsp-remark lsp-racket lsp-r
>> lsp-qml lsp-pyright lsp-pylsp lsp-pyls lsp-pwsh lsp-purescript lsp-pls
>> lsp-php lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-nushell
>> lsp-nix lsp-nim lsp-nginx lsp-nextflow lsp-move lsp-mojo lsp-mint
>> lsp-meson lsp-mdx lsp-matlab lsp-marksman lsp-markdown lsp-magik
>> lsp-fennel lsp-lua lsp-lisp lsp-kubernetes-helm lsp-kotlin lsp-json
>> lsp-jq lsp-javascript lsp-idris lsp-haxe lsp-hack lsp-groovy lsp-graphql
>> lsp-golangci-lint lsp-glsl lsp-gleam lsp-gdscript lsp-fsharp lsp-futhark
>> lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elm lsp-elixir
>> lsp-earthly lsp-dockerfile lsp-dhall lsp-d lsp-cypher lsp-cucumber
>> lsp-copilot lsp-css lsp-c3 lsp-csharp lsp-crystal lsp-credo lsp-cobol
>> lsp-cmake lsp-clojure lsp-clangd lsp-bufls lsp-go lsp-completion
>> lsp-beancount lsp-bash lsp-awk lsp-autotools lsp-astro lsp-asm
>> lsp-ansible lsp-angular lsp-ada lsp-actionscript copilot
>> copilot-balancer editorconfig editorconfig-core editorconfig-core-handle
>> editorconfig-fnmatch jsonrpc gptel-openai-extras gptel-anthropic
>> gptel-gemini gptel-ollama org-indent gptel-openai consult-dir-autoloads
>> consult-ag-autoloads restore-point evil-collection-atomic-chrome
>> atomic-chrome git-gutter marginalia elisp-def evil-collection-ert ert
>> flycheck-posframe evil-collection-hungry-delete hungry-delete
>> symbol-overlay keycast zig-mode reformatter empv vertico-truncate
>> vertico-posframe vertico-multiform evil-collection-vertico vertico
>> lsp-uniteai nix-ts-mode go-translate gt-text-utility gt-engine-echo
>> gt-engine-libre gt-engine-chatgpt gt-engine-youdao gt-engine-osxdict
>> gt-engine-stardict gt-engine-deepl gt-engine-google-rpc gt-engine-google
>> gt-engine-bing gt-extension gt-faces gt-core gt-httpx sdcv cap-words
>> superword subword evil-collection-telega telega-obsolete telega
>> telega-tdlib-events telega-match telega-root telega-info telega-chat
>> telega-modes telega-company telega-emoji telega-user
>> telega-notifications telega-voip telega-msg telega-story telega-webpage
>> telega-tme telega-sticker telega-vvnote telega-ffplay telega-i18n
>> telega-sort telega-filter telega-ins telega-inline telega-util
>> telega-folders telega-topic telega-media telega-tdlib telega-server
>> telega-core telega-customize emacsbug tab-line-nerd-icons
>> evil-collection-imenu-list imenu-list tab-line rust-utils
>> rust-mode-treesitter rust-ts-mode rust-mode rust-playpen rust-cargo
>> rust-common rust-rustfmt rust-compile cargo cargo-process rg-info-hack
>> rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg rg-history ibuf-ext
>> evil-collection-ibuffer ibuffer ibuffer-loaddefs rg-header
>> evil-collection-ultra-scroll ultra-scroll pixel-scroll cua-base
>> org-sliced-images emacsql-sqlite-builtin evil-collection-org-roam
>> org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id
>> org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam
>> org-capture emacsql-sqlite emacsql emacsql-compiler org-journal
>> org-crypt cal-iso org-modern orderless evil-collection-mu4e mu4e
>> mu4e-org mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts
>> mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg
>> gnus-art mm-uu mml2015 mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
>> mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders
>> mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars
>> mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cyphejor qml-mode
>> kkp rfc-mode string-inflection wakatime-mode systemd minuet pr-review
>> pr-review-render pr-review-action magit-diff git-commit
>> evil-collection-log-edit log-edit pcvs-util add-log magit-core
>> magit-autorevert magit-margin magit-transient magit-process
>> evil-collection-with-editor with-editor magit-mode magit-git magit-base
>> pr-review-input pr-review-api ghub-graphql treepy gsexp ghub
>> pr-review-common consult-lsp lsp-ui lsp-ui-flycheck lsp-ui-doc
>> evil-collection-lsp-ui-imenu lsp-ui-imenu lsp-ui-peek lsp-ui-sideline
>> lsp-rust lsp-semantic-tokens lsp-mode network-stream
>> evil-collection-markdown-mode markdown-mode lsp-ui-util lsp-protocol
>> llm-prompt groovy-mode iedit help-macro iedit-lib hide-comnt
>> minibuffer-header gptel-quick gotest fzf flycheck-clj-kondo jka-compr
>> pos-tip consult-flycheck flycheck-rust engine-mode evil-collection-ement
>> ement-room-list taxy-magit-section taxy ement ement-notifications
>> ement-notify ement-room ewoc ement-lib ement-api ement-structs
>> ement-macros dns llm-ollama llm-provider-utils llm-models
>> llm-request-plz plz-event-source plz-media-type plz llm symex symex-evil
>> symex-evil-support symex-hydra symex-transformations
>> symex-transformations-lisp symex-utils evil-cleverparens
>> evil-cleverparens-text-objects evil-cleverparens-util smartparens
>> evil-surround symex-misc symex-interface-builtins symex-interface-fennel
>> symex-interface-arc symex-interface-common-lisp symex-interface-clojure
>> symex-interface-scheme symex-interface-racket symex-interface-elisp
>> symex-interop symex-interface symex-traversals symex-dsl symex-evaluator
>> symex-computations symex-primitives symex-ts symex-utils-ts
>> symex-transformations-ts symex-primitives-lisp symex-data symex-ui
>> symex-custom evil-collection-lispy lispy le-clojure delsel lispy-inline
>> avy lispy-tags zoutline combobulate evil-collection-elfeed elfeed-show
>> elfeed-search elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db
>> elfeed-lib xml-query dired-git-info dired-hacks dired-preview
>> evil-collection-cmake-mode cmake-mode consult-yasnippet yasnippet-capf
>> yasnippet-snippets yasnippet kind-icon svg-lib corfu-terminal popon
>> corfu-popupinfo corfu-indexed corfu-history evil-collection-corfu corfu
>> consult-ls-git paredit clojure-ts-mode evil-collection-cider cider
>> tramp-sh cider-debug cider-browse-ns cider-mode cider-xref-backend
>> cider-find cider-inspector cider-completion cider-profile cider-eval
>> cider-jar cider-repl-history cider-repl cider-resolve cider-test
>> cider-overlays cider-stacktrace cider-doc cider-browse-spec
>> cider-clojuredocs cider-eldoc cider-docstring cider-client cider-common
>> cider-completion-context cider-connection cider-popup sesman-browser
>> nrepl-client cider-util sesman queue nrepl-dict spinner clojure-mode
>> rainbow-mode elisp-autofmt loadhist highlight-defined highlight-numbers
>> parent-mode highlight-escape-sequences rainbow-delimiters chatgpt-shell
>> chatgpt-shell-prompt-compose chatgpt-shell-perplexity
>> chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama
>> chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek
>> chatgpt-shell-anthropic evil-collection-smerge-mode smerge-mode diff
>> shell-maker ielm evil-collection-eshell eshell em-prompt esh-mode
>> esh-var esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module
>> esh-module-loaddefs esh-util cargo-jump-xref toml breadcrumb pulse
>> bookmark-in-project bookmark+ bookmark+-key bookmark+-1 gnus-sum
>> gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail
>> mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win
>> bookmark+-bmu bookmark+-lit bookmark+-mac babashka parseedn
>> parseclj-parser parseclj-lex parseclj-alist cnfonts burly-tabs burly
>> compile-multi form-feed-st google-this echo-bar fcitx
>> evil-collection-eat eat term/xterm xterm evil-collection-term term ehelp
>> ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util
>> rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex
>> ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach
>> org-element org-persist org-id org-refile org-element-ast inline
>> avl-tree htmlize evil-collection-explain-pause-mode explain-pause-mode
>> explain-pause-top explain-pause-log-to-socket evil-collection-profiler
>> profiler weather-metno solar cal-dst url-cache display-wttr kdeconnect
>> crux pest-mode popwin modus-themes blackboard-theme standard-themes
>> nimbus-theme tok-theme danneskjold-theme srcery-theme subatomic256-theme
>> iscroll xml+ evil-textobj-tree-sitter
>> evil-textobj-tree-sitter-thing-at-point evil-textobj-tree-sitter-core
>> tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get
>> dired-aux tsc-obsolete ctable evil-collection-color-rg color-rg
>> line-reminder ov ht fringe-helper solarized-theme solarized
>> solarized-faces sqlup-mode evil-collection-bm bm zen-mode
>> evil-collection-sly sly gud sly-completion sly-buttons sly-messages
>> sly-common evil-collection-apropos apropos evil-collection-arc-mode
>> arc-mode archive-mode hyperspec sicp base16-theme idea-darkula-theme
>> hybrid-reverse-theme material-theme doom-themes doom-themes-base
>> nyan-mode organic-green-theme inkpot-theme github-dark-vscode-theme
>> almost-mono-themes cyberpunk-theme soothe-theme soothe-tva zenburn-theme
>> mindre-theme kaolin-themes kaolin-themes-lib tron-legacy-theme
>> wildcharm-theme atom-one-dark-theme parchment-theme autothemer
>> visual-fill-column transpose-frame gameoflife evil-collection-docker
>> docker docker-context docker-volume docker-network docker-image
>> docker-container docker-faces docker-core docker-compose docker-process
>> docker-utils docker-group aio dockerfile-mode emacs-everywhere cus-dir
>> dumb-jump evil-collection-popup popup websocket bindat bing-dict cl
>> bing-dict-cache hl-todo atom-dark-theme ef-themes uwu-theme vagrant
>> evil-collection-ag ag vc-svn find-dired alarm-clock alert log4e
>> notifications gntp pinentry evil-collection-hackernews hackernews
>> evil-collection-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello
>> notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message
>> notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company
>> notmuch-parser notmuch-wash coolj goto-addr icalendar diary-lib
>> diary-loaddefs notmuch-tag notmuch-lib notmuch-compat message sendmail
>> yank-media rfc822 mml mailabbrev gmm-utils mm-view mml-smime mml-sec
>> smime gnutls dig mm-decode mm-bodies mm-encode fussy flx affe
>> evil-collection-consult consult clang-format apheleia apheleia-rcs
>> apheleia-dp apheleia-formatters apheleia-utils apheleia-log
>> apheleia-formatter-context vimrc-mode gnuplot olivetti super-save
>> evil-collection-helpful helpful cc-langs trace cl-print
>> evil-collection-edebug edebug evil-collection-debug debug backtrace
>> info-look evil-collection-info info help-fns radix-tree
>> evil-collection-elisp-refs elisp-refs solidity-mode solidity-common
>> evil-collection-git-timemachine git-timemachine web-mode disp-table
>> evil-collection-go-mode go-mode find-file evil-collection-js2-mode
>> js2-mode etags fileloop zig-mode-autoloads reformatter-autoloads
>> empv-autoloads yasnippet-snippets-autoloads marginalia-autoloads
>> vertico-truncate-autoloads vertico-posframe-autoloads vertico-autoloads
>> lsp-uniteai-autoloads nix-ts-mode-autoloads go-translate-autoloads
>> alert-autoloads gntp-autoloads log4e-autoloads sdcv-autoloads
>> telega-autoloads tab-line-nerd-icons-autoloads keycast-autoloads
>> rust-mode-autoloads cargo-autoloads toml-autoloads rg-autoloads
>> writeroom-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads
>> makefile-executor-autoloads ultra-scroll-autoloads pdf-tools-autoloads
>> org-sliced-images-autoloads consult-org-roam-autoloads
>> org-roam-autoloads org-journal-autoloads org-download-autoloads
>> org-modern-autoloads orderless-autoloads mu4e-autoloads
>> cyphejor-autoloads symbol-overlay-autoloads qml-mode-autoloads
>> kkp-autoloads rfc-mode-autoloads string-inflection-autoloads
>> wakatime-mode-autoloads webpaste-autoloads systemd-autoloads
>> minuet-autoloads pr-review-autoloads forge-autoloads closql-autoloads
>> emacsql-autoloads ghub-autoloads treepy-autoloads yaml-autoloads
>> lsp-pyright-autoloads consult-lsp-autoloads lsp-ui-autoloads
>> lsp-mode-autoloads groovy-mode-autoloads imenu-list-autoloads
>> hungry-delete-autoloads hide-comnt-autoloads minibuffer-header-autoloads
>> gptel-quick-autoloads gptel-autoloads gotest-autoloads fzf-autoloads
>> flycheck-golangci-lint-autoloads flycheck-clj-kondo-autoloads
>> pos-tip-autoloads consult-flycheck-autoloads flycheck-rust-autoloads
>> flycheck-posframe-autoloads flycheck-autoloads engine-mode-autoloads
>> ement-autoloads taxy-magit-section-autoloads taxy-autoloads
>> embark-consult-autoloads embark-autoloads ellama-autoloads llm-autoloads
>> plz-event-source-autoloads plz-media-type-autoloads plz-autoloads
>> symex-autoloads tree-sitter-autoloads tsc-autoloads lispy-autoloads
>> iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads
>> evil-cleverparens-autoloads smartparens-autoloads combobulate-autoloads
>> combobulate-go combobulate-json combobulate-yaml combobulate-css
>> combobulate-js-ts combobulate-python combobulate-html combobulate-toml
>> combobulate-cursor multiple-cursors mc-separate-operations
>> rectangular-region-mode mc-mark-pop mc-edit-lines
>> mc-hide-unmatched-lines-mode mc-mark-more sgml-mode mc-cycle-cursors
>> multiple-cursors-core combobulate-query savehist evil-collection-scheme
>> scheme combobulate-ui combobulate-display let-alist combobulate-ztree
>> combobulate-envelope combobulate-manipulation evil-collection-python
>> python combobulate-procedure combobulate-navigation combobulate-misc
>> combobulate-setup tempo combobulate-interface combobulate-settings
>> combobulate-rules elisp-def-autoloads elfeed-tube-mpv-autoloads
>> elfeed-tube-autoloads elfeed-autoloads eee-autoloads eee
>> dired-git-info-autoloads dired-hacks-autoloads dired-preview-autoloads
>> diredfl-autoloads git-gutter-autoloads cmake-mode-autoloads
>> consult-yasnippet-autoloads yasnippet-capf-autoloads yasnippet-autoloads
>> cape-autoloads kind-icon-autoloads svg-lib-autoloads
>> corfu-terminal-autoloads popon-autoloads corfu-autoloads
>> copilot-autoloads copilot-chat-autoloads consult-ls-git-autoloads
>> paredit-autoloads clojure-ts-mode-autoloads cider-autoloads
>> clojure-mode-autoloads queue-autoloads spinner-autoloads
>> sesman-autoloads chatgpt-shell-autoloads shell-maker-autoloads
>> cargo-jump-xref-autoloads breadcrumb-autoloads
>> bookmark-in-project-autoloads bookmark+-autoloads babashka-autoloads
>> parseedn-autoloads parseclj-autoloads aidermacs-autoloads
>> mediawiki-autoloads markdown-mode-autoloads treemacs-magit-autoloads
>> magit-autoloads with-editor-autoloads nerd-icons-ibuffer-autoloads
>> treemacs-nerd-icons-autoloads treemacs-autoloads pfuture-autoloads
>> cfrs-autoloads cnfonts-autoloads burly-autoloads compile-multi-autoloads
>> form-feed-st-autoloads google-this-autoloads echo-bar-autoloads
>> zoom-autoloads fcitx-autoloads eat-autoloads vterm-autoloads
>> chatgpt-autoloads polymode-autoloads ox-reveal-autoloads
>> htmlize-autoloads wordreference-autoloads explain-pause-mode-autoloads
>> weather-metno-autoloads display-wttr-autoloads kdeconnect-autoloads
>> emms-autoloads crux-autoloads pest-mode-autoloads popwin-autoloads
>> modus-themes-autoloads blackboard-theme-autoloads
>> standard-themes-autoloads nimbus-theme-autoloads tok-theme-autoloads
>> danneskjold-theme-autoloads srcery-theme-autoloads
>> subatomic256-theme-autoloads iscroll-autoloads xml+-autoloads
>> multiple-cursors-autoloads evil-textobj-tree-sitter-autoloads
>> evil-numbers-autoloads ctable-autoloads color-rg-autoloads
>> line-reminder-autoloads fringe-helper-autoloads ov-autoloads
>> solarized-theme-autoloads sqlup-mode-autoloads bm-autoloads
>> zen-mode-autoloads sly-autoloads expand-region-autoloads
>> highlight-defined-autoloads base16-theme-autoloads
>> idea-darkula-theme-autoloads hybrid-reverse-theme-autoloads
>> material-theme-autoloads doom-themes-autoloads nyan-mode-autoloads
>> organic-green-theme-autoloads inkpot-theme-autoloads
>> github-dark-vscode-theme-autoloads almost-mono-themes-autoloads
>> cyberpunk-theme-autoloads soothe-theme-autoloads zenburn-theme-autoloads
>> mindre-theme-autoloads kaolin-themes-autoloads
>> tron-legacy-theme-autoloads wildcharm-theme-autoloads
>> atom-one-dark-theme-autoloads parchment-theme-autoloads
>> autothemer-autoloads visual-fill-column-autoloads
>> transpose-frame-autoloads gameoflife-autoloads docker-autoloads
>> aio-autoloads dockerfile-mode-autoloads emacs-everywhere-autoloads
>> cus-dir-autoloads dumb-jump-autoloads popup-autoloads
>> bing-dict-autoloads hl-todo-autoloads atom-dark-theme-autoloads
>> ef-themes-autoloads uwu-theme-autoloads vagrant-autoloads ag-autoloads
>> alarm-clock-autoloads pinentry-autoloads hackernews-autoloads
>> notmuch-autoloads fussy-autoloads flx-autoloads affe-autoloads
>> consult-autoloads clang-format-autoloads apheleia-autoloads
>> elisp-autofmt-autoloads vimrc-mode-autoloads mpv-autoloads
>> gnuplot-autoloads mermaid-mode-autoloads atomic-chrome-autoloads
>> websocket-autoloads restore-point-autoloads ace-window-autoloads
>> avy-autoloads olivetti-autoloads super-save-autoloads helpful-autoloads
>> elisp-refs-autoloads solidity-mode-autoloads git-timemachine-autoloads
>> web-mode-autoloads adoc-mode-autoloads go-mode-autoloads
>> js2-mode-autoloads rust-playground-autoloads evil-collection-which-key
>> which-key super-hint-xref super-hint-rg super-hint evil-collection-xref
>> xref evil-collection-rg rg piper ob-shell ob-gnuplot ob-C
>> evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp
>> org-macro org-src evil-collection-sh-script sh-script executable
>> ob-comint org-pcomplete org-list org-footnote org-faces org-entities
>> ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
>> org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs
>> molecule-mode lsp hyperbole hideshow gptel-manual-complete
>> evil-collection-gptel gptel windmove evil-collection-flycheck flycheck
>> erc erc-backend erc-networks erc-common erc-compat erc-loaddefs
>> evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff
>> ediff-help ediff-init ediff-util dired-x consult-ripgrep-all desktop
>> frameset server evil-collection-eww eww vtable mule-util url-queue
>> mm-url evil-collection-gnus gnus nnheader gnus-util range epa-file
>> evil-collection-epa epa derived epg rfc6068 epg-config saveplace recentf
>> tree-widget winner edit-list refine loop list-utils prompts file-info
>> browse-at-remote f image-roll evil-collection-image image-mode exif
>> toc-mode rst scratch sql evil-collection-view view persistent-scratch
>> exercism persist async-await iter2 generator promise url-http url-auth
>> mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw
>> nsm promise-rejection-tracking promise-finally promise-done
>> promise-es6-extensions promise-core async request mailheader mail-utils
>> a indent-bars evil-collection-outline noutline outline mode-line-bell
>> powerthesaurus jeison dash s evil-collection-ripgrep ripgrep
>> evil-collection-wgrep wgrep evil-collection-grep grep
>> evil-collection-vlf vlf vlf-base vlf-tune gptai ctrlf hl-line
>> nerd-icons-completion nerd-icons nerd-icons-faces nerd-icons-data
>> nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon
>> nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon
>> nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon
>> nerd-icons-data-pomicon nerd-icons-data-ipsicon disable-mouse mingus
>> libmpdee evil-collection-mpdel mpdel mpdel-browser libmpdel-directory
>> mpdel-playlist mpdel-tablist mpdel-song mpdel-core navigel
>> evil-collection-bookmark bookmark evil-collection-tablist tablist
>> tablist-filter semantic/wisent/comp semantic/wisent
>> semantic/wisent/wisent semantic/util-modes semantic/util semantic
>> semantic/tag semantic/lex semantic/fw mode-local find-func cedet
>> libmpdel tq time-stamp posframe esup esup-child benchmark
>> ssh-config-mode jq-mode json-mode json-snatcher js c-ts-common treesit
>> cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
>> cc-vars cc-defs evil-collection-yaml-mode yaml-mode toml-mode conf-mode
>> align highlight facemenu nix-mode ffap smie nix-repl nix-shell nix-store
>> evil-collection-magit-section magit-section cursor-sensor llama nix-log
>> nix-instantiate nix-shebang nix-format nix sudo-edit tramp trampver
>> tramp-integration tramp-message tramp-compat shell pcomplete parse-time
>> iso8601 time-date tramp-loaddefs evil-collection-devdocs devdocs mathjax
>> evil-terminal-cursor-changer evil-visualstar evil-commentary
>> evil-commentary-integration evil-collection-evil-mc evil-mc
>> evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make
>> evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars
>> evil-mc-known-commands evil-mc-common evil-exchange evil-lion evil-args
>> smartscan timeout ess ess-utils ess-custom evil-collection-unimpaired
>> evil-collection-vc-git evil-collection-tabulated-list
>> evil-collection-tab-bar evil-collection-simple evil-collection-replace
>> evil-collection-process-menu evil-collection-package-menu
>> evil-collection-minibuffer evil-collection-man evil-collection-kmacro
>> evil-collection-indent evil-collection-imenu evil-collection-help
>> evil-collection-flymake evil-collection-elisp-mode evil-collection-eldoc
>> evil-collection-elpaca evil-collection-dired evil-collection-diff-mode
>> evil-collection-custom evil-collection-compile evil-collection-comint
>> evil-collection-calendar evil-collection-buff-menu evil-collection
>> annalist sqlite3 sqlite3-api treebundel vc-git diff-mode track-changes
>> files-x git-link dired dired-loaddefs texfrag face-remap shr pixel-fill
>> kinsoku url-file puny svg dom preview latex latex-flymake flymake
>> project compile text-property-search comint ansi-osc tex-ispell
>> tex-style tex dbus xml crm texmathp auctex display-line-numbers
>> elec-pair lisp-mnt package browse-url xdg url-handlers xterm-color
>> edit-list-autoloads refine-autoloads list-utils-autoloads loop-autoloads
>> prompts-autoloads file-info-autoloads hydra-autoloads lv-autoloads
>> browse-at-remote-autoloads image-roll-autoloads
>> saveplace-pdf-view-autoloads pdfgrep-autoloads toc-mode-autoloads
>> scratch-autoloads persistent-scratch-autoloads exercism-autoloads
>> a-autoloads request-autoloads async-autoloads async-await-autoloads
>> promise-autoloads iter2-autoloads persist-autoloads
>> indent-bars-autoloads rainbow-delimiters-autoloads
>> rainbow-mode-autoloads mode-line-bell-autoloads powerthesaurus-autoloads
>> hydra lv jeison-autoloads ripgrep-autoloads wgrep-autoloads
>> vlf-autoloads gptai-autoloads popper-autoloads ctrlf-autoloads
>> nerd-icons-dired-autoloads nerd-icons-completion-autoloads
>> nerd-icons-autoloads disable-mouse-autoloads mingus-autoloads
>> libmpdee-autoloads mpdel-autoloads libmpdel-autoloads navigel-autoloads
>> tablist-autoloads posframe-autoloads esup-autoloads quickrun-autoloads
>> ht-autoloads ssh-config-mode-autoloads jq-mode-autoloads
>> json-mode-autoloads json-snatcher-autoloads yaml-mode-autoloads
>> toml-mode-autoloads highlight-escape-sequences-autoloads
>> highlight-autoloads highlight-numbers-autoloads parent-mode-autoloads
>> nix-mode-autoloads magit-section-autoloads llama-autoloads
>> sudo-edit-autoloads attrap-autoloads f-autoloads dash-autoloads
>> s-autoloads devdocs-autoloads mathjax-autoloads
>> evil-terminal-cursor-changer-autoloads evil-surround-autoloads
>> evil-visualstar-autoloads evil-commentary-autoloads evil-mc-autoloads
>> evil-exchange-autoloads evil-lion-autoloads evil-args-autoloads
>> smartscan-autoloads timeout-autoloads ess-autoloads
>> info-colors-autoloads evil-collection-autoloads annalist-autoloads
>> sqlite3-autoloads treebundel-autoloads git-link-autoloads
>> texfrag-autoloads auctex-autoloads tex-site xterm-color-autoloads ispell
>> which-func imenu man ansi-color autorevert filenotify cal-menu calendar
>> cal-loaddefs advice evil evil-integration evil-maps evil-commands reveal
>> evil-jumps evil-command-window evil-types evil-search evil-ex
>> evil-macros evil-repeat evil-states evil-core comp comp-cstr warnings
>> comp-run comp-common rx evil-common thingatpt rect evil-vars ring
>> undo-fu goto-chg evil-autoloads undo-fu-autoloads goto-chg-autoloads
>> transient pcase format-spec transient-autoloads general memoize
>> sanityinc-tomorrow-bright-theme color-theme-sanityinc-tomorrow color
>> minions compat general-autoloads memoize-autoloads
>> color-theme-sanityinc-tomorrow-autoloads minions-autoloads
>> el-patch-autoloads el-patch el-patch-stub edmacro kmacro vc
>> vc-dispatcher cl-extra help-mode elpaca-use-package use-package
>> use-package-ensure use-package-delight use-package-diminish
>> use-package-bind-key bind-key easy-mmode use-package-core
>> elpaca-use-package-autoloads elpaca-log elpaca-ui elpaca-menu-elpa
>> elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods
>> url-history url-cookie generate-lisp-file url-domsuf url-util url-parse
>> auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
>> map byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org
>> elpaca elpaca-process elpaca-autoloads early-init cus-edit pp cus-load
>> icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc
>> paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
>> mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd
>> tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
>> newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
>> rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
>> font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
>> simple cl-generic indonesian philippine cham georgian utf-8-lang
>> misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
>> cp51932 hebrew greek romanian slovak czech european ethiopic indian
>> cyrillic chinese composite emoji-zwj charscript charprop case-table
>> epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
>> loaddefs theme-loaddefs faces cus-face macroexp files window
>> text-properties overlay sha1 md5 base64 format env code-pages mule
>> custom widget keymap hashtable-print-readable backquote threads dbusbind
>> inotify dynamic-setting system-font-setting font-render-setting cairo
>> gtk pgtk lcms2 multi-tty move-toolbar make-network-process
>> tty-child-frames native-compile mps emacs)
>>
>> Memory information:
>> ((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0)
>>    (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0)
>>    (buffers 1000 0))
> 





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#77914; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 20 Apr 2025 07:19:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Apr 20 03:19:53 2025
Received: from localhost ([127.0.0.1]:44281 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6Oxw-00005b-RN
	for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 03:19:53 -0400
Received: from lists.gnu.org ([2001:470:142::17]:35380)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <execvy@HIDDEN>) id 1u6Oxq-00004s-BS
 for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 03:19:47 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <execvy@HIDDEN>) id 1u6Oxi-000833-4L
 for bug-gnu-emacs@HIDDEN; Sun, 20 Apr 2025 03:19:34 -0400
Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <execvy@HIDDEN>) id 1u6Oxb-0006Q6-Sn
 for bug-gnu-emacs@HIDDEN; Sun, 20 Apr 2025 03:19:33 -0400
Received: by mail-pl1-x642.google.com with SMTP id
 d9443c01a7336-227d6b530d8so31118615ad.3
 for <bug-gnu-emacs@HIDDEN>; Sun, 20 Apr 2025 00:19:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1745133565; x=1745738365; darn=gnu.org;
 h=content-transfer-encoding:in-reply-to:autocrypt:from
 :content-language:references:to:subject:user-agent:mime-version:date
 :message-id:from:to:cc:subject:date:message-id:reply-to;
 bh=66FkkO0nThuk+v+ot92XcoRd/UnRY/Q0mreicvF4ayo=;
 b=SXhqKbfKH0w9ckbOwxlDsFfMflMMMr5Vcaa4r9IzzbXT7VHc7WmhwQNaVAaDtPIB1C
 /eElD8YkUTCmAEF+Ymuols4+KuBN4vlqaPDRjMZBefFqmiCaGLvvR3RLo0zkSwMTZ39G
 9G6JjzFTeGR4WNwslTnhBDM4IXrsdEbKazzAyb4ZpIA32peMt6Q4DpT6auqKWb01B7JT
 HFXtUQPMiq97lUhUDh2yrtWHN3g1l7MHn7szb05Lrt6G3FYKprFfbwZ8OnjSoyZD1F7D
 ds4QsiP4SGFer0fAIXSegMygdV8Ik1fz0PZN8oglOykXlV5p/BJvpiThCoeUOfhYdR9N
 u0YQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1745133565; x=1745738365;
 h=content-transfer-encoding:in-reply-to:autocrypt:from
 :content-language:references:to:subject:user-agent:mime-version:date
 :message-id:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=66FkkO0nThuk+v+ot92XcoRd/UnRY/Q0mreicvF4ayo=;
 b=uvPj4pRj+St2gL86/HpdLWCjmMZiA1oplQ3IMM3yMKLvESt5zYf99vze1B6oV895hO
 HDTc+HtjbHXkCy/AMRFmVTFZkpOM5F3gZbdn2gqTCJYolFdowLZbfCP/2+twd3APlO/0
 47dRch8fTc/Rs6AypAkv5BqiBkaY34KyJFKQTH5WWfhnrV6HIMYIlZKKufA1UHxBAMXT
 qSDUEcJPCmcmhgLBbcwyaHGvCDqiZvAPvczdThuxEuZYy7oqpk30KtvBGSHTd8baszo3
 jWwWBFyZic4fXLUCqTQ03nAjpW8CtOY6Q5UEiejF4tbiLeA61X/SFCkXPLZEsSj+mnNR
 WP1g==
X-Forwarded-Encrypted: i=1;
 AJvYcCU+o3cguNQE526padhETOayK92/oKMcyqTwdGYl59sqMuk8CWFTq7IpORjEXVGnRQs3T/RSneqhy/TXju5C@HIDDEN
X-Gm-Message-State: AOJu0Yzl0u8M2SrXyKkswId+RmRUXti9Ml87+zTq01uCnibLBXDw540E
 a3xPPcX42udAuSLtV0xg/m0ufFLWcK6QgXmSIZkZ9eUDtmBl0y9jG0K4kllOw8zeMscI
X-Gm-Gg: ASbGncsNtIZWtXzoUmAui9Lq7k1OZvzCSViHkRG9bUWXHJ2kynaY6ROJ3ebLVxfKIV2
 WIyPED9mwoRsbIn4uLE1ErjBIje2kEi2FoZqJWNmF7ugqQM/Qt6o2OOCpCeK0k4a3NPWf4z/gJk
 Kws0vQlZt9Peq/j3A3i7gKL9h9sExvgVWAI8moh0/+rx1M6jZD4iI/UMd4UW/9Vbb22h1Wy+JG5
 I6pkc4MXFbErOZD3bk/8yn1qOroguRHj2ZkLsQBlv8Lk0EnjAHu0YbTUAvdf5OGP82nn5N6rjE1
 DmylU/pznUPod4RNTtXKG2O5oQ9GglP4gw==
X-Google-Smtp-Source: AGHT+IFR+AucwWhh2c4EFMr0EnrZcZ7/2dmXkamqx61nmaJ/L56skSoNBTnci3hbPqA+fY036iFpyg==
X-Received: by 2002:a17:902:dac7:b0:224:b60:3cd3 with SMTP id
 d9443c01a7336-22c53583e10mr110402305ad.19.1745133564579; 
 Sun, 20 Apr 2025 00:19:24 -0700 (PDT)
Received: from [28.0.0.1] ([124.64.126.60]) by smtp.gmail.com with ESMTPSA id
 d9443c01a7336-22c50bf3eb1sm44145935ad.82.2025.04.20.00.19.22
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sun, 20 Apr 2025 00:19:24 -0700 (PDT)
Message-ID: <5af658c9-70e0-4dd2-82ba-d528021771c1@HIDDEN>
Date: Sun, 20 Apr 2025 15:19:20 +0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause
 rust-ts-mode lost all color
To: Vincenzo Pupillo <v.pupillo@HIDDEN>, 77914 <at> debbugs.gnu.org,
 bug-gnu-emacs@HIDDEN
References: <877c3gka72.fsf@HIDDEN> <3523927.LZWGnKmheA@fedora>
Content-Language: en-US
From: Eval Exec <execvy@HIDDEN>
Autocrypt: addr=execvy@HIDDEN; keydata=
 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
In-Reply-To: <3523927.LZWGnKmheA@fedora>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Received-SPF: pass client-ip=2607:f8b0:4864:20::642;
 envelope-from=execvy@HIDDEN; helo=mail-pl1-x642.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

Oh! In the reproduce step, I write a typo, the bug can be reproduced by 
setting different `treesit-font-lock-level`, wen 
`treesit-font-lock-level` is 3, all colors are good, when 
treesit-font-lock-level is 4, all colors are lost.
To reproduce this: use this rust file:

Then eval:
1. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
all color are lost.

2. (progn  (setq treesit-font-lock-level 3) (revert-buffer))
colors are good. !Important, level 3 is good, but level 4 lost colors.

3. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
all color are lost again.


Can you reproduce this?

On 4/20/25 06:12, Vincenzo Pupillo wrote:
> If the attached file is correct, it appears to be a grammar bug (the tree-
> sitter-rust grammar). Take a look at the attached screenshot (libtree-
> sitter-0.25.2 and tree-sitter-rust v0.24.0)
> 
> Vincenzo
> 
> In data sabato 19 aprile 2025 07:10:57 Ora legale dell’Europa centrale, Eval
> Exec ha scritto:
>> Hello,
>> I'm visiting a rust file, when I set treesit-font-lock-level to 3, all
>> color are good, when I set treesit-font-lock-level to 4, all color as
>> lost.
>> To reproduce this: use this rust file:
>>
>> Then eval:
>> 1. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
>> all color are lost.
>>
>> 2. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
>> colors are good.
>>
>> 3. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
>> all color are lost again.
>>
>>
>> ```rust
>>
>> //! Primitive traits and types representing basic properties of types.
>> //!
>> //! Rust types can be classified in various useful ways according to
>> //! their intrinsic properties. These classifications are represented
>> //! as traits.
>>
>> #![stable(feature = "rust1", since = "1.0.0")]
>>
>> use crate::cell::UnsafeCell;
>> use crate::cmp;
>> use crate::fmt::Debug;
>> use crate::hash::{Hash, Hasher};
>>
>> /// Implements a given marker trait for multiple types at the same time.
>> ///
>> /// The basic syntax looks like this:
>> /// ```ignore private macro
>> /// marker_impls! { MarkerTrait for u8, i8 }
>> /// ```
>> /// You can also implement `unsafe` traits
>> /// ```ignore private macro
>> /// marker_impls! { unsafe MarkerTrait for u8, i8 }
>> /// ```
>> /// Add attributes to all impls:
>> /// ```ignore private macro
>> /// marker_impls! {
>> ///     #[allow(lint)]
>> ///     #[unstable(feature = "marker_trait", issue = "none")]
>> ///     MarkerTrait for u8, i8
>> /// }
>> /// ```
>> /// And use generics:
>> /// ```ignore private macro
>> /// marker_impls! {
>> ///     MarkerTrait for
>> ///         u8, i8,
>> ///         {T: ?Sized} *const T,
>> ///         {T: ?Sized} *mut T,
>> ///         {T: MarkerTrait} PhantomData<T>,
>> ///         u32,
>> /// }
>> /// ```
>> #[unstable(feature = "internal_impls_macro", issue = "none")]
>> // Allow implementations of `UnsizedConstParamTy` even though std cannot use
>> that feature. #[allow_internal_unstable(unsized_const_params)]
>> macro marker_impls {
>>      ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty $(,
>> $($rest:tt)*)? ) => { $(#[$($meta)*])* impl< $($($bounds)*)? > $Trait for
>> $T {}
>>          marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? }
>>      },
>>      ( $(#[$($meta:tt)*])* $Trait:ident for ) => {},
>>
>>      ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? $T:ty
>> $(, $($rest:tt)*)? ) => { $(#[$($meta)*])* unsafe impl< $($($bounds)*)? >
>> $Trait for $T {} marker_impls! { $(#[$($meta)*])* unsafe $Trait for
>> $($($rest)*)? } },
>>      ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) => {},
>> }
>>
>> /// Types that can be transferred across thread boundaries.
>> ///
>> /// This trait is automatically implemented when the compiler determines
>> it's /// appropriate.
>> ///
>> /// An example of a non-`Send` type is the reference-counting pointer
>> /// [`rc::Rc`][`Rc`]. If two threads attempt to clone [`Rc`]s that point to
>> the same /// reference-counted value, they might try to update the
>> reference count at the /// same time, which is [undefined behavior][ub]
>> because [`Rc`] doesn't use atomic /// operations. Its cousin
>> [`sync::Arc`][arc] does use atomic operations (incurring /// some overhead)
>> and thus is `Send`.
>> ///
>> /// See [the Nomicon](../../nomicon/send-and-sync.html) and the [`Sync`]
>> trait for more details. ///
>> /// [`Rc`]: ../../std/rc/struct.Rc.html
>> /// [arc]: ../../std/sync/struct.Arc.html
>> /// [ub]: ../../reference/behavior-considered-undefined.html
>> #[stable(feature = "rust1", since = "1.0.0")]
>> #[cfg_attr(not(test), rustc_diagnostic_item = "Send")]
>> #[diagnostic::on_unimplemented(
>>      message = "`{Self}` cannot be sent between threads safely",
>>      label = "`{Self}` cannot be sent between threads safely"
>> )]
>> pub unsafe auto trait Send {
>>      // empty.
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> !Send for *const T {}
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> !Send for *mut T {}
>>
>> // Most instances arise automatically, but this instance is needed to link
>> up `T: Sync` with // `&T: Send` (and it also removes the unsound default
>> instance `T Send` -> `&T: Send` that would // otherwise exist).
>> #[stable(feature = "rust1", since = "1.0.0")]
>> unsafe impl<T: Sync + ?Sized> Send for &T {}
>>
>> /// Types with a constant size known at compile time.
>> ///
>> /// All type parameters have an implicit bound of `Sized`. The special
>> syntax /// `?Sized` can be used to remove this bound if it's not
>> appropriate. ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// struct Foo<T>(T);
>> /// struct Bar<T: ?Sized>(T);
>> ///
>> /// // struct FooUse(Foo<[i32]>); // error: Sized is not implemented for
>> [i32] /// struct BarUse(Bar<[i32]>); // OK
>> /// ```
>> ///
>> /// The one exception is the implicit `Self` type of a trait. A trait does
>> not /// have an implicit `Sized` bound as this is incompatible with [trait
>> object]s /// where, by definition, the trait needs to work with all
>> possible implementors, /// and thus could be any size.
>> ///
>> /// Although Rust will let you bind `Sized` to a trait, you won't
>> /// be able to use it to form a trait object later:
>> ///
>> /// ```
>> /// # #![allow(unused_variables)]
>> /// trait Foo { }
>> /// trait Bar: Sized { }
>> ///
>> /// struct Impl;
>> /// impl Foo for Impl { }
>> /// 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
>> /// ```
>> ///
>> /// [trait object]: ../../book/ch17-02-trait-objects.html
>> #[doc(alias = "?", alias = "?Sized")]
>> #[stable(feature = "rust1", since = "1.0.0")]
>> #[lang = "sized"]
>> #[diagnostic::on_unimplemented(
>>      message = "the size for values of type `{Self}` cannot be known at
>> compilation time", label = "doesn't have a size known at compile-time"
>> )]
>> #[fundamental] // for Default, for example, which requires that `[T]:
>> !Default` be evaluatable #[rustc_specialization_trait]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> #[rustc_coinductive]
>> pub trait Sized {
>>      // Empty.
>> }
>>
>> /// Types that can be "unsized" to a dynamically-sized type.
>> ///
>> /// For example, the sized array type `[i8; 2]` implements `Unsize<[i8]>`
>> and /// `Unsize<dyn fmt::Debug>`.
>> ///
>> /// All implementations of `Unsize` are provided automatically by the
>> compiler. /// Those implementations are:
>> ///
>> /// - Arrays `[T; N]` implement `Unsize<[T]>`.
>> /// - A type implements `Unsize<dyn Trait + 'a>` if all of these conditions
>> are met: ///   - The type implements `Trait`.
>> ///   - `Trait` is dyn-compatible[^1].
>> ///   - The type is sized.
>> ///   - The type outlives `'a`.
>> /// - Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize<Foo<..., U1,
>> ..., Un, ...>>` /// where any number of (type and const) parameters may be
>> changed if all of these conditions /// are met:
>> ///   - Only the last field of `Foo` has a type involving the parameters
>> `T1`, ..., `Tn`. ///   - All other parameters of the struct are equal.
>> ///   - `Field<T1, ..., Tn>: Unsize<Field<U1, ..., Un>>`, where `Field<...>`
>> stands for the actual ///     type of the struct's last field.
>> ///
>> /// `Unsize` is used along with [`ops::CoerceUnsized`] to allow
>> /// "user-defined" containers such as [`Rc`] to contain dynamically-sized
>> /// types. See the [DST coercion RFC][RFC982] and [the nomicon entry on
>> coercion][nomicon-coerce] /// for more details.
>> ///
>> /// [`ops::CoerceUnsized`]: crate::ops::CoerceUnsized
>> /// [`Rc`]: ../../std/rc/struct.Rc.html
>> /// [RFC982]:
>> https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md ///
>> [nomicon-coerce]: ../../nomicon/coercions.html
>> /// [^1]: Formerly known as *object safe*.
>> #[unstable(feature = "unsize", issue = "18598")]
>> #[lang = "unsize"]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait Unsize<T: ?Sized> {
>>      // Empty.
>> }
>>
>> /// Required trait for constants used in pattern matches.
>> ///
>> /// Any type that derives `PartialEq` automatically implements this trait,
>> /// *regardless* of whether its type-parameters implement `PartialEq`.
>> ///
>> /// If a `const` item contains some type that does not implement this trait,
>> /// then that type either (1.) does not implement `PartialEq` (which means
>> the /// constant will not provide that comparison method, which code
>> generation /// assumes is available), or (2.) it implements *its own*
>> version of /// `PartialEq` (which we assume does not conform to a
>> structural-equality /// comparison).
>> ///
>> /// In either of the two scenarios above, we reject usage of such a constant
>> in /// a pattern match.
>> ///
>> /// See also the [structural match RFC][RFC1445], and [issue 63438] which
>> /// motivated migrating from an attribute-based design to this trait.
>> ///
>> /// [RFC1445]:
>> https://github.com/rust-lang/rfcs/blob/master/text/1445-restrict-constants-> in-patterns.md /// [issue 63438]:
>> https://github.com/rust-lang/rust/issues/63438
>> #[unstable(feature = "structural_match", issue = "31434")]
>> #[diagnostic::on_unimplemented(message = "the type `{Self}` does not
>> `#[derive(PartialEq)]`")] #[lang = "structural_peq"]
>> pub trait StructuralPartialEq {
>>      // Empty.
>> }
>>
>> marker_impls! {
>>      #[unstable(feature = "structural_match", issue = "31434")]
>>      StructuralPartialEq for
>>          usize, u8, u16, u32, u64, u128,
>>          isize, i8, i16, i32, i64, i128,
>>          bool,
>>          char,
>>          str /* Technically requires `[u8]: StructuralPartialEq` */,
>>          (),
>>          {T, const N: usize} [T; N],
>>          {T} [T],
>>          {T: ?Sized} &T,
>> }
>>
>> /// Types whose values can be duplicated simply by copying bits.
>> ///
>> /// By default, variable bindings have 'move semantics.' In other
>> /// words:
>> ///
>> /// ```
>> /// #[derive(Debug)]
>> /// struct Foo;
>> ///
>> /// let x = Foo;
>> ///
>> /// let y = x;
>> ///
>> /// // `x` has moved into `y`, and so cannot be used
>> ///
>> /// // println!("{x:?}"); // error: use of moved value
>> /// ```
>> ///
>> /// However, if a type implements `Copy`, it instead has 'copy semantics':
>> ///
>> /// ```
>> /// // We can derive a `Copy` implementation. `Clone` is also required, as
>> it's /// // a supertrait of `Copy`.
>> /// #[derive(Debug, Copy, Clone)]
>> /// struct Foo;
>> ///
>> /// let x = Foo;
>> ///
>> /// let y = x;
>> ///
>> /// // `y` is a copy of `x`
>> ///
>> /// println!("{x:?}"); // A-OK!
>> /// ```
>> ///
>> /// It's important to note that in these two examples, the only difference
>> is whether you /// are allowed to access `x` after the assignment. Under
>> the hood, both a copy and a move /// can result in bits being copied in
>> memory, although this is sometimes optimized away. ///
>> /// ## How can I implement `Copy`?
>> ///
>> /// There are two ways to implement `Copy` on your type. The simplest is to
>> use `derive`: ///
>> /// ```
>> /// #[derive(Copy, Clone)]
>> /// struct MyStruct;
>> /// ```
>> ///
>> /// You can also implement `Copy` and `Clone` manually:
>> ///
>> /// ```
>> /// struct MyStruct;
>> ///
>> /// impl Copy for MyStruct { }
>> ///
>> /// impl Clone for MyStruct {
>> ///     fn clone(&self) -> MyStruct {
>> ///         *self
>> ///     }
>> /// }
>> /// ```
>> ///
>> /// There is a small difference between the two. The `derive` strategy will
>> also place a `Copy` /// bound on type parameters:
>> ///
>> /// ```
>> /// #[derive(Clone)]
>> /// struct MyStruct<T>(T);
>> ///
>> /// impl<T: Copy> Copy for MyStruct<T> { }
>> /// ```
>> ///
>> /// This isn't always desired. For example, shared references (`&T`) can be
>> copied regardless of /// whether `T` is `Copy`. Likewise, a generic struct
>> containing markers such as [`PhantomData`] /// could potentially be
>> duplicated with a bit-wise copy.
>> ///
>> /// ## What's the difference between `Copy` and `Clone`?
>> ///
>> /// Copies happen implicitly, for example as part of an assignment `y = x`.
>> The behavior of /// `Copy` is not overloadable; it is always a simple
>> bit-wise copy. ///
>> /// Cloning is an explicit action, `x.clone()`. The implementation of
>> [`Clone`] can /// provide any type-specific behavior necessary to duplicate
>> values safely. For example, /// the implementation of [`Clone`] for
>> [`String`] needs to copy the pointed-to string /// buffer in the heap. A
>> simple bitwise copy of [`String`] values would merely copy the /// pointer,
>> leading to a double free down the line. For this reason, [`String`] is
>> [`Clone`] /// but not `Copy`.
>> ///
>> /// [`Clone`] is a supertrait of `Copy`, so everything which is `Copy` must
>> also implement /// [`Clone`]. If a type is `Copy` then its [`Clone`]
>> implementation only needs to return `*self` /// (see the example above).
>> ///
>> /// ## When can my type be `Copy`?
>> ///
>> /// A type can implement `Copy` if all of its components implement `Copy`.
>> For example, this /// struct can be `Copy`:
>> ///
>> /// ```
>> /// # #[allow(dead_code)]
>> /// #[derive(Copy, Clone)]
>> /// struct Point {
>> ///    x: i32,
>> ///    y: i32,
>> /// }
>> /// ```
>> ///
>> /// A struct can be `Copy`, and [`i32`] is `Copy`, therefore `Point` is
>> eligible to be `Copy`. /// By contrast, consider
>> ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// # struct Point;
>> /// struct PointList {
>> ///     points: Vec<Point>,
>> /// }
>> /// ```
>> ///
>> /// The struct `PointList` cannot implement `Copy`, because [`Vec<T>`] is
>> not `Copy`. If we /// attempt to derive a `Copy` implementation, we'll get
>> an error: ///
>> /// ```text
>> /// the trait `Copy` cannot be implemented for this type; field `points`
>> does not implement `Copy` /// ```
>> ///
>> /// Shared references (`&T`) are also `Copy`, so a type can be `Copy`, even
>> when it holds /// shared references of types `T` that are *not* `Copy`.
>> Consider the following struct, /// which can implement `Copy`, because it
>> only holds a *shared reference* to our non-`Copy` /// type `PointList` from
>> above:
>> ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// # struct PointList;
>> /// #[derive(Copy, Clone)]
>> /// struct PointListWrapper<'a> {
>> ///     point_list_ref: &'a PointList,
>> /// }
>> /// ```
>> ///
>> /// ## When *can't* my type be `Copy`?
>> ///
>> /// Some types can't be copied safely. For example, copying `&mut T` would
>> create an aliased /// mutable reference. Copying [`String`] would duplicate
>> responsibility for managing the /// [`String`]'s buffer, leading to a
>> double free.
>> ///
>> /// Generalizing the latter case, any type implementing [`Drop`] can't be
>> `Copy`, because it's /// managing some resource besides its own
>> [`size_of::<T>`] bytes. ///
>> /// If you try to implement `Copy` on a struct or enum containing non-`Copy`
>> data, you will get /// the error [E0204].
>> ///
>> /// [E0204]: ../../error_codes/E0204.html
>> ///
>> /// ## When *should* my type be `Copy`?
>> ///
>> /// Generally speaking, if your type _can_ implement `Copy`, it should. Keep
>> in mind, though, /// that implementing `Copy` is part of the public API of
>> your type. If the type might become /// non-`Copy` in the future, it could
>> be prudent to omit the `Copy` implementation now, to /// avoid a breaking
>> API change.
>> ///
>> /// ## Additional implementors
>> ///
>> /// In addition to the [implementors listed below][impls],
>> /// the following types also implement `Copy`:
>> ///
>> /// * Function item types (i.e., the distinct types defined for each
>> function) /// * Function pointer types (e.g., `fn() -> i32`)
>> /// * Closure types, if they capture no value from the environment
>> ///   or if all such captured values implement `Copy` themselves.
>> ///   Note that variables captured by shared reference always implement
>> `Copy` ///   (even if the referent doesn't),
>> ///   while variables captured by mutable reference never implement `Copy`.
>> ///
>> /// [`Vec<T>`]: ../../std/vec/struct.Vec.html
>> /// [`String`]: ../../std/string/struct.String.html
>> /// [`size_of::<T>`]: crate::mem::size_of
>> /// [impls]: #implementors
>> #[stable(feature = "rust1", since = "1.0.0")]
>> #[lang = "copy"]
>> // FIXME(matthewjasper) This allows copying a type that doesn't implement
>> // `Copy` because of unsatisfied lifetime bounds (copying `A<'_>` when only
>> // `A<'static>: Copy` and `A<'_>: Clone`).
>> // We have this attribute here for now only because there are quite a few
>> // existing specializations on `Copy` that already exist in the standard
>> // library, and there's no way to safely have this behavior right now.
>> #[rustc_unsafe_specialization_marker]
>> #[rustc_diagnostic_item = "Copy"]
>> pub trait Copy: Clone {
>>      // Empty.
>> }
>>
>> /// Derive macro generating an impl of the trait `Copy`.
>> #[rustc_builtin_macro]
>> #[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
>> #[allow_internal_unstable(core_intrinsics, derive_clone_copy)]
>> pub macro Copy($item:item) {
>>      /* compiler built-in */
>> }
>>
>> // Implementations of `Copy` for primitive types.
>> //
>> // Implementations that cannot be described in Rust
>> // are implemented in `traits::SelectionContext::copy_clone_conditions()`
>> // in `rustc_trait_selection`.
>> marker_impls! {
>>      #[stable(feature = "rust1", since = "1.0.0")]
>>      Copy for
>>          usize, u8, u16, u32, u64, u128,
>>          isize, i8, i16, i32, i64, i128,
>>          f16, f32, f64, f128,
>>          bool, char,
>>          {T: ?Sized} *const T,
>>          {T: ?Sized} *mut T,
>>
>> }
>>
>> #[unstable(feature = "never_type", issue = "35121")]
>> impl Copy for ! {}
>>
>> /// Shared references can be copied, but mutable references *cannot*!
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Copy for &T {}
>>
>> /// Types for which it is safe to share references between threads.
>> ///
>> /// This trait is automatically implemented when the compiler determines
>> /// it's appropriate.
>> ///
>> /// The precise definition is: a type `T` is [`Sync`] if and only if `&T` is
>> /// [`Send`]. In other words, if there is no possibility of
>> /// [undefined behavior][ub] (including data races) when passing
>> /// `&T` references between threads.
>> ///
>> /// As one would expect, primitive types like [`u8`] and [`f64`]
>> /// are all [`Sync`], and so are simple aggregate types containing them,
>> /// like tuples, structs and enums. More examples of basic [`Sync`]
>> /// types include "immutable" types like `&T`, and those with simple
>> /// inherited mutability, such as [`Box<T>`][box], [`Vec<T>`][vec] and
>> /// most other collection types. (Generic parameters need to be [`Sync`]
>> /// for their container to be [`Sync`].)
>> ///
>> /// A somewhat surprising consequence of the definition is that `&mut T`
>> /// is `Sync` (if `T` is `Sync`) even though it seems like that might
>> /// provide unsynchronized mutation. The trick is that a mutable
>> /// reference behind a shared reference (that is, `& &mut T`)
>> /// becomes read-only, as if it were a `& &T`. Hence there is no risk
>> /// of a data race.
>> ///
>> /// A shorter overview of how [`Sync`] and [`Send`] relate to referencing:
>> /// * `&T` is [`Send`] if and only if `T` is [`Sync`]
>> /// * `&mut T` is [`Send`] if and only if `T` is [`Send`]
>> /// * `&T` and `&mut T` are [`Sync`] if and only if `T` is [`Sync`]
>> ///
>> /// Types that are not `Sync` are those that have "interior
>> /// mutability" in a non-thread-safe form, such as [`Cell`][cell]
>> /// and [`RefCell`][refcell]. These types allow for mutation of
>> /// their contents even through an immutable, shared reference. For
>> /// example the `set` method on [`Cell<T>`][cell] takes `&self`, so it
>> requires /// only a shared reference [`&Cell<T>`][cell]. The method
>> performs no /// synchronization, thus [`Cell`][cell] cannot be `Sync`.
>> ///
>> /// Another example of a non-`Sync` type is the reference-counting
>> /// pointer [`Rc`][rc]. Given any reference [`&Rc<T>`][rc], you can clone
>> /// a new [`Rc<T>`][rc], modifying the reference counts in a non-atomic way.
>> ///
>> /// For cases when one does need thread-safe interior mutability,
>> /// Rust provides [atomic data types], as well as explicit locking via
>> /// [`sync::Mutex`][mutex] and [`sync::RwLock`][rwlock]. These types
>> /// ensure that any mutation cannot cause data races, hence the types
>> /// are `Sync`. Likewise, [`sync::Arc`][arc] provides a thread-safe
>> /// analogue of [`Rc`][rc].
>> ///
>> /// Any types with interior mutability must also use the
>> /// [`cell::UnsafeCell`][unsafecell] wrapper around the value(s) which
>> /// can be mutated through a shared reference. Failing to doing this is
>> /// [undefined behavior][ub]. For example, [`transmute`][transmute]-ing
>> /// from `&T` to `&mut T` is invalid.
>> ///
>> /// See [the Nomicon][nomicon-send-and-sync] for more details about `Sync`.
>> ///
>> /// [box]: ../../std/boxed/struct.Box.html
>> /// [vec]: ../../std/vec/struct.Vec.html
>> /// [cell]: crate::cell::Cell
>> /// [refcell]: crate::cell::RefCell
>> /// [rc]: ../../std/rc/struct.Rc.html
>> /// [arc]: ../../std/sync/struct.Arc.html
>> /// [atomic data types]: crate::sync::atomic
>> /// [mutex]: ../../std/sync/struct.Mutex.html
>> /// [rwlock]: ../../std/sync/struct.RwLock.html
>> /// [unsafecell]: crate::cell::UnsafeCell
>> /// [ub]: ../../reference/behavior-considered-undefined.html
>> /// [transmute]: crate::mem::transmute
>> /// [nomicon-send-and-sync]: ../../nomicon/send-and-sync.html
>> #[stable(feature = "rust1", since = "1.0.0")]
>> #[cfg_attr(not(test), rustc_diagnostic_item = "Sync")]
>> #[lang = "sync"]
>> #[rustc_on_unimplemented(
>>      on(
>>          _Self = "core::cell::once::OnceCell<T>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::OnceLock` instead" ),
>>      on(
>>          _Self = "core::cell::Cell<u8>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead",
>> ),
>>      on(
>>          _Self = "core::cell::Cell<u16>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<u32>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<u64>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<usize>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<i8>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead",
>> ),
>>      on(
>>          _Self = "core::cell::Cell<i16>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<i32>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<i64>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<isize>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize`
>> instead", ),
>>      on(
>>          _Self = "core::cell::Cell<bool>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool`
>> instead", ),
>>      on(
>>          all(
>>              _Self = "core::cell::Cell<T>",
>>              not(_Self = "core::cell::Cell<u8>"),
>>              not(_Self = "core::cell::Cell<u16>"),
>>              not(_Self = "core::cell::Cell<u32>"),
>>              not(_Self = "core::cell::Cell<u64>"),
>>              not(_Self = "core::cell::Cell<usize>"),
>>              not(_Self = "core::cell::Cell<i8>"),
>>              not(_Self = "core::cell::Cell<i16>"),
>>              not(_Self = "core::cell::Cell<i32>"),
>>              not(_Self = "core::cell::Cell<i64>"),
>>              not(_Self = "core::cell::Cell<isize>"),
>>              not(_Self = "core::cell::Cell<bool>")
>>          ),
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock`", ),
>>      on(
>>          _Self = "core::cell::RefCell<T>",
>>          note = "if you want to do aliasing and mutation between multiple
>> threads, use `std::sync::RwLock` instead", ),
>>      message = "`{Self}` cannot be shared between threads safely",
>>      label = "`{Self}` cannot be shared between threads safely"
>> )]
>> pub unsafe auto trait Sync {
>>      // FIXME(estebank): once support to add notes in
>> `rustc_on_unimplemented` // lands in beta, and it has been extended to
>> check whether a closure is // anywhere in the requirement chain, extend it
>> as such (#48534): // ```
>>      // on(
>>      //     closure,
>>      //     note="`{Self}` cannot be shared safely, consider marking the
>> closure `move`" // ),
>>      // ```
>>
>>      // Empty
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> !Sync for *const T {}
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> !Sync for *mut T {}
>>
>> /// Zero-sized type used to mark things that "act like" they own a `T`.
>> ///
>> /// Adding a `PhantomData<T>` field to your type tells the compiler that
>> your /// type acts as though it stores a value of type `T`, even though it
>> doesn't /// really. This information is used when computing certain safety
>> properties. ///
>> /// For a more in-depth explanation of how to use `PhantomData<T>`, please
>> see /// [the Nomicon](../../nomicon/phantom-data.html).
>> ///
>> /// # A ghastly note 👻👻👻
>> ///
>> /// Though they both have scary names, `PhantomData` and 'phantom types' are
>> /// related, but not identical. A phantom type parameter is simply a type
>> /// parameter which is never used. In Rust, this often causes the compiler
>> to /// complain, and the solution is to add a "dummy" use by way of
>> `PhantomData`. ///
>> /// # Examples
>> ///
>> /// ## Unused lifetime parameters
>> ///
>> /// Perhaps the most common use case for `PhantomData` is a struct that has
>> an /// unused lifetime parameter, typically as part of some unsafe code.
>> For /// example, here is a struct `Slice` that has two pointers of type
>> `*const T`, /// presumably pointing into an array somewhere:
>> ///
>> /// ```compile_fail,E0392
>> /// struct Slice<'a, T> {
>> ///     start: *const T,
>> ///     end: *const T,
>> /// }
>> /// ```
>> ///
>> /// The intention is that the underlying data is only valid for the
>> /// lifetime `'a`, so `Slice` should not outlive `'a`. However, this
>> /// intent is not expressed in the code, since there are no uses of
>> /// the lifetime `'a` and hence it is not clear what data it applies
>> /// to. We can correct this by telling the compiler to act *as if* the
>> /// `Slice` struct contained a reference `&'a T`:
>> ///
>> /// ```
>> /// use std::marker::PhantomData;
>> ///
>> /// # #[allow(dead_code)]
>> /// struct Slice<'a, T> {
>> ///     start: *const T,
>> ///     end: *const T,
>> ///     phantom: PhantomData<&'a T>,
>> /// }
>> /// ```
>> ///
>> /// This also in turn infers the lifetime bound `T: 'a`, indicating
>> /// that any references in `T` are valid over the lifetime `'a`.
>> ///
>> /// When initializing a `Slice` you simply provide the value
>> /// `PhantomData` for the field `phantom`:
>> ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// # use std::marker::PhantomData;
>> /// # struct Slice<'a, T> {
>> /// #     start: *const T,
>> /// #     end: *const T,
>> /// #     phantom: PhantomData<&'a T>,
>> /// # }
>> /// fn borrow_vec<T>(vec: &Vec<T>) -> Slice<'_, T> {
>> ///     let ptr = vec.as_ptr();
>> ///     Slice {
>> ///         start: ptr,
>> ///         end: unsafe { ptr.add(vec.len()) },
>> ///         phantom: PhantomData,
>> ///     }
>> /// }
>> /// ```
>> ///
>> /// ## Unused type parameters
>> ///
>> /// It sometimes happens that you have unused type parameters which
>> /// indicate what type of data a struct is "tied" to, even though that
>> /// data is not actually found in the struct itself. Here is an
>> /// example where this arises with [FFI]. The foreign interface uses
>> /// handles of type `*mut ()` to refer to Rust values of different
>> /// types. We track the Rust type using a phantom type parameter on
>> /// the struct `ExternalResource` which wraps a handle.
>> ///
>> /// [FFI]:
>> ../../book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-external
>> -code ///
>> /// ```
>> /// # #![allow(dead_code)]
>> /// # trait ResType { }
>> /// # struct ParamType;
>> /// # mod foreign_lib {
>> /// #     pub fn new(_: usize) -> *mut () { 42 as *mut () }
>> /// #     pub fn do_stuff(_: *mut (), _: usize) {}
>> /// # }
>> /// # fn convert_params(_: ParamType) -> usize { 42 }
>> /// use std::marker::PhantomData;
>> /// use std::mem;
>> ///
>> /// struct ExternalResource<R> {
>> ///    resource_handle: *mut (),
>> ///    resource_type: PhantomData<R>,
>> /// }
>> ///
>> /// impl<R: ResType> ExternalResource<R> {
>> ///     fn new() -> Self {
>> ///         let size_of_res = mem::size_of::<R>();
>> ///         Self {
>> ///             resource_handle: foreign_lib::new(size_of_res),
>> ///             resource_type: PhantomData,
>> ///         }
>> ///     }
>> ///
>> ///     fn do_stuff(&self, param: ParamType) {
>> ///         let foreign_params = convert_params(param);
>> ///         foreign_lib::do_stuff(self.resource_handle, foreign_params);
>> ///     }
>> /// }
>> /// ```
>> ///
>> /// ## Ownership and the drop check
>> ///
>> /// The exact interaction of `PhantomData` with drop check **may change in
>> the future**. ///
>> /// Currently, adding a field of type `PhantomData<T>` indicates that your
>> type *owns* data of type /// `T` in very rare circumstances. This in turn
>> has effects on the Rust compiler's [drop check] /// analysis. For the exact
>> rules, see the [drop check] documentation. ///
>> /// ## Layout
>> ///
>> /// For all `T`, the following are guaranteed:
>> /// * `size_of::<PhantomData<T>>() == 0`
>> /// * `align_of::<PhantomData<T>>() == 1`
>> ///
>> /// [drop check]: Drop#drop-check
>> #[lang = "phantom_data"]
>> #[stable(feature = "rust1", since = "1.0.0")]
>> pub struct PhantomData<T: ?Sized>;
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Hash for PhantomData<T> {
>>      #[inline]
>>      fn hash<H: Hasher>(&self, _: &mut H) {}
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> cmp::PartialEq for PhantomData<T> {
>>      fn eq(&self, _other: &PhantomData<T>) -> bool {
>>          true
>>      }
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> cmp::Eq for PhantomData<T> {}
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> cmp::PartialOrd for PhantomData<T> {
>>      fn partial_cmp(&self, _other: &PhantomData<T>) -> Option<cmp::Ordering>
>> { Option::Some(cmp::Ordering::Equal)
>>      }
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> cmp::Ord for PhantomData<T> {
>>      fn cmp(&self, _other: &PhantomData<T>) -> cmp::Ordering {
>>          cmp::Ordering::Equal
>>      }
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Copy for PhantomData<T> {}
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Clone for PhantomData<T> {
>>      fn clone(&self) -> Self {
>>          Self
>>      }
>> }
>>
>> #[stable(feature = "rust1", since = "1.0.0")]
>> impl<T: ?Sized> Default for PhantomData<T> {
>>      fn default() -> Self {
>>          Self
>>      }
>> }
>>
>> #[unstable(feature = "structural_match", issue = "31434")]
>> impl<T: ?Sized> StructuralPartialEq for PhantomData<T> {}
>>
>> /// Compiler-internal trait used to indicate the type of enum discriminants.
>> ///
>> /// This trait is automatically implemented for every type and does not add
>> any /// guarantees to [`mem::Discriminant`]. It is **undefined behavior**
>> to transmute /// between `DiscriminantKind::Discriminant` and
>> `mem::Discriminant`. ///
>> /// [`mem::Discriminant`]: crate::mem::Discriminant
>> #[unstable(
>>      feature = "discriminant_kind",
>>      issue = "none",
>>      reason = "this trait is unlikely to ever be stabilized, use
>> `mem::discriminant` instead" )]
>> #[lang = "discriminant_kind"]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait DiscriminantKind {
>>      /// The type of the discriminant, which must satisfy the trait
>>      /// bounds required by `mem::Discriminant`.
>>      #[lang = "discriminant_type"]
>>      type Discriminant: Clone + Copy + Debug + Eq + PartialEq + Hash + Send +
>> Sync + Unpin; }
>>
>> /// Used to determine whether a type contains
>> /// any `UnsafeCell` internally, but not through an indirection.
>> /// This affects, for example, whether a `static` of that type is
>> /// placed in read-only static memory or writable static memory.
>> /// This can be used to declare that a constant with a generic type
>> /// will not contain interior mutability, and subsequently allow
>> /// placing the constant behind references.
>> ///
>> /// # Safety
>> ///
>> /// This trait is a core part of the language, it is just expressed as a
>> trait in libcore for /// convenience. Do *not* implement it for other
>> types.
>> // FIXME: Eventually this trait should become `#[rustc_deny_explicit_impl]`.
>> // That requires porting the impls below to native internal impls. #[lang =
>> "freeze"]
>> #[unstable(feature = "freeze", issue = "121675")]
>> pub unsafe auto trait Freeze {}
>>
>> #[unstable(feature = "freeze", issue = "121675")]
>> impl<T: ?Sized> !Freeze for UnsafeCell<T> {}
>> marker_impls! {
>>      #[unstable(feature = "freeze", issue = "121675")]
>>      unsafe Freeze for
>>          {T: ?Sized} PhantomData<T>,
>>          {T: ?Sized} *const T,
>>          {T: ?Sized} *mut T,
>>          {T: ?Sized} &T,
>>          {T: ?Sized} &mut T,
>> }
>>
>> /// Types that do not require any pinning guarantees.
>> ///
>> /// For information on what "pinning" is, see the [`pin` module]
>> documentation. ///
>> /// Implementing the `Unpin` trait for `T` expresses the fact that `T` is
>> pinning-agnostic: /// it shall not expose nor rely on any pinning
>> guarantees. This, in turn, means that a /// `Pin`-wrapped pointer to such a
>> type can feature a *fully unrestricted* API. /// In other words, if `T:
>> Unpin`, a value of type `T` will *not* be bound by the invariants /// which
>> pinning otherwise offers, even when "pinned" by a [`Pin<Ptr>`] pointing at
>> it. /// When a value of type `T` is pointed at by a [`Pin<Ptr>`], [`Pin`]
>> will not restrict access /// to the pointee value like it normally would,
>> thus allowing the user to do anything that they /// normally could with a
>> non-[`Pin`]-wrapped `Ptr` to that value. ///
>> /// The idea of this trait is to alleviate the reduced ergonomics of APIs
>> that require the use /// of [`Pin`] for soundness for some types, but which
>> also want to be used by other types that /// don't care about pinning. The
>> prime example of such an API is [`Future::poll`]. There are many ///
>> [`Future`] types that don't care about pinning. These futures can implement
>> `Unpin` and /// therefore get around the pinning related restrictions in
>> the API, while still allowing the /// subset of [`Future`]s which *do*
>> require pinning to be implemented soundly. ///
>> /// For more discussion on the consequences of [`Unpin`] within the wider
>> scope of the pinning /// system, see the [section about `Unpin`] in the
>> [`pin` module]. ///
>> /// `Unpin` has no consequence at all for non-pinned data. In particular,
>> [`mem::replace`] happily /// moves `!Unpin` data, which would be immovable
>> when pinned ([`mem::replace`] works for any /// `&mut T`, not just when `T:
>> Unpin`).
>> ///
>> /// *However*, you cannot use [`mem::replace`] on `!Unpin` data which is
>> *pinned* by being wrapped /// inside a [`Pin<Ptr>`] pointing at it. This is
>> because you cannot (safely) use a /// [`Pin<Ptr>`] to get a `&mut T` to its
>> pointee value, which you would need to call /// [`mem::replace`], and
>> *that* is what makes this system work.
>> ///
>> /// So this, for example, can only be done on types implementing `Unpin`:
>> ///
>> /// ```rust
>> /// # #![allow(unused_must_use)]
>> /// use std::mem;
>> /// use std::pin::Pin;
>> ///
>> /// let mut string = "this".to_string();
>> /// let mut pinned_string = Pin::new(&mut string);
>> ///
>> /// // We need a mutable reference to call `mem::replace`.
>> /// // We can obtain such a reference by (implicitly) invoking
>> `Pin::deref_mut`, /// // but that is only possible because `String`
>> implements `Unpin`. /// mem::replace(&mut *pinned_string,
>> "other".to_string());
>> /// ```
>> ///
>> /// This trait is automatically implemented for almost every type. The
>> compiler is free /// to take the conservative stance of marking types as
>> [`Unpin`] so long as all of the types that /// compose its fields are also
>> [`Unpin`]. This is because if a type implements [`Unpin`], then it /// is
>> unsound for that type's implementation to rely on pinning-related
>> guarantees for soundness, /// *even* when viewed through a "pinning"
>> pointer! It is the responsibility of the implementor of /// a type that
>> relies upon pinning for soundness to ensure that type is *not* marked as
>> [`Unpin`] /// by adding [`PhantomPinned`] field. For more details, see the
>> [`pin` module] docs. ///
>> /// [`mem::replace`]: crate::mem::replace "mem replace"
>> /// [`Future`]: crate::future::Future "Future"
>> /// [`Future::poll`]: crate::future::Future::poll "Future poll"
>> /// [`Pin`]: crate::pin::Pin "Pin"
>> /// [`Pin<Ptr>`]: crate::pin::Pin "Pin"
>> /// [`pin` module]: crate::pin "pin module"
>> /// [section about `Unpin`]: crate::pin#unpin "pin module docs about unpin"
>> /// [`unsafe`]: ../../std/keyword.unsafe.html "keyword unsafe"
>> #[stable(feature = "pin", since = "1.33.0")]
>> #[diagnostic::on_unimplemented(
>>      note = "consider using the `pin!` macro\nconsider using `Box::pin` if
>> you need to access the pinned value outside of the current scope", message
>> = "`{Self}` cannot be unpinned"
>> )]
>> #[lang = "unpin"]
>> pub auto trait Unpin {}
>>
>> /// A marker type which does not implement `Unpin`.
>> ///
>> /// If a type contains a `PhantomPinned`, it will not implement `Unpin` by
>> default. #[stable(feature = "pin", since = "1.33.0")]
>> #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
>> pub struct PhantomPinned;
>>
>> #[stable(feature = "pin", since = "1.33.0")]
>> impl !Unpin for PhantomPinned {}
>>
>> marker_impls! {
>>      #[stable(feature = "pin", since = "1.33.0")]
>>      Unpin for
>>          {T: ?Sized} &T,
>>          {T: ?Sized} &mut T,
>> }
>>
>> marker_impls! {
>>      #[stable(feature = "pin_raw", since = "1.38.0")]
>>      Unpin for
>>          {T: ?Sized} *const T,
>>          {T: ?Sized} *mut T,
>> }
>>
>> /// A marker for types that can be dropped.
>> ///
>> /// This should be used for `~const` bounds,
>> /// as non-const bounds will always hold for every type.
>> #[unstable(feature = "const_destruct", issue = "133214")]
>> #[lang = "destruct"]
>> #[rustc_on_unimplemented(message = "can't drop `{Self}`", append_const_msg)]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> #[cfg_attr(not(bootstrap), const_trait)]
>> pub trait Destruct {}
>>
>> /// A marker for tuple types.
>> ///
>> /// The implementation of this trait is built-in and cannot be implemented
>> /// for any user type.
>> #[unstable(feature = "tuple_trait", issue = "none")]
>> #[lang = "tuple_trait"]
>> #[diagnostic::on_unimplemented(message = "`{Self}` is not a tuple")]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait Tuple {}
>>
>> /// A marker for pointer-like types.
>> ///
>> /// This trait can only be implemented for types that are certain to have
>> /// the same size and alignment as a [`usize`] or [`*const ()`](pointer).
>> /// To ensure this, there are special requirements on implementations
>> /// of `PointerLike` (other than the already-provided implementations
>> /// for built-in types):
>> ///
>> /// * The type must have `#[repr(transparent)]`.
>> /// * The type’s sole non-zero-sized field must itself implement
>> `PointerLike`. #[unstable(feature = "pointer_like_trait", issue = "none")]
>> #[lang = "pointer_like"]
>> #[diagnostic::on_unimplemented(
>>      message = "`{Self}` needs to have the same ABI as a pointer",
>>      label = "`{Self}` needs to be a pointer-like type"
>> )]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait PointerLike {}
>>
>> #[cfg(not(bootstrap))]
>> marker_impls! {
>>      #[unstable(feature = "pointer_like_trait", issue = "none")]
>>      PointerLike for
>>          isize,
>>          usize,
>>          {T} &T,
>>          {T} &mut T,
>>          {T} *const T,
>>          {T} *mut T,
>>          {T: PointerLike} crate::pin::Pin<T>,
>> }
>>
>> /// A marker for types which can be used as types of `const` generic
>> parameters. ///
>> /// These types must have a proper equivalence relation (`Eq`) and it must
>> be automatically /// derived (`StructuralPartialEq`). There's a hard-coded
>> check in the compiler ensuring /// that all fields are also `ConstParamTy`,
>> which implies that recursively, all fields /// are `StructuralPartialEq`.
>> #[lang = "const_param_ty"]
>> #[unstable(feature = "unsized_const_params", issue = "95174")]
>> #[diagnostic::on_unimplemented(message = "`{Self}` can't be used as a const
>> parameter type")] #[allow(multiple_supertrait_upcastable)]
>> // We name this differently than the derive macro so that the
>> `adt_const_params` can // be used independently of `unsized_const_params`
>> without requiring a full path // to the derive macro every time it is used.
>> This should be renamed on stabilization. pub trait ConstParamTy_:
>> UnsizedConstParamTy + StructuralPartialEq + Eq {}
>>
>> /// Derive macro generating an impl of the trait `ConstParamTy`.
>> #[rustc_builtin_macro]
>> #[allow_internal_unstable(unsized_const_params)]
>> #[unstable(feature = "adt_const_params", issue = "95174")]
>> pub macro ConstParamTy($item:item) {
>>      /* compiler built-in */
>> }
>>
>> #[lang = "unsized_const_param_ty"]
>> #[unstable(feature = "unsized_const_params", issue = "95174")]
>> #[diagnostic::on_unimplemented(message = "`{Self}` can't be used as a const
>> parameter type")] /// A marker for types which can be used as types of
>> `const` generic parameters. ///
>> /// Equivalent to [`ConstParamTy_`] except that this is used by
>> /// the `unsized_const_params` to allow for fake unstable impls.
>> pub trait UnsizedConstParamTy: StructuralPartialEq + Eq {}
>>
>> /// Derive macro generating an impl of the trait `ConstParamTy`.
>> #[rustc_builtin_macro]
>> #[allow_internal_unstable(unsized_const_params)]
>> #[unstable(feature = "unsized_const_params", issue = "95174")]
>> pub macro UnsizedConstParamTy($item:item) {
>>      /* compiler built-in */
>> }
>>
>> // FIXME(adt_const_params): handle `ty::FnDef`/`ty::Closure`
>> marker_impls! {
>>      #[unstable(feature = "adt_const_params", issue = "95174")]
>>      ConstParamTy_ for
>>          usize, u8, u16, u32, u64, u128,
>>          isize, i8, i16, i32, i64, i128,
>>          bool,
>>          char,
>>          (),
>>          {T: ConstParamTy_, const N: usize} [T; N],
>> }
>>
>> marker_impls! {
>>      #[unstable(feature = "unsized_const_params", issue = "95174")]
>>      UnsizedConstParamTy for
>>          usize, u8, u16, u32, u64, u128,
>>          isize, i8, i16, i32, i64, i128,
>>          bool,
>>          char,
>>          (),
>>          {T: UnsizedConstParamTy, const N: usize} [T; N],
>>
>>          str,
>>          {T: UnsizedConstParamTy} [T],
>>          {T: UnsizedConstParamTy + ?Sized} &T,
>> }
>>
>> /// A common trait implemented by all function pointers.
>> #[unstable(
>>      feature = "fn_ptr_trait",
>>      issue = "none",
>>      reason = "internal trait for implementing various traits for all
>> function pointers" )]
>> #[lang = "fn_ptr_trait"]
>> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =
>> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
>> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
>> pub trait FnPtr: Copy + Clone {
>>      /// Returns the address of the function pointer.
>>      #[lang = "fn_ptr_addr"]
>>      fn addr(self) -> *const ();
>> }
>>
>> /// Derive macro generating impls of traits related to smart pointers.
>> #[rustc_builtin_macro(CoercePointee, attributes(pointee))]
>> #[allow_internal_unstable(dispatch_from_dyn, coerce_unsized, unsize)]
>> #[unstable(feature = "derive_coerce_pointee", issue = "123430")]
>> #[cfg(not(bootstrap))]
>> pub macro CoercePointee($item:item) {
>>      /* compiler built-in */
>> }
>>
>>
>> ```
>>
>>
>> In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
>>   3.24.43, cairo version 1.18.2) of 2025-04-17 built on Mufasa
>> Repository revision: 7b35a5062231ec5a11c7a87d4797cfb5dba25121
>> Repository branch: feature/igc
>> System Description: NixOS 24.11 (Vicuna)
>>
>> Configured using:
>>   'configure 'CFLAGS=-O3 -march=native'
>>   --prefix=/home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_i
>> gc-7b35a5062231ec5a11c7a87d4797cfb5dba25121-O3 --with-mps=yes
>> --with-imagemagick --with-modules --with-pgtk
>>   --with-cairo --with-cairo-xcb --without-compress-install
>>   --with-mailutils --with-tree-sitter --with-xinput2
>>   --enable-link-time-optimization --with-file-notification=inotify'
>>
>> Configured features:
>> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ
>> IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 MODULES MPS NATIVE_COMP NOTIFY
>> INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
>> TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB
>>
>> Important settings:
>>    value of $LC_COLLATE: C
>>    value of $LC_MONETARY: en_US.UTF-8
>>    value of $LC_NUMERIC: en_US.UTF-8
>>    value of $LC_TIME: C
>>    value of $LANG: en_US.UTF-8
>>    value of $XMODIFIERS: @im=fcitx
>>    locale-coding-system: utf-8-unix
>>
>> Major mode: Elisp/l
>>
>> Minor modes in effect:
>>    restore-point-mode: t
>>    global-atomic-chrome-edit-mode: t
>>    global-git-gutter-mode: t
>>    git-gutter-mode: t
>>    marginalia-mode: t
>>    elisp-def-mode: t
>>    flycheck-posframe-mode: t
>>    hungry-delete-mode: t
>>    symbol-overlay-mode: t
>>    keycast-tab-bar-mode: t
>>    vertico-truncate-mode: t
>>    vertico-multiform-mode: t
>>    vertico-mode: t
>>    telega-root-auto-fill-mode: t
>>    telega-contact-birthdays-mode: t
>>    telega-active-video-chats-mode: t
>>    telega-active-locations-mode: t
>>    telega-patrons-mode: t
>>    telega-active-stories-mode: t
>>    tab-line-nerd-icons-global-mode: t
>>    global-tab-line-mode: t
>>    tab-line-mode: t
>>    ultra-scroll-mode: t
>>    pixel-scroll-precision-mode: t
>>    org-roam-db-autosync-mode: t
>>    global-org-modern-mode: t
>>    mu4e-modeline-mode: t
>>    global-kkp-mode: t
>>    global-git-commit-mode: t
>>    flycheck-mode: t
>>    engine-mode: t
>>    symex-mode: t
>>    global-evil-surround-mode: t
>>    evil-surround-mode: t
>>    yas-global-mode: t
>>    yas-minor-mode: t
>>    corfu-terminal-mode: t
>>    corfu-history-mode: t
>>    global-corfu-mode: t
>>    corfu-mode: t
>>    rainbow-mode: t
>>    elisp-autofmt-mode: t
>>    highlight-defined-mode: t
>>    highlight-numbers-mode: t
>>    hes-mode: t
>>    rainbow-delimiters-mode: t
>>    burly-tabs-mode: t
>>    global-form-feed-st-mode: t
>>    form-feed-st-mode: t
>>    eat-eshell-mode: t
>>    sly-symbol-completion-mode: t
>>    super-save-mode: t
>>    savehist-mode: t
>>    which-key-mode: t
>>    super-hint-xref-mode: t
>>    super-hint-rg-mode: t
>>    windmove-mode: t
>>    server-mode: t
>>    save-place-mode: t
>>    recentf-mode: t
>>    winner-mode: t
>>    persistent-scratch-autosave-mode: t
>>    global-dash-fontify-mode: t
>>    dash-fontify-mode: t
>>    nerd-icons-completion-mode: t
>>    sudo-edit-indicator-mode: t
>>    global-evil-visualstar-mode: t
>>    evil-visualstar-mode: t
>>    evil-commentary-mode: t
>>    global-evil-mc-mode: t
>>    evil-mc-mode: t
>>    evil-lion-mode: t
>>    global-evil-collection-unimpaired-mode: t
>>    evil-collection-unimpaired-mode: t
>>    buffer-face-mode: t
>>    TeX-PDF-mode: t
>>    display-line-numbers-mode: t
>>    electric-pair-mode: t
>>    global-auto-revert-mode: t
>>    evil-mode: t
>>    evil-local-mode: t
>>    general-override-mode: t
>>    minions-mode: t
>>    el-patch-use-package-mode: t
>>    elpaca-use-package-mode: t
>>    override-global-mode: t
>>    tooltip-mode: t
>>    global-eldoc-mode: t
>>    eldoc-mode: t
>>    show-paren-mode: t
>>    electric-indent-mode: t
>>    mouse-wheel-mode: t
>>    tab-bar-mode: t
>>    file-name-shadow-mode: t
>>    context-menu-mode: t
>>    global-font-lock-mode: t
>>    font-lock-mode: t
>>    minibuffer-regexp-mode: t
>>    column-number-mode: -1
>>    line-number-mode: -1
>>    transient-mark-mode: t
>>    auto-composition-mode: t
>>    auto-encryption-mode: t
>>    auto-compression-mode: t
>>
>> Load-path shadows:
>> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
>> /home/exec/.emacs.d/elpaca/builds/standard-themes/theme-loaddefs
>> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
>> /home/exec/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs
>> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
>> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5
>> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/theme-loaddef
>> s /home/exec/.emacs.d/elpaca/builds/transient/transient hides
>> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5
>> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/transient
>>
>> Features:
>> (shadow sort mail-extr expand-region yaml-mode-expansions
>> subword-mode-expansions text-mode-expansions cc-mode-expansions
>> the-org-mode-expansions python-el-fgallina-expansions
>> latex-mode-expansions js2-mode-expansions js-mode-expansions
>> web-mode-expansions html-mode-expansions clojure-mode-expansions
>> er-basic-expansions expand-region-core expand-region-custom
>> evil-collection-embark embark-org embark-consult embark gptel-curl
>> nerd-icons-dired diredfl info-colors vertico-sort cus-start descr-text
>> dabbrev cape lsp-diagnostics lsp-modeline lsp-icons lsp-zig lsp-yang
>> lsp-yaml lsp-xml lsp-wgsl lsp-volar lsp-vimscript lsp-vhdl lsp-vetur
>> lsp-html lsp-verilog lsp-vala lsp-v lsp-typespec lsp-typeprof lsp-ttcn3
>> lsp-ts-query lsp-trunk lsp-toml lsp-tilt lsp-tex lsp-terraform
>> lsp-svelte lsp-steep lsp-sqls lsp-sql lsp-sorbet lsp-solidity
>> lsp-solargraph lsp-semgrep lsp-ruff lsp-ruby-syntax-tree lsp-ruby-lsp
>> lsp-rubocop lsp-roslyn lsp-roc lsp-rf lsp-remark lsp-racket lsp-r
>> lsp-qml lsp-pyright lsp-pylsp lsp-pyls lsp-pwsh lsp-purescript lsp-pls
>> lsp-php lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-nushell
>> lsp-nix lsp-nim lsp-nginx lsp-nextflow lsp-move lsp-mojo lsp-mint
>> lsp-meson lsp-mdx lsp-matlab lsp-marksman lsp-markdown lsp-magik
>> lsp-fennel lsp-lua lsp-lisp lsp-kubernetes-helm lsp-kotlin lsp-json
>> lsp-jq lsp-javascript lsp-idris lsp-haxe lsp-hack lsp-groovy lsp-graphql
>> lsp-golangci-lint lsp-glsl lsp-gleam lsp-gdscript lsp-fsharp lsp-futhark
>> lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elm lsp-elixir
>> lsp-earthly lsp-dockerfile lsp-dhall lsp-d lsp-cypher lsp-cucumber
>> lsp-copilot lsp-css lsp-c3 lsp-csharp lsp-crystal lsp-credo lsp-cobol
>> lsp-cmake lsp-clojure lsp-clangd lsp-bufls lsp-go lsp-completion
>> lsp-beancount lsp-bash lsp-awk lsp-autotools lsp-astro lsp-asm
>> lsp-ansible lsp-angular lsp-ada lsp-actionscript copilot
>> copilot-balancer editorconfig editorconfig-core editorconfig-core-handle
>> editorconfig-fnmatch jsonrpc gptel-openai-extras gptel-anthropic
>> gptel-gemini gptel-ollama org-indent gptel-openai consult-dir-autoloads
>> consult-ag-autoloads restore-point evil-collection-atomic-chrome
>> atomic-chrome git-gutter marginalia elisp-def evil-collection-ert ert
>> flycheck-posframe evil-collection-hungry-delete hungry-delete
>> symbol-overlay keycast zig-mode reformatter empv vertico-truncate
>> vertico-posframe vertico-multiform evil-collection-vertico vertico
>> lsp-uniteai nix-ts-mode go-translate gt-text-utility gt-engine-echo
>> gt-engine-libre gt-engine-chatgpt gt-engine-youdao gt-engine-osxdict
>> gt-engine-stardict gt-engine-deepl gt-engine-google-rpc gt-engine-google
>> gt-engine-bing gt-extension gt-faces gt-core gt-httpx sdcv cap-words
>> superword subword evil-collection-telega telega-obsolete telega
>> telega-tdlib-events telega-match telega-root telega-info telega-chat
>> telega-modes telega-company telega-emoji telega-user
>> telega-notifications telega-voip telega-msg telega-story telega-webpage
>> telega-tme telega-sticker telega-vvnote telega-ffplay telega-i18n
>> telega-sort telega-filter telega-ins telega-inline telega-util
>> telega-folders telega-topic telega-media telega-tdlib telega-server
>> telega-core telega-customize emacsbug tab-line-nerd-icons
>> evil-collection-imenu-list imenu-list tab-line rust-utils
>> rust-mode-treesitter rust-ts-mode rust-mode rust-playpen rust-cargo
>> rust-common rust-rustfmt rust-compile cargo cargo-process rg-info-hack
>> rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg rg-history ibuf-ext
>> evil-collection-ibuffer ibuffer ibuffer-loaddefs rg-header
>> evil-collection-ultra-scroll ultra-scroll pixel-scroll cua-base
>> org-sliced-images emacsql-sqlite-builtin evil-collection-org-roam
>> org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id
>> org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam
>> org-capture emacsql-sqlite emacsql emacsql-compiler org-journal
>> org-crypt cal-iso org-modern orderless evil-collection-mu4e mu4e
>> mu4e-org mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts
>> mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg
>> gnus-art mm-uu mml2015 mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
>> mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders
>> mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars
>> mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cyphejor qml-mode
>> kkp rfc-mode string-inflection wakatime-mode systemd minuet pr-review
>> pr-review-render pr-review-action magit-diff git-commit
>> evil-collection-log-edit log-edit pcvs-util add-log magit-core
>> magit-autorevert magit-margin magit-transient magit-process
>> evil-collection-with-editor with-editor magit-mode magit-git magit-base
>> pr-review-input pr-review-api ghub-graphql treepy gsexp ghub
>> pr-review-common consult-lsp lsp-ui lsp-ui-flycheck lsp-ui-doc
>> evil-collection-lsp-ui-imenu lsp-ui-imenu lsp-ui-peek lsp-ui-sideline
>> lsp-rust lsp-semantic-tokens lsp-mode network-stream
>> evil-collection-markdown-mode markdown-mode lsp-ui-util lsp-protocol
>> llm-prompt groovy-mode iedit help-macro iedit-lib hide-comnt
>> minibuffer-header gptel-quick gotest fzf flycheck-clj-kondo jka-compr
>> pos-tip consult-flycheck flycheck-rust engine-mode evil-collection-ement
>> ement-room-list taxy-magit-section taxy ement ement-notifications
>> ement-notify ement-room ewoc ement-lib ement-api ement-structs
>> ement-macros dns llm-ollama llm-provider-utils llm-models
>> llm-request-plz plz-event-source plz-media-type plz llm symex symex-evil
>> symex-evil-support symex-hydra symex-transformations
>> symex-transformations-lisp symex-utils evil-cleverparens
>> evil-cleverparens-text-objects evil-cleverparens-util smartparens
>> evil-surround symex-misc symex-interface-builtins symex-interface-fennel
>> symex-interface-arc symex-interface-common-lisp symex-interface-clojure
>> symex-interface-scheme symex-interface-racket symex-interface-elisp
>> symex-interop symex-interface symex-traversals symex-dsl symex-evaluator
>> symex-computations symex-primitives symex-ts symex-utils-ts
>> symex-transformations-ts symex-primitives-lisp symex-data symex-ui
>> symex-custom evil-collection-lispy lispy le-clojure delsel lispy-inline
>> avy lispy-tags zoutline combobulate evil-collection-elfeed elfeed-show
>> elfeed-search elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db
>> elfeed-lib xml-query dired-git-info dired-hacks dired-preview
>> evil-collection-cmake-mode cmake-mode consult-yasnippet yasnippet-capf
>> yasnippet-snippets yasnippet kind-icon svg-lib corfu-terminal popon
>> corfu-popupinfo corfu-indexed corfu-history evil-collection-corfu corfu
>> consult-ls-git paredit clojure-ts-mode evil-collection-cider cider
>> tramp-sh cider-debug cider-browse-ns cider-mode cider-xref-backend
>> cider-find cider-inspector cider-completion cider-profile cider-eval
>> cider-jar cider-repl-history cider-repl cider-resolve cider-test
>> cider-overlays cider-stacktrace cider-doc cider-browse-spec
>> cider-clojuredocs cider-eldoc cider-docstring cider-client cider-common
>> cider-completion-context cider-connection cider-popup sesman-browser
>> nrepl-client cider-util sesman queue nrepl-dict spinner clojure-mode
>> rainbow-mode elisp-autofmt loadhist highlight-defined highlight-numbers
>> parent-mode highlight-escape-sequences rainbow-delimiters chatgpt-shell
>> chatgpt-shell-prompt-compose chatgpt-shell-perplexity
>> chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama
>> chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek
>> chatgpt-shell-anthropic evil-collection-smerge-mode smerge-mode diff
>> shell-maker ielm evil-collection-eshell eshell em-prompt esh-mode
>> esh-var esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module
>> esh-module-loaddefs esh-util cargo-jump-xref toml breadcrumb pulse
>> bookmark-in-project bookmark+ bookmark+-key bookmark+-1 gnus-sum
>> gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail
>> mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win
>> bookmark+-bmu bookmark+-lit bookmark+-mac babashka parseedn
>> parseclj-parser parseclj-lex parseclj-alist cnfonts burly-tabs burly
>> compile-multi form-feed-st google-this echo-bar fcitx
>> evil-collection-eat eat term/xterm xterm evil-collection-term term ehelp
>> ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util
>> rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex
>> ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach
>> org-element org-persist org-id org-refile org-element-ast inline
>> avl-tree htmlize evil-collection-explain-pause-mode explain-pause-mode
>> explain-pause-top explain-pause-log-to-socket evil-collection-profiler
>> profiler weather-metno solar cal-dst url-cache display-wttr kdeconnect
>> crux pest-mode popwin modus-themes blackboard-theme standard-themes
>> nimbus-theme tok-theme danneskjold-theme srcery-theme subatomic256-theme
>> iscroll xml+ evil-textobj-tree-sitter
>> evil-textobj-tree-sitter-thing-at-point evil-textobj-tree-sitter-core
>> tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get
>> dired-aux tsc-obsolete ctable evil-collection-color-rg color-rg
>> line-reminder ov ht fringe-helper solarized-theme solarized
>> solarized-faces sqlup-mode evil-collection-bm bm zen-mode
>> evil-collection-sly sly gud sly-completion sly-buttons sly-messages
>> sly-common evil-collection-apropos apropos evil-collection-arc-mode
>> arc-mode archive-mode hyperspec sicp base16-theme idea-darkula-theme
>> hybrid-reverse-theme material-theme doom-themes doom-themes-base
>> nyan-mode organic-green-theme inkpot-theme github-dark-vscode-theme
>> almost-mono-themes cyberpunk-theme soothe-theme soothe-tva zenburn-theme
>> mindre-theme kaolin-themes kaolin-themes-lib tron-legacy-theme
>> wildcharm-theme atom-one-dark-theme parchment-theme autothemer
>> visual-fill-column transpose-frame gameoflife evil-collection-docker
>> docker docker-context docker-volume docker-network docker-image
>> docker-container docker-faces docker-core docker-compose docker-process
>> docker-utils docker-group aio dockerfile-mode emacs-everywhere cus-dir
>> dumb-jump evil-collection-popup popup websocket bindat bing-dict cl
>> bing-dict-cache hl-todo atom-dark-theme ef-themes uwu-theme vagrant
>> evil-collection-ag ag vc-svn find-dired alarm-clock alert log4e
>> notifications gntp pinentry evil-collection-hackernews hackernews
>> evil-collection-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello
>> notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message
>> notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company
>> notmuch-parser notmuch-wash coolj goto-addr icalendar diary-lib
>> diary-loaddefs notmuch-tag notmuch-lib notmuch-compat message sendmail
>> yank-media rfc822 mml mailabbrev gmm-utils mm-view mml-smime mml-sec
>> smime gnutls dig mm-decode mm-bodies mm-encode fussy flx affe
>> evil-collection-consult consult clang-format apheleia apheleia-rcs
>> apheleia-dp apheleia-formatters apheleia-utils apheleia-log
>> apheleia-formatter-context vimrc-mode gnuplot olivetti super-save
>> evil-collection-helpful helpful cc-langs trace cl-print
>> evil-collection-edebug edebug evil-collection-debug debug backtrace
>> info-look evil-collection-info info help-fns radix-tree
>> evil-collection-elisp-refs elisp-refs solidity-mode solidity-common
>> evil-collection-git-timemachine git-timemachine web-mode disp-table
>> evil-collection-go-mode go-mode find-file evil-collection-js2-mode
>> js2-mode etags fileloop zig-mode-autoloads reformatter-autoloads
>> empv-autoloads yasnippet-snippets-autoloads marginalia-autoloads
>> vertico-truncate-autoloads vertico-posframe-autoloads vertico-autoloads
>> lsp-uniteai-autoloads nix-ts-mode-autoloads go-translate-autoloads
>> alert-autoloads gntp-autoloads log4e-autoloads sdcv-autoloads
>> telega-autoloads tab-line-nerd-icons-autoloads keycast-autoloads
>> rust-mode-autoloads cargo-autoloads toml-autoloads rg-autoloads
>> writeroom-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads
>> makefile-executor-autoloads ultra-scroll-autoloads pdf-tools-autoloads
>> org-sliced-images-autoloads consult-org-roam-autoloads
>> org-roam-autoloads org-journal-autoloads org-download-autoloads
>> org-modern-autoloads orderless-autoloads mu4e-autoloads
>> cyphejor-autoloads symbol-overlay-autoloads qml-mode-autoloads
>> kkp-autoloads rfc-mode-autoloads string-inflection-autoloads
>> wakatime-mode-autoloads webpaste-autoloads systemd-autoloads
>> minuet-autoloads pr-review-autoloads forge-autoloads closql-autoloads
>> emacsql-autoloads ghub-autoloads treepy-autoloads yaml-autoloads
>> lsp-pyright-autoloads consult-lsp-autoloads lsp-ui-autoloads
>> lsp-mode-autoloads groovy-mode-autoloads imenu-list-autoloads
>> hungry-delete-autoloads hide-comnt-autoloads minibuffer-header-autoloads
>> gptel-quick-autoloads gptel-autoloads gotest-autoloads fzf-autoloads
>> flycheck-golangci-lint-autoloads flycheck-clj-kondo-autoloads
>> pos-tip-autoloads consult-flycheck-autoloads flycheck-rust-autoloads
>> flycheck-posframe-autoloads flycheck-autoloads engine-mode-autoloads
>> ement-autoloads taxy-magit-section-autoloads taxy-autoloads
>> embark-consult-autoloads embark-autoloads ellama-autoloads llm-autoloads
>> plz-event-source-autoloads plz-media-type-autoloads plz-autoloads
>> symex-autoloads tree-sitter-autoloads tsc-autoloads lispy-autoloads
>> iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads
>> evil-cleverparens-autoloads smartparens-autoloads combobulate-autoloads
>> combobulate-go combobulate-json combobulate-yaml combobulate-css
>> combobulate-js-ts combobulate-python combobulate-html combobulate-toml
>> combobulate-cursor multiple-cursors mc-separate-operations
>> rectangular-region-mode mc-mark-pop mc-edit-lines
>> mc-hide-unmatched-lines-mode mc-mark-more sgml-mode mc-cycle-cursors
>> multiple-cursors-core combobulate-query savehist evil-collection-scheme
>> scheme combobulate-ui combobulate-display let-alist combobulate-ztree
>> combobulate-envelope combobulate-manipulation evil-collection-python
>> python combobulate-procedure combobulate-navigation combobulate-misc
>> combobulate-setup tempo combobulate-interface combobulate-settings
>> combobulate-rules elisp-def-autoloads elfeed-tube-mpv-autoloads
>> elfeed-tube-autoloads elfeed-autoloads eee-autoloads eee
>> dired-git-info-autoloads dired-hacks-autoloads dired-preview-autoloads
>> diredfl-autoloads git-gutter-autoloads cmake-mode-autoloads
>> consult-yasnippet-autoloads yasnippet-capf-autoloads yasnippet-autoloads
>> cape-autoloads kind-icon-autoloads svg-lib-autoloads
>> corfu-terminal-autoloads popon-autoloads corfu-autoloads
>> copilot-autoloads copilot-chat-autoloads consult-ls-git-autoloads
>> paredit-autoloads clojure-ts-mode-autoloads cider-autoloads
>> clojure-mode-autoloads queue-autoloads spinner-autoloads
>> sesman-autoloads chatgpt-shell-autoloads shell-maker-autoloads
>> cargo-jump-xref-autoloads breadcrumb-autoloads
>> bookmark-in-project-autoloads bookmark+-autoloads babashka-autoloads
>> parseedn-autoloads parseclj-autoloads aidermacs-autoloads
>> mediawiki-autoloads markdown-mode-autoloads treemacs-magit-autoloads
>> magit-autoloads with-editor-autoloads nerd-icons-ibuffer-autoloads
>> treemacs-nerd-icons-autoloads treemacs-autoloads pfuture-autoloads
>> cfrs-autoloads cnfonts-autoloads burly-autoloads compile-multi-autoloads
>> form-feed-st-autoloads google-this-autoloads echo-bar-autoloads
>> zoom-autoloads fcitx-autoloads eat-autoloads vterm-autoloads
>> chatgpt-autoloads polymode-autoloads ox-reveal-autoloads
>> htmlize-autoloads wordreference-autoloads explain-pause-mode-autoloads
>> weather-metno-autoloads display-wttr-autoloads kdeconnect-autoloads
>> emms-autoloads crux-autoloads pest-mode-autoloads popwin-autoloads
>> modus-themes-autoloads blackboard-theme-autoloads
>> standard-themes-autoloads nimbus-theme-autoloads tok-theme-autoloads
>> danneskjold-theme-autoloads srcery-theme-autoloads
>> subatomic256-theme-autoloads iscroll-autoloads xml+-autoloads
>> multiple-cursors-autoloads evil-textobj-tree-sitter-autoloads
>> evil-numbers-autoloads ctable-autoloads color-rg-autoloads
>> line-reminder-autoloads fringe-helper-autoloads ov-autoloads
>> solarized-theme-autoloads sqlup-mode-autoloads bm-autoloads
>> zen-mode-autoloads sly-autoloads expand-region-autoloads
>> highlight-defined-autoloads base16-theme-autoloads
>> idea-darkula-theme-autoloads hybrid-reverse-theme-autoloads
>> material-theme-autoloads doom-themes-autoloads nyan-mode-autoloads
>> organic-green-theme-autoloads inkpot-theme-autoloads
>> github-dark-vscode-theme-autoloads almost-mono-themes-autoloads
>> cyberpunk-theme-autoloads soothe-theme-autoloads zenburn-theme-autoloads
>> mindre-theme-autoloads kaolin-themes-autoloads
>> tron-legacy-theme-autoloads wildcharm-theme-autoloads
>> atom-one-dark-theme-autoloads parchment-theme-autoloads
>> autothemer-autoloads visual-fill-column-autoloads
>> transpose-frame-autoloads gameoflife-autoloads docker-autoloads
>> aio-autoloads dockerfile-mode-autoloads emacs-everywhere-autoloads
>> cus-dir-autoloads dumb-jump-autoloads popup-autoloads
>> bing-dict-autoloads hl-todo-autoloads atom-dark-theme-autoloads
>> ef-themes-autoloads uwu-theme-autoloads vagrant-autoloads ag-autoloads
>> alarm-clock-autoloads pinentry-autoloads hackernews-autoloads
>> notmuch-autoloads fussy-autoloads flx-autoloads affe-autoloads
>> consult-autoloads clang-format-autoloads apheleia-autoloads
>> elisp-autofmt-autoloads vimrc-mode-autoloads mpv-autoloads
>> gnuplot-autoloads mermaid-mode-autoloads atomic-chrome-autoloads
>> websocket-autoloads restore-point-autoloads ace-window-autoloads
>> avy-autoloads olivetti-autoloads super-save-autoloads helpful-autoloads
>> elisp-refs-autoloads solidity-mode-autoloads git-timemachine-autoloads
>> web-mode-autoloads adoc-mode-autoloads go-mode-autoloads
>> js2-mode-autoloads rust-playground-autoloads evil-collection-which-key
>> which-key super-hint-xref super-hint-rg super-hint evil-collection-xref
>> xref evil-collection-rg rg piper ob-shell ob-gnuplot ob-C
>> evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp
>> org-macro org-src evil-collection-sh-script sh-script executable
>> ob-comint org-pcomplete org-list org-footnote org-faces org-entities
>> ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
>> org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs
>> molecule-mode lsp hyperbole hideshow gptel-manual-complete
>> evil-collection-gptel gptel windmove evil-collection-flycheck flycheck
>> erc erc-backend erc-networks erc-common erc-compat erc-loaddefs
>> evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff
>> ediff-help ediff-init ediff-util dired-x consult-ripgrep-all desktop
>> frameset server evil-collection-eww eww vtable mule-util url-queue
>> mm-url evil-collection-gnus gnus nnheader gnus-util range epa-file
>> evil-collection-epa epa derived epg rfc6068 epg-config saveplace recentf
>> tree-widget winner edit-list refine loop list-utils prompts file-info
>> browse-at-remote f image-roll evil-collection-image image-mode exif
>> toc-mode rst scratch sql evil-collection-view view persistent-scratch
>> exercism persist async-await iter2 generator promise url-http url-auth
>> mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw
>> nsm promise-rejection-tracking promise-finally promise-done
>> promise-es6-extensions promise-core async request mailheader mail-utils
>> a indent-bars evil-collection-outline noutline outline mode-line-bell
>> powerthesaurus jeison dash s evil-collection-ripgrep ripgrep
>> evil-collection-wgrep wgrep evil-collection-grep grep
>> evil-collection-vlf vlf vlf-base vlf-tune gptai ctrlf hl-line
>> nerd-icons-completion nerd-icons nerd-icons-faces nerd-icons-data
>> nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon
>> nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon
>> nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon
>> nerd-icons-data-pomicon nerd-icons-data-ipsicon disable-mouse mingus
>> libmpdee evil-collection-mpdel mpdel mpdel-browser libmpdel-directory
>> mpdel-playlist mpdel-tablist mpdel-song mpdel-core navigel
>> evil-collection-bookmark bookmark evil-collection-tablist tablist
>> tablist-filter semantic/wisent/comp semantic/wisent
>> semantic/wisent/wisent semantic/util-modes semantic/util semantic
>> semantic/tag semantic/lex semantic/fw mode-local find-func cedet
>> libmpdel tq time-stamp posframe esup esup-child benchmark
>> ssh-config-mode jq-mode json-mode json-snatcher js c-ts-common treesit
>> cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
>> cc-vars cc-defs evil-collection-yaml-mode yaml-mode toml-mode conf-mode
>> align highlight facemenu nix-mode ffap smie nix-repl nix-shell nix-store
>> evil-collection-magit-section magit-section cursor-sensor llama nix-log
>> nix-instantiate nix-shebang nix-format nix sudo-edit tramp trampver
>> tramp-integration tramp-message tramp-compat shell pcomplete parse-time
>> iso8601 time-date tramp-loaddefs evil-collection-devdocs devdocs mathjax
>> evil-terminal-cursor-changer evil-visualstar evil-commentary
>> evil-commentary-integration evil-collection-evil-mc evil-mc
>> evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make
>> evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars
>> evil-mc-known-commands evil-mc-common evil-exchange evil-lion evil-args
>> smartscan timeout ess ess-utils ess-custom evil-collection-unimpaired
>> evil-collection-vc-git evil-collection-tabulated-list
>> evil-collection-tab-bar evil-collection-simple evil-collection-replace
>> evil-collection-process-menu evil-collection-package-menu
>> evil-collection-minibuffer evil-collection-man evil-collection-kmacro
>> evil-collection-indent evil-collection-imenu evil-collection-help
>> evil-collection-flymake evil-collection-elisp-mode evil-collection-eldoc
>> evil-collection-elpaca evil-collection-dired evil-collection-diff-mode
>> evil-collection-custom evil-collection-compile evil-collection-comint
>> evil-collection-calendar evil-collection-buff-menu evil-collection
>> annalist sqlite3 sqlite3-api treebundel vc-git diff-mode track-changes
>> files-x git-link dired dired-loaddefs texfrag face-remap shr pixel-fill
>> kinsoku url-file puny svg dom preview latex latex-flymake flymake
>> project compile text-property-search comint ansi-osc tex-ispell
>> tex-style tex dbus xml crm texmathp auctex display-line-numbers
>> elec-pair lisp-mnt package browse-url xdg url-handlers xterm-color
>> edit-list-autoloads refine-autoloads list-utils-autoloads loop-autoloads
>> prompts-autoloads file-info-autoloads hydra-autoloads lv-autoloads
>> browse-at-remote-autoloads image-roll-autoloads
>> saveplace-pdf-view-autoloads pdfgrep-autoloads toc-mode-autoloads
>> scratch-autoloads persistent-scratch-autoloads exercism-autoloads
>> a-autoloads request-autoloads async-autoloads async-await-autoloads
>> promise-autoloads iter2-autoloads persist-autoloads
>> indent-bars-autoloads rainbow-delimiters-autoloads
>> rainbow-mode-autoloads mode-line-bell-autoloads powerthesaurus-autoloads
>> hydra lv jeison-autoloads ripgrep-autoloads wgrep-autoloads
>> vlf-autoloads gptai-autoloads popper-autoloads ctrlf-autoloads
>> nerd-icons-dired-autoloads nerd-icons-completion-autoloads
>> nerd-icons-autoloads disable-mouse-autoloads mingus-autoloads
>> libmpdee-autoloads mpdel-autoloads libmpdel-autoloads navigel-autoloads
>> tablist-autoloads posframe-autoloads esup-autoloads quickrun-autoloads
>> ht-autoloads ssh-config-mode-autoloads jq-mode-autoloads
>> json-mode-autoloads json-snatcher-autoloads yaml-mode-autoloads
>> toml-mode-autoloads highlight-escape-sequences-autoloads
>> highlight-autoloads highlight-numbers-autoloads parent-mode-autoloads
>> nix-mode-autoloads magit-section-autoloads llama-autoloads
>> sudo-edit-autoloads attrap-autoloads f-autoloads dash-autoloads
>> s-autoloads devdocs-autoloads mathjax-autoloads
>> evil-terminal-cursor-changer-autoloads evil-surround-autoloads
>> evil-visualstar-autoloads evil-commentary-autoloads evil-mc-autoloads
>> evil-exchange-autoloads evil-lion-autoloads evil-args-autoloads
>> smartscan-autoloads timeout-autoloads ess-autoloads
>> info-colors-autoloads evil-collection-autoloads annalist-autoloads
>> sqlite3-autoloads treebundel-autoloads git-link-autoloads
>> texfrag-autoloads auctex-autoloads tex-site xterm-color-autoloads ispell
>> which-func imenu man ansi-color autorevert filenotify cal-menu calendar
>> cal-loaddefs advice evil evil-integration evil-maps evil-commands reveal
>> evil-jumps evil-command-window evil-types evil-search evil-ex
>> evil-macros evil-repeat evil-states evil-core comp comp-cstr warnings
>> comp-run comp-common rx evil-common thingatpt rect evil-vars ring
>> undo-fu goto-chg evil-autoloads undo-fu-autoloads goto-chg-autoloads
>> transient pcase format-spec transient-autoloads general memoize
>> sanityinc-tomorrow-bright-theme color-theme-sanityinc-tomorrow color
>> minions compat general-autoloads memoize-autoloads
>> color-theme-sanityinc-tomorrow-autoloads minions-autoloads
>> el-patch-autoloads el-patch el-patch-stub edmacro kmacro vc
>> vc-dispatcher cl-extra help-mode elpaca-use-package use-package
>> use-package-ensure use-package-delight use-package-diminish
>> use-package-bind-key bind-key easy-mmode use-package-core
>> elpaca-use-package-autoloads elpaca-log elpaca-ui elpaca-menu-elpa
>> elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods
>> url-history url-cookie generate-lisp-file url-domsuf url-util url-parse
>> auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
>> map byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org
>> elpaca elpaca-process elpaca-autoloads early-init cus-edit pp cus-load
>> icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc
>> paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
>> mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd
>> tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
>> newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
>> rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
>> font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
>> simple cl-generic indonesian philippine cham georgian utf-8-lang
>> misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
>> cp51932 hebrew greek romanian slovak czech european ethiopic indian
>> cyrillic chinese composite emoji-zwj charscript charprop case-table
>> epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
>> loaddefs theme-loaddefs faces cus-face macroexp files window
>> text-properties overlay sha1 md5 base64 format env code-pages mule
>> custom widget keymap hashtable-print-readable backquote threads dbusbind
>> inotify dynamic-setting system-font-setting font-render-setting cairo
>> gtk pgtk lcms2 multi-tty move-toolbar make-network-process
>> tty-child-frames native-compile mps emacs)
>>
>> Memory information:
>> ((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0)
>>    (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0)
>>    (buffers 1000 0))
> 





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#77914; Package emacs. Full text available.

Message received at 77914 <at> debbugs.gnu.org:


Received: (at 77914) by debbugs.gnu.org; 20 Apr 2025 06:27:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Apr 20 02:27:47 2025
Received: from localhost ([127.0.0.1]:43893 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6O9b-0002M3-D2
	for submit <at> debbugs.gnu.org; Sun, 20 Apr 2025 02:27:47 -0400
Received: from relay8-d.mail.gandi.net ([2001:4b98:dc4:8::228]:33203)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <juri@HIDDEN>) id 1u6O9Y-0002LX-TQ
 for 77914 <at> debbugs.gnu.org; Sun, 20 Apr 2025 02:27:45 -0400
Received: by mail.gandi.net (Postfix) with ESMTPSA id 511F043B31;
 Sun, 20 Apr 2025 06:27:36 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Vincenzo Pupillo <v.pupillo@HIDDEN>
Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause
 rust-ts-mode lost all color
In-Reply-To: <3523927.LZWGnKmheA@fedora>
Organization: LINKOV.NET
References: <877c3gka72.fsf@HIDDEN> <3523927.LZWGnKmheA@fedora>
Date: Sun, 20 Apr 2025 09:15:51 +0300
Message-ID: <87mscbe5a8.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain
X-GND-State: clean
X-GND-Score: -100
X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvfeejudelucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufgjohhffffkfgggtgesthdtredttdertdenucfhrhhomheplfhurhhiucfnihhnkhhovhcuoehjuhhriheslhhinhhkohhvrdhnvghtqeenucggtffrrghtthgvrhhnpeelieevuedtheeftdeguddtieelheekgeehveeghedtgfeuueeivddvhfevkeevgfenucffohhmrghinhepghhnuhdrohhrghenucfkphepledurdduvdelrddutdehrdduudejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledurdduvdelrddutdehrdduudejpdhhvghlohepmhgrihhlrdhgrghnughirdhnvghtpdhmrghilhhfrhhomhepjhhurhhisehlihhnkhhovhdrnhgvthdpnhgspghrtghpthhtohepfedprhgtphhtthhopegvgigvtghvhiesghhmrghilhdrtghomhdprhgtphhtthhopeejjeeludegseguvggssghughhsrdhgnhhurdhorhhgpdhrtghpthhtohepvhdrphhuphhilhhlohesghhmrghilhdrtghomh
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 77914
Cc: Eval Exec <execvy@HIDDEN>, 77914 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

> If the attached file is correct, it appears to be a grammar bug (the tree-
> sitter-rust grammar). Take a look at the attached screenshot (libtree-
> sitter-0.25.2 and tree-sitter-rust v0.24.0)

Maybe this is related to Rust grammar version mismatch
where the current rust-ts-mode works only with
tree-sitter-rust v0.23.0:

https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00430.html




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#77914; Package emacs. Full text available.

Message received at 77914 <at> debbugs.gnu.org:


Received: (at 77914) by debbugs.gnu.org; 19 Apr 2025 22:12:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Apr 19 18:12:47 2025
Received: from localhost ([127.0.0.1]:39353 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6GQZ-0008CW-4I
	for submit <at> debbugs.gnu.org; Sat, 19 Apr 2025 18:12:47 -0400
Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]:60613)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <v.pupillo@HIDDEN>)
 id 1u6GQV-0008Bz-Nr
 for 77914 <at> debbugs.gnu.org; Sat, 19 Apr 2025 18:12:44 -0400
Received: by mail-wr1-x42d.google.com with SMTP id
 ffacd0b85a97d-39129fc51f8so2718989f8f.0
 for <77914 <at> debbugs.gnu.org>; Sat, 19 Apr 2025 15:12:43 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1745100757; x=1745705557; darn=debbugs.gnu.org;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc:subject:date
 :message-id:reply-to;
 bh=Cfjef2cNr8xZm1ZCRg1Jc2y8wUz4ws57nwmTuGnOroc=;
 b=RbNhA0Blpq94oPklvRytdfhaKFZG8s878S0zV2YZ09p0X0SKiRK+iuOF+X7U2wHLE/
 LCMUUGv9K/gqYQMt2Hy9gWJtIUN70ML1Ohh5gqCZMJRiaH5Di4/lh4AqYE9Nf5R8nN2D
 Dl/Tqwv/BwJr/HHL3YRPjgiUy2xJ2Bw8hmVJPjV2zA8SF7dTOOnYKM9MzXTX8GyORINI
 53II+jkRQKGxh0vrD12u6iLQ0YF+8ZUV4oxTpITEkcuVWPvwYv66SRYG9fm9vi6uXK3q
 FhljucoeTaH2/baE0xMbpl/wJFEGGaMxaokspX1NKPPSq+vNZEZ+hFtdseMesnfuy1Ur
 ONFg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1745100757; x=1745705557;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=Cfjef2cNr8xZm1ZCRg1Jc2y8wUz4ws57nwmTuGnOroc=;
 b=fTrSKlN5pw2WT8hxmKIbXS0Q5ZdMm44VEpv8NhcxepNYcaK+Nv/sWuniT3xIKTAiny
 jZmPpD9qeNqz10K9gMr3xYVu5joEYJMmosd0wPwxivmtodH/uc7QdL9o5UAMGbj2vTpm
 o823QcVXfeWGLWusL6jlg+FG2V889TgXd/30EdkSWVJtNpHKBeCMcWAWesc3gZ/7PZ0i
 fUFYD3mBbgavvE8lOatfkMGwJjo/9cgxme4YCgs9ifIukRjMN1P8yol/KXxUd7jIuroj
 FojI8dcfJC+yJRiwB3+8kxFsnPrwZJYDPQP30YIgvjgrsWQh6gkxKVEQu9x8p+yaKxIR
 hY7w==
X-Gm-Message-State: AOJu0YzJ9FtbPuJT06ERp04aXYgw6Ib/ZW9kWirRg8Bb1QAfjbGHefgL
 K+DmW76cvOGmbb8xh3rbDfU+3vVZpmYBaeDN/R/ZT8bUOPE5tGbxdltJZLpm
X-Gm-Gg: ASbGnctRorCC8rrwY+cYLMS++Xtc+R515wyCZjkxhGX5n973dYC4vE9UPoCBFXTdfkR
 CodPwu4ArSn96volEjBUHIlBDk3If5AK6rvaeW03OLMR6dBgVberO3u1+XanirSDpAbGIG6FOuQ
 XJKNybZGT/6M91G7QjXL+EUYOvtuoQXjnwOxW5Li7BbAOeASOiucifdqzwa1gXggBLvw7dLo2NB
 g9Ksw0PnnJMHZWGNmNoYqhFoQ+/QZh24x3nsXGPiFFMtJqKoIz5d6pra+3wNXoowAh+rfHVLSr1
 /ZqT0rSmv8QzHFC14PZ0EztgoCS/iLsTVZrY5iMf0C9+TH9yjOHk73QaFsageJsn7oiL1GYg7NZ
 fZZy3
X-Google-Smtp-Source: AGHT+IGzMHwHOvioJA8gXkxl12+5AGYU+O3CI5kiP7q8CftvOk0MwXCYF2cCviePsodM1DHQXak2DA==
X-Received: by 2002:a05:6000:2509:b0:39e:e75b:5cd with SMTP id
 ffacd0b85a97d-39efba2c98emr5983715f8f.3.1745100756515; 
 Sat, 19 Apr 2025 15:12:36 -0700 (PDT)
Received: from fedora.localnet (2-230-139-124.ip202.fastwebnet.it.
 [2.230.139.124]) by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-44044508a7dsm91161305e9.1.2025.04.19.15.12.35
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sat, 19 Apr 2025 15:12:35 -0700 (PDT)
From: Vincenzo Pupillo <v.pupillo@HIDDEN>
To: 77914 <at> debbugs.gnu.org, bug-gnu-emacs@HIDDEN
Subject: Re: bug#77914: 31.0.50;
 treesit-font-lock-level set to 4 cause rust-ts-mode lost all color
Date: Sun, 20 Apr 2025 00:12:34 +0200
Message-ID: <3523927.LZWGnKmheA@fedora>
In-Reply-To: <877c3gka72.fsf@HIDDEN>
References: <877c3gka72.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="nextPart7128439.9J7NaK4W3v"
Content-Transfer-Encoding: 7Bit
X-Debbugs-Envelope-To: 77914
Cc: Eval Exec <execvy@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

This is a multi-part message in MIME format.

--nextPart7128439.9J7NaK4W3v
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

If the attached file is correct, it appears to be a grammar bug (the tree-
sitter-rust grammar). Take a look at the attached screenshot (libtree-
sitter-0.25.2 and tree-sitter-rust v0.24.0)

Vincenzo

In data sabato 19 aprile 2025 07:10:57 Ora legale dell=E2=80=99Europa centr=
ale, Eval=20
Exec ha scritto:
> Hello,
> I'm visiting a rust file, when I set treesit-font-lock-level to 3, all
> color are good, when I set treesit-font-lock-level to 4, all color as
> lost.
> To reproduce this: use this rust file:
>=20
> Then eval:
> 1. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
> all color are lost.
>=20
> 2. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
> colors are good.
>=20
> 3. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
> all color are lost again.
>=20
>=20
> ```rust
>=20
> //! Primitive traits and types representing basic properties of types.
> //!
> //! Rust types can be classified in various useful ways according to
> //! their intrinsic properties. These classifications are represented
> //! as traits.
>=20
> #![stable(feature =3D "rust1", since =3D "1.0.0")]
>=20
> use crate::cell::UnsafeCell;
> use crate::cmp;
> use crate::fmt::Debug;
> use crate::hash::{Hash, Hasher};
>=20
> /// Implements a given marker trait for multiple types at the same time.
> ///
> /// The basic syntax looks like this:
> /// ```ignore private macro
> /// marker_impls! { MarkerTrait for u8, i8 }
> /// ```
> /// You can also implement `unsafe` traits
> /// ```ignore private macro
> /// marker_impls! { unsafe MarkerTrait for u8, i8 }
> /// ```
> /// Add attributes to all impls:
> /// ```ignore private macro
> /// marker_impls! {
> ///     #[allow(lint)]
> ///     #[unstable(feature =3D "marker_trait", issue =3D "none")]
> ///     MarkerTrait for u8, i8
> /// }
> /// ```
> /// And use generics:
> /// ```ignore private macro
> /// marker_impls! {
> ///     MarkerTrait for
> ///         u8, i8,
> ///         {T: ?Sized} *const T,
> ///         {T: ?Sized} *mut T,
> ///         {T: MarkerTrait} PhantomData<T>,
> ///         u32,
> /// }
> /// ```
> #[unstable(feature =3D "internal_impls_macro", issue =3D "none")]
> // Allow implementations of `UnsizedConstParamTy` even though std cannot =
use
> that feature. #[allow_internal_unstable(unsized_const_params)]
> macro marker_impls {
>     ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty $(,
> $($rest:tt)*)? ) =3D> { $(#[$($meta)*])* impl< $($($bounds)*)? > $Trait f=
or
> $T {}
>         marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? }
>     },
>     ( $(#[$($meta:tt)*])* $Trait:ident for ) =3D> {},
>=20
>     ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? $T=
:ty
> $(, $($rest:tt)*)? ) =3D> { $(#[$($meta)*])* unsafe impl< $($($bounds)*)?=
 >
> $Trait for $T {} marker_impls! { $(#[$($meta)*])* unsafe $Trait for
> $($($rest)*)? } },
>     ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) =3D> {},
> }
>=20
> /// Types that can be transferred across thread boundaries.
> ///
> /// This trait is automatically implemented when the compiler determines
> it's /// appropriate.
> ///
> /// An example of a non-`Send` type is the reference-counting pointer
> /// [`rc::Rc`][`Rc`]. If two threads attempt to clone [`Rc`]s that point =
to
> the same /// reference-counted value, they might try to update the
> reference count at the /// same time, which is [undefined behavior][ub]
> because [`Rc`] doesn't use atomic /// operations. Its cousin
> [`sync::Arc`][arc] does use atomic operations (incurring /// some overhea=
d)
> and thus is `Send`.
> ///
> /// See [the Nomicon](../../nomicon/send-and-sync.html) and the [`Sync`]
> trait for more details. ///
> /// [`Rc`]: ../../std/rc/struct.Rc.html
> /// [arc]: ../../std/sync/struct.Arc.html
> /// [ub]: ../../reference/behavior-considered-undefined.html
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> #[cfg_attr(not(test), rustc_diagnostic_item =3D "Send")]
> #[diagnostic::on_unimplemented(
>     message =3D "`{Self}` cannot be sent between threads safely",
>     label =3D "`{Self}` cannot be sent between threads safely"
> )]
> pub unsafe auto trait Send {
>     // empty.
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> !Send for *const T {}
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> !Send for *mut T {}
>=20
> // Most instances arise automatically, but this instance is needed to link
> up `T: Sync` with // `&T: Send` (and it also removes the unsound default
> instance `T Send` -> `&T: Send` that would // otherwise exist).
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> unsafe impl<T: Sync + ?Sized> Send for &T {}
>=20
> /// Types with a constant size known at compile time.
> ///
> /// All type parameters have an implicit bound of `Sized`. The special
> syntax /// `?Sized` can be used to remove this bound if it's not
> appropriate. ///
> /// ```
> /// # #![allow(dead_code)]
> /// struct Foo<T>(T);
> /// struct Bar<T: ?Sized>(T);
> ///
> /// // struct FooUse(Foo<[i32]>); // error: Sized is not implemented for
> [i32] /// struct BarUse(Bar<[i32]>); // OK
> /// ```
> ///
> /// The one exception is the implicit `Self` type of a trait. A trait does
> not /// have an implicit `Sized` bound as this is incompatible with [trait
> object]s /// where, by definition, the trait needs to work with all
> possible implementors, /// and thus could be any size.
> ///
> /// Although Rust will let you bind `Sized` to a trait, you won't
> /// be able to use it to form a trait object later:
> ///
> /// ```
> /// # #![allow(unused_variables)]
> /// trait Foo { }
> /// trait Bar: Sized { }
> ///
> /// struct Impl;
> /// impl Foo for Impl { }
> /// impl Bar for Impl { }
> ///
> /// let x: &dyn Foo =3D &Impl;    // OK
> /// // let y: &dyn Bar =3D &Impl; // error: the trait `Bar` cannot
> ///                             // be made into an object
> /// ```
> ///
> /// [trait object]: ../../book/ch17-02-trait-objects.html
> #[doc(alias =3D "?", alias =3D "?Sized")]
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> #[lang =3D "sized"]
> #[diagnostic::on_unimplemented(
>     message =3D "the size for values of type `{Self}` cannot be known at
> compilation time", label =3D "doesn't have a size known at compile-time"
> )]
> #[fundamental] // for Default, for example, which requires that `[T]:
> !Default` be evaluatable #[rustc_specialization_trait]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> #[rustc_coinductive]
> pub trait Sized {
>     // Empty.
> }
>=20
> /// Types that can be "unsized" to a dynamically-sized type.
> ///
> /// For example, the sized array type `[i8; 2]` implements `Unsize<[i8]>`
> and /// `Unsize<dyn fmt::Debug>`.
> ///
> /// All implementations of `Unsize` are provided automatically by the
> compiler. /// Those implementations are:
> ///
> /// - Arrays `[T; N]` implement `Unsize<[T]>`.
> /// - A type implements `Unsize<dyn Trait + 'a>` if all of these conditio=
ns
> are met: ///   - The type implements `Trait`.
> ///   - `Trait` is dyn-compatible[^1].
> ///   - The type is sized.
> ///   - The type outlives `'a`.
> /// - Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize<Foo<..., U1,
> ..., Un, ...>>` /// where any number of (type and const) parameters may be
> changed if all of these conditions /// are met:
> ///   - Only the last field of `Foo` has a type involving the parameters
> `T1`, ..., `Tn`. ///   - All other parameters of the struct are equal.
> ///   - `Field<T1, ..., Tn>: Unsize<Field<U1, ..., Un>>`, where `Field<..=
=2E>`
> stands for the actual ///     type of the struct's last field.
> ///
> /// `Unsize` is used along with [`ops::CoerceUnsized`] to allow
> /// "user-defined" containers such as [`Rc`] to contain dynamically-sized
> /// types. See the [DST coercion RFC][RFC982] and [the nomicon entry on
> coercion][nomicon-coerce] /// for more details.
> ///
> /// [`ops::CoerceUnsized`]: crate::ops::CoerceUnsized
> /// [`Rc`]: ../../std/rc/struct.Rc.html
> /// [RFC982]:
> https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md /=
//
> [nomicon-coerce]: ../../nomicon/coercions.html
> /// [^1]: Formerly known as *object safe*.
> #[unstable(feature =3D "unsize", issue =3D "18598")]
> #[lang =3D "unsize"]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait Unsize<T: ?Sized> {
>     // Empty.
> }
>=20
> /// Required trait for constants used in pattern matches.
> ///
> /// Any type that derives `PartialEq` automatically implements this trait,
> /// *regardless* of whether its type-parameters implement `PartialEq`.
> ///
> /// If a `const` item contains some type that does not implement this tra=
it,
> /// then that type either (1.) does not implement `PartialEq` (which means
> the /// constant will not provide that comparison method, which code
> generation /// assumes is available), or (2.) it implements *its own*
> version of /// `PartialEq` (which we assume does not conform to a
> structural-equality /// comparison).
> ///
> /// In either of the two scenarios above, we reject usage of such a const=
ant
> in /// a pattern match.
> ///
> /// See also the [structural match RFC][RFC1445], and [issue 63438] which
> /// motivated migrating from an attribute-based design to this trait.
> ///
> /// [RFC1445]:
> https://github.com/rust-lang/rfcs/blob/master/text/1445-restrict-constant=
s-> in-patterns.md /// [issue 63438]:
> https://github.com/rust-lang/rust/issues/63438
> #[unstable(feature =3D "structural_match", issue =3D "31434")]
> #[diagnostic::on_unimplemented(message =3D "the type `{Self}` does not
> `#[derive(PartialEq)]`")] #[lang =3D "structural_peq"]
> pub trait StructuralPartialEq {
>     // Empty.
> }
>=20
> marker_impls! {
>     #[unstable(feature =3D "structural_match", issue =3D "31434")]
>     StructuralPartialEq for
>         usize, u8, u16, u32, u64, u128,
>         isize, i8, i16, i32, i64, i128,
>         bool,
>         char,
>         str /* Technically requires `[u8]: StructuralPartialEq` */,
>         (),
>         {T, const N: usize} [T; N],
>         {T} [T],
>         {T: ?Sized} &T,
> }
>=20
> /// Types whose values can be duplicated simply by copying bits.
> ///
> /// By default, variable bindings have 'move semantics.' In other
> /// words:
> ///
> /// ```
> /// #[derive(Debug)]
> /// struct Foo;
> ///
> /// let x =3D Foo;
> ///
> /// let y =3D x;
> ///
> /// // `x` has moved into `y`, and so cannot be used
> ///
> /// // println!("{x:?}"); // error: use of moved value
> /// ```
> ///
> /// However, if a type implements `Copy`, it instead has 'copy semantics':
> ///
> /// ```
> /// // We can derive a `Copy` implementation. `Clone` is also required, as
> it's /// // a supertrait of `Copy`.
> /// #[derive(Debug, Copy, Clone)]
> /// struct Foo;
> ///
> /// let x =3D Foo;
> ///
> /// let y =3D x;
> ///
> /// // `y` is a copy of `x`
> ///
> /// println!("{x:?}"); // A-OK!
> /// ```
> ///
> /// It's important to note that in these two examples, the only difference
> is whether you /// are allowed to access `x` after the assignment. Under
> the hood, both a copy and a move /// can result in bits being copied in
> memory, although this is sometimes optimized away. ///
> /// ## How can I implement `Copy`?
> ///
> /// There are two ways to implement `Copy` on your type. The simplest is =
to
> use `derive`: ///
> /// ```
> /// #[derive(Copy, Clone)]
> /// struct MyStruct;
> /// ```
> ///
> /// You can also implement `Copy` and `Clone` manually:
> ///
> /// ```
> /// struct MyStruct;
> ///
> /// impl Copy for MyStruct { }
> ///
> /// impl Clone for MyStruct {
> ///     fn clone(&self) -> MyStruct {
> ///         *self
> ///     }
> /// }
> /// ```
> ///
> /// There is a small difference between the two. The `derive` strategy wi=
ll
> also place a `Copy` /// bound on type parameters:
> ///
> /// ```
> /// #[derive(Clone)]
> /// struct MyStruct<T>(T);
> ///
> /// impl<T: Copy> Copy for MyStruct<T> { }
> /// ```
> ///
> /// This isn't always desired. For example, shared references (`&T`) can =
be
> copied regardless of /// whether `T` is `Copy`. Likewise, a generic struct
> containing markers such as [`PhantomData`] /// could potentially be
> duplicated with a bit-wise copy.
> ///
> /// ## What's the difference between `Copy` and `Clone`?
> ///
> /// Copies happen implicitly, for example as part of an assignment `y =3D=
 x`.
> The behavior of /// `Copy` is not overloadable; it is always a simple
> bit-wise copy. ///
> /// Cloning is an explicit action, `x.clone()`. The implementation of
> [`Clone`] can /// provide any type-specific behavior necessary to duplica=
te
> values safely. For example, /// the implementation of [`Clone`] for
> [`String`] needs to copy the pointed-to string /// buffer in the heap. A
> simple bitwise copy of [`String`] values would merely copy the /// pointe=
r,
> leading to a double free down the line. For this reason, [`String`] is
> [`Clone`] /// but not `Copy`.
> ///
> /// [`Clone`] is a supertrait of `Copy`, so everything which is `Copy` mu=
st
> also implement /// [`Clone`]. If a type is `Copy` then its [`Clone`]
> implementation only needs to return `*self` /// (see the example above).
> ///
> /// ## When can my type be `Copy`?
> ///
> /// A type can implement `Copy` if all of its components implement `Copy`.
> For example, this /// struct can be `Copy`:
> ///
> /// ```
> /// # #[allow(dead_code)]
> /// #[derive(Copy, Clone)]
> /// struct Point {
> ///    x: i32,
> ///    y: i32,
> /// }
> /// ```
> ///
> /// A struct can be `Copy`, and [`i32`] is `Copy`, therefore `Point` is
> eligible to be `Copy`. /// By contrast, consider
> ///
> /// ```
> /// # #![allow(dead_code)]
> /// # struct Point;
> /// struct PointList {
> ///     points: Vec<Point>,
> /// }
> /// ```
> ///
> /// The struct `PointList` cannot implement `Copy`, because [`Vec<T>`] is
> not `Copy`. If we /// attempt to derive a `Copy` implementation, we'll get
> an error: ///
> /// ```text
> /// the trait `Copy` cannot be implemented for this type; field `points`
> does not implement `Copy` /// ```
> ///
> /// Shared references (`&T`) are also `Copy`, so a type can be `Copy`, ev=
en
> when it holds /// shared references of types `T` that are *not* `Copy`.
> Consider the following struct, /// which can implement `Copy`, because it
> only holds a *shared reference* to our non-`Copy` /// type `PointList` fr=
om
> above:
> ///
> /// ```
> /// # #![allow(dead_code)]
> /// # struct PointList;
> /// #[derive(Copy, Clone)]
> /// struct PointListWrapper<'a> {
> ///     point_list_ref: &'a PointList,
> /// }
> /// ```
> ///
> /// ## When *can't* my type be `Copy`?
> ///
> /// Some types can't be copied safely. For example, copying `&mut T` would
> create an aliased /// mutable reference. Copying [`String`] would duplica=
te
> responsibility for managing the /// [`String`]'s buffer, leading to a
> double free.
> ///
> /// Generalizing the latter case, any type implementing [`Drop`] can't be
> `Copy`, because it's /// managing some resource besides its own
> [`size_of::<T>`] bytes. ///
> /// If you try to implement `Copy` on a struct or enum containing non-`Co=
py`
> data, you will get /// the error [E0204].
> ///
> /// [E0204]: ../../error_codes/E0204.html
> ///
> /// ## When *should* my type be `Copy`?
> ///
> /// Generally speaking, if your type _can_ implement `Copy`, it should. K=
eep
> in mind, though, /// that implementing `Copy` is part of the public API of
> your type. If the type might become /// non-`Copy` in the future, it could
> be prudent to omit the `Copy` implementation now, to /// avoid a breaking
> API change.
> ///
> /// ## Additional implementors
> ///
> /// In addition to the [implementors listed below][impls],
> /// the following types also implement `Copy`:
> ///
> /// * Function item types (i.e., the distinct types defined for each
> function) /// * Function pointer types (e.g., `fn() -> i32`)
> /// * Closure types, if they capture no value from the environment
> ///   or if all such captured values implement `Copy` themselves.
> ///   Note that variables captured by shared reference always implement
> `Copy` ///   (even if the referent doesn't),
> ///   while variables captured by mutable reference never implement `Copy=
`.
> ///
> /// [`Vec<T>`]: ../../std/vec/struct.Vec.html
> /// [`String`]: ../../std/string/struct.String.html
> /// [`size_of::<T>`]: crate::mem::size_of
> /// [impls]: #implementors
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> #[lang =3D "copy"]
> // FIXME(matthewjasper) This allows copying a type that doesn't implement
> // `Copy` because of unsatisfied lifetime bounds (copying `A<'_>` when on=
ly
> // `A<'static>: Copy` and `A<'_>: Clone`).
> // We have this attribute here for now only because there are quite a few
> // existing specializations on `Copy` that already exist in the standard
> // library, and there's no way to safely have this behavior right now.
> #[rustc_unsafe_specialization_marker]
> #[rustc_diagnostic_item =3D "Copy"]
> pub trait Copy: Clone {
>     // Empty.
> }
>=20
> /// Derive macro generating an impl of the trait `Copy`.
> #[rustc_builtin_macro]
> #[stable(feature =3D "builtin_macro_prelude", since =3D "1.38.0")]
> #[allow_internal_unstable(core_intrinsics, derive_clone_copy)]
> pub macro Copy($item:item) {
>     /* compiler built-in */
> }
>=20
> // Implementations of `Copy` for primitive types.
> //
> // Implementations that cannot be described in Rust
> // are implemented in `traits::SelectionContext::copy_clone_conditions()`
> // in `rustc_trait_selection`.
> marker_impls! {
>     #[stable(feature =3D "rust1", since =3D "1.0.0")]
>     Copy for
>         usize, u8, u16, u32, u64, u128,
>         isize, i8, i16, i32, i64, i128,
>         f16, f32, f64, f128,
>         bool, char,
>         {T: ?Sized} *const T,
>         {T: ?Sized} *mut T,
>=20
> }
>=20
> #[unstable(feature =3D "never_type", issue =3D "35121")]
> impl Copy for ! {}
>=20
> /// Shared references can be copied, but mutable references *cannot*!
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Copy for &T {}
>=20
> /// Types for which it is safe to share references between threads.
> ///
> /// This trait is automatically implemented when the compiler determines
> /// it's appropriate.
> ///
> /// The precise definition is: a type `T` is [`Sync`] if and only if `&T`=
 is
> /// [`Send`]. In other words, if there is no possibility of
> /// [undefined behavior][ub] (including data races) when passing
> /// `&T` references between threads.
> ///
> /// As one would expect, primitive types like [`u8`] and [`f64`]
> /// are all [`Sync`], and so are simple aggregate types containing them,
> /// like tuples, structs and enums. More examples of basic [`Sync`]
> /// types include "immutable" types like `&T`, and those with simple
> /// inherited mutability, such as [`Box<T>`][box], [`Vec<T>`][vec] and
> /// most other collection types. (Generic parameters need to be [`Sync`]
> /// for their container to be [`Sync`].)
> ///
> /// A somewhat surprising consequence of the definition is that `&mut T`
> /// is `Sync` (if `T` is `Sync`) even though it seems like that might
> /// provide unsynchronized mutation. The trick is that a mutable
> /// reference behind a shared reference (that is, `& &mut T`)
> /// becomes read-only, as if it were a `& &T`. Hence there is no risk
> /// of a data race.
> ///
> /// A shorter overview of how [`Sync`] and [`Send`] relate to referencing:
> /// * `&T` is [`Send`] if and only if `T` is [`Sync`]
> /// * `&mut T` is [`Send`] if and only if `T` is [`Send`]
> /// * `&T` and `&mut T` are [`Sync`] if and only if `T` is [`Sync`]
> ///
> /// Types that are not `Sync` are those that have "interior
> /// mutability" in a non-thread-safe form, such as [`Cell`][cell]
> /// and [`RefCell`][refcell]. These types allow for mutation of
> /// their contents even through an immutable, shared reference. For
> /// example the `set` method on [`Cell<T>`][cell] takes `&self`, so it
> requires /// only a shared reference [`&Cell<T>`][cell]. The method
> performs no /// synchronization, thus [`Cell`][cell] cannot be `Sync`.
> ///
> /// Another example of a non-`Sync` type is the reference-counting
> /// pointer [`Rc`][rc]. Given any reference [`&Rc<T>`][rc], you can clone
> /// a new [`Rc<T>`][rc], modifying the reference counts in a non-atomic w=
ay.
> ///
> /// For cases when one does need thread-safe interior mutability,
> /// Rust provides [atomic data types], as well as explicit locking via
> /// [`sync::Mutex`][mutex] and [`sync::RwLock`][rwlock]. These types
> /// ensure that any mutation cannot cause data races, hence the types
> /// are `Sync`. Likewise, [`sync::Arc`][arc] provides a thread-safe
> /// analogue of [`Rc`][rc].
> ///
> /// Any types with interior mutability must also use the
> /// [`cell::UnsafeCell`][unsafecell] wrapper around the value(s) which
> /// can be mutated through a shared reference. Failing to doing this is
> /// [undefined behavior][ub]. For example, [`transmute`][transmute]-ing
> /// from `&T` to `&mut T` is invalid.
> ///
> /// See [the Nomicon][nomicon-send-and-sync] for more details about `Sync=
`.
> ///
> /// [box]: ../../std/boxed/struct.Box.html
> /// [vec]: ../../std/vec/struct.Vec.html
> /// [cell]: crate::cell::Cell
> /// [refcell]: crate::cell::RefCell
> /// [rc]: ../../std/rc/struct.Rc.html
> /// [arc]: ../../std/sync/struct.Arc.html
> /// [atomic data types]: crate::sync::atomic
> /// [mutex]: ../../std/sync/struct.Mutex.html
> /// [rwlock]: ../../std/sync/struct.RwLock.html
> /// [unsafecell]: crate::cell::UnsafeCell
> /// [ub]: ../../reference/behavior-considered-undefined.html
> /// [transmute]: crate::mem::transmute
> /// [nomicon-send-and-sync]: ../../nomicon/send-and-sync.html
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> #[cfg_attr(not(test), rustc_diagnostic_item =3D "Sync")]
> #[lang =3D "sync"]
> #[rustc_on_unimplemented(
>     on(
>         _Self =3D "core::cell::once::OnceCell<T>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::OnceLock` instead" ),
>     on(
>         _Self =3D "core::cell::Cell<u8>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead=
",
> ),
>     on(
>         _Self =3D "core::cell::Cell<u16>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<u32>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<u64>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<usize>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<i8>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead=
",
> ),
>     on(
>         _Self =3D "core::cell::Cell<i16>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<i32>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<i64>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<isize>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<bool>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool`
> instead", ),
>     on(
>         all(
>             _Self =3D "core::cell::Cell<T>",
>             not(_Self =3D "core::cell::Cell<u8>"),
>             not(_Self =3D "core::cell::Cell<u16>"),
>             not(_Self =3D "core::cell::Cell<u32>"),
>             not(_Self =3D "core::cell::Cell<u64>"),
>             not(_Self =3D "core::cell::Cell<usize>"),
>             not(_Self =3D "core::cell::Cell<i8>"),
>             not(_Self =3D "core::cell::Cell<i16>"),
>             not(_Self =3D "core::cell::Cell<i32>"),
>             not(_Self =3D "core::cell::Cell<i64>"),
>             not(_Self =3D "core::cell::Cell<isize>"),
>             not(_Self =3D "core::cell::Cell<bool>")
>         ),
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock`", ),
>     on(
>         _Self =3D "core::cell::RefCell<T>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` instead", ),
>     message =3D "`{Self}` cannot be shared between threads safely",
>     label =3D "`{Self}` cannot be shared between threads safely"
> )]
> pub unsafe auto trait Sync {
>     // FIXME(estebank): once support to add notes in
> `rustc_on_unimplemented` // lands in beta, and it has been extended to
> check whether a closure is // anywhere in the requirement chain, extend it
> as such (#48534): // ```
>     // on(
>     //     closure,
>     //     note=3D"`{Self}` cannot be shared safely, consider marking the
> closure `move`" // ),
>     // ```
>=20
>     // Empty
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> !Sync for *const T {}
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> !Sync for *mut T {}
>=20
> /// Zero-sized type used to mark things that "act like" they own a `T`.
> ///
> /// Adding a `PhantomData<T>` field to your type tells the compiler that
> your /// type acts as though it stores a value of type `T`, even though it
> doesn't /// really. This information is used when computing certain safety
> properties. ///
> /// For a more in-depth explanation of how to use `PhantomData<T>`, please
> see /// [the Nomicon](../../nomicon/phantom-data.html).
> ///
> /// # A ghastly note =F0=9F=91=BB=F0=9F=91=BB=F0=9F=91=BB
> ///
> /// Though they both have scary names, `PhantomData` and 'phantom types' =
are
> /// related, but not identical. A phantom type parameter is simply a type
> /// parameter which is never used. In Rust, this often causes the compiler
> to /// complain, and the solution is to add a "dummy" use by way of
> `PhantomData`. ///
> /// # Examples
> ///
> /// ## Unused lifetime parameters
> ///
> /// Perhaps the most common use case for `PhantomData` is a struct that h=
as
> an /// unused lifetime parameter, typically as part of some unsafe code.
> For /// example, here is a struct `Slice` that has two pointers of type
> `*const T`, /// presumably pointing into an array somewhere:
> ///
> /// ```compile_fail,E0392
> /// struct Slice<'a, T> {
> ///     start: *const T,
> ///     end: *const T,
> /// }
> /// ```
> ///
> /// The intention is that the underlying data is only valid for the
> /// lifetime `'a`, so `Slice` should not outlive `'a`. However, this
> /// intent is not expressed in the code, since there are no uses of
> /// the lifetime `'a` and hence it is not clear what data it applies
> /// to. We can correct this by telling the compiler to act *as if* the
> /// `Slice` struct contained a reference `&'a T`:
> ///
> /// ```
> /// use std::marker::PhantomData;
> ///
> /// # #[allow(dead_code)]
> /// struct Slice<'a, T> {
> ///     start: *const T,
> ///     end: *const T,
> ///     phantom: PhantomData<&'a T>,
> /// }
> /// ```
> ///
> /// This also in turn infers the lifetime bound `T: 'a`, indicating
> /// that any references in `T` are valid over the lifetime `'a`.
> ///
> /// When initializing a `Slice` you simply provide the value
> /// `PhantomData` for the field `phantom`:
> ///
> /// ```
> /// # #![allow(dead_code)]
> /// # use std::marker::PhantomData;
> /// # struct Slice<'a, T> {
> /// #     start: *const T,
> /// #     end: *const T,
> /// #     phantom: PhantomData<&'a T>,
> /// # }
> /// fn borrow_vec<T>(vec: &Vec<T>) -> Slice<'_, T> {
> ///     let ptr =3D vec.as_ptr();
> ///     Slice {
> ///         start: ptr,
> ///         end: unsafe { ptr.add(vec.len()) },
> ///         phantom: PhantomData,
> ///     }
> /// }
> /// ```
> ///
> /// ## Unused type parameters
> ///
> /// It sometimes happens that you have unused type parameters which
> /// indicate what type of data a struct is "tied" to, even though that
> /// data is not actually found in the struct itself. Here is an
> /// example where this arises with [FFI]. The foreign interface uses
> /// handles of type `*mut ()` to refer to Rust values of different
> /// types. We track the Rust type using a phantom type parameter on
> /// the struct `ExternalResource` which wraps a handle.
> ///
> /// [FFI]:
> ../../book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-extern=
al
> -code ///
> /// ```
> /// # #![allow(dead_code)]
> /// # trait ResType { }
> /// # struct ParamType;
> /// # mod foreign_lib {
> /// #     pub fn new(_: usize) -> *mut () { 42 as *mut () }
> /// #     pub fn do_stuff(_: *mut (), _: usize) {}
> /// # }
> /// # fn convert_params(_: ParamType) -> usize { 42 }
> /// use std::marker::PhantomData;
> /// use std::mem;
> ///
> /// struct ExternalResource<R> {
> ///    resource_handle: *mut (),
> ///    resource_type: PhantomData<R>,
> /// }
> ///
> /// impl<R: ResType> ExternalResource<R> {
> ///     fn new() -> Self {
> ///         let size_of_res =3D mem::size_of::<R>();
> ///         Self {
> ///             resource_handle: foreign_lib::new(size_of_res),
> ///             resource_type: PhantomData,
> ///         }
> ///     }
> ///
> ///     fn do_stuff(&self, param: ParamType) {
> ///         let foreign_params =3D convert_params(param);
> ///         foreign_lib::do_stuff(self.resource_handle, foreign_params);
> ///     }
> /// }
> /// ```
> ///
> /// ## Ownership and the drop check
> ///
> /// The exact interaction of `PhantomData` with drop check **may change in
> the future**. ///
> /// Currently, adding a field of type `PhantomData<T>` indicates that your
> type *owns* data of type /// `T` in very rare circumstances. This in turn
> has effects on the Rust compiler's [drop check] /// analysis. For the exa=
ct
> rules, see the [drop check] documentation. ///
> /// ## Layout
> ///
> /// For all `T`, the following are guaranteed:
> /// * `size_of::<PhantomData<T>>() =3D=3D 0`
> /// * `align_of::<PhantomData<T>>() =3D=3D 1`
> ///
> /// [drop check]: Drop#drop-check
> #[lang =3D "phantom_data"]
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> pub struct PhantomData<T: ?Sized>;
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Hash for PhantomData<T> {
>     #[inline]
>     fn hash<H: Hasher>(&self, _: &mut H) {}
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> cmp::PartialEq for PhantomData<T> {
>     fn eq(&self, _other: &PhantomData<T>) -> bool {
>         true
>     }
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> cmp::Eq for PhantomData<T> {}
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> cmp::PartialOrd for PhantomData<T> {
>     fn partial_cmp(&self, _other: &PhantomData<T>) -> Option<cmp::Orderin=
g>
> { Option::Some(cmp::Ordering::Equal)
>     }
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> cmp::Ord for PhantomData<T> {
>     fn cmp(&self, _other: &PhantomData<T>) -> cmp::Ordering {
>         cmp::Ordering::Equal
>     }
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Copy for PhantomData<T> {}
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Clone for PhantomData<T> {
>     fn clone(&self) -> Self {
>         Self
>     }
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Default for PhantomData<T> {
>     fn default() -> Self {
>         Self
>     }
> }
>=20
> #[unstable(feature =3D "structural_match", issue =3D "31434")]
> impl<T: ?Sized> StructuralPartialEq for PhantomData<T> {}
>=20
> /// Compiler-internal trait used to indicate the type of enum discriminan=
ts.
> ///
> /// This trait is automatically implemented for every type and does not a=
dd
> any /// guarantees to [`mem::Discriminant`]. It is **undefined behavior**
> to transmute /// between `DiscriminantKind::Discriminant` and
> `mem::Discriminant`. ///
> /// [`mem::Discriminant`]: crate::mem::Discriminant
> #[unstable(
>     feature =3D "discriminant_kind",
>     issue =3D "none",
>     reason =3D "this trait is unlikely to ever be stabilized, use
> `mem::discriminant` instead" )]
> #[lang =3D "discriminant_kind"]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait DiscriminantKind {
>     /// The type of the discriminant, which must satisfy the trait
>     /// bounds required by `mem::Discriminant`.
>     #[lang =3D "discriminant_type"]
>     type Discriminant: Clone + Copy + Debug + Eq + PartialEq + Hash + Sen=
d +
> Sync + Unpin; }
>=20
> /// Used to determine whether a type contains
> /// any `UnsafeCell` internally, but not through an indirection.
> /// This affects, for example, whether a `static` of that type is
> /// placed in read-only static memory or writable static memory.
> /// This can be used to declare that a constant with a generic type
> /// will not contain interior mutability, and subsequently allow
> /// placing the constant behind references.
> ///
> /// # Safety
> ///
> /// This trait is a core part of the language, it is just expressed as a
> trait in libcore for /// convenience. Do *not* implement it for other
> types.
> // FIXME: Eventually this trait should become `#[rustc_deny_explicit_impl=
]`.
> // That requires porting the impls below to native internal impls. #[lang=
 =3D
> "freeze"]
> #[unstable(feature =3D "freeze", issue =3D "121675")]
> pub unsafe auto trait Freeze {}
>=20
> #[unstable(feature =3D "freeze", issue =3D "121675")]
> impl<T: ?Sized> !Freeze for UnsafeCell<T> {}
> marker_impls! {
>     #[unstable(feature =3D "freeze", issue =3D "121675")]
>     unsafe Freeze for
>         {T: ?Sized} PhantomData<T>,
>         {T: ?Sized} *const T,
>         {T: ?Sized} *mut T,
>         {T: ?Sized} &T,
>         {T: ?Sized} &mut T,
> }
>=20
> /// Types that do not require any pinning guarantees.
> ///
> /// For information on what "pinning" is, see the [`pin` module]
> documentation. ///
> /// Implementing the `Unpin` trait for `T` expresses the fact that `T` is
> pinning-agnostic: /// it shall not expose nor rely on any pinning
> guarantees. This, in turn, means that a /// `Pin`-wrapped pointer to such=
 a
> type can feature a *fully unrestricted* API. /// In other words, if `T:
> Unpin`, a value of type `T` will *not* be bound by the invariants /// whi=
ch
> pinning otherwise offers, even when "pinned" by a [`Pin<Ptr>`] pointing at
> it. /// When a value of type `T` is pointed at by a [`Pin<Ptr>`], [`Pin`]
> will not restrict access /// to the pointee value like it normally would,
> thus allowing the user to do anything that they /// normally could with a
> non-[`Pin`]-wrapped `Ptr` to that value. ///
> /// The idea of this trait is to alleviate the reduced ergonomics of APIs
> that require the use /// of [`Pin`] for soundness for some types, but whi=
ch
> also want to be used by other types that /// don't care about pinning. The
> prime example of such an API is [`Future::poll`]. There are many ///
> [`Future`] types that don't care about pinning. These futures can impleme=
nt
> `Unpin` and /// therefore get around the pinning related restrictions in
> the API, while still allowing the /// subset of [`Future`]s which *do*
> require pinning to be implemented soundly. ///
> /// For more discussion on the consequences of [`Unpin`] within the wider
> scope of the pinning /// system, see the [section about `Unpin`] in the
> [`pin` module]. ///
> /// `Unpin` has no consequence at all for non-pinned data. In particular,
> [`mem::replace`] happily /// moves `!Unpin` data, which would be immovable
> when pinned ([`mem::replace`] works for any /// `&mut T`, not just when `=
T:
> Unpin`).
> ///
> /// *However*, you cannot use [`mem::replace`] on `!Unpin` data which is
> *pinned* by being wrapped /// inside a [`Pin<Ptr>`] pointing at it. This =
is
> because you cannot (safely) use a /// [`Pin<Ptr>`] to get a `&mut T` to i=
ts
> pointee value, which you would need to call /// [`mem::replace`], and
> *that* is what makes this system work.
> ///
> /// So this, for example, can only be done on types implementing `Unpin`:
> ///
> /// ```rust
> /// # #![allow(unused_must_use)]
> /// use std::mem;
> /// use std::pin::Pin;
> ///
> /// let mut string =3D "this".to_string();
> /// let mut pinned_string =3D Pin::new(&mut string);
> ///
> /// // We need a mutable reference to call `mem::replace`.
> /// // We can obtain such a reference by (implicitly) invoking
> `Pin::deref_mut`, /// // but that is only possible because `String`
> implements `Unpin`. /// mem::replace(&mut *pinned_string,
> "other".to_string());
> /// ```
> ///
> /// This trait is automatically implemented for almost every type. The
> compiler is free /// to take the conservative stance of marking types as
> [`Unpin`] so long as all of the types that /// compose its fields are also
> [`Unpin`]. This is because if a type implements [`Unpin`], then it /// is
> unsound for that type's implementation to rely on pinning-related
> guarantees for soundness, /// *even* when viewed through a "pinning"
> pointer! It is the responsibility of the implementor of /// a type that
> relies upon pinning for soundness to ensure that type is *not* marked as
> [`Unpin`] /// by adding [`PhantomPinned`] field. For more details, see the
> [`pin` module] docs. ///
> /// [`mem::replace`]: crate::mem::replace "mem replace"
> /// [`Future`]: crate::future::Future "Future"
> /// [`Future::poll`]: crate::future::Future::poll "Future poll"
> /// [`Pin`]: crate::pin::Pin "Pin"
> /// [`Pin<Ptr>`]: crate::pin::Pin "Pin"
> /// [`pin` module]: crate::pin "pin module"
> /// [section about `Unpin`]: crate::pin#unpin "pin module docs about unpi=
n"
> /// [`unsafe`]: ../../std/keyword.unsafe.html "keyword unsafe"
> #[stable(feature =3D "pin", since =3D "1.33.0")]
> #[diagnostic::on_unimplemented(
>     note =3D "consider using the `pin!` macro\nconsider using `Box::pin` =
if
> you need to access the pinned value outside of the current scope", message
> =3D "`{Self}` cannot be unpinned"
> )]
> #[lang =3D "unpin"]
> pub auto trait Unpin {}
>=20
> /// A marker type which does not implement `Unpin`.
> ///
> /// If a type contains a `PhantomPinned`, it will not implement `Unpin` by
> default. #[stable(feature =3D "pin", since =3D "1.33.0")]
> #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Has=
h)]
> pub struct PhantomPinned;
>=20
> #[stable(feature =3D "pin", since =3D "1.33.0")]
> impl !Unpin for PhantomPinned {}
>=20
> marker_impls! {
>     #[stable(feature =3D "pin", since =3D "1.33.0")]
>     Unpin for
>         {T: ?Sized} &T,
>         {T: ?Sized} &mut T,
> }
>=20
> marker_impls! {
>     #[stable(feature =3D "pin_raw", since =3D "1.38.0")]
>     Unpin for
>         {T: ?Sized} *const T,
>         {T: ?Sized} *mut T,
> }
>=20
> /// A marker for types that can be dropped.
> ///
> /// This should be used for `~const` bounds,
> /// as non-const bounds will always hold for every type.
> #[unstable(feature =3D "const_destruct", issue =3D "133214")]
> #[lang =3D "destruct"]
> #[rustc_on_unimplemented(message =3D "can't drop `{Self}`", append_const_=
msg)]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> #[cfg_attr(not(bootstrap), const_trait)]
> pub trait Destruct {}
>=20
> /// A marker for tuple types.
> ///
> /// The implementation of this trait is built-in and cannot be implemented
> /// for any user type.
> #[unstable(feature =3D "tuple_trait", issue =3D "none")]
> #[lang =3D "tuple_trait"]
> #[diagnostic::on_unimplemented(message =3D "`{Self}` is not a tuple")]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait Tuple {}
>=20
> /// A marker for pointer-like types.
> ///
> /// This trait can only be implemented for types that are certain to have
> /// the same size and alignment as a [`usize`] or [`*const ()`](pointer).
> /// To ensure this, there are special requirements on implementations
> /// of `PointerLike` (other than the already-provided implementations
> /// for built-in types):
> ///
> /// * The type must have `#[repr(transparent)]`.
> /// * The type=E2=80=99s sole non-zero-sized field must itself implement
> `PointerLike`. #[unstable(feature =3D "pointer_like_trait", issue =3D "no=
ne")]
> #[lang =3D "pointer_like"]
> #[diagnostic::on_unimplemented(
>     message =3D "`{Self}` needs to have the same ABI as a pointer",
>     label =3D "`{Self}` needs to be a pointer-like type"
> )]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait PointerLike {}
>=20
> #[cfg(not(bootstrap))]
> marker_impls! {
>     #[unstable(feature =3D "pointer_like_trait", issue =3D "none")]
>     PointerLike for
>         isize,
>         usize,
>         {T} &T,
>         {T} &mut T,
>         {T} *const T,
>         {T} *mut T,
>         {T: PointerLike} crate::pin::Pin<T>,
> }
>=20
> /// A marker for types which can be used as types of `const` generic
> parameters. ///
> /// These types must have a proper equivalence relation (`Eq`) and it must
> be automatically /// derived (`StructuralPartialEq`). There's a hard-coded
> check in the compiler ensuring /// that all fields are also `ConstParamTy=
`,
> which implies that recursively, all fields /// are `StructuralPartialEq`.
> #[lang =3D "const_param_ty"]
> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
> #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a c=
onst
> parameter type")] #[allow(multiple_supertrait_upcastable)]
> // We name this differently than the derive macro so that the
> `adt_const_params` can // be used independently of `unsized_const_params`
> without requiring a full path // to the derive macro every time it is use=
d.
> This should be renamed on stabilization. pub trait ConstParamTy_:
> UnsizedConstParamTy + StructuralPartialEq + Eq {}
>=20
> /// Derive macro generating an impl of the trait `ConstParamTy`.
> #[rustc_builtin_macro]
> #[allow_internal_unstable(unsized_const_params)]
> #[unstable(feature =3D "adt_const_params", issue =3D "95174")]
> pub macro ConstParamTy($item:item) {
>     /* compiler built-in */
> }
>=20
> #[lang =3D "unsized_const_param_ty"]
> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
> #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a c=
onst
> parameter type")] /// A marker for types which can be used as types of
> `const` generic parameters. ///
> /// Equivalent to [`ConstParamTy_`] except that this is used by
> /// the `unsized_const_params` to allow for fake unstable impls.
> pub trait UnsizedConstParamTy: StructuralPartialEq + Eq {}
>=20
> /// Derive macro generating an impl of the trait `ConstParamTy`.
> #[rustc_builtin_macro]
> #[allow_internal_unstable(unsized_const_params)]
> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
> pub macro UnsizedConstParamTy($item:item) {
>     /* compiler built-in */
> }
>=20
> // FIXME(adt_const_params): handle `ty::FnDef`/`ty::Closure`
> marker_impls! {
>     #[unstable(feature =3D "adt_const_params", issue =3D "95174")]
>     ConstParamTy_ for
>         usize, u8, u16, u32, u64, u128,
>         isize, i8, i16, i32, i64, i128,
>         bool,
>         char,
>         (),
>         {T: ConstParamTy_, const N: usize} [T; N],
> }
>=20
> marker_impls! {
>     #[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
>     UnsizedConstParamTy for
>         usize, u8, u16, u32, u64, u128,
>         isize, i8, i16, i32, i64, i128,
>         bool,
>         char,
>         (),
>         {T: UnsizedConstParamTy, const N: usize} [T; N],
>=20
>         str,
>         {T: UnsizedConstParamTy} [T],
>         {T: UnsizedConstParamTy + ?Sized} &T,
> }
>=20
> /// A common trait implemented by all function pointers.
> #[unstable(
>     feature =3D "fn_ptr_trait",
>     issue =3D "none",
>     reason =3D "internal trait for implementing various traits for all
> function pointers" )]
> #[lang =3D "fn_ptr_trait"]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait FnPtr: Copy + Clone {
>     /// Returns the address of the function pointer.
>     #[lang =3D "fn_ptr_addr"]
>     fn addr(self) -> *const ();
> }
>=20
> /// Derive macro generating impls of traits related to smart pointers.
> #[rustc_builtin_macro(CoercePointee, attributes(pointee))]
> #[allow_internal_unstable(dispatch_from_dyn, coerce_unsized, unsize)]
> #[unstable(feature =3D "derive_coerce_pointee", issue =3D "123430")]
> #[cfg(not(bootstrap))]
> pub macro CoercePointee($item:item) {
>     /* compiler built-in */
> }
>=20
>=20
> ```
>=20
>=20
> In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
>  3.24.43, cairo version 1.18.2) of 2025-04-17 built on Mufasa
> Repository revision: 7b35a5062231ec5a11c7a87d4797cfb5dba25121
> Repository branch: feature/igc
> System Description: NixOS 24.11 (Vicuna)
>=20
> Configured using:
>  'configure 'CFLAGS=3D-O3 -march=3Dnative'
>  --prefix=3D/home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feat=
ure_i
> gc-7b35a5062231ec5a11c7a87d4797cfb5dba25121-O3 --with-mps=3Dyes
> --with-imagemagick --with-modules --with-pgtk
>  --with-cairo --with-cairo-xcb --without-compress-install
>  --with-mailutils --with-tree-sitter --with-xinput2
>  --enable-link-time-optimization --with-file-notification=3Dinotify'
>=20
> Configured features:
> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ
> IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 MODULES MPS NATIVE_COMP NOTIFY
> INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
> TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB
>=20
> Important settings:
>   value of $LC_COLLATE: C
>   value of $LC_MONETARY: en_US.UTF-8
>   value of $LC_NUMERIC: en_US.UTF-8
>   value of $LC_TIME: C
>   value of $LANG: en_US.UTF-8
>   value of $XMODIFIERS: @im=3Dfcitx
>   locale-coding-system: utf-8-unix
>=20
> Major mode: Elisp/l
>=20
> Minor modes in effect:
>   restore-point-mode: t
>   global-atomic-chrome-edit-mode: t
>   global-git-gutter-mode: t
>   git-gutter-mode: t
>   marginalia-mode: t
>   elisp-def-mode: t
>   flycheck-posframe-mode: t
>   hungry-delete-mode: t
>   symbol-overlay-mode: t
>   keycast-tab-bar-mode: t
>   vertico-truncate-mode: t
>   vertico-multiform-mode: t
>   vertico-mode: t
>   telega-root-auto-fill-mode: t
>   telega-contact-birthdays-mode: t
>   telega-active-video-chats-mode: t
>   telega-active-locations-mode: t
>   telega-patrons-mode: t
>   telega-active-stories-mode: t
>   tab-line-nerd-icons-global-mode: t
>   global-tab-line-mode: t
>   tab-line-mode: t
>   ultra-scroll-mode: t
>   pixel-scroll-precision-mode: t
>   org-roam-db-autosync-mode: t
>   global-org-modern-mode: t
>   mu4e-modeline-mode: t
>   global-kkp-mode: t
>   global-git-commit-mode: t
>   flycheck-mode: t
>   engine-mode: t
>   symex-mode: t
>   global-evil-surround-mode: t
>   evil-surround-mode: t
>   yas-global-mode: t
>   yas-minor-mode: t
>   corfu-terminal-mode: t
>   corfu-history-mode: t
>   global-corfu-mode: t
>   corfu-mode: t
>   rainbow-mode: t
>   elisp-autofmt-mode: t
>   highlight-defined-mode: t
>   highlight-numbers-mode: t
>   hes-mode: t
>   rainbow-delimiters-mode: t
>   burly-tabs-mode: t
>   global-form-feed-st-mode: t
>   form-feed-st-mode: t
>   eat-eshell-mode: t
>   sly-symbol-completion-mode: t
>   super-save-mode: t
>   savehist-mode: t
>   which-key-mode: t
>   super-hint-xref-mode: t
>   super-hint-rg-mode: t
>   windmove-mode: t
>   server-mode: t
>   save-place-mode: t
>   recentf-mode: t
>   winner-mode: t
>   persistent-scratch-autosave-mode: t
>   global-dash-fontify-mode: t
>   dash-fontify-mode: t
>   nerd-icons-completion-mode: t
>   sudo-edit-indicator-mode: t
>   global-evil-visualstar-mode: t
>   evil-visualstar-mode: t
>   evil-commentary-mode: t
>   global-evil-mc-mode: t
>   evil-mc-mode: t
>   evil-lion-mode: t
>   global-evil-collection-unimpaired-mode: t
>   evil-collection-unimpaired-mode: t
>   buffer-face-mode: t
>   TeX-PDF-mode: t
>   display-line-numbers-mode: t
>   electric-pair-mode: t
>   global-auto-revert-mode: t
>   evil-mode: t
>   evil-local-mode: t
>   general-override-mode: t
>   minions-mode: t
>   el-patch-use-package-mode: t
>   elpaca-use-package-mode: t
>   override-global-mode: t
>   tooltip-mode: t
>   global-eldoc-mode: t
>   eldoc-mode: t
>   show-paren-mode: t
>   electric-indent-mode: t
>   mouse-wheel-mode: t
>   tab-bar-mode: t
>   file-name-shadow-mode: t
>   context-menu-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   minibuffer-regexp-mode: t
>   column-number-mode: -1
>   line-number-mode: -1
>   transient-mark-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>=20
> Load-path shadows:
> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
> /home/exec/.emacs.d/elpaca/builds/standard-themes/theme-loaddefs
> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
> /home/exec/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs
> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35=
a5
> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/theme-load=
def
> s /home/exec/.emacs.d/elpaca/builds/transient/transient hides
> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35=
a5
> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/transient
>=20
> Features:
> (shadow sort mail-extr expand-region yaml-mode-expansions
> subword-mode-expansions text-mode-expansions cc-mode-expansions
> the-org-mode-expansions python-el-fgallina-expansions
> latex-mode-expansions js2-mode-expansions js-mode-expansions
> web-mode-expansions html-mode-expansions clojure-mode-expansions
> er-basic-expansions expand-region-core expand-region-custom
> evil-collection-embark embark-org embark-consult embark gptel-curl
> nerd-icons-dired diredfl info-colors vertico-sort cus-start descr-text
> dabbrev cape lsp-diagnostics lsp-modeline lsp-icons lsp-zig lsp-yang
> lsp-yaml lsp-xml lsp-wgsl lsp-volar lsp-vimscript lsp-vhdl lsp-vetur
> lsp-html lsp-verilog lsp-vala lsp-v lsp-typespec lsp-typeprof lsp-ttcn3
> lsp-ts-query lsp-trunk lsp-toml lsp-tilt lsp-tex lsp-terraform
> lsp-svelte lsp-steep lsp-sqls lsp-sql lsp-sorbet lsp-solidity
> lsp-solargraph lsp-semgrep lsp-ruff lsp-ruby-syntax-tree lsp-ruby-lsp
> lsp-rubocop lsp-roslyn lsp-roc lsp-rf lsp-remark lsp-racket lsp-r
> lsp-qml lsp-pyright lsp-pylsp lsp-pyls lsp-pwsh lsp-purescript lsp-pls
> lsp-php lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-nushell
> lsp-nix lsp-nim lsp-nginx lsp-nextflow lsp-move lsp-mojo lsp-mint
> lsp-meson lsp-mdx lsp-matlab lsp-marksman lsp-markdown lsp-magik
> lsp-fennel lsp-lua lsp-lisp lsp-kubernetes-helm lsp-kotlin lsp-json
> lsp-jq lsp-javascript lsp-idris lsp-haxe lsp-hack lsp-groovy lsp-graphql
> lsp-golangci-lint lsp-glsl lsp-gleam lsp-gdscript lsp-fsharp lsp-futhark
> lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elm lsp-elixir
> lsp-earthly lsp-dockerfile lsp-dhall lsp-d lsp-cypher lsp-cucumber
> lsp-copilot lsp-css lsp-c3 lsp-csharp lsp-crystal lsp-credo lsp-cobol
> lsp-cmake lsp-clojure lsp-clangd lsp-bufls lsp-go lsp-completion
> lsp-beancount lsp-bash lsp-awk lsp-autotools lsp-astro lsp-asm
> lsp-ansible lsp-angular lsp-ada lsp-actionscript copilot
> copilot-balancer editorconfig editorconfig-core editorconfig-core-handle
> editorconfig-fnmatch jsonrpc gptel-openai-extras gptel-anthropic
> gptel-gemini gptel-ollama org-indent gptel-openai consult-dir-autoloads
> consult-ag-autoloads restore-point evil-collection-atomic-chrome
> atomic-chrome git-gutter marginalia elisp-def evil-collection-ert ert
> flycheck-posframe evil-collection-hungry-delete hungry-delete
> symbol-overlay keycast zig-mode reformatter empv vertico-truncate
> vertico-posframe vertico-multiform evil-collection-vertico vertico
> lsp-uniteai nix-ts-mode go-translate gt-text-utility gt-engine-echo
> gt-engine-libre gt-engine-chatgpt gt-engine-youdao gt-engine-osxdict
> gt-engine-stardict gt-engine-deepl gt-engine-google-rpc gt-engine-google
> gt-engine-bing gt-extension gt-faces gt-core gt-httpx sdcv cap-words
> superword subword evil-collection-telega telega-obsolete telega
> telega-tdlib-events telega-match telega-root telega-info telega-chat
> telega-modes telega-company telega-emoji telega-user
> telega-notifications telega-voip telega-msg telega-story telega-webpage
> telega-tme telega-sticker telega-vvnote telega-ffplay telega-i18n
> telega-sort telega-filter telega-ins telega-inline telega-util
> telega-folders telega-topic telega-media telega-tdlib telega-server
> telega-core telega-customize emacsbug tab-line-nerd-icons
> evil-collection-imenu-list imenu-list tab-line rust-utils
> rust-mode-treesitter rust-ts-mode rust-mode rust-playpen rust-cargo
> rust-common rust-rustfmt rust-compile cargo cargo-process rg-info-hack
> rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg rg-history ibuf-ext
> evil-collection-ibuffer ibuffer ibuffer-loaddefs rg-header
> evil-collection-ultra-scroll ultra-scroll pixel-scroll cua-base
> org-sliced-images emacsql-sqlite-builtin evil-collection-org-roam
> org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id
> org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam
> org-capture emacsql-sqlite emacsql emacsql-compiler org-journal
> org-crypt cal-iso org-modern orderless evil-collection-mu4e mu4e
> mu4e-org mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts
> mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg
> gnus-art mm-uu mml2015 mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
> mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders
> mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars
> mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cyphejor qml-mode
> kkp rfc-mode string-inflection wakatime-mode systemd minuet pr-review
> pr-review-render pr-review-action magit-diff git-commit
> evil-collection-log-edit log-edit pcvs-util add-log magit-core
> magit-autorevert magit-margin magit-transient magit-process
> evil-collection-with-editor with-editor magit-mode magit-git magit-base
> pr-review-input pr-review-api ghub-graphql treepy gsexp ghub
> pr-review-common consult-lsp lsp-ui lsp-ui-flycheck lsp-ui-doc
> evil-collection-lsp-ui-imenu lsp-ui-imenu lsp-ui-peek lsp-ui-sideline
> lsp-rust lsp-semantic-tokens lsp-mode network-stream
> evil-collection-markdown-mode markdown-mode lsp-ui-util lsp-protocol
> llm-prompt groovy-mode iedit help-macro iedit-lib hide-comnt
> minibuffer-header gptel-quick gotest fzf flycheck-clj-kondo jka-compr
> pos-tip consult-flycheck flycheck-rust engine-mode evil-collection-ement
> ement-room-list taxy-magit-section taxy ement ement-notifications
> ement-notify ement-room ewoc ement-lib ement-api ement-structs
> ement-macros dns llm-ollama llm-provider-utils llm-models
> llm-request-plz plz-event-source plz-media-type plz llm symex symex-evil
> symex-evil-support symex-hydra symex-transformations
> symex-transformations-lisp symex-utils evil-cleverparens
> evil-cleverparens-text-objects evil-cleverparens-util smartparens
> evil-surround symex-misc symex-interface-builtins symex-interface-fennel
> symex-interface-arc symex-interface-common-lisp symex-interface-clojure
> symex-interface-scheme symex-interface-racket symex-interface-elisp
> symex-interop symex-interface symex-traversals symex-dsl symex-evaluator
> symex-computations symex-primitives symex-ts symex-utils-ts
> symex-transformations-ts symex-primitives-lisp symex-data symex-ui
> symex-custom evil-collection-lispy lispy le-clojure delsel lispy-inline
> avy lispy-tags zoutline combobulate evil-collection-elfeed elfeed-show
> elfeed-search elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db
> elfeed-lib xml-query dired-git-info dired-hacks dired-preview
> evil-collection-cmake-mode cmake-mode consult-yasnippet yasnippet-capf
> yasnippet-snippets yasnippet kind-icon svg-lib corfu-terminal popon
> corfu-popupinfo corfu-indexed corfu-history evil-collection-corfu corfu
> consult-ls-git paredit clojure-ts-mode evil-collection-cider cider
> tramp-sh cider-debug cider-browse-ns cider-mode cider-xref-backend
> cider-find cider-inspector cider-completion cider-profile cider-eval
> cider-jar cider-repl-history cider-repl cider-resolve cider-test
> cider-overlays cider-stacktrace cider-doc cider-browse-spec
> cider-clojuredocs cider-eldoc cider-docstring cider-client cider-common
> cider-completion-context cider-connection cider-popup sesman-browser
> nrepl-client cider-util sesman queue nrepl-dict spinner clojure-mode
> rainbow-mode elisp-autofmt loadhist highlight-defined highlight-numbers
> parent-mode highlight-escape-sequences rainbow-delimiters chatgpt-shell
> chatgpt-shell-prompt-compose chatgpt-shell-perplexity
> chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama
> chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek
> chatgpt-shell-anthropic evil-collection-smerge-mode smerge-mode diff
> shell-maker ielm evil-collection-eshell eshell em-prompt esh-mode
> esh-var esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module
> esh-module-loaddefs esh-util cargo-jump-xref toml breadcrumb pulse
> bookmark-in-project bookmark+ bookmark+-key bookmark+-1 gnus-sum
> gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail
> mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win
> bookmark+-bmu bookmark+-lit bookmark+-mac babashka parseedn
> parseclj-parser parseclj-lex parseclj-alist cnfonts burly-tabs burly
> compile-multi form-feed-st google-this echo-bar fcitx
> evil-collection-eat eat term/xterm xterm evil-collection-term term ehelp
> ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util
> rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex
> ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach
> org-element org-persist org-id org-refile org-element-ast inline
> avl-tree htmlize evil-collection-explain-pause-mode explain-pause-mode
> explain-pause-top explain-pause-log-to-socket evil-collection-profiler
> profiler weather-metno solar cal-dst url-cache display-wttr kdeconnect
> crux pest-mode popwin modus-themes blackboard-theme standard-themes
> nimbus-theme tok-theme danneskjold-theme srcery-theme subatomic256-theme
> iscroll xml+ evil-textobj-tree-sitter
> evil-textobj-tree-sitter-thing-at-point evil-textobj-tree-sitter-core
> tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get
> dired-aux tsc-obsolete ctable evil-collection-color-rg color-rg
> line-reminder ov ht fringe-helper solarized-theme solarized
> solarized-faces sqlup-mode evil-collection-bm bm zen-mode
> evil-collection-sly sly gud sly-completion sly-buttons sly-messages
> sly-common evil-collection-apropos apropos evil-collection-arc-mode
> arc-mode archive-mode hyperspec sicp base16-theme idea-darkula-theme
> hybrid-reverse-theme material-theme doom-themes doom-themes-base
> nyan-mode organic-green-theme inkpot-theme github-dark-vscode-theme
> almost-mono-themes cyberpunk-theme soothe-theme soothe-tva zenburn-theme
> mindre-theme kaolin-themes kaolin-themes-lib tron-legacy-theme
> wildcharm-theme atom-one-dark-theme parchment-theme autothemer
> visual-fill-column transpose-frame gameoflife evil-collection-docker
> docker docker-context docker-volume docker-network docker-image
> docker-container docker-faces docker-core docker-compose docker-process
> docker-utils docker-group aio dockerfile-mode emacs-everywhere cus-dir
> dumb-jump evil-collection-popup popup websocket bindat bing-dict cl
> bing-dict-cache hl-todo atom-dark-theme ef-themes uwu-theme vagrant
> evil-collection-ag ag vc-svn find-dired alarm-clock alert log4e
> notifications gntp pinentry evil-collection-hackernews hackernews
> evil-collection-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello
> notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message
> notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company
> notmuch-parser notmuch-wash coolj goto-addr icalendar diary-lib
> diary-loaddefs notmuch-tag notmuch-lib notmuch-compat message sendmail
> yank-media rfc822 mml mailabbrev gmm-utils mm-view mml-smime mml-sec
> smime gnutls dig mm-decode mm-bodies mm-encode fussy flx affe
> evil-collection-consult consult clang-format apheleia apheleia-rcs
> apheleia-dp apheleia-formatters apheleia-utils apheleia-log
> apheleia-formatter-context vimrc-mode gnuplot olivetti super-save
> evil-collection-helpful helpful cc-langs trace cl-print
> evil-collection-edebug edebug evil-collection-debug debug backtrace
> info-look evil-collection-info info help-fns radix-tree
> evil-collection-elisp-refs elisp-refs solidity-mode solidity-common
> evil-collection-git-timemachine git-timemachine web-mode disp-table
> evil-collection-go-mode go-mode find-file evil-collection-js2-mode
> js2-mode etags fileloop zig-mode-autoloads reformatter-autoloads
> empv-autoloads yasnippet-snippets-autoloads marginalia-autoloads
> vertico-truncate-autoloads vertico-posframe-autoloads vertico-autoloads
> lsp-uniteai-autoloads nix-ts-mode-autoloads go-translate-autoloads
> alert-autoloads gntp-autoloads log4e-autoloads sdcv-autoloads
> telega-autoloads tab-line-nerd-icons-autoloads keycast-autoloads
> rust-mode-autoloads cargo-autoloads toml-autoloads rg-autoloads
> writeroom-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads
> makefile-executor-autoloads ultra-scroll-autoloads pdf-tools-autoloads
> org-sliced-images-autoloads consult-org-roam-autoloads
> org-roam-autoloads org-journal-autoloads org-download-autoloads
> org-modern-autoloads orderless-autoloads mu4e-autoloads
> cyphejor-autoloads symbol-overlay-autoloads qml-mode-autoloads
> kkp-autoloads rfc-mode-autoloads string-inflection-autoloads
> wakatime-mode-autoloads webpaste-autoloads systemd-autoloads
> minuet-autoloads pr-review-autoloads forge-autoloads closql-autoloads
> emacsql-autoloads ghub-autoloads treepy-autoloads yaml-autoloads
> lsp-pyright-autoloads consult-lsp-autoloads lsp-ui-autoloads
> lsp-mode-autoloads groovy-mode-autoloads imenu-list-autoloads
> hungry-delete-autoloads hide-comnt-autoloads minibuffer-header-autoloads
> gptel-quick-autoloads gptel-autoloads gotest-autoloads fzf-autoloads
> flycheck-golangci-lint-autoloads flycheck-clj-kondo-autoloads
> pos-tip-autoloads consult-flycheck-autoloads flycheck-rust-autoloads
> flycheck-posframe-autoloads flycheck-autoloads engine-mode-autoloads
> ement-autoloads taxy-magit-section-autoloads taxy-autoloads
> embark-consult-autoloads embark-autoloads ellama-autoloads llm-autoloads
> plz-event-source-autoloads plz-media-type-autoloads plz-autoloads
> symex-autoloads tree-sitter-autoloads tsc-autoloads lispy-autoloads
> iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads
> evil-cleverparens-autoloads smartparens-autoloads combobulate-autoloads
> combobulate-go combobulate-json combobulate-yaml combobulate-css
> combobulate-js-ts combobulate-python combobulate-html combobulate-toml
> combobulate-cursor multiple-cursors mc-separate-operations
> rectangular-region-mode mc-mark-pop mc-edit-lines
> mc-hide-unmatched-lines-mode mc-mark-more sgml-mode mc-cycle-cursors
> multiple-cursors-core combobulate-query savehist evil-collection-scheme
> scheme combobulate-ui combobulate-display let-alist combobulate-ztree
> combobulate-envelope combobulate-manipulation evil-collection-python
> python combobulate-procedure combobulate-navigation combobulate-misc
> combobulate-setup tempo combobulate-interface combobulate-settings
> combobulate-rules elisp-def-autoloads elfeed-tube-mpv-autoloads
> elfeed-tube-autoloads elfeed-autoloads eee-autoloads eee
> dired-git-info-autoloads dired-hacks-autoloads dired-preview-autoloads
> diredfl-autoloads git-gutter-autoloads cmake-mode-autoloads
> consult-yasnippet-autoloads yasnippet-capf-autoloads yasnippet-autoloads
> cape-autoloads kind-icon-autoloads svg-lib-autoloads
> corfu-terminal-autoloads popon-autoloads corfu-autoloads
> copilot-autoloads copilot-chat-autoloads consult-ls-git-autoloads
> paredit-autoloads clojure-ts-mode-autoloads cider-autoloads
> clojure-mode-autoloads queue-autoloads spinner-autoloads
> sesman-autoloads chatgpt-shell-autoloads shell-maker-autoloads
> cargo-jump-xref-autoloads breadcrumb-autoloads
> bookmark-in-project-autoloads bookmark+-autoloads babashka-autoloads
> parseedn-autoloads parseclj-autoloads aidermacs-autoloads
> mediawiki-autoloads markdown-mode-autoloads treemacs-magit-autoloads
> magit-autoloads with-editor-autoloads nerd-icons-ibuffer-autoloads
> treemacs-nerd-icons-autoloads treemacs-autoloads pfuture-autoloads
> cfrs-autoloads cnfonts-autoloads burly-autoloads compile-multi-autoloads
> form-feed-st-autoloads google-this-autoloads echo-bar-autoloads
> zoom-autoloads fcitx-autoloads eat-autoloads vterm-autoloads
> chatgpt-autoloads polymode-autoloads ox-reveal-autoloads
> htmlize-autoloads wordreference-autoloads explain-pause-mode-autoloads
> weather-metno-autoloads display-wttr-autoloads kdeconnect-autoloads
> emms-autoloads crux-autoloads pest-mode-autoloads popwin-autoloads
> modus-themes-autoloads blackboard-theme-autoloads
> standard-themes-autoloads nimbus-theme-autoloads tok-theme-autoloads
> danneskjold-theme-autoloads srcery-theme-autoloads
> subatomic256-theme-autoloads iscroll-autoloads xml+-autoloads
> multiple-cursors-autoloads evil-textobj-tree-sitter-autoloads
> evil-numbers-autoloads ctable-autoloads color-rg-autoloads
> line-reminder-autoloads fringe-helper-autoloads ov-autoloads
> solarized-theme-autoloads sqlup-mode-autoloads bm-autoloads
> zen-mode-autoloads sly-autoloads expand-region-autoloads
> highlight-defined-autoloads base16-theme-autoloads
> idea-darkula-theme-autoloads hybrid-reverse-theme-autoloads
> material-theme-autoloads doom-themes-autoloads nyan-mode-autoloads
> organic-green-theme-autoloads inkpot-theme-autoloads
> github-dark-vscode-theme-autoloads almost-mono-themes-autoloads
> cyberpunk-theme-autoloads soothe-theme-autoloads zenburn-theme-autoloads
> mindre-theme-autoloads kaolin-themes-autoloads
> tron-legacy-theme-autoloads wildcharm-theme-autoloads
> atom-one-dark-theme-autoloads parchment-theme-autoloads
> autothemer-autoloads visual-fill-column-autoloads
> transpose-frame-autoloads gameoflife-autoloads docker-autoloads
> aio-autoloads dockerfile-mode-autoloads emacs-everywhere-autoloads
> cus-dir-autoloads dumb-jump-autoloads popup-autoloads
> bing-dict-autoloads hl-todo-autoloads atom-dark-theme-autoloads
> ef-themes-autoloads uwu-theme-autoloads vagrant-autoloads ag-autoloads
> alarm-clock-autoloads pinentry-autoloads hackernews-autoloads
> notmuch-autoloads fussy-autoloads flx-autoloads affe-autoloads
> consult-autoloads clang-format-autoloads apheleia-autoloads
> elisp-autofmt-autoloads vimrc-mode-autoloads mpv-autoloads
> gnuplot-autoloads mermaid-mode-autoloads atomic-chrome-autoloads
> websocket-autoloads restore-point-autoloads ace-window-autoloads
> avy-autoloads olivetti-autoloads super-save-autoloads helpful-autoloads
> elisp-refs-autoloads solidity-mode-autoloads git-timemachine-autoloads
> web-mode-autoloads adoc-mode-autoloads go-mode-autoloads
> js2-mode-autoloads rust-playground-autoloads evil-collection-which-key
> which-key super-hint-xref super-hint-rg super-hint evil-collection-xref
> xref evil-collection-rg rg piper ob-shell ob-gnuplot ob-C
> evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp
> org-macro org-src evil-collection-sh-script sh-script executable
> ob-comint org-pcomplete org-list org-footnote org-faces org-entities
> ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
> org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs
> molecule-mode lsp hyperbole hideshow gptel-manual-complete
> evil-collection-gptel gptel windmove evil-collection-flycheck flycheck
> erc erc-backend erc-networks erc-common erc-compat erc-loaddefs
> evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff
> ediff-help ediff-init ediff-util dired-x consult-ripgrep-all desktop
> frameset server evil-collection-eww eww vtable mule-util url-queue
> mm-url evil-collection-gnus gnus nnheader gnus-util range epa-file
> evil-collection-epa epa derived epg rfc6068 epg-config saveplace recentf
> tree-widget winner edit-list refine loop list-utils prompts file-info
> browse-at-remote f image-roll evil-collection-image image-mode exif
> toc-mode rst scratch sql evil-collection-view view persistent-scratch
> exercism persist async-await iter2 generator promise url-http url-auth
> mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw
> nsm promise-rejection-tracking promise-finally promise-done
> promise-es6-extensions promise-core async request mailheader mail-utils
> a indent-bars evil-collection-outline noutline outline mode-line-bell
> powerthesaurus jeison dash s evil-collection-ripgrep ripgrep
> evil-collection-wgrep wgrep evil-collection-grep grep
> evil-collection-vlf vlf vlf-base vlf-tune gptai ctrlf hl-line
> nerd-icons-completion nerd-icons nerd-icons-faces nerd-icons-data
> nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon
> nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon
> nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon
> nerd-icons-data-pomicon nerd-icons-data-ipsicon disable-mouse mingus
> libmpdee evil-collection-mpdel mpdel mpdel-browser libmpdel-directory
> mpdel-playlist mpdel-tablist mpdel-song mpdel-core navigel
> evil-collection-bookmark bookmark evil-collection-tablist tablist
> tablist-filter semantic/wisent/comp semantic/wisent
> semantic/wisent/wisent semantic/util-modes semantic/util semantic
> semantic/tag semantic/lex semantic/fw mode-local find-func cedet
> libmpdel tq time-stamp posframe esup esup-child benchmark
> ssh-config-mode jq-mode json-mode json-snatcher js c-ts-common treesit
> cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
> cc-vars cc-defs evil-collection-yaml-mode yaml-mode toml-mode conf-mode
> align highlight facemenu nix-mode ffap smie nix-repl nix-shell nix-store
> evil-collection-magit-section magit-section cursor-sensor llama nix-log
> nix-instantiate nix-shebang nix-format nix sudo-edit tramp trampver
> tramp-integration tramp-message tramp-compat shell pcomplete parse-time
> iso8601 time-date tramp-loaddefs evil-collection-devdocs devdocs mathjax
> evil-terminal-cursor-changer evil-visualstar evil-commentary
> evil-commentary-integration evil-collection-evil-mc evil-mc
> evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make
> evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars
> evil-mc-known-commands evil-mc-common evil-exchange evil-lion evil-args
> smartscan timeout ess ess-utils ess-custom evil-collection-unimpaired
> evil-collection-vc-git evil-collection-tabulated-list
> evil-collection-tab-bar evil-collection-simple evil-collection-replace
> evil-collection-process-menu evil-collection-package-menu
> evil-collection-minibuffer evil-collection-man evil-collection-kmacro
> evil-collection-indent evil-collection-imenu evil-collection-help
> evil-collection-flymake evil-collection-elisp-mode evil-collection-eldoc
> evil-collection-elpaca evil-collection-dired evil-collection-diff-mode
> evil-collection-custom evil-collection-compile evil-collection-comint
> evil-collection-calendar evil-collection-buff-menu evil-collection
> annalist sqlite3 sqlite3-api treebundel vc-git diff-mode track-changes
> files-x git-link dired dired-loaddefs texfrag face-remap shr pixel-fill
> kinsoku url-file puny svg dom preview latex latex-flymake flymake
> project compile text-property-search comint ansi-osc tex-ispell
> tex-style tex dbus xml crm texmathp auctex display-line-numbers
> elec-pair lisp-mnt package browse-url xdg url-handlers xterm-color
> edit-list-autoloads refine-autoloads list-utils-autoloads loop-autoloads
> prompts-autoloads file-info-autoloads hydra-autoloads lv-autoloads
> browse-at-remote-autoloads image-roll-autoloads
> saveplace-pdf-view-autoloads pdfgrep-autoloads toc-mode-autoloads
> scratch-autoloads persistent-scratch-autoloads exercism-autoloads
> a-autoloads request-autoloads async-autoloads async-await-autoloads
> promise-autoloads iter2-autoloads persist-autoloads
> indent-bars-autoloads rainbow-delimiters-autoloads
> rainbow-mode-autoloads mode-line-bell-autoloads powerthesaurus-autoloads
> hydra lv jeison-autoloads ripgrep-autoloads wgrep-autoloads
> vlf-autoloads gptai-autoloads popper-autoloads ctrlf-autoloads
> nerd-icons-dired-autoloads nerd-icons-completion-autoloads
> nerd-icons-autoloads disable-mouse-autoloads mingus-autoloads
> libmpdee-autoloads mpdel-autoloads libmpdel-autoloads navigel-autoloads
> tablist-autoloads posframe-autoloads esup-autoloads quickrun-autoloads
> ht-autoloads ssh-config-mode-autoloads jq-mode-autoloads
> json-mode-autoloads json-snatcher-autoloads yaml-mode-autoloads
> toml-mode-autoloads highlight-escape-sequences-autoloads
> highlight-autoloads highlight-numbers-autoloads parent-mode-autoloads
> nix-mode-autoloads magit-section-autoloads llama-autoloads
> sudo-edit-autoloads attrap-autoloads f-autoloads dash-autoloads
> s-autoloads devdocs-autoloads mathjax-autoloads
> evil-terminal-cursor-changer-autoloads evil-surround-autoloads
> evil-visualstar-autoloads evil-commentary-autoloads evil-mc-autoloads
> evil-exchange-autoloads evil-lion-autoloads evil-args-autoloads
> smartscan-autoloads timeout-autoloads ess-autoloads
> info-colors-autoloads evil-collection-autoloads annalist-autoloads
> sqlite3-autoloads treebundel-autoloads git-link-autoloads
> texfrag-autoloads auctex-autoloads tex-site xterm-color-autoloads ispell
> which-func imenu man ansi-color autorevert filenotify cal-menu calendar
> cal-loaddefs advice evil evil-integration evil-maps evil-commands reveal
> evil-jumps evil-command-window evil-types evil-search evil-ex
> evil-macros evil-repeat evil-states evil-core comp comp-cstr warnings
> comp-run comp-common rx evil-common thingatpt rect evil-vars ring
> undo-fu goto-chg evil-autoloads undo-fu-autoloads goto-chg-autoloads
> transient pcase format-spec transient-autoloads general memoize
> sanityinc-tomorrow-bright-theme color-theme-sanityinc-tomorrow color
> minions compat general-autoloads memoize-autoloads
> color-theme-sanityinc-tomorrow-autoloads minions-autoloads
> el-patch-autoloads el-patch el-patch-stub edmacro kmacro vc
> vc-dispatcher cl-extra help-mode elpaca-use-package use-package
> use-package-ensure use-package-delight use-package-diminish
> use-package-bind-key bind-key easy-mmode use-package-core
> elpaca-use-package-autoloads elpaca-log elpaca-ui elpaca-menu-elpa
> elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods
> url-history url-cookie generate-lisp-file url-domsuf url-util url-parse
> auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
> map byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org
> elpaca elpaca-process elpaca-autoloads early-init cus-edit pp cus-load
> icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc
> paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
> mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd
> tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
> newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
> rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
> font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
> simple cl-generic indonesian philippine cham georgian utf-8-lang
> misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
> cp51932 hebrew greek romanian slovak czech european ethiopic indian
> cyrillic chinese composite emoji-zwj charscript charprop case-table
> epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
> loaddefs theme-loaddefs faces cus-face macroexp files window
> text-properties overlay sha1 md5 base64 format env code-pages mule
> custom widget keymap hashtable-print-readable backquote threads dbusbind
> inotify dynamic-setting system-font-setting font-render-setting cairo
> gtk pgtk lcms2 multi-tty move-toolbar make-network-process
> tty-child-frames native-compile mps emacs)
>=20
> Memory information:
> ((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0)
>   (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0)
>   (buffers 1000 0))


--nextPart7128439.9J7NaK4W3v
Content-Disposition: attachment; filename="rust-grammar-bug.png"
Content-Transfer-Encoding: base64
Content-Type: image/png; name="rust-grammar-bug.png"

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
0Wgq1gAAAABJRU5ErkJggg==


--nextPart7128439.9J7NaK4W3v--







Information forwarded to bug-gnu-emacs@HIDDEN:
bug#77914; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 19 Apr 2025 22:12:55 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Apr 19 18:12:55 2025
Received: from localhost ([127.0.0.1]:39357 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u6GQh-0008Cs-I0
	for submit <at> debbugs.gnu.org; Sat, 19 Apr 2025 18:12:55 -0400
Received: from lists.gnu.org ([2001:470:142::17]:38156)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <v.pupillo@HIDDEN>)
 id 1u6GQe-0008CT-8k
 for submit <at> debbugs.gnu.org; Sat, 19 Apr 2025 18:12:52 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <v.pupillo@HIDDEN>)
 id 1u6GQX-0004If-8h
 for bug-gnu-emacs@HIDDEN; Sat, 19 Apr 2025 18:12:45 -0400
Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <v.pupillo@HIDDEN>)
 id 1u6GQR-0005Qn-6A
 for bug-gnu-emacs@HIDDEN; Sat, 19 Apr 2025 18:12:44 -0400
Received: by mail-wr1-x429.google.com with SMTP id
 ffacd0b85a97d-39ee5ac4321so2827700f8f.1
 for <bug-gnu-emacs@HIDDEN>; Sat, 19 Apr 2025 15:12:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1745100757; x=1745705557; darn=gnu.org;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc:subject:date
 :message-id:reply-to;
 bh=Cfjef2cNr8xZm1ZCRg1Jc2y8wUz4ws57nwmTuGnOroc=;
 b=T4g/2AUiwV+cabifIlIWae7nPbo0wcYkeWGGvfVb75es+SR14+LKjNhBldWxS5Xves
 fQHGqc7OIH236KbkFpH0DnB6onyIUwANOaamsEie2qY2cmPiZuE3QnujC6PNca8yWOMQ
 fdm89lFD1D/SjHvwf8/SXD8fFW9iqWEfPvyiLc7tdacyon4linhpOeU4ueb9xpRIZ+Ey
 2Eq4nnvU8CxpOeM5yQlc+1/XJASy+bi8+neRArB2OhBPqSVo6FKp+zZ8EU+KRlA93/Ay
 1iMdPtnpV2kleNvxNpGK6w13Dx/ZJz4q2DBgFMjORC7hdRQGzjkYtL/KVR2N0UbuLO+h
 g1Ng==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1745100757; x=1745705557;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=Cfjef2cNr8xZm1ZCRg1Jc2y8wUz4ws57nwmTuGnOroc=;
 b=BasXhxHpVVWO5jg9PxMolqHsyxNMdZ7jyRz/1fjCB67A1amLq7wAoKoo9INKvK45q0
 TZeYUHiXF2aC4Q2zv0WQh7A4QyNLfLb1h/0N2xZoxCtcVkxzgJUew6M/WVc4VS/JobQ9
 +/j4VVMYLSno5x/Q8bXPg31NcR3o817zN5rwrgaVJHqES/G+Ct/lRAOJF+PjhnNUWydS
 +szDQSZm5cIac5Klt7rR1f/AZJAbmirX8E411pGsdf+NdHfFeFa8+y8XHzvrLDYF75g+
 eRLHoy80+mu69PAJV4W8uJHQHTuXsiGSSDepgDLGo+vb/CezU4Vo3lbkcHokT+43OP8N
 Ogdw==
X-Forwarded-Encrypted: i=1;
 AJvYcCVBXcbo5hczeB95wkmQ5sOxXAl0fUb5Cq/mWxTiZju4xkPshEuV+PnIxP5deXa0igbAbz3z61WQ3QqXQgS7@HIDDEN
X-Gm-Message-State: AOJu0YyFuht2DOMq4VJYIzWGo4sJEfGXqkdBb8u0c+ez6brCIu40olXa
 cyxVvwCglOgYf0BEdUi4C4uQd5LLwT2ew17+EHwaT69TCzYI5nbbie+0IrFi
X-Gm-Gg: ASbGncu7uyu8cuIM3aCARRGOTmACWi4SpnhkVXE3ja5gz5EzE6WDYFZpQkD9F6OqXZY
 qfRyyXKCfbVp0qql36SLtz1M+j/GpU7UwFv2omZD62uhw0ZTHizK1fQCTdmyCGn35cRpDLJbo5l
 1mEdoVzJmXQvS7FcQzRELd3f4RNSeE0w9kc6cZXw0RdW2KfX57SXNdMK0F4a3o/DBJmpZoQd4tr
 WUjI+BGuvW7MM3DetwPlHVhspig9o7h1Kb0nQ/jD+AW4HxB++89HlJ5+517oYtfaDwUWN2BmObD
 OUsT2bE9zwnfQhJa4T2gJ2BHIzt9/URmy5cimJzdl31G2BDX/31m1n/mp5NjVxL2MsK7hFXjOb9
 i+SWx
X-Google-Smtp-Source: AGHT+IGzMHwHOvioJA8gXkxl12+5AGYU+O3CI5kiP7q8CftvOk0MwXCYF2cCviePsodM1DHQXak2DA==
X-Received: by 2002:a05:6000:2509:b0:39e:e75b:5cd with SMTP id
 ffacd0b85a97d-39efba2c98emr5983715f8f.3.1745100756515; 
 Sat, 19 Apr 2025 15:12:36 -0700 (PDT)
Received: from fedora.localnet (2-230-139-124.ip202.fastwebnet.it.
 [2.230.139.124]) by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-44044508a7dsm91161305e9.1.2025.04.19.15.12.35
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sat, 19 Apr 2025 15:12:35 -0700 (PDT)
From: Vincenzo Pupillo <v.pupillo@HIDDEN>
To: 77914 <at> debbugs.gnu.org, bug-gnu-emacs@HIDDEN
Subject: Re: bug#77914: 31.0.50;
 treesit-font-lock-level set to 4 cause rust-ts-mode lost all color
Date: Sun, 20 Apr 2025 00:12:34 +0200
Message-ID: <3523927.LZWGnKmheA@fedora>
In-Reply-To: <877c3gka72.fsf@HIDDEN>
References: <877c3gka72.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="nextPart7128439.9J7NaK4W3v"
Content-Transfer-Encoding: 7Bit
Received-SPF: pass client-ip=2a00:1450:4864:20::429;
 envelope-from=v.pupillo@HIDDEN; helo=mail-wr1-x429.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Debbugs-Envelope-To: submit
Cc: Eval Exec <execvy@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

This is a multi-part message in MIME format.

--nextPart7128439.9J7NaK4W3v
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

If the attached file is correct, it appears to be a grammar bug (the tree-
sitter-rust grammar). Take a look at the attached screenshot (libtree-
sitter-0.25.2 and tree-sitter-rust v0.24.0)

Vincenzo

In data sabato 19 aprile 2025 07:10:57 Ora legale dell=E2=80=99Europa centr=
ale, Eval=20
Exec ha scritto:
> Hello,
> I'm visiting a rust file, when I set treesit-font-lock-level to 3, all
> color are good, when I set treesit-font-lock-level to 4, all color as
> lost.
> To reproduce this: use this rust file:
>=20
> Then eval:
> 1. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
> all color are lost.
>=20
> 2. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
> colors are good.
>=20
> 3. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
> all color are lost again.
>=20
>=20
> ```rust
>=20
> //! Primitive traits and types representing basic properties of types.
> //!
> //! Rust types can be classified in various useful ways according to
> //! their intrinsic properties. These classifications are represented
> //! as traits.
>=20
> #![stable(feature =3D "rust1", since =3D "1.0.0")]
>=20
> use crate::cell::UnsafeCell;
> use crate::cmp;
> use crate::fmt::Debug;
> use crate::hash::{Hash, Hasher};
>=20
> /// Implements a given marker trait for multiple types at the same time.
> ///
> /// The basic syntax looks like this:
> /// ```ignore private macro
> /// marker_impls! { MarkerTrait for u8, i8 }
> /// ```
> /// You can also implement `unsafe` traits
> /// ```ignore private macro
> /// marker_impls! { unsafe MarkerTrait for u8, i8 }
> /// ```
> /// Add attributes to all impls:
> /// ```ignore private macro
> /// marker_impls! {
> ///     #[allow(lint)]
> ///     #[unstable(feature =3D "marker_trait", issue =3D "none")]
> ///     MarkerTrait for u8, i8
> /// }
> /// ```
> /// And use generics:
> /// ```ignore private macro
> /// marker_impls! {
> ///     MarkerTrait for
> ///         u8, i8,
> ///         {T: ?Sized} *const T,
> ///         {T: ?Sized} *mut T,
> ///         {T: MarkerTrait} PhantomData<T>,
> ///         u32,
> /// }
> /// ```
> #[unstable(feature =3D "internal_impls_macro", issue =3D "none")]
> // Allow implementations of `UnsizedConstParamTy` even though std cannot =
use
> that feature. #[allow_internal_unstable(unsized_const_params)]
> macro marker_impls {
>     ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty $(,
> $($rest:tt)*)? ) =3D> { $(#[$($meta)*])* impl< $($($bounds)*)? > $Trait f=
or
> $T {}
>         marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? }
>     },
>     ( $(#[$($meta:tt)*])* $Trait:ident for ) =3D> {},
>=20
>     ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? $T=
:ty
> $(, $($rest:tt)*)? ) =3D> { $(#[$($meta)*])* unsafe impl< $($($bounds)*)?=
 >
> $Trait for $T {} marker_impls! { $(#[$($meta)*])* unsafe $Trait for
> $($($rest)*)? } },
>     ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) =3D> {},
> }
>=20
> /// Types that can be transferred across thread boundaries.
> ///
> /// This trait is automatically implemented when the compiler determines
> it's /// appropriate.
> ///
> /// An example of a non-`Send` type is the reference-counting pointer
> /// [`rc::Rc`][`Rc`]. If two threads attempt to clone [`Rc`]s that point =
to
> the same /// reference-counted value, they might try to update the
> reference count at the /// same time, which is [undefined behavior][ub]
> because [`Rc`] doesn't use atomic /// operations. Its cousin
> [`sync::Arc`][arc] does use atomic operations (incurring /// some overhea=
d)
> and thus is `Send`.
> ///
> /// See [the Nomicon](../../nomicon/send-and-sync.html) and the [`Sync`]
> trait for more details. ///
> /// [`Rc`]: ../../std/rc/struct.Rc.html
> /// [arc]: ../../std/sync/struct.Arc.html
> /// [ub]: ../../reference/behavior-considered-undefined.html
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> #[cfg_attr(not(test), rustc_diagnostic_item =3D "Send")]
> #[diagnostic::on_unimplemented(
>     message =3D "`{Self}` cannot be sent between threads safely",
>     label =3D "`{Self}` cannot be sent between threads safely"
> )]
> pub unsafe auto trait Send {
>     // empty.
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> !Send for *const T {}
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> !Send for *mut T {}
>=20
> // Most instances arise automatically, but this instance is needed to link
> up `T: Sync` with // `&T: Send` (and it also removes the unsound default
> instance `T Send` -> `&T: Send` that would // otherwise exist).
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> unsafe impl<T: Sync + ?Sized> Send for &T {}
>=20
> /// Types with a constant size known at compile time.
> ///
> /// All type parameters have an implicit bound of `Sized`. The special
> syntax /// `?Sized` can be used to remove this bound if it's not
> appropriate. ///
> /// ```
> /// # #![allow(dead_code)]
> /// struct Foo<T>(T);
> /// struct Bar<T: ?Sized>(T);
> ///
> /// // struct FooUse(Foo<[i32]>); // error: Sized is not implemented for
> [i32] /// struct BarUse(Bar<[i32]>); // OK
> /// ```
> ///
> /// The one exception is the implicit `Self` type of a trait. A trait does
> not /// have an implicit `Sized` bound as this is incompatible with [trait
> object]s /// where, by definition, the trait needs to work with all
> possible implementors, /// and thus could be any size.
> ///
> /// Although Rust will let you bind `Sized` to a trait, you won't
> /// be able to use it to form a trait object later:
> ///
> /// ```
> /// # #![allow(unused_variables)]
> /// trait Foo { }
> /// trait Bar: Sized { }
> ///
> /// struct Impl;
> /// impl Foo for Impl { }
> /// impl Bar for Impl { }
> ///
> /// let x: &dyn Foo =3D &Impl;    // OK
> /// // let y: &dyn Bar =3D &Impl; // error: the trait `Bar` cannot
> ///                             // be made into an object
> /// ```
> ///
> /// [trait object]: ../../book/ch17-02-trait-objects.html
> #[doc(alias =3D "?", alias =3D "?Sized")]
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> #[lang =3D "sized"]
> #[diagnostic::on_unimplemented(
>     message =3D "the size for values of type `{Self}` cannot be known at
> compilation time", label =3D "doesn't have a size known at compile-time"
> )]
> #[fundamental] // for Default, for example, which requires that `[T]:
> !Default` be evaluatable #[rustc_specialization_trait]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> #[rustc_coinductive]
> pub trait Sized {
>     // Empty.
> }
>=20
> /// Types that can be "unsized" to a dynamically-sized type.
> ///
> /// For example, the sized array type `[i8; 2]` implements `Unsize<[i8]>`
> and /// `Unsize<dyn fmt::Debug>`.
> ///
> /// All implementations of `Unsize` are provided automatically by the
> compiler. /// Those implementations are:
> ///
> /// - Arrays `[T; N]` implement `Unsize<[T]>`.
> /// - A type implements `Unsize<dyn Trait + 'a>` if all of these conditio=
ns
> are met: ///   - The type implements `Trait`.
> ///   - `Trait` is dyn-compatible[^1].
> ///   - The type is sized.
> ///   - The type outlives `'a`.
> /// - Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize<Foo<..., U1,
> ..., Un, ...>>` /// where any number of (type and const) parameters may be
> changed if all of these conditions /// are met:
> ///   - Only the last field of `Foo` has a type involving the parameters
> `T1`, ..., `Tn`. ///   - All other parameters of the struct are equal.
> ///   - `Field<T1, ..., Tn>: Unsize<Field<U1, ..., Un>>`, where `Field<..=
=2E>`
> stands for the actual ///     type of the struct's last field.
> ///
> /// `Unsize` is used along with [`ops::CoerceUnsized`] to allow
> /// "user-defined" containers such as [`Rc`] to contain dynamically-sized
> /// types. See the [DST coercion RFC][RFC982] and [the nomicon entry on
> coercion][nomicon-coerce] /// for more details.
> ///
> /// [`ops::CoerceUnsized`]: crate::ops::CoerceUnsized
> /// [`Rc`]: ../../std/rc/struct.Rc.html
> /// [RFC982]:
> https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md /=
//
> [nomicon-coerce]: ../../nomicon/coercions.html
> /// [^1]: Formerly known as *object safe*.
> #[unstable(feature =3D "unsize", issue =3D "18598")]
> #[lang =3D "unsize"]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait Unsize<T: ?Sized> {
>     // Empty.
> }
>=20
> /// Required trait for constants used in pattern matches.
> ///
> /// Any type that derives `PartialEq` automatically implements this trait,
> /// *regardless* of whether its type-parameters implement `PartialEq`.
> ///
> /// If a `const` item contains some type that does not implement this tra=
it,
> /// then that type either (1.) does not implement `PartialEq` (which means
> the /// constant will not provide that comparison method, which code
> generation /// assumes is available), or (2.) it implements *its own*
> version of /// `PartialEq` (which we assume does not conform to a
> structural-equality /// comparison).
> ///
> /// In either of the two scenarios above, we reject usage of such a const=
ant
> in /// a pattern match.
> ///
> /// See also the [structural match RFC][RFC1445], and [issue 63438] which
> /// motivated migrating from an attribute-based design to this trait.
> ///
> /// [RFC1445]:
> https://github.com/rust-lang/rfcs/blob/master/text/1445-restrict-constant=
s-> in-patterns.md /// [issue 63438]:
> https://github.com/rust-lang/rust/issues/63438
> #[unstable(feature =3D "structural_match", issue =3D "31434")]
> #[diagnostic::on_unimplemented(message =3D "the type `{Self}` does not
> `#[derive(PartialEq)]`")] #[lang =3D "structural_peq"]
> pub trait StructuralPartialEq {
>     // Empty.
> }
>=20
> marker_impls! {
>     #[unstable(feature =3D "structural_match", issue =3D "31434")]
>     StructuralPartialEq for
>         usize, u8, u16, u32, u64, u128,
>         isize, i8, i16, i32, i64, i128,
>         bool,
>         char,
>         str /* Technically requires `[u8]: StructuralPartialEq` */,
>         (),
>         {T, const N: usize} [T; N],
>         {T} [T],
>         {T: ?Sized} &T,
> }
>=20
> /// Types whose values can be duplicated simply by copying bits.
> ///
> /// By default, variable bindings have 'move semantics.' In other
> /// words:
> ///
> /// ```
> /// #[derive(Debug)]
> /// struct Foo;
> ///
> /// let x =3D Foo;
> ///
> /// let y =3D x;
> ///
> /// // `x` has moved into `y`, and so cannot be used
> ///
> /// // println!("{x:?}"); // error: use of moved value
> /// ```
> ///
> /// However, if a type implements `Copy`, it instead has 'copy semantics':
> ///
> /// ```
> /// // We can derive a `Copy` implementation. `Clone` is also required, as
> it's /// // a supertrait of `Copy`.
> /// #[derive(Debug, Copy, Clone)]
> /// struct Foo;
> ///
> /// let x =3D Foo;
> ///
> /// let y =3D x;
> ///
> /// // `y` is a copy of `x`
> ///
> /// println!("{x:?}"); // A-OK!
> /// ```
> ///
> /// It's important to note that in these two examples, the only difference
> is whether you /// are allowed to access `x` after the assignment. Under
> the hood, both a copy and a move /// can result in bits being copied in
> memory, although this is sometimes optimized away. ///
> /// ## How can I implement `Copy`?
> ///
> /// There are two ways to implement `Copy` on your type. The simplest is =
to
> use `derive`: ///
> /// ```
> /// #[derive(Copy, Clone)]
> /// struct MyStruct;
> /// ```
> ///
> /// You can also implement `Copy` and `Clone` manually:
> ///
> /// ```
> /// struct MyStruct;
> ///
> /// impl Copy for MyStruct { }
> ///
> /// impl Clone for MyStruct {
> ///     fn clone(&self) -> MyStruct {
> ///         *self
> ///     }
> /// }
> /// ```
> ///
> /// There is a small difference between the two. The `derive` strategy wi=
ll
> also place a `Copy` /// bound on type parameters:
> ///
> /// ```
> /// #[derive(Clone)]
> /// struct MyStruct<T>(T);
> ///
> /// impl<T: Copy> Copy for MyStruct<T> { }
> /// ```
> ///
> /// This isn't always desired. For example, shared references (`&T`) can =
be
> copied regardless of /// whether `T` is `Copy`. Likewise, a generic struct
> containing markers such as [`PhantomData`] /// could potentially be
> duplicated with a bit-wise copy.
> ///
> /// ## What's the difference between `Copy` and `Clone`?
> ///
> /// Copies happen implicitly, for example as part of an assignment `y =3D=
 x`.
> The behavior of /// `Copy` is not overloadable; it is always a simple
> bit-wise copy. ///
> /// Cloning is an explicit action, `x.clone()`. The implementation of
> [`Clone`] can /// provide any type-specific behavior necessary to duplica=
te
> values safely. For example, /// the implementation of [`Clone`] for
> [`String`] needs to copy the pointed-to string /// buffer in the heap. A
> simple bitwise copy of [`String`] values would merely copy the /// pointe=
r,
> leading to a double free down the line. For this reason, [`String`] is
> [`Clone`] /// but not `Copy`.
> ///
> /// [`Clone`] is a supertrait of `Copy`, so everything which is `Copy` mu=
st
> also implement /// [`Clone`]. If a type is `Copy` then its [`Clone`]
> implementation only needs to return `*self` /// (see the example above).
> ///
> /// ## When can my type be `Copy`?
> ///
> /// A type can implement `Copy` if all of its components implement `Copy`.
> For example, this /// struct can be `Copy`:
> ///
> /// ```
> /// # #[allow(dead_code)]
> /// #[derive(Copy, Clone)]
> /// struct Point {
> ///    x: i32,
> ///    y: i32,
> /// }
> /// ```
> ///
> /// A struct can be `Copy`, and [`i32`] is `Copy`, therefore `Point` is
> eligible to be `Copy`. /// By contrast, consider
> ///
> /// ```
> /// # #![allow(dead_code)]
> /// # struct Point;
> /// struct PointList {
> ///     points: Vec<Point>,
> /// }
> /// ```
> ///
> /// The struct `PointList` cannot implement `Copy`, because [`Vec<T>`] is
> not `Copy`. If we /// attempt to derive a `Copy` implementation, we'll get
> an error: ///
> /// ```text
> /// the trait `Copy` cannot be implemented for this type; field `points`
> does not implement `Copy` /// ```
> ///
> /// Shared references (`&T`) are also `Copy`, so a type can be `Copy`, ev=
en
> when it holds /// shared references of types `T` that are *not* `Copy`.
> Consider the following struct, /// which can implement `Copy`, because it
> only holds a *shared reference* to our non-`Copy` /// type `PointList` fr=
om
> above:
> ///
> /// ```
> /// # #![allow(dead_code)]
> /// # struct PointList;
> /// #[derive(Copy, Clone)]
> /// struct PointListWrapper<'a> {
> ///     point_list_ref: &'a PointList,
> /// }
> /// ```
> ///
> /// ## When *can't* my type be `Copy`?
> ///
> /// Some types can't be copied safely. For example, copying `&mut T` would
> create an aliased /// mutable reference. Copying [`String`] would duplica=
te
> responsibility for managing the /// [`String`]'s buffer, leading to a
> double free.
> ///
> /// Generalizing the latter case, any type implementing [`Drop`] can't be
> `Copy`, because it's /// managing some resource besides its own
> [`size_of::<T>`] bytes. ///
> /// If you try to implement `Copy` on a struct or enum containing non-`Co=
py`
> data, you will get /// the error [E0204].
> ///
> /// [E0204]: ../../error_codes/E0204.html
> ///
> /// ## When *should* my type be `Copy`?
> ///
> /// Generally speaking, if your type _can_ implement `Copy`, it should. K=
eep
> in mind, though, /// that implementing `Copy` is part of the public API of
> your type. If the type might become /// non-`Copy` in the future, it could
> be prudent to omit the `Copy` implementation now, to /// avoid a breaking
> API change.
> ///
> /// ## Additional implementors
> ///
> /// In addition to the [implementors listed below][impls],
> /// the following types also implement `Copy`:
> ///
> /// * Function item types (i.e., the distinct types defined for each
> function) /// * Function pointer types (e.g., `fn() -> i32`)
> /// * Closure types, if they capture no value from the environment
> ///   or if all such captured values implement `Copy` themselves.
> ///   Note that variables captured by shared reference always implement
> `Copy` ///   (even if the referent doesn't),
> ///   while variables captured by mutable reference never implement `Copy=
`.
> ///
> /// [`Vec<T>`]: ../../std/vec/struct.Vec.html
> /// [`String`]: ../../std/string/struct.String.html
> /// [`size_of::<T>`]: crate::mem::size_of
> /// [impls]: #implementors
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> #[lang =3D "copy"]
> // FIXME(matthewjasper) This allows copying a type that doesn't implement
> // `Copy` because of unsatisfied lifetime bounds (copying `A<'_>` when on=
ly
> // `A<'static>: Copy` and `A<'_>: Clone`).
> // We have this attribute here for now only because there are quite a few
> // existing specializations on `Copy` that already exist in the standard
> // library, and there's no way to safely have this behavior right now.
> #[rustc_unsafe_specialization_marker]
> #[rustc_diagnostic_item =3D "Copy"]
> pub trait Copy: Clone {
>     // Empty.
> }
>=20
> /// Derive macro generating an impl of the trait `Copy`.
> #[rustc_builtin_macro]
> #[stable(feature =3D "builtin_macro_prelude", since =3D "1.38.0")]
> #[allow_internal_unstable(core_intrinsics, derive_clone_copy)]
> pub macro Copy($item:item) {
>     /* compiler built-in */
> }
>=20
> // Implementations of `Copy` for primitive types.
> //
> // Implementations that cannot be described in Rust
> // are implemented in `traits::SelectionContext::copy_clone_conditions()`
> // in `rustc_trait_selection`.
> marker_impls! {
>     #[stable(feature =3D "rust1", since =3D "1.0.0")]
>     Copy for
>         usize, u8, u16, u32, u64, u128,
>         isize, i8, i16, i32, i64, i128,
>         f16, f32, f64, f128,
>         bool, char,
>         {T: ?Sized} *const T,
>         {T: ?Sized} *mut T,
>=20
> }
>=20
> #[unstable(feature =3D "never_type", issue =3D "35121")]
> impl Copy for ! {}
>=20
> /// Shared references can be copied, but mutable references *cannot*!
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Copy for &T {}
>=20
> /// Types for which it is safe to share references between threads.
> ///
> /// This trait is automatically implemented when the compiler determines
> /// it's appropriate.
> ///
> /// The precise definition is: a type `T` is [`Sync`] if and only if `&T`=
 is
> /// [`Send`]. In other words, if there is no possibility of
> /// [undefined behavior][ub] (including data races) when passing
> /// `&T` references between threads.
> ///
> /// As one would expect, primitive types like [`u8`] and [`f64`]
> /// are all [`Sync`], and so are simple aggregate types containing them,
> /// like tuples, structs and enums. More examples of basic [`Sync`]
> /// types include "immutable" types like `&T`, and those with simple
> /// inherited mutability, such as [`Box<T>`][box], [`Vec<T>`][vec] and
> /// most other collection types. (Generic parameters need to be [`Sync`]
> /// for their container to be [`Sync`].)
> ///
> /// A somewhat surprising consequence of the definition is that `&mut T`
> /// is `Sync` (if `T` is `Sync`) even though it seems like that might
> /// provide unsynchronized mutation. The trick is that a mutable
> /// reference behind a shared reference (that is, `& &mut T`)
> /// becomes read-only, as if it were a `& &T`. Hence there is no risk
> /// of a data race.
> ///
> /// A shorter overview of how [`Sync`] and [`Send`] relate to referencing:
> /// * `&T` is [`Send`] if and only if `T` is [`Sync`]
> /// * `&mut T` is [`Send`] if and only if `T` is [`Send`]
> /// * `&T` and `&mut T` are [`Sync`] if and only if `T` is [`Sync`]
> ///
> /// Types that are not `Sync` are those that have "interior
> /// mutability" in a non-thread-safe form, such as [`Cell`][cell]
> /// and [`RefCell`][refcell]. These types allow for mutation of
> /// their contents even through an immutable, shared reference. For
> /// example the `set` method on [`Cell<T>`][cell] takes `&self`, so it
> requires /// only a shared reference [`&Cell<T>`][cell]. The method
> performs no /// synchronization, thus [`Cell`][cell] cannot be `Sync`.
> ///
> /// Another example of a non-`Sync` type is the reference-counting
> /// pointer [`Rc`][rc]. Given any reference [`&Rc<T>`][rc], you can clone
> /// a new [`Rc<T>`][rc], modifying the reference counts in a non-atomic w=
ay.
> ///
> /// For cases when one does need thread-safe interior mutability,
> /// Rust provides [atomic data types], as well as explicit locking via
> /// [`sync::Mutex`][mutex] and [`sync::RwLock`][rwlock]. These types
> /// ensure that any mutation cannot cause data races, hence the types
> /// are `Sync`. Likewise, [`sync::Arc`][arc] provides a thread-safe
> /// analogue of [`Rc`][rc].
> ///
> /// Any types with interior mutability must also use the
> /// [`cell::UnsafeCell`][unsafecell] wrapper around the value(s) which
> /// can be mutated through a shared reference. Failing to doing this is
> /// [undefined behavior][ub]. For example, [`transmute`][transmute]-ing
> /// from `&T` to `&mut T` is invalid.
> ///
> /// See [the Nomicon][nomicon-send-and-sync] for more details about `Sync=
`.
> ///
> /// [box]: ../../std/boxed/struct.Box.html
> /// [vec]: ../../std/vec/struct.Vec.html
> /// [cell]: crate::cell::Cell
> /// [refcell]: crate::cell::RefCell
> /// [rc]: ../../std/rc/struct.Rc.html
> /// [arc]: ../../std/sync/struct.Arc.html
> /// [atomic data types]: crate::sync::atomic
> /// [mutex]: ../../std/sync/struct.Mutex.html
> /// [rwlock]: ../../std/sync/struct.RwLock.html
> /// [unsafecell]: crate::cell::UnsafeCell
> /// [ub]: ../../reference/behavior-considered-undefined.html
> /// [transmute]: crate::mem::transmute
> /// [nomicon-send-and-sync]: ../../nomicon/send-and-sync.html
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> #[cfg_attr(not(test), rustc_diagnostic_item =3D "Sync")]
> #[lang =3D "sync"]
> #[rustc_on_unimplemented(
>     on(
>         _Self =3D "core::cell::once::OnceCell<T>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::OnceLock` instead" ),
>     on(
>         _Self =3D "core::cell::Cell<u8>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead=
",
> ),
>     on(
>         _Self =3D "core::cell::Cell<u16>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<u32>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<u64>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<usize>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<i8>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead=
",
> ),
>     on(
>         _Self =3D "core::cell::Cell<i16>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<i32>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<i64>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<isize>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize`
> instead", ),
>     on(
>         _Self =3D "core::cell::Cell<bool>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool`
> instead", ),
>     on(
>         all(
>             _Self =3D "core::cell::Cell<T>",
>             not(_Self =3D "core::cell::Cell<u8>"),
>             not(_Self =3D "core::cell::Cell<u16>"),
>             not(_Self =3D "core::cell::Cell<u32>"),
>             not(_Self =3D "core::cell::Cell<u64>"),
>             not(_Self =3D "core::cell::Cell<usize>"),
>             not(_Self =3D "core::cell::Cell<i8>"),
>             not(_Self =3D "core::cell::Cell<i16>"),
>             not(_Self =3D "core::cell::Cell<i32>"),
>             not(_Self =3D "core::cell::Cell<i64>"),
>             not(_Self =3D "core::cell::Cell<isize>"),
>             not(_Self =3D "core::cell::Cell<bool>")
>         ),
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock`", ),
>     on(
>         _Self =3D "core::cell::RefCell<T>",
>         note =3D "if you want to do aliasing and mutation between multiple
> threads, use `std::sync::RwLock` instead", ),
>     message =3D "`{Self}` cannot be shared between threads safely",
>     label =3D "`{Self}` cannot be shared between threads safely"
> )]
> pub unsafe auto trait Sync {
>     // FIXME(estebank): once support to add notes in
> `rustc_on_unimplemented` // lands in beta, and it has been extended to
> check whether a closure is // anywhere in the requirement chain, extend it
> as such (#48534): // ```
>     // on(
>     //     closure,
>     //     note=3D"`{Self}` cannot be shared safely, consider marking the
> closure `move`" // ),
>     // ```
>=20
>     // Empty
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> !Sync for *const T {}
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> !Sync for *mut T {}
>=20
> /// Zero-sized type used to mark things that "act like" they own a `T`.
> ///
> /// Adding a `PhantomData<T>` field to your type tells the compiler that
> your /// type acts as though it stores a value of type `T`, even though it
> doesn't /// really. This information is used when computing certain safety
> properties. ///
> /// For a more in-depth explanation of how to use `PhantomData<T>`, please
> see /// [the Nomicon](../../nomicon/phantom-data.html).
> ///
> /// # A ghastly note =F0=9F=91=BB=F0=9F=91=BB=F0=9F=91=BB
> ///
> /// Though they both have scary names, `PhantomData` and 'phantom types' =
are
> /// related, but not identical. A phantom type parameter is simply a type
> /// parameter which is never used. In Rust, this often causes the compiler
> to /// complain, and the solution is to add a "dummy" use by way of
> `PhantomData`. ///
> /// # Examples
> ///
> /// ## Unused lifetime parameters
> ///
> /// Perhaps the most common use case for `PhantomData` is a struct that h=
as
> an /// unused lifetime parameter, typically as part of some unsafe code.
> For /// example, here is a struct `Slice` that has two pointers of type
> `*const T`, /// presumably pointing into an array somewhere:
> ///
> /// ```compile_fail,E0392
> /// struct Slice<'a, T> {
> ///     start: *const T,
> ///     end: *const T,
> /// }
> /// ```
> ///
> /// The intention is that the underlying data is only valid for the
> /// lifetime `'a`, so `Slice` should not outlive `'a`. However, this
> /// intent is not expressed in the code, since there are no uses of
> /// the lifetime `'a` and hence it is not clear what data it applies
> /// to. We can correct this by telling the compiler to act *as if* the
> /// `Slice` struct contained a reference `&'a T`:
> ///
> /// ```
> /// use std::marker::PhantomData;
> ///
> /// # #[allow(dead_code)]
> /// struct Slice<'a, T> {
> ///     start: *const T,
> ///     end: *const T,
> ///     phantom: PhantomData<&'a T>,
> /// }
> /// ```
> ///
> /// This also in turn infers the lifetime bound `T: 'a`, indicating
> /// that any references in `T` are valid over the lifetime `'a`.
> ///
> /// When initializing a `Slice` you simply provide the value
> /// `PhantomData` for the field `phantom`:
> ///
> /// ```
> /// # #![allow(dead_code)]
> /// # use std::marker::PhantomData;
> /// # struct Slice<'a, T> {
> /// #     start: *const T,
> /// #     end: *const T,
> /// #     phantom: PhantomData<&'a T>,
> /// # }
> /// fn borrow_vec<T>(vec: &Vec<T>) -> Slice<'_, T> {
> ///     let ptr =3D vec.as_ptr();
> ///     Slice {
> ///         start: ptr,
> ///         end: unsafe { ptr.add(vec.len()) },
> ///         phantom: PhantomData,
> ///     }
> /// }
> /// ```
> ///
> /// ## Unused type parameters
> ///
> /// It sometimes happens that you have unused type parameters which
> /// indicate what type of data a struct is "tied" to, even though that
> /// data is not actually found in the struct itself. Here is an
> /// example where this arises with [FFI]. The foreign interface uses
> /// handles of type `*mut ()` to refer to Rust values of different
> /// types. We track the Rust type using a phantom type parameter on
> /// the struct `ExternalResource` which wraps a handle.
> ///
> /// [FFI]:
> ../../book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-extern=
al
> -code ///
> /// ```
> /// # #![allow(dead_code)]
> /// # trait ResType { }
> /// # struct ParamType;
> /// # mod foreign_lib {
> /// #     pub fn new(_: usize) -> *mut () { 42 as *mut () }
> /// #     pub fn do_stuff(_: *mut (), _: usize) {}
> /// # }
> /// # fn convert_params(_: ParamType) -> usize { 42 }
> /// use std::marker::PhantomData;
> /// use std::mem;
> ///
> /// struct ExternalResource<R> {
> ///    resource_handle: *mut (),
> ///    resource_type: PhantomData<R>,
> /// }
> ///
> /// impl<R: ResType> ExternalResource<R> {
> ///     fn new() -> Self {
> ///         let size_of_res =3D mem::size_of::<R>();
> ///         Self {
> ///             resource_handle: foreign_lib::new(size_of_res),
> ///             resource_type: PhantomData,
> ///         }
> ///     }
> ///
> ///     fn do_stuff(&self, param: ParamType) {
> ///         let foreign_params =3D convert_params(param);
> ///         foreign_lib::do_stuff(self.resource_handle, foreign_params);
> ///     }
> /// }
> /// ```
> ///
> /// ## Ownership and the drop check
> ///
> /// The exact interaction of `PhantomData` with drop check **may change in
> the future**. ///
> /// Currently, adding a field of type `PhantomData<T>` indicates that your
> type *owns* data of type /// `T` in very rare circumstances. This in turn
> has effects on the Rust compiler's [drop check] /// analysis. For the exa=
ct
> rules, see the [drop check] documentation. ///
> /// ## Layout
> ///
> /// For all `T`, the following are guaranteed:
> /// * `size_of::<PhantomData<T>>() =3D=3D 0`
> /// * `align_of::<PhantomData<T>>() =3D=3D 1`
> ///
> /// [drop check]: Drop#drop-check
> #[lang =3D "phantom_data"]
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> pub struct PhantomData<T: ?Sized>;
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Hash for PhantomData<T> {
>     #[inline]
>     fn hash<H: Hasher>(&self, _: &mut H) {}
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> cmp::PartialEq for PhantomData<T> {
>     fn eq(&self, _other: &PhantomData<T>) -> bool {
>         true
>     }
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> cmp::Eq for PhantomData<T> {}
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> cmp::PartialOrd for PhantomData<T> {
>     fn partial_cmp(&self, _other: &PhantomData<T>) -> Option<cmp::Orderin=
g>
> { Option::Some(cmp::Ordering::Equal)
>     }
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> cmp::Ord for PhantomData<T> {
>     fn cmp(&self, _other: &PhantomData<T>) -> cmp::Ordering {
>         cmp::Ordering::Equal
>     }
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Copy for PhantomData<T> {}
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Clone for PhantomData<T> {
>     fn clone(&self) -> Self {
>         Self
>     }
> }
>=20
> #[stable(feature =3D "rust1", since =3D "1.0.0")]
> impl<T: ?Sized> Default for PhantomData<T> {
>     fn default() -> Self {
>         Self
>     }
> }
>=20
> #[unstable(feature =3D "structural_match", issue =3D "31434")]
> impl<T: ?Sized> StructuralPartialEq for PhantomData<T> {}
>=20
> /// Compiler-internal trait used to indicate the type of enum discriminan=
ts.
> ///
> /// This trait is automatically implemented for every type and does not a=
dd
> any /// guarantees to [`mem::Discriminant`]. It is **undefined behavior**
> to transmute /// between `DiscriminantKind::Discriminant` and
> `mem::Discriminant`. ///
> /// [`mem::Discriminant`]: crate::mem::Discriminant
> #[unstable(
>     feature =3D "discriminant_kind",
>     issue =3D "none",
>     reason =3D "this trait is unlikely to ever be stabilized, use
> `mem::discriminant` instead" )]
> #[lang =3D "discriminant_kind"]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait DiscriminantKind {
>     /// The type of the discriminant, which must satisfy the trait
>     /// bounds required by `mem::Discriminant`.
>     #[lang =3D "discriminant_type"]
>     type Discriminant: Clone + Copy + Debug + Eq + PartialEq + Hash + Sen=
d +
> Sync + Unpin; }
>=20
> /// Used to determine whether a type contains
> /// any `UnsafeCell` internally, but not through an indirection.
> /// This affects, for example, whether a `static` of that type is
> /// placed in read-only static memory or writable static memory.
> /// This can be used to declare that a constant with a generic type
> /// will not contain interior mutability, and subsequently allow
> /// placing the constant behind references.
> ///
> /// # Safety
> ///
> /// This trait is a core part of the language, it is just expressed as a
> trait in libcore for /// convenience. Do *not* implement it for other
> types.
> // FIXME: Eventually this trait should become `#[rustc_deny_explicit_impl=
]`.
> // That requires porting the impls below to native internal impls. #[lang=
 =3D
> "freeze"]
> #[unstable(feature =3D "freeze", issue =3D "121675")]
> pub unsafe auto trait Freeze {}
>=20
> #[unstable(feature =3D "freeze", issue =3D "121675")]
> impl<T: ?Sized> !Freeze for UnsafeCell<T> {}
> marker_impls! {
>     #[unstable(feature =3D "freeze", issue =3D "121675")]
>     unsafe Freeze for
>         {T: ?Sized} PhantomData<T>,
>         {T: ?Sized} *const T,
>         {T: ?Sized} *mut T,
>         {T: ?Sized} &T,
>         {T: ?Sized} &mut T,
> }
>=20
> /// Types that do not require any pinning guarantees.
> ///
> /// For information on what "pinning" is, see the [`pin` module]
> documentation. ///
> /// Implementing the `Unpin` trait for `T` expresses the fact that `T` is
> pinning-agnostic: /// it shall not expose nor rely on any pinning
> guarantees. This, in turn, means that a /// `Pin`-wrapped pointer to such=
 a
> type can feature a *fully unrestricted* API. /// In other words, if `T:
> Unpin`, a value of type `T` will *not* be bound by the invariants /// whi=
ch
> pinning otherwise offers, even when "pinned" by a [`Pin<Ptr>`] pointing at
> it. /// When a value of type `T` is pointed at by a [`Pin<Ptr>`], [`Pin`]
> will not restrict access /// to the pointee value like it normally would,
> thus allowing the user to do anything that they /// normally could with a
> non-[`Pin`]-wrapped `Ptr` to that value. ///
> /// The idea of this trait is to alleviate the reduced ergonomics of APIs
> that require the use /// of [`Pin`] for soundness for some types, but whi=
ch
> also want to be used by other types that /// don't care about pinning. The
> prime example of such an API is [`Future::poll`]. There are many ///
> [`Future`] types that don't care about pinning. These futures can impleme=
nt
> `Unpin` and /// therefore get around the pinning related restrictions in
> the API, while still allowing the /// subset of [`Future`]s which *do*
> require pinning to be implemented soundly. ///
> /// For more discussion on the consequences of [`Unpin`] within the wider
> scope of the pinning /// system, see the [section about `Unpin`] in the
> [`pin` module]. ///
> /// `Unpin` has no consequence at all for non-pinned data. In particular,
> [`mem::replace`] happily /// moves `!Unpin` data, which would be immovable
> when pinned ([`mem::replace`] works for any /// `&mut T`, not just when `=
T:
> Unpin`).
> ///
> /// *However*, you cannot use [`mem::replace`] on `!Unpin` data which is
> *pinned* by being wrapped /// inside a [`Pin<Ptr>`] pointing at it. This =
is
> because you cannot (safely) use a /// [`Pin<Ptr>`] to get a `&mut T` to i=
ts
> pointee value, which you would need to call /// [`mem::replace`], and
> *that* is what makes this system work.
> ///
> /// So this, for example, can only be done on types implementing `Unpin`:
> ///
> /// ```rust
> /// # #![allow(unused_must_use)]
> /// use std::mem;
> /// use std::pin::Pin;
> ///
> /// let mut string =3D "this".to_string();
> /// let mut pinned_string =3D Pin::new(&mut string);
> ///
> /// // We need a mutable reference to call `mem::replace`.
> /// // We can obtain such a reference by (implicitly) invoking
> `Pin::deref_mut`, /// // but that is only possible because `String`
> implements `Unpin`. /// mem::replace(&mut *pinned_string,
> "other".to_string());
> /// ```
> ///
> /// This trait is automatically implemented for almost every type. The
> compiler is free /// to take the conservative stance of marking types as
> [`Unpin`] so long as all of the types that /// compose its fields are also
> [`Unpin`]. This is because if a type implements [`Unpin`], then it /// is
> unsound for that type's implementation to rely on pinning-related
> guarantees for soundness, /// *even* when viewed through a "pinning"
> pointer! It is the responsibility of the implementor of /// a type that
> relies upon pinning for soundness to ensure that type is *not* marked as
> [`Unpin`] /// by adding [`PhantomPinned`] field. For more details, see the
> [`pin` module] docs. ///
> /// [`mem::replace`]: crate::mem::replace "mem replace"
> /// [`Future`]: crate::future::Future "Future"
> /// [`Future::poll`]: crate::future::Future::poll "Future poll"
> /// [`Pin`]: crate::pin::Pin "Pin"
> /// [`Pin<Ptr>`]: crate::pin::Pin "Pin"
> /// [`pin` module]: crate::pin "pin module"
> /// [section about `Unpin`]: crate::pin#unpin "pin module docs about unpi=
n"
> /// [`unsafe`]: ../../std/keyword.unsafe.html "keyword unsafe"
> #[stable(feature =3D "pin", since =3D "1.33.0")]
> #[diagnostic::on_unimplemented(
>     note =3D "consider using the `pin!` macro\nconsider using `Box::pin` =
if
> you need to access the pinned value outside of the current scope", message
> =3D "`{Self}` cannot be unpinned"
> )]
> #[lang =3D "unpin"]
> pub auto trait Unpin {}
>=20
> /// A marker type which does not implement `Unpin`.
> ///
> /// If a type contains a `PhantomPinned`, it will not implement `Unpin` by
> default. #[stable(feature =3D "pin", since =3D "1.33.0")]
> #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Has=
h)]
> pub struct PhantomPinned;
>=20
> #[stable(feature =3D "pin", since =3D "1.33.0")]
> impl !Unpin for PhantomPinned {}
>=20
> marker_impls! {
>     #[stable(feature =3D "pin", since =3D "1.33.0")]
>     Unpin for
>         {T: ?Sized} &T,
>         {T: ?Sized} &mut T,
> }
>=20
> marker_impls! {
>     #[stable(feature =3D "pin_raw", since =3D "1.38.0")]
>     Unpin for
>         {T: ?Sized} *const T,
>         {T: ?Sized} *mut T,
> }
>=20
> /// A marker for types that can be dropped.
> ///
> /// This should be used for `~const` bounds,
> /// as non-const bounds will always hold for every type.
> #[unstable(feature =3D "const_destruct", issue =3D "133214")]
> #[lang =3D "destruct"]
> #[rustc_on_unimplemented(message =3D "can't drop `{Self}`", append_const_=
msg)]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> #[cfg_attr(not(bootstrap), const_trait)]
> pub trait Destruct {}
>=20
> /// A marker for tuple types.
> ///
> /// The implementation of this trait is built-in and cannot be implemented
> /// for any user type.
> #[unstable(feature =3D "tuple_trait", issue =3D "none")]
> #[lang =3D "tuple_trait"]
> #[diagnostic::on_unimplemented(message =3D "`{Self}` is not a tuple")]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait Tuple {}
>=20
> /// A marker for pointer-like types.
> ///
> /// This trait can only be implemented for types that are certain to have
> /// the same size and alignment as a [`usize`] or [`*const ()`](pointer).
> /// To ensure this, there are special requirements on implementations
> /// of `PointerLike` (other than the already-provided implementations
> /// for built-in types):
> ///
> /// * The type must have `#[repr(transparent)]`.
> /// * The type=E2=80=99s sole non-zero-sized field must itself implement
> `PointerLike`. #[unstable(feature =3D "pointer_like_trait", issue =3D "no=
ne")]
> #[lang =3D "pointer_like"]
> #[diagnostic::on_unimplemented(
>     message =3D "`{Self}` needs to have the same ABI as a pointer",
>     label =3D "`{Self}` needs to be a pointer-like type"
> )]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait PointerLike {}
>=20
> #[cfg(not(bootstrap))]
> marker_impls! {
>     #[unstable(feature =3D "pointer_like_trait", issue =3D "none")]
>     PointerLike for
>         isize,
>         usize,
>         {T} &T,
>         {T} &mut T,
>         {T} *const T,
>         {T} *mut T,
>         {T: PointerLike} crate::pin::Pin<T>,
> }
>=20
> /// A marker for types which can be used as types of `const` generic
> parameters. ///
> /// These types must have a proper equivalence relation (`Eq`) and it must
> be automatically /// derived (`StructuralPartialEq`). There's a hard-coded
> check in the compiler ensuring /// that all fields are also `ConstParamTy=
`,
> which implies that recursively, all fields /// are `StructuralPartialEq`.
> #[lang =3D "const_param_ty"]
> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
> #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a c=
onst
> parameter type")] #[allow(multiple_supertrait_upcastable)]
> // We name this differently than the derive macro so that the
> `adt_const_params` can // be used independently of `unsized_const_params`
> without requiring a full path // to the derive macro every time it is use=
d.
> This should be renamed on stabilization. pub trait ConstParamTy_:
> UnsizedConstParamTy + StructuralPartialEq + Eq {}
>=20
> /// Derive macro generating an impl of the trait `ConstParamTy`.
> #[rustc_builtin_macro]
> #[allow_internal_unstable(unsized_const_params)]
> #[unstable(feature =3D "adt_const_params", issue =3D "95174")]
> pub macro ConstParamTy($item:item) {
>     /* compiler built-in */
> }
>=20
> #[lang =3D "unsized_const_param_ty"]
> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
> #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a c=
onst
> parameter type")] /// A marker for types which can be used as types of
> `const` generic parameters. ///
> /// Equivalent to [`ConstParamTy_`] except that this is used by
> /// the `unsized_const_params` to allow for fake unstable impls.
> pub trait UnsizedConstParamTy: StructuralPartialEq + Eq {}
>=20
> /// Derive macro generating an impl of the trait `ConstParamTy`.
> #[rustc_builtin_macro]
> #[allow_internal_unstable(unsized_const_params)]
> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
> pub macro UnsizedConstParamTy($item:item) {
>     /* compiler built-in */
> }
>=20
> // FIXME(adt_const_params): handle `ty::FnDef`/`ty::Closure`
> marker_impls! {
>     #[unstable(feature =3D "adt_const_params", issue =3D "95174")]
>     ConstParamTy_ for
>         usize, u8, u16, u32, u64, u128,
>         isize, i8, i16, i32, i64, i128,
>         bool,
>         char,
>         (),
>         {T: ConstParamTy_, const N: usize} [T; N],
> }
>=20
> marker_impls! {
>     #[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
>     UnsizedConstParamTy for
>         usize, u8, u16, u32, u64, u128,
>         isize, i8, i16, i32, i64, i128,
>         bool,
>         char,
>         (),
>         {T: UnsizedConstParamTy, const N: usize} [T; N],
>=20
>         str,
>         {T: UnsizedConstParamTy} [T],
>         {T: UnsizedConstParamTy + ?Sized} &T,
> }
>=20
> /// A common trait implemented by all function pointers.
> #[unstable(
>     feature =3D "fn_ptr_trait",
>     issue =3D "none",
>     reason =3D "internal trait for implementing various traits for all
> function pointers" )]
> #[lang =3D "fn_ptr_trait"]
> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D
> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
> pub trait FnPtr: Copy + Clone {
>     /// Returns the address of the function pointer.
>     #[lang =3D "fn_ptr_addr"]
>     fn addr(self) -> *const ();
> }
>=20
> /// Derive macro generating impls of traits related to smart pointers.
> #[rustc_builtin_macro(CoercePointee, attributes(pointee))]
> #[allow_internal_unstable(dispatch_from_dyn, coerce_unsized, unsize)]
> #[unstable(feature =3D "derive_coerce_pointee", issue =3D "123430")]
> #[cfg(not(bootstrap))]
> pub macro CoercePointee($item:item) {
>     /* compiler built-in */
> }
>=20
>=20
> ```
>=20
>=20
> In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
>  3.24.43, cairo version 1.18.2) of 2025-04-17 built on Mufasa
> Repository revision: 7b35a5062231ec5a11c7a87d4797cfb5dba25121
> Repository branch: feature/igc
> System Description: NixOS 24.11 (Vicuna)
>=20
> Configured using:
>  'configure 'CFLAGS=3D-O3 -march=3Dnative'
>  --prefix=3D/home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feat=
ure_i
> gc-7b35a5062231ec5a11c7a87d4797cfb5dba25121-O3 --with-mps=3Dyes
> --with-imagemagick --with-modules --with-pgtk
>  --with-cairo --with-cairo-xcb --without-compress-install
>  --with-mailutils --with-tree-sitter --with-xinput2
>  --enable-link-time-optimization --with-file-notification=3Dinotify'
>=20
> Configured features:
> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ
> IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 MODULES MPS NATIVE_COMP NOTIFY
> INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
> TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB
>=20
> Important settings:
>   value of $LC_COLLATE: C
>   value of $LC_MONETARY: en_US.UTF-8
>   value of $LC_NUMERIC: en_US.UTF-8
>   value of $LC_TIME: C
>   value of $LANG: en_US.UTF-8
>   value of $XMODIFIERS: @im=3Dfcitx
>   locale-coding-system: utf-8-unix
>=20
> Major mode: Elisp/l
>=20
> Minor modes in effect:
>   restore-point-mode: t
>   global-atomic-chrome-edit-mode: t
>   global-git-gutter-mode: t
>   git-gutter-mode: t
>   marginalia-mode: t
>   elisp-def-mode: t
>   flycheck-posframe-mode: t
>   hungry-delete-mode: t
>   symbol-overlay-mode: t
>   keycast-tab-bar-mode: t
>   vertico-truncate-mode: t
>   vertico-multiform-mode: t
>   vertico-mode: t
>   telega-root-auto-fill-mode: t
>   telega-contact-birthdays-mode: t
>   telega-active-video-chats-mode: t
>   telega-active-locations-mode: t
>   telega-patrons-mode: t
>   telega-active-stories-mode: t
>   tab-line-nerd-icons-global-mode: t
>   global-tab-line-mode: t
>   tab-line-mode: t
>   ultra-scroll-mode: t
>   pixel-scroll-precision-mode: t
>   org-roam-db-autosync-mode: t
>   global-org-modern-mode: t
>   mu4e-modeline-mode: t
>   global-kkp-mode: t
>   global-git-commit-mode: t
>   flycheck-mode: t
>   engine-mode: t
>   symex-mode: t
>   global-evil-surround-mode: t
>   evil-surround-mode: t
>   yas-global-mode: t
>   yas-minor-mode: t
>   corfu-terminal-mode: t
>   corfu-history-mode: t
>   global-corfu-mode: t
>   corfu-mode: t
>   rainbow-mode: t
>   elisp-autofmt-mode: t
>   highlight-defined-mode: t
>   highlight-numbers-mode: t
>   hes-mode: t
>   rainbow-delimiters-mode: t
>   burly-tabs-mode: t
>   global-form-feed-st-mode: t
>   form-feed-st-mode: t
>   eat-eshell-mode: t
>   sly-symbol-completion-mode: t
>   super-save-mode: t
>   savehist-mode: t
>   which-key-mode: t
>   super-hint-xref-mode: t
>   super-hint-rg-mode: t
>   windmove-mode: t
>   server-mode: t
>   save-place-mode: t
>   recentf-mode: t
>   winner-mode: t
>   persistent-scratch-autosave-mode: t
>   global-dash-fontify-mode: t
>   dash-fontify-mode: t
>   nerd-icons-completion-mode: t
>   sudo-edit-indicator-mode: t
>   global-evil-visualstar-mode: t
>   evil-visualstar-mode: t
>   evil-commentary-mode: t
>   global-evil-mc-mode: t
>   evil-mc-mode: t
>   evil-lion-mode: t
>   global-evil-collection-unimpaired-mode: t
>   evil-collection-unimpaired-mode: t
>   buffer-face-mode: t
>   TeX-PDF-mode: t
>   display-line-numbers-mode: t
>   electric-pair-mode: t
>   global-auto-revert-mode: t
>   evil-mode: t
>   evil-local-mode: t
>   general-override-mode: t
>   minions-mode: t
>   el-patch-use-package-mode: t
>   elpaca-use-package-mode: t
>   override-global-mode: t
>   tooltip-mode: t
>   global-eldoc-mode: t
>   eldoc-mode: t
>   show-paren-mode: t
>   electric-indent-mode: t
>   mouse-wheel-mode: t
>   tab-bar-mode: t
>   file-name-shadow-mode: t
>   context-menu-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   minibuffer-regexp-mode: t
>   column-number-mode: -1
>   line-number-mode: -1
>   transient-mark-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>=20
> Load-path shadows:
> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
> /home/exec/.emacs.d/elpaca/builds/standard-themes/theme-loaddefs
> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
> /home/exec/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs
> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides
> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35=
a5
> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/theme-load=
def
> s /home/exec/.emacs.d/elpaca/builds/transient/transient hides
> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35=
a5
> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/transient
>=20
> Features:
> (shadow sort mail-extr expand-region yaml-mode-expansions
> subword-mode-expansions text-mode-expansions cc-mode-expansions
> the-org-mode-expansions python-el-fgallina-expansions
> latex-mode-expansions js2-mode-expansions js-mode-expansions
> web-mode-expansions html-mode-expansions clojure-mode-expansions
> er-basic-expansions expand-region-core expand-region-custom
> evil-collection-embark embark-org embark-consult embark gptel-curl
> nerd-icons-dired diredfl info-colors vertico-sort cus-start descr-text
> dabbrev cape lsp-diagnostics lsp-modeline lsp-icons lsp-zig lsp-yang
> lsp-yaml lsp-xml lsp-wgsl lsp-volar lsp-vimscript lsp-vhdl lsp-vetur
> lsp-html lsp-verilog lsp-vala lsp-v lsp-typespec lsp-typeprof lsp-ttcn3
> lsp-ts-query lsp-trunk lsp-toml lsp-tilt lsp-tex lsp-terraform
> lsp-svelte lsp-steep lsp-sqls lsp-sql lsp-sorbet lsp-solidity
> lsp-solargraph lsp-semgrep lsp-ruff lsp-ruby-syntax-tree lsp-ruby-lsp
> lsp-rubocop lsp-roslyn lsp-roc lsp-rf lsp-remark lsp-racket lsp-r
> lsp-qml lsp-pyright lsp-pylsp lsp-pyls lsp-pwsh lsp-purescript lsp-pls
> lsp-php lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-nushell
> lsp-nix lsp-nim lsp-nginx lsp-nextflow lsp-move lsp-mojo lsp-mint
> lsp-meson lsp-mdx lsp-matlab lsp-marksman lsp-markdown lsp-magik
> lsp-fennel lsp-lua lsp-lisp lsp-kubernetes-helm lsp-kotlin lsp-json
> lsp-jq lsp-javascript lsp-idris lsp-haxe lsp-hack lsp-groovy lsp-graphql
> lsp-golangci-lint lsp-glsl lsp-gleam lsp-gdscript lsp-fsharp lsp-futhark
> lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elm lsp-elixir
> lsp-earthly lsp-dockerfile lsp-dhall lsp-d lsp-cypher lsp-cucumber
> lsp-copilot lsp-css lsp-c3 lsp-csharp lsp-crystal lsp-credo lsp-cobol
> lsp-cmake lsp-clojure lsp-clangd lsp-bufls lsp-go lsp-completion
> lsp-beancount lsp-bash lsp-awk lsp-autotools lsp-astro lsp-asm
> lsp-ansible lsp-angular lsp-ada lsp-actionscript copilot
> copilot-balancer editorconfig editorconfig-core editorconfig-core-handle
> editorconfig-fnmatch jsonrpc gptel-openai-extras gptel-anthropic
> gptel-gemini gptel-ollama org-indent gptel-openai consult-dir-autoloads
> consult-ag-autoloads restore-point evil-collection-atomic-chrome
> atomic-chrome git-gutter marginalia elisp-def evil-collection-ert ert
> flycheck-posframe evil-collection-hungry-delete hungry-delete
> symbol-overlay keycast zig-mode reformatter empv vertico-truncate
> vertico-posframe vertico-multiform evil-collection-vertico vertico
> lsp-uniteai nix-ts-mode go-translate gt-text-utility gt-engine-echo
> gt-engine-libre gt-engine-chatgpt gt-engine-youdao gt-engine-osxdict
> gt-engine-stardict gt-engine-deepl gt-engine-google-rpc gt-engine-google
> gt-engine-bing gt-extension gt-faces gt-core gt-httpx sdcv cap-words
> superword subword evil-collection-telega telega-obsolete telega
> telega-tdlib-events telega-match telega-root telega-info telega-chat
> telega-modes telega-company telega-emoji telega-user
> telega-notifications telega-voip telega-msg telega-story telega-webpage
> telega-tme telega-sticker telega-vvnote telega-ffplay telega-i18n
> telega-sort telega-filter telega-ins telega-inline telega-util
> telega-folders telega-topic telega-media telega-tdlib telega-server
> telega-core telega-customize emacsbug tab-line-nerd-icons
> evil-collection-imenu-list imenu-list tab-line rust-utils
> rust-mode-treesitter rust-ts-mode rust-mode rust-playpen rust-cargo
> rust-common rust-rustfmt rust-compile cargo cargo-process rg-info-hack
> rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg rg-history ibuf-ext
> evil-collection-ibuffer ibuffer ibuffer-loaddefs rg-header
> evil-collection-ultra-scroll ultra-scroll pixel-scroll cua-base
> org-sliced-images emacsql-sqlite-builtin evil-collection-org-roam
> org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id
> org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam
> org-capture emacsql-sqlite emacsql emacsql-compiler org-journal
> org-crypt cal-iso org-modern orderless evil-collection-mu4e mu4e
> mu4e-org mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts
> mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg
> gnus-art mm-uu mml2015 mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
> mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders
> mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars
> mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cyphejor qml-mode
> kkp rfc-mode string-inflection wakatime-mode systemd minuet pr-review
> pr-review-render pr-review-action magit-diff git-commit
> evil-collection-log-edit log-edit pcvs-util add-log magit-core
> magit-autorevert magit-margin magit-transient magit-process
> evil-collection-with-editor with-editor magit-mode magit-git magit-base
> pr-review-input pr-review-api ghub-graphql treepy gsexp ghub
> pr-review-common consult-lsp lsp-ui lsp-ui-flycheck lsp-ui-doc
> evil-collection-lsp-ui-imenu lsp-ui-imenu lsp-ui-peek lsp-ui-sideline
> lsp-rust lsp-semantic-tokens lsp-mode network-stream
> evil-collection-markdown-mode markdown-mode lsp-ui-util lsp-protocol
> llm-prompt groovy-mode iedit help-macro iedit-lib hide-comnt
> minibuffer-header gptel-quick gotest fzf flycheck-clj-kondo jka-compr
> pos-tip consult-flycheck flycheck-rust engine-mode evil-collection-ement
> ement-room-list taxy-magit-section taxy ement ement-notifications
> ement-notify ement-room ewoc ement-lib ement-api ement-structs
> ement-macros dns llm-ollama llm-provider-utils llm-models
> llm-request-plz plz-event-source plz-media-type plz llm symex symex-evil
> symex-evil-support symex-hydra symex-transformations
> symex-transformations-lisp symex-utils evil-cleverparens
> evil-cleverparens-text-objects evil-cleverparens-util smartparens
> evil-surround symex-misc symex-interface-builtins symex-interface-fennel
> symex-interface-arc symex-interface-common-lisp symex-interface-clojure
> symex-interface-scheme symex-interface-racket symex-interface-elisp
> symex-interop symex-interface symex-traversals symex-dsl symex-evaluator
> symex-computations symex-primitives symex-ts symex-utils-ts
> symex-transformations-ts symex-primitives-lisp symex-data symex-ui
> symex-custom evil-collection-lispy lispy le-clojure delsel lispy-inline
> avy lispy-tags zoutline combobulate evil-collection-elfeed elfeed-show
> elfeed-search elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db
> elfeed-lib xml-query dired-git-info dired-hacks dired-preview
> evil-collection-cmake-mode cmake-mode consult-yasnippet yasnippet-capf
> yasnippet-snippets yasnippet kind-icon svg-lib corfu-terminal popon
> corfu-popupinfo corfu-indexed corfu-history evil-collection-corfu corfu
> consult-ls-git paredit clojure-ts-mode evil-collection-cider cider
> tramp-sh cider-debug cider-browse-ns cider-mode cider-xref-backend
> cider-find cider-inspector cider-completion cider-profile cider-eval
> cider-jar cider-repl-history cider-repl cider-resolve cider-test
> cider-overlays cider-stacktrace cider-doc cider-browse-spec
> cider-clojuredocs cider-eldoc cider-docstring cider-client cider-common
> cider-completion-context cider-connection cider-popup sesman-browser
> nrepl-client cider-util sesman queue nrepl-dict spinner clojure-mode
> rainbow-mode elisp-autofmt loadhist highlight-defined highlight-numbers
> parent-mode highlight-escape-sequences rainbow-delimiters chatgpt-shell
> chatgpt-shell-prompt-compose chatgpt-shell-perplexity
> chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama
> chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek
> chatgpt-shell-anthropic evil-collection-smerge-mode smerge-mode diff
> shell-maker ielm evil-collection-eshell eshell em-prompt esh-mode
> esh-var esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module
> esh-module-loaddefs esh-util cargo-jump-xref toml breadcrumb pulse
> bookmark-in-project bookmark+ bookmark+-key bookmark+-1 gnus-sum
> gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail
> mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win
> bookmark+-bmu bookmark+-lit bookmark+-mac babashka parseedn
> parseclj-parser parseclj-lex parseclj-alist cnfonts burly-tabs burly
> compile-multi form-feed-st google-this echo-bar fcitx
> evil-collection-eat eat term/xterm xterm evil-collection-term term ehelp
> ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util
> rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex
> ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach
> org-element org-persist org-id org-refile org-element-ast inline
> avl-tree htmlize evil-collection-explain-pause-mode explain-pause-mode
> explain-pause-top explain-pause-log-to-socket evil-collection-profiler
> profiler weather-metno solar cal-dst url-cache display-wttr kdeconnect
> crux pest-mode popwin modus-themes blackboard-theme standard-themes
> nimbus-theme tok-theme danneskjold-theme srcery-theme subatomic256-theme
> iscroll xml+ evil-textobj-tree-sitter
> evil-textobj-tree-sitter-thing-at-point evil-textobj-tree-sitter-core
> tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get
> dired-aux tsc-obsolete ctable evil-collection-color-rg color-rg
> line-reminder ov ht fringe-helper solarized-theme solarized
> solarized-faces sqlup-mode evil-collection-bm bm zen-mode
> evil-collection-sly sly gud sly-completion sly-buttons sly-messages
> sly-common evil-collection-apropos apropos evil-collection-arc-mode
> arc-mode archive-mode hyperspec sicp base16-theme idea-darkula-theme
> hybrid-reverse-theme material-theme doom-themes doom-themes-base
> nyan-mode organic-green-theme inkpot-theme github-dark-vscode-theme
> almost-mono-themes cyberpunk-theme soothe-theme soothe-tva zenburn-theme
> mindre-theme kaolin-themes kaolin-themes-lib tron-legacy-theme
> wildcharm-theme atom-one-dark-theme parchment-theme autothemer
> visual-fill-column transpose-frame gameoflife evil-collection-docker
> docker docker-context docker-volume docker-network docker-image
> docker-container docker-faces docker-core docker-compose docker-process
> docker-utils docker-group aio dockerfile-mode emacs-everywhere cus-dir
> dumb-jump evil-collection-popup popup websocket bindat bing-dict cl
> bing-dict-cache hl-todo atom-dark-theme ef-themes uwu-theme vagrant
> evil-collection-ag ag vc-svn find-dired alarm-clock alert log4e
> notifications gntp pinentry evil-collection-hackernews hackernews
> evil-collection-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello
> notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message
> notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company
> notmuch-parser notmuch-wash coolj goto-addr icalendar diary-lib
> diary-loaddefs notmuch-tag notmuch-lib notmuch-compat message sendmail
> yank-media rfc822 mml mailabbrev gmm-utils mm-view mml-smime mml-sec
> smime gnutls dig mm-decode mm-bodies mm-encode fussy flx affe
> evil-collection-consult consult clang-format apheleia apheleia-rcs
> apheleia-dp apheleia-formatters apheleia-utils apheleia-log
> apheleia-formatter-context vimrc-mode gnuplot olivetti super-save
> evil-collection-helpful helpful cc-langs trace cl-print
> evil-collection-edebug edebug evil-collection-debug debug backtrace
> info-look evil-collection-info info help-fns radix-tree
> evil-collection-elisp-refs elisp-refs solidity-mode solidity-common
> evil-collection-git-timemachine git-timemachine web-mode disp-table
> evil-collection-go-mode go-mode find-file evil-collection-js2-mode
> js2-mode etags fileloop zig-mode-autoloads reformatter-autoloads
> empv-autoloads yasnippet-snippets-autoloads marginalia-autoloads
> vertico-truncate-autoloads vertico-posframe-autoloads vertico-autoloads
> lsp-uniteai-autoloads nix-ts-mode-autoloads go-translate-autoloads
> alert-autoloads gntp-autoloads log4e-autoloads sdcv-autoloads
> telega-autoloads tab-line-nerd-icons-autoloads keycast-autoloads
> rust-mode-autoloads cargo-autoloads toml-autoloads rg-autoloads
> writeroom-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads
> makefile-executor-autoloads ultra-scroll-autoloads pdf-tools-autoloads
> org-sliced-images-autoloads consult-org-roam-autoloads
> org-roam-autoloads org-journal-autoloads org-download-autoloads
> org-modern-autoloads orderless-autoloads mu4e-autoloads
> cyphejor-autoloads symbol-overlay-autoloads qml-mode-autoloads
> kkp-autoloads rfc-mode-autoloads string-inflection-autoloads
> wakatime-mode-autoloads webpaste-autoloads systemd-autoloads
> minuet-autoloads pr-review-autoloads forge-autoloads closql-autoloads
> emacsql-autoloads ghub-autoloads treepy-autoloads yaml-autoloads
> lsp-pyright-autoloads consult-lsp-autoloads lsp-ui-autoloads
> lsp-mode-autoloads groovy-mode-autoloads imenu-list-autoloads
> hungry-delete-autoloads hide-comnt-autoloads minibuffer-header-autoloads
> gptel-quick-autoloads gptel-autoloads gotest-autoloads fzf-autoloads
> flycheck-golangci-lint-autoloads flycheck-clj-kondo-autoloads
> pos-tip-autoloads consult-flycheck-autoloads flycheck-rust-autoloads
> flycheck-posframe-autoloads flycheck-autoloads engine-mode-autoloads
> ement-autoloads taxy-magit-section-autoloads taxy-autoloads
> embark-consult-autoloads embark-autoloads ellama-autoloads llm-autoloads
> plz-event-source-autoloads plz-media-type-autoloads plz-autoloads
> symex-autoloads tree-sitter-autoloads tsc-autoloads lispy-autoloads
> iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads
> evil-cleverparens-autoloads smartparens-autoloads combobulate-autoloads
> combobulate-go combobulate-json combobulate-yaml combobulate-css
> combobulate-js-ts combobulate-python combobulate-html combobulate-toml
> combobulate-cursor multiple-cursors mc-separate-operations
> rectangular-region-mode mc-mark-pop mc-edit-lines
> mc-hide-unmatched-lines-mode mc-mark-more sgml-mode mc-cycle-cursors
> multiple-cursors-core combobulate-query savehist evil-collection-scheme
> scheme combobulate-ui combobulate-display let-alist combobulate-ztree
> combobulate-envelope combobulate-manipulation evil-collection-python
> python combobulate-procedure combobulate-navigation combobulate-misc
> combobulate-setup tempo combobulate-interface combobulate-settings
> combobulate-rules elisp-def-autoloads elfeed-tube-mpv-autoloads
> elfeed-tube-autoloads elfeed-autoloads eee-autoloads eee
> dired-git-info-autoloads dired-hacks-autoloads dired-preview-autoloads
> diredfl-autoloads git-gutter-autoloads cmake-mode-autoloads
> consult-yasnippet-autoloads yasnippet-capf-autoloads yasnippet-autoloads
> cape-autoloads kind-icon-autoloads svg-lib-autoloads
> corfu-terminal-autoloads popon-autoloads corfu-autoloads
> copilot-autoloads copilot-chat-autoloads consult-ls-git-autoloads
> paredit-autoloads clojure-ts-mode-autoloads cider-autoloads
> clojure-mode-autoloads queue-autoloads spinner-autoloads
> sesman-autoloads chatgpt-shell-autoloads shell-maker-autoloads
> cargo-jump-xref-autoloads breadcrumb-autoloads
> bookmark-in-project-autoloads bookmark+-autoloads babashka-autoloads
> parseedn-autoloads parseclj-autoloads aidermacs-autoloads
> mediawiki-autoloads markdown-mode-autoloads treemacs-magit-autoloads
> magit-autoloads with-editor-autoloads nerd-icons-ibuffer-autoloads
> treemacs-nerd-icons-autoloads treemacs-autoloads pfuture-autoloads
> cfrs-autoloads cnfonts-autoloads burly-autoloads compile-multi-autoloads
> form-feed-st-autoloads google-this-autoloads echo-bar-autoloads
> zoom-autoloads fcitx-autoloads eat-autoloads vterm-autoloads
> chatgpt-autoloads polymode-autoloads ox-reveal-autoloads
> htmlize-autoloads wordreference-autoloads explain-pause-mode-autoloads
> weather-metno-autoloads display-wttr-autoloads kdeconnect-autoloads
> emms-autoloads crux-autoloads pest-mode-autoloads popwin-autoloads
> modus-themes-autoloads blackboard-theme-autoloads
> standard-themes-autoloads nimbus-theme-autoloads tok-theme-autoloads
> danneskjold-theme-autoloads srcery-theme-autoloads
> subatomic256-theme-autoloads iscroll-autoloads xml+-autoloads
> multiple-cursors-autoloads evil-textobj-tree-sitter-autoloads
> evil-numbers-autoloads ctable-autoloads color-rg-autoloads
> line-reminder-autoloads fringe-helper-autoloads ov-autoloads
> solarized-theme-autoloads sqlup-mode-autoloads bm-autoloads
> zen-mode-autoloads sly-autoloads expand-region-autoloads
> highlight-defined-autoloads base16-theme-autoloads
> idea-darkula-theme-autoloads hybrid-reverse-theme-autoloads
> material-theme-autoloads doom-themes-autoloads nyan-mode-autoloads
> organic-green-theme-autoloads inkpot-theme-autoloads
> github-dark-vscode-theme-autoloads almost-mono-themes-autoloads
> cyberpunk-theme-autoloads soothe-theme-autoloads zenburn-theme-autoloads
> mindre-theme-autoloads kaolin-themes-autoloads
> tron-legacy-theme-autoloads wildcharm-theme-autoloads
> atom-one-dark-theme-autoloads parchment-theme-autoloads
> autothemer-autoloads visual-fill-column-autoloads
> transpose-frame-autoloads gameoflife-autoloads docker-autoloads
> aio-autoloads dockerfile-mode-autoloads emacs-everywhere-autoloads
> cus-dir-autoloads dumb-jump-autoloads popup-autoloads
> bing-dict-autoloads hl-todo-autoloads atom-dark-theme-autoloads
> ef-themes-autoloads uwu-theme-autoloads vagrant-autoloads ag-autoloads
> alarm-clock-autoloads pinentry-autoloads hackernews-autoloads
> notmuch-autoloads fussy-autoloads flx-autoloads affe-autoloads
> consult-autoloads clang-format-autoloads apheleia-autoloads
> elisp-autofmt-autoloads vimrc-mode-autoloads mpv-autoloads
> gnuplot-autoloads mermaid-mode-autoloads atomic-chrome-autoloads
> websocket-autoloads restore-point-autoloads ace-window-autoloads
> avy-autoloads olivetti-autoloads super-save-autoloads helpful-autoloads
> elisp-refs-autoloads solidity-mode-autoloads git-timemachine-autoloads
> web-mode-autoloads adoc-mode-autoloads go-mode-autoloads
> js2-mode-autoloads rust-playground-autoloads evil-collection-which-key
> which-key super-hint-xref super-hint-rg super-hint evil-collection-xref
> xref evil-collection-rg rg piper ob-shell ob-gnuplot ob-C
> evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp
> org-macro org-src evil-collection-sh-script sh-script executable
> ob-comint org-pcomplete org-list org-footnote org-faces org-entities
> ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
> org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs
> molecule-mode lsp hyperbole hideshow gptel-manual-complete
> evil-collection-gptel gptel windmove evil-collection-flycheck flycheck
> erc erc-backend erc-networks erc-common erc-compat erc-loaddefs
> evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff
> ediff-help ediff-init ediff-util dired-x consult-ripgrep-all desktop
> frameset server evil-collection-eww eww vtable mule-util url-queue
> mm-url evil-collection-gnus gnus nnheader gnus-util range epa-file
> evil-collection-epa epa derived epg rfc6068 epg-config saveplace recentf
> tree-widget winner edit-list refine loop list-utils prompts file-info
> browse-at-remote f image-roll evil-collection-image image-mode exif
> toc-mode rst scratch sql evil-collection-view view persistent-scratch
> exercism persist async-await iter2 generator promise url-http url-auth
> mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw
> nsm promise-rejection-tracking promise-finally promise-done
> promise-es6-extensions promise-core async request mailheader mail-utils
> a indent-bars evil-collection-outline noutline outline mode-line-bell
> powerthesaurus jeison dash s evil-collection-ripgrep ripgrep
> evil-collection-wgrep wgrep evil-collection-grep grep
> evil-collection-vlf vlf vlf-base vlf-tune gptai ctrlf hl-line
> nerd-icons-completion nerd-icons nerd-icons-faces nerd-icons-data
> nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon
> nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon
> nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon
> nerd-icons-data-pomicon nerd-icons-data-ipsicon disable-mouse mingus
> libmpdee evil-collection-mpdel mpdel mpdel-browser libmpdel-directory
> mpdel-playlist mpdel-tablist mpdel-song mpdel-core navigel
> evil-collection-bookmark bookmark evil-collection-tablist tablist
> tablist-filter semantic/wisent/comp semantic/wisent
> semantic/wisent/wisent semantic/util-modes semantic/util semantic
> semantic/tag semantic/lex semantic/fw mode-local find-func cedet
> libmpdel tq time-stamp posframe esup esup-child benchmark
> ssh-config-mode jq-mode json-mode json-snatcher js c-ts-common treesit
> cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
> cc-vars cc-defs evil-collection-yaml-mode yaml-mode toml-mode conf-mode
> align highlight facemenu nix-mode ffap smie nix-repl nix-shell nix-store
> evil-collection-magit-section magit-section cursor-sensor llama nix-log
> nix-instantiate nix-shebang nix-format nix sudo-edit tramp trampver
> tramp-integration tramp-message tramp-compat shell pcomplete parse-time
> iso8601 time-date tramp-loaddefs evil-collection-devdocs devdocs mathjax
> evil-terminal-cursor-changer evil-visualstar evil-commentary
> evil-commentary-integration evil-collection-evil-mc evil-mc
> evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make
> evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars
> evil-mc-known-commands evil-mc-common evil-exchange evil-lion evil-args
> smartscan timeout ess ess-utils ess-custom evil-collection-unimpaired
> evil-collection-vc-git evil-collection-tabulated-list
> evil-collection-tab-bar evil-collection-simple evil-collection-replace
> evil-collection-process-menu evil-collection-package-menu
> evil-collection-minibuffer evil-collection-man evil-collection-kmacro
> evil-collection-indent evil-collection-imenu evil-collection-help
> evil-collection-flymake evil-collection-elisp-mode evil-collection-eldoc
> evil-collection-elpaca evil-collection-dired evil-collection-diff-mode
> evil-collection-custom evil-collection-compile evil-collection-comint
> evil-collection-calendar evil-collection-buff-menu evil-collection
> annalist sqlite3 sqlite3-api treebundel vc-git diff-mode track-changes
> files-x git-link dired dired-loaddefs texfrag face-remap shr pixel-fill
> kinsoku url-file puny svg dom preview latex latex-flymake flymake
> project compile text-property-search comint ansi-osc tex-ispell
> tex-style tex dbus xml crm texmathp auctex display-line-numbers
> elec-pair lisp-mnt package browse-url xdg url-handlers xterm-color
> edit-list-autoloads refine-autoloads list-utils-autoloads loop-autoloads
> prompts-autoloads file-info-autoloads hydra-autoloads lv-autoloads
> browse-at-remote-autoloads image-roll-autoloads
> saveplace-pdf-view-autoloads pdfgrep-autoloads toc-mode-autoloads
> scratch-autoloads persistent-scratch-autoloads exercism-autoloads
> a-autoloads request-autoloads async-autoloads async-await-autoloads
> promise-autoloads iter2-autoloads persist-autoloads
> indent-bars-autoloads rainbow-delimiters-autoloads
> rainbow-mode-autoloads mode-line-bell-autoloads powerthesaurus-autoloads
> hydra lv jeison-autoloads ripgrep-autoloads wgrep-autoloads
> vlf-autoloads gptai-autoloads popper-autoloads ctrlf-autoloads
> nerd-icons-dired-autoloads nerd-icons-completion-autoloads
> nerd-icons-autoloads disable-mouse-autoloads mingus-autoloads
> libmpdee-autoloads mpdel-autoloads libmpdel-autoloads navigel-autoloads
> tablist-autoloads posframe-autoloads esup-autoloads quickrun-autoloads
> ht-autoloads ssh-config-mode-autoloads jq-mode-autoloads
> json-mode-autoloads json-snatcher-autoloads yaml-mode-autoloads
> toml-mode-autoloads highlight-escape-sequences-autoloads
> highlight-autoloads highlight-numbers-autoloads parent-mode-autoloads
> nix-mode-autoloads magit-section-autoloads llama-autoloads
> sudo-edit-autoloads attrap-autoloads f-autoloads dash-autoloads
> s-autoloads devdocs-autoloads mathjax-autoloads
> evil-terminal-cursor-changer-autoloads evil-surround-autoloads
> evil-visualstar-autoloads evil-commentary-autoloads evil-mc-autoloads
> evil-exchange-autoloads evil-lion-autoloads evil-args-autoloads
> smartscan-autoloads timeout-autoloads ess-autoloads
> info-colors-autoloads evil-collection-autoloads annalist-autoloads
> sqlite3-autoloads treebundel-autoloads git-link-autoloads
> texfrag-autoloads auctex-autoloads tex-site xterm-color-autoloads ispell
> which-func imenu man ansi-color autorevert filenotify cal-menu calendar
> cal-loaddefs advice evil evil-integration evil-maps evil-commands reveal
> evil-jumps evil-command-window evil-types evil-search evil-ex
> evil-macros evil-repeat evil-states evil-core comp comp-cstr warnings
> comp-run comp-common rx evil-common thingatpt rect evil-vars ring
> undo-fu goto-chg evil-autoloads undo-fu-autoloads goto-chg-autoloads
> transient pcase format-spec transient-autoloads general memoize
> sanityinc-tomorrow-bright-theme color-theme-sanityinc-tomorrow color
> minions compat general-autoloads memoize-autoloads
> color-theme-sanityinc-tomorrow-autoloads minions-autoloads
> el-patch-autoloads el-patch el-patch-stub edmacro kmacro vc
> vc-dispatcher cl-extra help-mode elpaca-use-package use-package
> use-package-ensure use-package-delight use-package-diminish
> use-package-bind-key bind-key easy-mmode use-package-core
> elpaca-use-package-autoloads elpaca-log elpaca-ui elpaca-menu-elpa
> elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods
> url-history url-cookie generate-lisp-file url-domsuf url-util url-parse
> auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
> map byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org
> elpaca elpaca-process elpaca-autoloads early-init cus-edit pp cus-load
> icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc
> paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
> mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd
> tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
> newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
> rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
> font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
> simple cl-generic indonesian philippine cham georgian utf-8-lang
> misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
> cp51932 hebrew greek romanian slovak czech european ethiopic indian
> cyrillic chinese composite emoji-zwj charscript charprop case-table
> epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
> loaddefs theme-loaddefs faces cus-face macroexp files window
> text-properties overlay sha1 md5 base64 format env code-pages mule
> custom widget keymap hashtable-print-readable backquote threads dbusbind
> inotify dynamic-setting system-font-setting font-render-setting cairo
> gtk pgtk lcms2 multi-tty move-toolbar make-network-process
> tty-child-frames native-compile mps emacs)
>=20
> Memory information:
> ((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0)
>   (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0)
>   (buffers 1000 0))


--nextPart7128439.9J7NaK4W3v
Content-Disposition: attachment; filename="rust-grammar-bug.png"
Content-Transfer-Encoding: base64
Content-Type: image/png; name="rust-grammar-bug.png"

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
0Wgq1gAAAABJRU5ErkJggg==


--nextPart7128439.9J7NaK4W3v--







Information forwarded to bug-gnu-emacs@HIDDEN:
bug#77914; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 19 Apr 2025 05:11:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Apr 19 01:11:39 2025
Received: from localhost ([127.0.0.1]:55421 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1u60UJ-0005nA-PF
	for submit <at> debbugs.gnu.org; Sat, 19 Apr 2025 01:11:39 -0400
Received: from lists.gnu.org ([2001:470:142::17]:38368)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <execvy@HIDDEN>) id 1u60UD-0005kh-Cn
 for submit <at> debbugs.gnu.org; Sat, 19 Apr 2025 01:11:33 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <execvy@HIDDEN>) id 1u60Tt-0001gK-NF
 for bug-gnu-emacs@HIDDEN; Sat, 19 Apr 2025 01:11:11 -0400
Received: from mail-pj1-x1042.google.com ([2607:f8b0:4864:20::1042])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <execvy@HIDDEN>) id 1u60To-0006QC-8j
 for bug-gnu-emacs@HIDDEN; Sat, 19 Apr 2025 01:11:09 -0400
Received: by mail-pj1-x1042.google.com with SMTP id
 98e67ed59e1d1-3085f827538so3095972a91.0
 for <bug-gnu-emacs@HIDDEN>; Fri, 18 Apr 2025 22:11:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1745039461; x=1745644261; darn=gnu.org;
 h=content-transfer-encoding:mime-version:message-id:date:user-agent
 :subject:to:from:from:to:cc:subject:date:message-id:reply-to;
 bh=ZNeiPBEEKfVK1uV5D9t6AMn8Jf8AbAX+EbU2lCWVPSI=;
 b=Hlls9RKiTWefORVqVCBhpXrGeB/Fn2zqPGFxQilq4b8kOEbu+wf2m0vFzYLjil1Z5Z
 Nin5ttU6YU2nHfmWRoVaMnfpjyShMcmkUTUDDx3Rl5YXGm9Cc0s6SvPbtUZjLOLgixoy
 SDsC4hUA5quE/sgo5ctKeE3frjF3Q/2WPib74Sf5Nvw9o4hy5utwy/FMDIruUa3CEjhg
 KKij2RQit8a4spYqV2cMYthOe82lCB+fHoLwvlELNhQ77OUvapSfmjmyNwLvWY7XWLG2
 8D9mPmnWjdIayFrSuwXkT1fClm9rZwjdbCMLpsrlq/sSa34gWxW5VmErD87dMxreYtaB
 d+jQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1745039461; x=1745644261;
 h=content-transfer-encoding:mime-version:message-id:date:user-agent
 :subject:to:from:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=ZNeiPBEEKfVK1uV5D9t6AMn8Jf8AbAX+EbU2lCWVPSI=;
 b=urco1GbCwNjrwd+lTTqbkAXRZHDZxPpUfTFZ8MmCBUEFDG9VWUpb5uE9+nCCN1WtFb
 HqC7oPJpuTJuQxrdpbZ46dXRz1oCXjJCrCPd9TDIZaOY69gyt1y73oFVRloDP/cz4Jqt
 PuB7yzfvxoossU4lwtXRrhBB+N6qQocp89hg5r9aJmjB4aMC4ziURTPh0qdhqOTETaL3
 sm12oOJqjI6fh5RJl9AaejgvISH2N6mp8S/rdZJIEDTqxyiYtNfPt5mxm4BtBWGzb3za
 bAzskdD5EwBs71DmmTVl7Sn303XZ8+bgHpbBAOm+VMwamd2Ec2Pr5LyOqIApdKQLfWtO
 zTNA==
X-Gm-Message-State: AOJu0YxSWdLo1XQSwX+kE/QQVKQNwDJJ0naEme92iN6Ahl4ygiIlYWix
 PO3XDIcPHilpwkmqyXgopf2wng5aX5V1AHG6YkpadfhmLtuiQaNgUAA8cIE8LQHulQ==
X-Gm-Gg: ASbGncssgdpeQwR7RhsIZO3bMji1/oH0EU3t4xZWiluB+vrZuafJ46c9TBAXYeeXron
 AbblmTo0rLD6tMhhuewMUswqGdQfhxsyT4LcfUPMI3GpTDbZOuBLrf4Oq9XYbhKMRMYkR36eUe2
 uXtC82j0Odbs2JK9igctItMwGsO3Z+j7wwwKefDPaO9+F3WLzvjVmltSvREUxpSNx6sBwCJhD2c
 43GTi8oUsLSOyuSFdbDSTE9K484RbLICEZ/vNKiKX7F6YobdQ6wFwXVFm87bB2o1PabTDtEkDbk
 M/aUNw8Lo/bhpRG484bl/ZyfRwwg/nFnFk1HXRlEl6Sl2NhwXhWUtIlP
X-Google-Smtp-Source: AGHT+IHkbzWY+03JxXiH/bRD98qhSKxmsR4YyoUZg2pmZWQrJxs2vZe97CJH96K5JgI1HR+63Q5Kdw==
X-Received: by 2002:a17:90a:c2d0:b0:2ee:b8ac:73b0 with SMTP id
 98e67ed59e1d1-3087bb3f2cemr7674734a91.2.1745039459467; 
 Fri, 18 Apr 2025 22:10:59 -0700 (PDT)
Received: from localhost (45.78.53.254.16clouds.com. [45.78.53.254])
 by smtp.gmail.com with ESMTPSA id
 d9443c01a7336-22c50bdb1ddsm25954395ad.24.2025.04.18.22.10.58
 for <bug-gnu-emacs@HIDDEN>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 18 Apr 2025 22:10:58 -0700 (PDT)
From: Eval Exec <execvy@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost
 all color
User-Agent: mu4e 1.12.9; emacs 31.0.50
X-Debbugs-Cc: 
Date: Sat, 19 Apr 2025 13:10:57 +0800
Message-ID: <877c3gka72.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=2607:f8b0:4864:20::1042;
 envelope-from=execvy@HIDDEN; helo=mail-pj1-x1042.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)


Hello,
I'm visiting a rust file, when I set treesit-font-lock-level to 3, all
color are good, when I set treesit-font-lock-level to 4, all color as
lost.
To reproduce this: use this rust file:

Then eval:
1. (progn  (setq treesit-font-lock-level 4) (revert-buffer))=20
all color are lost.

2. (progn  (setq treesit-font-lock-level 4) (revert-buffer))
colors are good.

3. (progn  (setq treesit-font-lock-level 4) (revert-buffer))=20
all color are lost again.


```rust

//! Primitive traits and types representing basic properties of types.
//!
//! Rust types can be classified in various useful ways according to
//! their intrinsic properties. These classifications are represented
//! as traits.

#![stable(feature =3D "rust1", since =3D "1.0.0")]

use crate::cell::UnsafeCell;
use crate::cmp;
use crate::fmt::Debug;
use crate::hash::{Hash, Hasher};

/// Implements a given marker trait for multiple types at the same time.
///
/// The basic syntax looks like this:
/// ```ignore private macro
/// marker_impls! { MarkerTrait for u8, i8 }
/// ```
/// You can also implement `unsafe` traits
/// ```ignore private macro
/// marker_impls! { unsafe MarkerTrait for u8, i8 }
/// ```
/// Add attributes to all impls:
/// ```ignore private macro
/// marker_impls! {
///     #[allow(lint)]
///     #[unstable(feature =3D "marker_trait", issue =3D "none")]
///     MarkerTrait for u8, i8
/// }
/// ```
/// And use generics:
/// ```ignore private macro
/// marker_impls! {
///     MarkerTrait for
///         u8, i8,
///         {T: ?Sized} *const T,
///         {T: ?Sized} *mut T,
///         {T: MarkerTrait} PhantomData<T>,
///         u32,
/// }
/// ```
#[unstable(feature =3D "internal_impls_macro", issue =3D "none")]
// Allow implementations of `UnsizedConstParamTy` even though std cannot us=
e that feature.
#[allow_internal_unstable(unsized_const_params)]
macro marker_impls {
    ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty $(, $=
($rest:tt)*)? ) =3D> {
        $(#[$($meta)*])* impl< $($($bounds)*)? > $Trait for $T {}
        marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? }
    },
    ( $(#[$($meta:tt)*])* $Trait:ident for ) =3D> {},

    ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? $T:t=
y $(, $($rest:tt)*)? ) =3D> {
        $(#[$($meta)*])* unsafe impl< $($($bounds)*)? > $Trait for $T {}
        marker_impls! { $(#[$($meta)*])* unsafe $Trait for $($($rest)*)? }
    },
    ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) =3D> {},
}

/// Types that can be transferred across thread boundaries.
///
/// This trait is automatically implemented when the compiler determines it=
's
/// appropriate.
///
/// An example of a non-`Send` type is the reference-counting pointer
/// [`rc::Rc`][`Rc`]. If two threads attempt to clone [`Rc`]s that point to=
 the same
/// reference-counted value, they might try to update the reference count a=
t the
/// same time, which is [undefined behavior][ub] because [`Rc`] doesn't use=
 atomic
/// operations. Its cousin [`sync::Arc`][arc] does use atomic operations (i=
ncurring
/// some overhead) and thus is `Send`.
///
/// See [the Nomicon](../../nomicon/send-and-sync.html) and the [`Sync`] tr=
ait for more details.
///
/// [`Rc`]: ../../std/rc/struct.Rc.html
/// [arc]: ../../std/sync/struct.Arc.html
/// [ub]: ../../reference/behavior-considered-undefined.html
#[stable(feature =3D "rust1", since =3D "1.0.0")]
#[cfg_attr(not(test), rustc_diagnostic_item =3D "Send")]
#[diagnostic::on_unimplemented(
    message =3D "`{Self}` cannot be sent between threads safely",
    label =3D "`{Self}` cannot be sent between threads safely"
)]
pub unsafe auto trait Send {
    // empty.
}

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> !Send for *const T {}
#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> !Send for *mut T {}

// Most instances arise automatically, but this instance is needed to link =
up `T: Sync` with
// `&T: Send` (and it also removes the unsound default instance `T Send` ->=
 `&T: Send` that would
// otherwise exist).
#[stable(feature =3D "rust1", since =3D "1.0.0")]
unsafe impl<T: Sync + ?Sized> Send for &T {}

/// Types with a constant size known at compile time.
///
/// All type parameters have an implicit bound of `Sized`. The special synt=
ax
/// `?Sized` can be used to remove this bound if it's not appropriate.
///
/// ```
/// # #![allow(dead_code)]
/// struct Foo<T>(T);
/// struct Bar<T: ?Sized>(T);
///
/// // struct FooUse(Foo<[i32]>); // error: Sized is not implemented for [i=
32]
/// struct BarUse(Bar<[i32]>); // OK
/// ```
///
/// The one exception is the implicit `Self` type of a trait. A trait does =
not
/// have an implicit `Sized` bound as this is incompatible with [trait obje=
ct]s
/// where, by definition, the trait needs to work with all possible impleme=
ntors,
/// and thus could be any size.
///
/// Although Rust will let you bind `Sized` to a trait, you won't
/// be able to use it to form a trait object later:
///
/// ```
/// # #![allow(unused_variables)]
/// trait Foo { }
/// trait Bar: Sized { }
///
/// struct Impl;
/// impl Foo for Impl { }
/// impl Bar for Impl { }
///
/// let x: &dyn Foo =3D &Impl;    // OK
/// // let y: &dyn Bar =3D &Impl; // error: the trait `Bar` cannot
///                             // be made into an object
/// ```
///
/// [trait object]: ../../book/ch17-02-trait-objects.html
#[doc(alias =3D "?", alias =3D "?Sized")]
#[stable(feature =3D "rust1", since =3D "1.0.0")]
#[lang =3D "sized"]
#[diagnostic::on_unimplemented(
    message =3D "the size for values of type `{Self}` cannot be known at co=
mpilation time",
    label =3D "doesn't have a size known at compile-time"
)]
#[fundamental] // for Default, for example, which requires that `[T]: !Defa=
ult` be evaluatable
#[rustc_specialization_trait]
#[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal=
se))]
#[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
#[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
#[rustc_coinductive]
pub trait Sized {
    // Empty.
}

/// Types that can be "unsized" to a dynamically-sized type.
///
/// For example, the sized array type `[i8; 2]` implements `Unsize<[i8]>` a=
nd
/// `Unsize<dyn fmt::Debug>`.
///
/// All implementations of `Unsize` are provided automatically by the compi=
ler.
/// Those implementations are:
///
/// - Arrays `[T; N]` implement `Unsize<[T]>`.
/// - A type implements `Unsize<dyn Trait + 'a>` if all of these conditions=
 are met:
///   - The type implements `Trait`.
///   - `Trait` is dyn-compatible[^1].
///   - The type is sized.
///   - The type outlives `'a`.
/// - Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize<Foo<..., U1, .=
.., Un, ...>>`
/// where any number of (type and const) parameters may be changed if all o=
f these conditions
/// are met:
///   - Only the last field of `Foo` has a type involving the parameters `T=
1`, ..., `Tn`.
///   - All other parameters of the struct are equal.
///   - `Field<T1, ..., Tn>: Unsize<Field<U1, ..., Un>>`, where `Field<...>=
` stands for the actual
///     type of the struct's last field.
///
/// `Unsize` is used along with [`ops::CoerceUnsized`] to allow
/// "user-defined" containers such as [`Rc`] to contain dynamically-sized
/// types. See the [DST coercion RFC][RFC982] and [the nomicon entry on coe=
rcion][nomicon-coerce]
/// for more details.
///
/// [`ops::CoerceUnsized`]: crate::ops::CoerceUnsized
/// [`Rc`]: ../../std/rc/struct.Rc.html
/// [RFC982]: https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-c=
oercion.md
/// [nomicon-coerce]: ../../nomicon/coercions.html
/// [^1]: Formerly known as *object safe*.
#[unstable(feature =3D "unsize", issue =3D "18598")]
#[lang =3D "unsize"]
#[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal=
se))]
#[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
#[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
pub trait Unsize<T: ?Sized> {
    // Empty.
}

/// Required trait for constants used in pattern matches.
///
/// Any type that derives `PartialEq` automatically implements this trait,
/// *regardless* of whether its type-parameters implement `PartialEq`.
///
/// If a `const` item contains some type that does not implement this trait,
/// then that type either (1.) does not implement `PartialEq` (which means =
the
/// constant will not provide that comparison method, which code generation
/// assumes is available), or (2.) it implements *its own* version of
/// `PartialEq` (which we assume does not conform to a structural-equality
/// comparison).
///
/// In either of the two scenarios above, we reject usage of such a constan=
t in
/// a pattern match.
///
/// See also the [structural match RFC][RFC1445], and [issue 63438] which
/// motivated migrating from an attribute-based design to this trait.
///
/// [RFC1445]: https://github.com/rust-lang/rfcs/blob/master/text/1445-rest=
rict-constants-in-patterns.md
/// [issue 63438]: https://github.com/rust-lang/rust/issues/63438
#[unstable(feature =3D "structural_match", issue =3D "31434")]
#[diagnostic::on_unimplemented(message =3D "the type `{Self}` does not `#[d=
erive(PartialEq)]`")]
#[lang =3D "structural_peq"]
pub trait StructuralPartialEq {
    // Empty.
}

marker_impls! {
    #[unstable(feature =3D "structural_match", issue =3D "31434")]
    StructuralPartialEq for
        usize, u8, u16, u32, u64, u128,
        isize, i8, i16, i32, i64, i128,
        bool,
        char,
        str /* Technically requires `[u8]: StructuralPartialEq` */,
        (),
        {T, const N: usize} [T; N],
        {T} [T],
        {T: ?Sized} &T,
}

/// Types whose values can be duplicated simply by copying bits.
///
/// By default, variable bindings have 'move semantics.' In other
/// words:
///
/// ```
/// #[derive(Debug)]
/// struct Foo;
///
/// let x =3D Foo;
///
/// let y =3D x;
///
/// // `x` has moved into `y`, and so cannot be used
///
/// // println!("{x:?}"); // error: use of moved value
/// ```
///
/// However, if a type implements `Copy`, it instead has 'copy semantics':
///
/// ```
/// // We can derive a `Copy` implementation. `Clone` is also required, as =
it's
/// // a supertrait of `Copy`.
/// #[derive(Debug, Copy, Clone)]
/// struct Foo;
///
/// let x =3D Foo;
///
/// let y =3D x;
///
/// // `y` is a copy of `x`
///
/// println!("{x:?}"); // A-OK!
/// ```
///
/// It's important to note that in these two examples, the only difference =
is whether you
/// are allowed to access `x` after the assignment. Under the hood, both a =
copy and a move
/// can result in bits being copied in memory, although this is sometimes o=
ptimized away.
///
/// ## How can I implement `Copy`?
///
/// There are two ways to implement `Copy` on your type. The simplest is to=
 use `derive`:
///
/// ```
/// #[derive(Copy, Clone)]
/// struct MyStruct;
/// ```
///
/// You can also implement `Copy` and `Clone` manually:
///
/// ```
/// struct MyStruct;
///
/// impl Copy for MyStruct { }
///
/// impl Clone for MyStruct {
///     fn clone(&self) -> MyStruct {
///         *self
///     }
/// }
/// ```
///
/// There is a small difference between the two. The `derive` strategy will=
 also place a `Copy`
/// bound on type parameters:
///
/// ```
/// #[derive(Clone)]
/// struct MyStruct<T>(T);
///
/// impl<T: Copy> Copy for MyStruct<T> { }
/// ```
///
/// This isn't always desired. For example, shared references (`&T`) can be=
 copied regardless of
/// whether `T` is `Copy`. Likewise, a generic struct containing markers su=
ch as [`PhantomData`]
/// could potentially be duplicated with a bit-wise copy.
///
/// ## What's the difference between `Copy` and `Clone`?
///
/// Copies happen implicitly, for example as part of an assignment `y =3D x=
`. The behavior of
/// `Copy` is not overloadable; it is always a simple bit-wise copy.
///
/// Cloning is an explicit action, `x.clone()`. The implementation of [`Clo=
ne`] can
/// provide any type-specific behavior necessary to duplicate values safely=
. For example,
/// the implementation of [`Clone`] for [`String`] needs to copy the pointe=
d-to string
/// buffer in the heap. A simple bitwise copy of [`String`] values would me=
rely copy the
/// pointer, leading to a double free down the line. For this reason, [`Str=
ing`] is [`Clone`]
/// but not `Copy`.
///
/// [`Clone`] is a supertrait of `Copy`, so everything which is `Copy` must=
 also implement
/// [`Clone`]. If a type is `Copy` then its [`Clone`] implementation only n=
eeds to return `*self`
/// (see the example above).
///
/// ## When can my type be `Copy`?
///
/// A type can implement `Copy` if all of its components implement `Copy`. =
For example, this
/// struct can be `Copy`:
///
/// ```
/// # #[allow(dead_code)]
/// #[derive(Copy, Clone)]
/// struct Point {
///    x: i32,
///    y: i32,
/// }
/// ```
///
/// A struct can be `Copy`, and [`i32`] is `Copy`, therefore `Point` is eli=
gible to be `Copy`.
/// By contrast, consider
///
/// ```
/// # #![allow(dead_code)]
/// # struct Point;
/// struct PointList {
///     points: Vec<Point>,
/// }
/// ```
///
/// The struct `PointList` cannot implement `Copy`, because [`Vec<T>`] is n=
ot `Copy`. If we
/// attempt to derive a `Copy` implementation, we'll get an error:
///
/// ```text
/// the trait `Copy` cannot be implemented for this type; field `points` do=
es not implement `Copy`
/// ```
///
/// Shared references (`&T`) are also `Copy`, so a type can be `Copy`, even=
 when it holds
/// shared references of types `T` that are *not* `Copy`. Consider the foll=
owing struct,
/// which can implement `Copy`, because it only holds a *shared reference* =
to our non-`Copy`
/// type `PointList` from above:
///
/// ```
/// # #![allow(dead_code)]
/// # struct PointList;
/// #[derive(Copy, Clone)]
/// struct PointListWrapper<'a> {
///     point_list_ref: &'a PointList,
/// }
/// ```
///
/// ## When *can't* my type be `Copy`?
///
/// Some types can't be copied safely. For example, copying `&mut T` would =
create an aliased
/// mutable reference. Copying [`String`] would duplicate responsibility fo=
r managing the
/// [`String`]'s buffer, leading to a double free.
///
/// Generalizing the latter case, any type implementing [`Drop`] can't be `=
Copy`, because it's
/// managing some resource besides its own [`size_of::<T>`] bytes.
///
/// If you try to implement `Copy` on a struct or enum containing non-`Copy=
` data, you will get
/// the error [E0204].
///
/// [E0204]: ../../error_codes/E0204.html
///
/// ## When *should* my type be `Copy`?
///
/// Generally speaking, if your type _can_ implement `Copy`, it should. Kee=
p in mind, though,
/// that implementing `Copy` is part of the public API of your type. If the=
 type might become
/// non-`Copy` in the future, it could be prudent to omit the `Copy` implem=
entation now, to
/// avoid a breaking API change.
///
/// ## Additional implementors
///
/// In addition to the [implementors listed below][impls],
/// the following types also implement `Copy`:
///
/// * Function item types (i.e., the distinct types defined for each functi=
on)
/// * Function pointer types (e.g., `fn() -> i32`)
/// * Closure types, if they capture no value from the environment
///   or if all such captured values implement `Copy` themselves.
///   Note that variables captured by shared reference always implement `Co=
py`
///   (even if the referent doesn't),
///   while variables captured by mutable reference never implement `Copy`.
///
/// [`Vec<T>`]: ../../std/vec/struct.Vec.html
/// [`String`]: ../../std/string/struct.String.html
/// [`size_of::<T>`]: crate::mem::size_of
/// [impls]: #implementors
#[stable(feature =3D "rust1", since =3D "1.0.0")]
#[lang =3D "copy"]
// FIXME(matthewjasper) This allows copying a type that doesn't implement
// `Copy` because of unsatisfied lifetime bounds (copying `A<'_>` when only
// `A<'static>: Copy` and `A<'_>: Clone`).
// We have this attribute here for now only because there are quite a few
// existing specializations on `Copy` that already exist in the standard
// library, and there's no way to safely have this behavior right now.
#[rustc_unsafe_specialization_marker]
#[rustc_diagnostic_item =3D "Copy"]
pub trait Copy: Clone {
    // Empty.
}

/// Derive macro generating an impl of the trait `Copy`.
#[rustc_builtin_macro]
#[stable(feature =3D "builtin_macro_prelude", since =3D "1.38.0")]
#[allow_internal_unstable(core_intrinsics, derive_clone_copy)]
pub macro Copy($item:item) {
    /* compiler built-in */
}

// Implementations of `Copy` for primitive types.
//
// Implementations that cannot be described in Rust
// are implemented in `traits::SelectionContext::copy_clone_conditions()`
// in `rustc_trait_selection`.
marker_impls! {
    #[stable(feature =3D "rust1", since =3D "1.0.0")]
    Copy for
        usize, u8, u16, u32, u64, u128,
        isize, i8, i16, i32, i64, i128,
        f16, f32, f64, f128,
        bool, char,
        {T: ?Sized} *const T,
        {T: ?Sized} *mut T,

}

#[unstable(feature =3D "never_type", issue =3D "35121")]
impl Copy for ! {}

/// Shared references can be copied, but mutable references *cannot*!
#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> Copy for &T {}

/// Types for which it is safe to share references between threads.
///
/// This trait is automatically implemented when the compiler determines
/// it's appropriate.
///
/// The precise definition is: a type `T` is [`Sync`] if and only if `&T` is
/// [`Send`]. In other words, if there is no possibility of
/// [undefined behavior][ub] (including data races) when passing
/// `&T` references between threads.
///
/// As one would expect, primitive types like [`u8`] and [`f64`]
/// are all [`Sync`], and so are simple aggregate types containing them,
/// like tuples, structs and enums. More examples of basic [`Sync`]
/// types include "immutable" types like `&T`, and those with simple
/// inherited mutability, such as [`Box<T>`][box], [`Vec<T>`][vec] and
/// most other collection types. (Generic parameters need to be [`Sync`]
/// for their container to be [`Sync`].)
///
/// A somewhat surprising consequence of the definition is that `&mut T`
/// is `Sync` (if `T` is `Sync`) even though it seems like that might
/// provide unsynchronized mutation. The trick is that a mutable
/// reference behind a shared reference (that is, `& &mut T`)
/// becomes read-only, as if it were a `& &T`. Hence there is no risk
/// of a data race.
///
/// A shorter overview of how [`Sync`] and [`Send`] relate to referencing:
/// * `&T` is [`Send`] if and only if `T` is [`Sync`]
/// * `&mut T` is [`Send`] if and only if `T` is [`Send`]
/// * `&T` and `&mut T` are [`Sync`] if and only if `T` is [`Sync`]
///
/// Types that are not `Sync` are those that have "interior
/// mutability" in a non-thread-safe form, such as [`Cell`][cell]
/// and [`RefCell`][refcell]. These types allow for mutation of
/// their contents even through an immutable, shared reference. For
/// example the `set` method on [`Cell<T>`][cell] takes `&self`, so it requ=
ires
/// only a shared reference [`&Cell<T>`][cell]. The method performs no
/// synchronization, thus [`Cell`][cell] cannot be `Sync`.
///
/// Another example of a non-`Sync` type is the reference-counting
/// pointer [`Rc`][rc]. Given any reference [`&Rc<T>`][rc], you can clone
/// a new [`Rc<T>`][rc], modifying the reference counts in a non-atomic way.
///
/// For cases when one does need thread-safe interior mutability,
/// Rust provides [atomic data types], as well as explicit locking via
/// [`sync::Mutex`][mutex] and [`sync::RwLock`][rwlock]. These types
/// ensure that any mutation cannot cause data races, hence the types
/// are `Sync`. Likewise, [`sync::Arc`][arc] provides a thread-safe
/// analogue of [`Rc`][rc].
///
/// Any types with interior mutability must also use the
/// [`cell::UnsafeCell`][unsafecell] wrapper around the value(s) which
/// can be mutated through a shared reference. Failing to doing this is
/// [undefined behavior][ub]. For example, [`transmute`][transmute]-ing
/// from `&T` to `&mut T` is invalid.
///
/// See [the Nomicon][nomicon-send-and-sync] for more details about `Sync`.
///
/// [box]: ../../std/boxed/struct.Box.html
/// [vec]: ../../std/vec/struct.Vec.html
/// [cell]: crate::cell::Cell
/// [refcell]: crate::cell::RefCell
/// [rc]: ../../std/rc/struct.Rc.html
/// [arc]: ../../std/sync/struct.Arc.html
/// [atomic data types]: crate::sync::atomic
/// [mutex]: ../../std/sync/struct.Mutex.html
/// [rwlock]: ../../std/sync/struct.RwLock.html
/// [unsafecell]: crate::cell::UnsafeCell
/// [ub]: ../../reference/behavior-considered-undefined.html
/// [transmute]: crate::mem::transmute
/// [nomicon-send-and-sync]: ../../nomicon/send-and-sync.html
#[stable(feature =3D "rust1", since =3D "1.0.0")]
#[cfg_attr(not(test), rustc_diagnostic_item =3D "Sync")]
#[lang =3D "sync"]
#[rustc_on_unimplemented(
    on(
        _Self =3D "core::cell::once::OnceCell<T>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::OnceLock` instead"
    ),
    on(
        _Self =3D "core::cell::Cell<u8>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead",
    ),
    on(
        _Self =3D "core::cell::Cell<u16>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16` instead",
    ),
    on(
        _Self =3D "core::cell::Cell<u32>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32` instead",
    ),
    on(
        _Self =3D "core::cell::Cell<u64>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64` instead",
    ),
    on(
        _Self =3D "core::cell::Cell<usize>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize` instea=
d",
    ),
    on(
        _Self =3D "core::cell::Cell<i8>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead",
    ),
    on(
        _Self =3D "core::cell::Cell<i16>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16` instead",
    ),
    on(
        _Self =3D "core::cell::Cell<i32>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32` instead",
    ),
    on(
        _Self =3D "core::cell::Cell<i64>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64` instead",
    ),
    on(
        _Self =3D "core::cell::Cell<isize>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize` instea=
d",
    ),
    on(
        _Self =3D "core::cell::Cell<bool>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool` instead=
",
    ),
    on(
        all(
            _Self =3D "core::cell::Cell<T>",
            not(_Self =3D "core::cell::Cell<u8>"),
            not(_Self =3D "core::cell::Cell<u16>"),
            not(_Self =3D "core::cell::Cell<u32>"),
            not(_Self =3D "core::cell::Cell<u64>"),
            not(_Self =3D "core::cell::Cell<usize>"),
            not(_Self =3D "core::cell::Cell<i8>"),
            not(_Self =3D "core::cell::Cell<i16>"),
            not(_Self =3D "core::cell::Cell<i32>"),
            not(_Self =3D "core::cell::Cell<i64>"),
            not(_Self =3D "core::cell::Cell<isize>"),
            not(_Self =3D "core::cell::Cell<bool>")
        ),
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock`",
    ),
    on(
        _Self =3D "core::cell::RefCell<T>",
        note =3D "if you want to do aliasing and mutation between multiple =
threads, use `std::sync::RwLock` instead",
    ),
    message =3D "`{Self}` cannot be shared between threads safely",
    label =3D "`{Self}` cannot be shared between threads safely"
)]
pub unsafe auto trait Sync {
    // FIXME(estebank): once support to add notes in `rustc_on_unimplemente=
d`
    // lands in beta, and it has been extended to check whether a closure is
    // anywhere in the requirement chain, extend it as such (#48534):
    // ```
    // on(
    //     closure,
    //     note=3D"`{Self}` cannot be shared safely, consider marking the c=
losure `move`"
    // ),
    // ```

    // Empty
}

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> !Sync for *const T {}
#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> !Sync for *mut T {}

/// Zero-sized type used to mark things that "act like" they own a `T`.
///
/// Adding a `PhantomData<T>` field to your type tells the compiler that yo=
ur
/// type acts as though it stores a value of type `T`, even though it doesn=
't
/// really. This information is used when computing certain safety properti=
es.
///
/// For a more in-depth explanation of how to use `PhantomData<T>`, please =
see
/// [the Nomicon](../../nomicon/phantom-data.html).
///
/// # A ghastly note =F0=9F=91=BB=F0=9F=91=BB=F0=9F=91=BB
///
/// Though they both have scary names, `PhantomData` and 'phantom types' are
/// related, but not identical. A phantom type parameter is simply a type
/// parameter which is never used. In Rust, this often causes the compiler =
to
/// complain, and the solution is to add a "dummy" use by way of `PhantomDa=
ta`.
///
/// # Examples
///
/// ## Unused lifetime parameters
///
/// Perhaps the most common use case for `PhantomData` is a struct that has=
 an
/// unused lifetime parameter, typically as part of some unsafe code. For
/// example, here is a struct `Slice` that has two pointers of type `*const=
 T`,
/// presumably pointing into an array somewhere:
///
/// ```compile_fail,E0392
/// struct Slice<'a, T> {
///     start: *const T,
///     end: *const T,
/// }
/// ```
///
/// The intention is that the underlying data is only valid for the
/// lifetime `'a`, so `Slice` should not outlive `'a`. However, this
/// intent is not expressed in the code, since there are no uses of
/// the lifetime `'a` and hence it is not clear what data it applies
/// to. We can correct this by telling the compiler to act *as if* the
/// `Slice` struct contained a reference `&'a T`:
///
/// ```
/// use std::marker::PhantomData;
///
/// # #[allow(dead_code)]
/// struct Slice<'a, T> {
///     start: *const T,
///     end: *const T,
///     phantom: PhantomData<&'a T>,
/// }
/// ```
///
/// This also in turn infers the lifetime bound `T: 'a`, indicating
/// that any references in `T` are valid over the lifetime `'a`.
///
/// When initializing a `Slice` you simply provide the value
/// `PhantomData` for the field `phantom`:
///
/// ```
/// # #![allow(dead_code)]
/// # use std::marker::PhantomData;
/// # struct Slice<'a, T> {
/// #     start: *const T,
/// #     end: *const T,
/// #     phantom: PhantomData<&'a T>,
/// # }
/// fn borrow_vec<T>(vec: &Vec<T>) -> Slice<'_, T> {
///     let ptr =3D vec.as_ptr();
///     Slice {
///         start: ptr,
///         end: unsafe { ptr.add(vec.len()) },
///         phantom: PhantomData,
///     }
/// }
/// ```
///
/// ## Unused type parameters
///
/// It sometimes happens that you have unused type parameters which
/// indicate what type of data a struct is "tied" to, even though that
/// data is not actually found in the struct itself. Here is an
/// example where this arises with [FFI]. The foreign interface uses
/// handles of type `*mut ()` to refer to Rust values of different
/// types. We track the Rust type using a phantom type parameter on
/// the struct `ExternalResource` which wraps a handle.
///
/// [FFI]: ../../book/ch19-01-unsafe-rust.html#using-extern-functions-to-ca=
ll-external-code
///
/// ```
/// # #![allow(dead_code)]
/// # trait ResType { }
/// # struct ParamType;
/// # mod foreign_lib {
/// #     pub fn new(_: usize) -> *mut () { 42 as *mut () }
/// #     pub fn do_stuff(_: *mut (), _: usize) {}
/// # }
/// # fn convert_params(_: ParamType) -> usize { 42 }
/// use std::marker::PhantomData;
/// use std::mem;
///
/// struct ExternalResource<R> {
///    resource_handle: *mut (),
///    resource_type: PhantomData<R>,
/// }
///
/// impl<R: ResType> ExternalResource<R> {
///     fn new() -> Self {
///         let size_of_res =3D mem::size_of::<R>();
///         Self {
///             resource_handle: foreign_lib::new(size_of_res),
///             resource_type: PhantomData,
///         }
///     }
///
///     fn do_stuff(&self, param: ParamType) {
///         let foreign_params =3D convert_params(param);
///         foreign_lib::do_stuff(self.resource_handle, foreign_params);
///     }
/// }
/// ```
///
/// ## Ownership and the drop check
///
/// The exact interaction of `PhantomData` with drop check **may change in =
the future**.
///
/// Currently, adding a field of type `PhantomData<T>` indicates that your =
type *owns* data of type
/// `T` in very rare circumstances. This in turn has effects on the Rust co=
mpiler's [drop check]
/// analysis. For the exact rules, see the [drop check] documentation.
///
/// ## Layout
///
/// For all `T`, the following are guaranteed:
/// * `size_of::<PhantomData<T>>() =3D=3D 0`
/// * `align_of::<PhantomData<T>>() =3D=3D 1`
///
/// [drop check]: Drop#drop-check
#[lang =3D "phantom_data"]
#[stable(feature =3D "rust1", since =3D "1.0.0")]
pub struct PhantomData<T: ?Sized>;

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> Hash for PhantomData<T> {
    #[inline]
    fn hash<H: Hasher>(&self, _: &mut H) {}
}

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> cmp::PartialEq for PhantomData<T> {
    fn eq(&self, _other: &PhantomData<T>) -> bool {
        true
    }
}

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> cmp::Eq for PhantomData<T> {}

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> cmp::PartialOrd for PhantomData<T> {
    fn partial_cmp(&self, _other: &PhantomData<T>) -> Option<cmp::Ordering>=
 {
        Option::Some(cmp::Ordering::Equal)
    }
}

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> cmp::Ord for PhantomData<T> {
    fn cmp(&self, _other: &PhantomData<T>) -> cmp::Ordering {
        cmp::Ordering::Equal
    }
}

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> Copy for PhantomData<T> {}

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> Clone for PhantomData<T> {
    fn clone(&self) -> Self {
        Self
    }
}

#[stable(feature =3D "rust1", since =3D "1.0.0")]
impl<T: ?Sized> Default for PhantomData<T> {
    fn default() -> Self {
        Self
    }
}

#[unstable(feature =3D "structural_match", issue =3D "31434")]
impl<T: ?Sized> StructuralPartialEq for PhantomData<T> {}

/// Compiler-internal trait used to indicate the type of enum discriminants.
///
/// This trait is automatically implemented for every type and does not add=
 any
/// guarantees to [`mem::Discriminant`]. It is **undefined behavior** to tr=
ansmute
/// between `DiscriminantKind::Discriminant` and `mem::Discriminant`.
///
/// [`mem::Discriminant`]: crate::mem::Discriminant
#[unstable(
    feature =3D "discriminant_kind",
    issue =3D "none",
    reason =3D "this trait is unlikely to ever be stabilized, use `mem::dis=
criminant` instead"
)]
#[lang =3D "discriminant_kind"]
#[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal=
se))]
#[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
#[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
pub trait DiscriminantKind {
    /// The type of the discriminant, which must satisfy the trait
    /// bounds required by `mem::Discriminant`.
    #[lang =3D "discriminant_type"]
    type Discriminant: Clone + Copy + Debug + Eq + PartialEq + Hash + Send =
+ Sync + Unpin;
}

/// Used to determine whether a type contains
/// any `UnsafeCell` internally, but not through an indirection.
/// This affects, for example, whether a `static` of that type is
/// placed in read-only static memory or writable static memory.
/// This can be used to declare that a constant with a generic type
/// will not contain interior mutability, and subsequently allow
/// placing the constant behind references.
///
/// # Safety
///
/// This trait is a core part of the language, it is just expressed as a tr=
ait in libcore for
/// convenience. Do *not* implement it for other types.
// FIXME: Eventually this trait should become `#[rustc_deny_explicit_impl]`.
// That requires porting the impls below to native internal impls.
#[lang =3D "freeze"]
#[unstable(feature =3D "freeze", issue =3D "121675")]
pub unsafe auto trait Freeze {}

#[unstable(feature =3D "freeze", issue =3D "121675")]
impl<T: ?Sized> !Freeze for UnsafeCell<T> {}
marker_impls! {
    #[unstable(feature =3D "freeze", issue =3D "121675")]
    unsafe Freeze for
        {T: ?Sized} PhantomData<T>,
        {T: ?Sized} *const T,
        {T: ?Sized} *mut T,
        {T: ?Sized} &T,
        {T: ?Sized} &mut T,
}

/// Types that do not require any pinning guarantees.
///
/// For information on what "pinning" is, see the [`pin` module] documentat=
ion.
///
/// Implementing the `Unpin` trait for `T` expresses the fact that `T` is p=
inning-agnostic:
/// it shall not expose nor rely on any pinning guarantees. This, in turn, =
means that a
/// `Pin`-wrapped pointer to such a type can feature a *fully unrestricted*=
 API.
/// In other words, if `T: Unpin`, a value of type `T` will *not* be bound =
by the invariants
/// which pinning otherwise offers, even when "pinned" by a [`Pin<Ptr>`] po=
inting at it.
/// When a value of type `T` is pointed at by a [`Pin<Ptr>`], [`Pin`] will =
not restrict access
/// to the pointee value like it normally would, thus allowing the user to =
do anything that they
/// normally could with a non-[`Pin`]-wrapped `Ptr` to that value.
///
/// The idea of this trait is to alleviate the reduced ergonomics of APIs t=
hat require the use
/// of [`Pin`] for soundness for some types, but which also want to be used=
 by other types that
/// don't care about pinning. The prime example of such an API is [`Future:=
:poll`]. There are many
/// [`Future`] types that don't care about pinning. These futures can imple=
ment `Unpin` and
/// therefore get around the pinning related restrictions in the API, while=
 still allowing the
/// subset of [`Future`]s which *do* require pinning to be implemented soun=
dly.
///
/// For more discussion on the consequences of [`Unpin`] within the wider s=
cope of the pinning
/// system, see the [section about `Unpin`] in the [`pin` module].
///
/// `Unpin` has no consequence at all for non-pinned data. In particular, [=
`mem::replace`] happily
/// moves `!Unpin` data, which would be immovable when pinned ([`mem::repla=
ce`] works for any
/// `&mut T`, not just when `T: Unpin`).
///
/// *However*, you cannot use [`mem::replace`] on `!Unpin` data which is *p=
inned* by being wrapped
/// inside a [`Pin<Ptr>`] pointing at it. This is because you cannot (safel=
y) use a
/// [`Pin<Ptr>`] to get a `&mut T` to its pointee value, which you would ne=
ed to call
/// [`mem::replace`], and *that* is what makes this system work.
///
/// So this, for example, can only be done on types implementing `Unpin`:
///
/// ```rust
/// # #![allow(unused_must_use)]
/// use std::mem;
/// use std::pin::Pin;
///
/// let mut string =3D "this".to_string();
/// let mut pinned_string =3D Pin::new(&mut string);
///
/// // We need a mutable reference to call `mem::replace`.
/// // We can obtain such a reference by (implicitly) invoking `Pin::deref_=
mut`,
/// // but that is only possible because `String` implements `Unpin`.
/// mem::replace(&mut *pinned_string, "other".to_string());
/// ```
///
/// This trait is automatically implemented for almost every type. The comp=
iler is free
/// to take the conservative stance of marking types as [`Unpin`] so long a=
s all of the types that
/// compose its fields are also [`Unpin`]. This is because if a type implem=
ents [`Unpin`], then it
/// is unsound for that type's implementation to rely on pinning-related gu=
arantees for soundness,
/// *even* when viewed through a "pinning" pointer! It is the responsibilit=
y of the implementor of
/// a type that relies upon pinning for soundness to ensure that type is *n=
ot* marked as [`Unpin`]
/// by adding [`PhantomPinned`] field. For more details, see the [`pin` mod=
ule] docs.
///
/// [`mem::replace`]: crate::mem::replace "mem replace"
/// [`Future`]: crate::future::Future "Future"
/// [`Future::poll`]: crate::future::Future::poll "Future poll"
/// [`Pin`]: crate::pin::Pin "Pin"
/// [`Pin<Ptr>`]: crate::pin::Pin "Pin"
/// [`pin` module]: crate::pin "pin module"
/// [section about `Unpin`]: crate::pin#unpin "pin module docs about unpin"
/// [`unsafe`]: ../../std/keyword.unsafe.html "keyword unsafe"
#[stable(feature =3D "pin", since =3D "1.33.0")]
#[diagnostic::on_unimplemented(
    note =3D "consider using the `pin!` macro\nconsider using `Box::pin` if=
 you need to access the pinned value outside of the current scope",
    message =3D "`{Self}` cannot be unpinned"
)]
#[lang =3D "unpin"]
pub auto trait Unpin {}

/// A marker type which does not implement `Unpin`.
///
/// If a type contains a `PhantomPinned`, it will not implement `Unpin` by =
default.
#[stable(feature =3D "pin", since =3D "1.33.0")]
#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct PhantomPinned;

#[stable(feature =3D "pin", since =3D "1.33.0")]
impl !Unpin for PhantomPinned {}

marker_impls! {
    #[stable(feature =3D "pin", since =3D "1.33.0")]
    Unpin for
        {T: ?Sized} &T,
        {T: ?Sized} &mut T,
}

marker_impls! {
    #[stable(feature =3D "pin_raw", since =3D "1.38.0")]
    Unpin for
        {T: ?Sized} *const T,
        {T: ?Sized} *mut T,
}

/// A marker for types that can be dropped.
///
/// This should be used for `~const` bounds,
/// as non-const bounds will always hold for every type.
#[unstable(feature =3D "const_destruct", issue =3D "133214")]
#[lang =3D "destruct"]
#[rustc_on_unimplemented(message =3D "can't drop `{Self}`", append_const_ms=
g)]
#[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal=
se))]
#[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
#[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
#[cfg_attr(not(bootstrap), const_trait)]
pub trait Destruct {}

/// A marker for tuple types.
///
/// The implementation of this trait is built-in and cannot be implemented
/// for any user type.
#[unstable(feature =3D "tuple_trait", issue =3D "none")]
#[lang =3D "tuple_trait"]
#[diagnostic::on_unimplemented(message =3D "`{Self}` is not a tuple")]
#[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal=
se))]
#[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
#[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
pub trait Tuple {}

/// A marker for pointer-like types.
///
/// This trait can only be implemented for types that are certain to have
/// the same size and alignment as a [`usize`] or [`*const ()`](pointer).
/// To ensure this, there are special requirements on implementations
/// of `PointerLike` (other than the already-provided implementations
/// for built-in types):
///
/// * The type must have `#[repr(transparent)]`.
/// * The type=E2=80=99s sole non-zero-sized field must itself implement `P=
ointerLike`.
#[unstable(feature =3D "pointer_like_trait", issue =3D "none")]
#[lang =3D "pointer_like"]
#[diagnostic::on_unimplemented(
    message =3D "`{Self}` needs to have the same ABI as a pointer",
    label =3D "`{Self}` needs to be a pointer-like type"
)]
#[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
pub trait PointerLike {}

#[cfg(not(bootstrap))]
marker_impls! {
    #[unstable(feature =3D "pointer_like_trait", issue =3D "none")]
    PointerLike for
        isize,
        usize,
        {T} &T,
        {T} &mut T,
        {T} *const T,
        {T} *mut T,
        {T: PointerLike} crate::pin::Pin<T>,
}

/// A marker for types which can be used as types of `const` generic parame=
ters.
///
/// These types must have a proper equivalence relation (`Eq`) and it must =
be automatically
/// derived (`StructuralPartialEq`). There's a hard-coded check in the comp=
iler ensuring
/// that all fields are also `ConstParamTy`, which implies that recursively=
, all fields
/// are `StructuralPartialEq`.
#[lang =3D "const_param_ty"]
#[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
#[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a con=
st parameter type")]
#[allow(multiple_supertrait_upcastable)]
// We name this differently than the derive macro so that the `adt_const_pa=
rams` can
// be used independently of `unsized_const_params` without requiring a full=
 path
// to the derive macro every time it is used. This should be renamed on sta=
bilization.
pub trait ConstParamTy_: UnsizedConstParamTy + StructuralPartialEq + Eq {}

/// Derive macro generating an impl of the trait `ConstParamTy`.
#[rustc_builtin_macro]
#[allow_internal_unstable(unsized_const_params)]
#[unstable(feature =3D "adt_const_params", issue =3D "95174")]
pub macro ConstParamTy($item:item) {
    /* compiler built-in */
}

#[lang =3D "unsized_const_param_ty"]
#[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
#[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a con=
st parameter type")]
/// A marker for types which can be used as types of `const` generic parame=
ters.
///
/// Equivalent to [`ConstParamTy_`] except that this is used by
/// the `unsized_const_params` to allow for fake unstable impls.
pub trait UnsizedConstParamTy: StructuralPartialEq + Eq {}

/// Derive macro generating an impl of the trait `ConstParamTy`.
#[rustc_builtin_macro]
#[allow_internal_unstable(unsized_const_params)]
#[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
pub macro UnsizedConstParamTy($item:item) {
    /* compiler built-in */
}

// FIXME(adt_const_params): handle `ty::FnDef`/`ty::Closure`
marker_impls! {
    #[unstable(feature =3D "adt_const_params", issue =3D "95174")]
    ConstParamTy_ for
        usize, u8, u16, u32, u64, u128,
        isize, i8, i16, i32, i64, i128,
        bool,
        char,
        (),
        {T: ConstParamTy_, const N: usize} [T; N],
}

marker_impls! {
    #[unstable(feature =3D "unsized_const_params", issue =3D "95174")]
    UnsizedConstParamTy for
        usize, u8, u16, u32, u64, u128,
        isize, i8, i16, i32, i64, i128,
        bool,
        char,
        (),
        {T: UnsizedConstParamTy, const N: usize} [T; N],

        str,
        {T: UnsizedConstParamTy} [T],
        {T: UnsizedConstParamTy + ?Sized} &T,
}

/// A common trait implemented by all function pointers.
#[unstable(
    feature =3D "fn_ptr_trait",
    issue =3D "none",
    reason =3D "internal trait for implementing various traits for all func=
tion pointers"
)]
#[lang =3D "fn_ptr_trait"]
#[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal=
se))]
#[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)]
#[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)]
pub trait FnPtr: Copy + Clone {
    /// Returns the address of the function pointer.
    #[lang =3D "fn_ptr_addr"]
    fn addr(self) -> *const ();
}

/// Derive macro generating impls of traits related to smart pointers.
#[rustc_builtin_macro(CoercePointee, attributes(pointee))]
#[allow_internal_unstable(dispatch_from_dyn, coerce_unsized, unsize)]
#[unstable(feature =3D "derive_coerce_pointee", issue =3D "123430")]
#[cfg(not(bootstrap))]
pub macro CoercePointee($item:item) {
    /* compiler built-in */
}


```


In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.43, cairo version 1.18.2) of 2025-04-17 built on Mufasa
Repository revision: 7b35a5062231ec5a11c7a87d4797cfb5dba25121
Repository branch: feature/igc
System Description: NixOS 24.11 (Vicuna)

Configured using:
 'configure 'CFLAGS=3D-O3 -march=3Dnative'
 --prefix=3D/home/exec/Projects/git.savannah.gnu.org/git/emacs-build/featur=
e_igc-7b35a5062231ec5a11c7a87d4797cfb5dba25121-O3
 --with-mps=3Dyes --with-imagemagick --with-modules --with-pgtk
 --with-cairo --with-cairo-xcb --without-compress-install
 --with-mailutils --with-tree-sitter --with-xinput2
 --enable-link-time-optimization --with-file-notification=3Dinotify'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ
IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 MODULES MPS NATIVE_COMP NOTIFY
INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB

Important settings:
  value of $LC_COLLATE: C
  value of $LC_MONETARY: en_US.UTF-8
  value of $LC_NUMERIC: en_US.UTF-8
  value of $LC_TIME: C
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=3Dfcitx
  locale-coding-system: utf-8-unix

Major mode: Elisp/l

Minor modes in effect:
  restore-point-mode: t
  global-atomic-chrome-edit-mode: t
  global-git-gutter-mode: t
  git-gutter-mode: t
  marginalia-mode: t
  elisp-def-mode: t
  flycheck-posframe-mode: t
  hungry-delete-mode: t
  symbol-overlay-mode: t
  keycast-tab-bar-mode: t
  vertico-truncate-mode: t
  vertico-multiform-mode: t
  vertico-mode: t
  telega-root-auto-fill-mode: t
  telega-contact-birthdays-mode: t
  telega-active-video-chats-mode: t
  telega-active-locations-mode: t
  telega-patrons-mode: t
  telega-active-stories-mode: t
  tab-line-nerd-icons-global-mode: t
  global-tab-line-mode: t
  tab-line-mode: t
  ultra-scroll-mode: t
  pixel-scroll-precision-mode: t
  org-roam-db-autosync-mode: t
  global-org-modern-mode: t
  mu4e-modeline-mode: t
  global-kkp-mode: t
  global-git-commit-mode: t
  flycheck-mode: t
  engine-mode: t
  symex-mode: t
  global-evil-surround-mode: t
  evil-surround-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  corfu-terminal-mode: t
  corfu-history-mode: t
  global-corfu-mode: t
  corfu-mode: t
  rainbow-mode: t
  elisp-autofmt-mode: t
  highlight-defined-mode: t
  highlight-numbers-mode: t
  hes-mode: t
  rainbow-delimiters-mode: t
  burly-tabs-mode: t
  global-form-feed-st-mode: t
  form-feed-st-mode: t
  eat-eshell-mode: t
  sly-symbol-completion-mode: t
  super-save-mode: t
  savehist-mode: t
  which-key-mode: t
  super-hint-xref-mode: t
  super-hint-rg-mode: t
  windmove-mode: t
  server-mode: t
  save-place-mode: t
  recentf-mode: t
  winner-mode: t
  persistent-scratch-autosave-mode: t
  global-dash-fontify-mode: t
  dash-fontify-mode: t
  nerd-icons-completion-mode: t
  sudo-edit-indicator-mode: t
  global-evil-visualstar-mode: t
  evil-visualstar-mode: t
  evil-commentary-mode: t
  global-evil-mc-mode: t
  evil-mc-mode: t
  evil-lion-mode: t
  global-evil-collection-unimpaired-mode: t
  evil-collection-unimpaired-mode: t
  buffer-face-mode: t
  TeX-PDF-mode: t
  display-line-numbers-mode: t
  electric-pair-mode: t
  global-auto-revert-mode: t
  evil-mode: t
  evil-local-mode: t
  general-override-mode: t
  minions-mode: t
  el-patch-use-package-mode: t
  elpaca-use-package-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tab-bar-mode: t
  file-name-shadow-mode: t
  context-menu-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  column-number-mode: -1
  line-number-mode: -1
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides /home/e=
xec/.emacs.d/elpaca/builds/standard-themes/theme-loaddefs
/home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides /home/e=
xec/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs
/home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides /home/e=
xec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5062231e=
c5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/theme-loaddefs
/home/exec/.emacs.d/elpaca/builds/transient/transient hides /home/exec/Proj=
ects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5062231ec5a11c7a=
87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/transient

Features:
(shadow sort mail-extr expand-region yaml-mode-expansions
subword-mode-expansions text-mode-expansions cc-mode-expansions
the-org-mode-expansions python-el-fgallina-expansions
latex-mode-expansions js2-mode-expansions js-mode-expansions
web-mode-expansions html-mode-expansions clojure-mode-expansions
er-basic-expansions expand-region-core expand-region-custom
evil-collection-embark embark-org embark-consult embark gptel-curl
nerd-icons-dired diredfl info-colors vertico-sort cus-start descr-text
dabbrev cape lsp-diagnostics lsp-modeline lsp-icons lsp-zig lsp-yang
lsp-yaml lsp-xml lsp-wgsl lsp-volar lsp-vimscript lsp-vhdl lsp-vetur
lsp-html lsp-verilog lsp-vala lsp-v lsp-typespec lsp-typeprof lsp-ttcn3
lsp-ts-query lsp-trunk lsp-toml lsp-tilt lsp-tex lsp-terraform
lsp-svelte lsp-steep lsp-sqls lsp-sql lsp-sorbet lsp-solidity
lsp-solargraph lsp-semgrep lsp-ruff lsp-ruby-syntax-tree lsp-ruby-lsp
lsp-rubocop lsp-roslyn lsp-roc lsp-rf lsp-remark lsp-racket lsp-r
lsp-qml lsp-pyright lsp-pylsp lsp-pyls lsp-pwsh lsp-purescript lsp-pls
lsp-php lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-nushell
lsp-nix lsp-nim lsp-nginx lsp-nextflow lsp-move lsp-mojo lsp-mint
lsp-meson lsp-mdx lsp-matlab lsp-marksman lsp-markdown lsp-magik
lsp-fennel lsp-lua lsp-lisp lsp-kubernetes-helm lsp-kotlin lsp-json
lsp-jq lsp-javascript lsp-idris lsp-haxe lsp-hack lsp-groovy lsp-graphql
lsp-golangci-lint lsp-glsl lsp-gleam lsp-gdscript lsp-fsharp lsp-futhark
lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elm lsp-elixir
lsp-earthly lsp-dockerfile lsp-dhall lsp-d lsp-cypher lsp-cucumber
lsp-copilot lsp-css lsp-c3 lsp-csharp lsp-crystal lsp-credo lsp-cobol
lsp-cmake lsp-clojure lsp-clangd lsp-bufls lsp-go lsp-completion
lsp-beancount lsp-bash lsp-awk lsp-autotools lsp-astro lsp-asm
lsp-ansible lsp-angular lsp-ada lsp-actionscript copilot
copilot-balancer editorconfig editorconfig-core editorconfig-core-handle
editorconfig-fnmatch jsonrpc gptel-openai-extras gptel-anthropic
gptel-gemini gptel-ollama org-indent gptel-openai consult-dir-autoloads
consult-ag-autoloads restore-point evil-collection-atomic-chrome
atomic-chrome git-gutter marginalia elisp-def evil-collection-ert ert
flycheck-posframe evil-collection-hungry-delete hungry-delete
symbol-overlay keycast zig-mode reformatter empv vertico-truncate
vertico-posframe vertico-multiform evil-collection-vertico vertico
lsp-uniteai nix-ts-mode go-translate gt-text-utility gt-engine-echo
gt-engine-libre gt-engine-chatgpt gt-engine-youdao gt-engine-osxdict
gt-engine-stardict gt-engine-deepl gt-engine-google-rpc gt-engine-google
gt-engine-bing gt-extension gt-faces gt-core gt-httpx sdcv cap-words
superword subword evil-collection-telega telega-obsolete telega
telega-tdlib-events telega-match telega-root telega-info telega-chat
telega-modes telega-company telega-emoji telega-user
telega-notifications telega-voip telega-msg telega-story telega-webpage
telega-tme telega-sticker telega-vvnote telega-ffplay telega-i18n
telega-sort telega-filter telega-ins telega-inline telega-util
telega-folders telega-topic telega-media telega-tdlib telega-server
telega-core telega-customize emacsbug tab-line-nerd-icons
evil-collection-imenu-list imenu-list tab-line rust-utils
rust-mode-treesitter rust-ts-mode rust-mode rust-playpen rust-cargo
rust-common rust-rustfmt rust-compile cargo cargo-process rg-info-hack
rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg rg-history ibuf-ext
evil-collection-ibuffer ibuffer ibuffer-loaddefs rg-header
evil-collection-ultra-scroll ultra-scroll pixel-scroll cua-base
org-sliced-images emacsql-sqlite-builtin evil-collection-org-roam
org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id
org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam
org-capture emacsql-sqlite emacsql emacsql-compiler org-journal
org-crypt cal-iso org-modern orderless evil-collection-mu4e mu4e
mu4e-org mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts
mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg
gnus-art mm-uu mml2015 mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders
mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars
mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cyphejor qml-mode
kkp rfc-mode string-inflection wakatime-mode systemd minuet pr-review
pr-review-render pr-review-action magit-diff git-commit
evil-collection-log-edit log-edit pcvs-util add-log magit-core
magit-autorevert magit-margin magit-transient magit-process
evil-collection-with-editor with-editor magit-mode magit-git magit-base
pr-review-input pr-review-api ghub-graphql treepy gsexp ghub
pr-review-common consult-lsp lsp-ui lsp-ui-flycheck lsp-ui-doc
evil-collection-lsp-ui-imenu lsp-ui-imenu lsp-ui-peek lsp-ui-sideline
lsp-rust lsp-semantic-tokens lsp-mode network-stream
evil-collection-markdown-mode markdown-mode lsp-ui-util lsp-protocol
llm-prompt groovy-mode iedit help-macro iedit-lib hide-comnt
minibuffer-header gptel-quick gotest fzf flycheck-clj-kondo jka-compr
pos-tip consult-flycheck flycheck-rust engine-mode evil-collection-ement
ement-room-list taxy-magit-section taxy ement ement-notifications
ement-notify ement-room ewoc ement-lib ement-api ement-structs
ement-macros dns llm-ollama llm-provider-utils llm-models
llm-request-plz plz-event-source plz-media-type plz llm symex symex-evil
symex-evil-support symex-hydra symex-transformations
symex-transformations-lisp symex-utils evil-cleverparens
evil-cleverparens-text-objects evil-cleverparens-util smartparens
evil-surround symex-misc symex-interface-builtins symex-interface-fennel
symex-interface-arc symex-interface-common-lisp symex-interface-clojure
symex-interface-scheme symex-interface-racket symex-interface-elisp
symex-interop symex-interface symex-traversals symex-dsl symex-evaluator
symex-computations symex-primitives symex-ts symex-utils-ts
symex-transformations-ts symex-primitives-lisp symex-data symex-ui
symex-custom evil-collection-lispy lispy le-clojure delsel lispy-inline
avy lispy-tags zoutline combobulate evil-collection-elfeed elfeed-show
elfeed-search elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db
elfeed-lib xml-query dired-git-info dired-hacks dired-preview
evil-collection-cmake-mode cmake-mode consult-yasnippet yasnippet-capf
yasnippet-snippets yasnippet kind-icon svg-lib corfu-terminal popon
corfu-popupinfo corfu-indexed corfu-history evil-collection-corfu corfu
consult-ls-git paredit clojure-ts-mode evil-collection-cider cider
tramp-sh cider-debug cider-browse-ns cider-mode cider-xref-backend
cider-find cider-inspector cider-completion cider-profile cider-eval
cider-jar cider-repl-history cider-repl cider-resolve cider-test
cider-overlays cider-stacktrace cider-doc cider-browse-spec
cider-clojuredocs cider-eldoc cider-docstring cider-client cider-common
cider-completion-context cider-connection cider-popup sesman-browser
nrepl-client cider-util sesman queue nrepl-dict spinner clojure-mode
rainbow-mode elisp-autofmt loadhist highlight-defined highlight-numbers
parent-mode highlight-escape-sequences rainbow-delimiters chatgpt-shell
chatgpt-shell-prompt-compose chatgpt-shell-perplexity
chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama
chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek
chatgpt-shell-anthropic evil-collection-smerge-mode smerge-mode diff
shell-maker ielm evil-collection-eshell eshell em-prompt esh-mode
esh-var esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module
esh-module-loaddefs esh-util cargo-jump-xref toml breadcrumb pulse
bookmark-in-project bookmark+ bookmark+-key bookmark+-1 gnus-sum
gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail
mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win
bookmark+-bmu bookmark+-lit bookmark+-mac babashka parseedn
parseclj-parser parseclj-lex parseclj-alist cnfonts burly-tabs burly
compile-multi form-feed-st google-this echo-bar fcitx
evil-collection-eat eat term/xterm xterm evil-collection-term term ehelp
ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util
rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex
ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach
org-element org-persist org-id org-refile org-element-ast inline
avl-tree htmlize evil-collection-explain-pause-mode explain-pause-mode
explain-pause-top explain-pause-log-to-socket evil-collection-profiler
profiler weather-metno solar cal-dst url-cache display-wttr kdeconnect
crux pest-mode popwin modus-themes blackboard-theme standard-themes
nimbus-theme tok-theme danneskjold-theme srcery-theme subatomic256-theme
iscroll xml+ evil-textobj-tree-sitter
evil-textobj-tree-sitter-thing-at-point evil-textobj-tree-sitter-core
tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get
dired-aux tsc-obsolete ctable evil-collection-color-rg color-rg
line-reminder ov ht fringe-helper solarized-theme solarized
solarized-faces sqlup-mode evil-collection-bm bm zen-mode
evil-collection-sly sly gud sly-completion sly-buttons sly-messages
sly-common evil-collection-apropos apropos evil-collection-arc-mode
arc-mode archive-mode hyperspec sicp base16-theme idea-darkula-theme
hybrid-reverse-theme material-theme doom-themes doom-themes-base
nyan-mode organic-green-theme inkpot-theme github-dark-vscode-theme
almost-mono-themes cyberpunk-theme soothe-theme soothe-tva zenburn-theme
mindre-theme kaolin-themes kaolin-themes-lib tron-legacy-theme
wildcharm-theme atom-one-dark-theme parchment-theme autothemer
visual-fill-column transpose-frame gameoflife evil-collection-docker
docker docker-context docker-volume docker-network docker-image
docker-container docker-faces docker-core docker-compose docker-process
docker-utils docker-group aio dockerfile-mode emacs-everywhere cus-dir
dumb-jump evil-collection-popup popup websocket bindat bing-dict cl
bing-dict-cache hl-todo atom-dark-theme ef-themes uwu-theme vagrant
evil-collection-ag ag vc-svn find-dired alarm-clock alert log4e
notifications gntp pinentry evil-collection-hackernews hackernews
evil-collection-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello
notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message
notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company
notmuch-parser notmuch-wash coolj goto-addr icalendar diary-lib
diary-loaddefs notmuch-tag notmuch-lib notmuch-compat message sendmail
yank-media rfc822 mml mailabbrev gmm-utils mm-view mml-smime mml-sec
smime gnutls dig mm-decode mm-bodies mm-encode fussy flx affe
evil-collection-consult consult clang-format apheleia apheleia-rcs
apheleia-dp apheleia-formatters apheleia-utils apheleia-log
apheleia-formatter-context vimrc-mode gnuplot olivetti super-save
evil-collection-helpful helpful cc-langs trace cl-print
evil-collection-edebug edebug evil-collection-debug debug backtrace
info-look evil-collection-info info help-fns radix-tree
evil-collection-elisp-refs elisp-refs solidity-mode solidity-common
evil-collection-git-timemachine git-timemachine web-mode disp-table
evil-collection-go-mode go-mode find-file evil-collection-js2-mode
js2-mode etags fileloop zig-mode-autoloads reformatter-autoloads
empv-autoloads yasnippet-snippets-autoloads marginalia-autoloads
vertico-truncate-autoloads vertico-posframe-autoloads vertico-autoloads
lsp-uniteai-autoloads nix-ts-mode-autoloads go-translate-autoloads
alert-autoloads gntp-autoloads log4e-autoloads sdcv-autoloads
telega-autoloads tab-line-nerd-icons-autoloads keycast-autoloads
rust-mode-autoloads cargo-autoloads toml-autoloads rg-autoloads
writeroom-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads
makefile-executor-autoloads ultra-scroll-autoloads pdf-tools-autoloads
org-sliced-images-autoloads consult-org-roam-autoloads
org-roam-autoloads org-journal-autoloads org-download-autoloads
org-modern-autoloads orderless-autoloads mu4e-autoloads
cyphejor-autoloads symbol-overlay-autoloads qml-mode-autoloads
kkp-autoloads rfc-mode-autoloads string-inflection-autoloads
wakatime-mode-autoloads webpaste-autoloads systemd-autoloads
minuet-autoloads pr-review-autoloads forge-autoloads closql-autoloads
emacsql-autoloads ghub-autoloads treepy-autoloads yaml-autoloads
lsp-pyright-autoloads consult-lsp-autoloads lsp-ui-autoloads
lsp-mode-autoloads groovy-mode-autoloads imenu-list-autoloads
hungry-delete-autoloads hide-comnt-autoloads minibuffer-header-autoloads
gptel-quick-autoloads gptel-autoloads gotest-autoloads fzf-autoloads
flycheck-golangci-lint-autoloads flycheck-clj-kondo-autoloads
pos-tip-autoloads consult-flycheck-autoloads flycheck-rust-autoloads
flycheck-posframe-autoloads flycheck-autoloads engine-mode-autoloads
ement-autoloads taxy-magit-section-autoloads taxy-autoloads
embark-consult-autoloads embark-autoloads ellama-autoloads llm-autoloads
plz-event-source-autoloads plz-media-type-autoloads plz-autoloads
symex-autoloads tree-sitter-autoloads tsc-autoloads lispy-autoloads
iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads
evil-cleverparens-autoloads smartparens-autoloads combobulate-autoloads
combobulate-go combobulate-json combobulate-yaml combobulate-css
combobulate-js-ts combobulate-python combobulate-html combobulate-toml
combobulate-cursor multiple-cursors mc-separate-operations
rectangular-region-mode mc-mark-pop mc-edit-lines
mc-hide-unmatched-lines-mode mc-mark-more sgml-mode mc-cycle-cursors
multiple-cursors-core combobulate-query savehist evil-collection-scheme
scheme combobulate-ui combobulate-display let-alist combobulate-ztree
combobulate-envelope combobulate-manipulation evil-collection-python
python combobulate-procedure combobulate-navigation combobulate-misc
combobulate-setup tempo combobulate-interface combobulate-settings
combobulate-rules elisp-def-autoloads elfeed-tube-mpv-autoloads
elfeed-tube-autoloads elfeed-autoloads eee-autoloads eee
dired-git-info-autoloads dired-hacks-autoloads dired-preview-autoloads
diredfl-autoloads git-gutter-autoloads cmake-mode-autoloads
consult-yasnippet-autoloads yasnippet-capf-autoloads yasnippet-autoloads
cape-autoloads kind-icon-autoloads svg-lib-autoloads
corfu-terminal-autoloads popon-autoloads corfu-autoloads
copilot-autoloads copilot-chat-autoloads consult-ls-git-autoloads
paredit-autoloads clojure-ts-mode-autoloads cider-autoloads
clojure-mode-autoloads queue-autoloads spinner-autoloads
sesman-autoloads chatgpt-shell-autoloads shell-maker-autoloads
cargo-jump-xref-autoloads breadcrumb-autoloads
bookmark-in-project-autoloads bookmark+-autoloads babashka-autoloads
parseedn-autoloads parseclj-autoloads aidermacs-autoloads
mediawiki-autoloads markdown-mode-autoloads treemacs-magit-autoloads
magit-autoloads with-editor-autoloads nerd-icons-ibuffer-autoloads
treemacs-nerd-icons-autoloads treemacs-autoloads pfuture-autoloads
cfrs-autoloads cnfonts-autoloads burly-autoloads compile-multi-autoloads
form-feed-st-autoloads google-this-autoloads echo-bar-autoloads
zoom-autoloads fcitx-autoloads eat-autoloads vterm-autoloads
chatgpt-autoloads polymode-autoloads ox-reveal-autoloads
htmlize-autoloads wordreference-autoloads explain-pause-mode-autoloads
weather-metno-autoloads display-wttr-autoloads kdeconnect-autoloads
emms-autoloads crux-autoloads pest-mode-autoloads popwin-autoloads
modus-themes-autoloads blackboard-theme-autoloads
standard-themes-autoloads nimbus-theme-autoloads tok-theme-autoloads
danneskjold-theme-autoloads srcery-theme-autoloads
subatomic256-theme-autoloads iscroll-autoloads xml+-autoloads
multiple-cursors-autoloads evil-textobj-tree-sitter-autoloads
evil-numbers-autoloads ctable-autoloads color-rg-autoloads
line-reminder-autoloads fringe-helper-autoloads ov-autoloads
solarized-theme-autoloads sqlup-mode-autoloads bm-autoloads
zen-mode-autoloads sly-autoloads expand-region-autoloads
highlight-defined-autoloads base16-theme-autoloads
idea-darkula-theme-autoloads hybrid-reverse-theme-autoloads
material-theme-autoloads doom-themes-autoloads nyan-mode-autoloads
organic-green-theme-autoloads inkpot-theme-autoloads
github-dark-vscode-theme-autoloads almost-mono-themes-autoloads
cyberpunk-theme-autoloads soothe-theme-autoloads zenburn-theme-autoloads
mindre-theme-autoloads kaolin-themes-autoloads
tron-legacy-theme-autoloads wildcharm-theme-autoloads
atom-one-dark-theme-autoloads parchment-theme-autoloads
autothemer-autoloads visual-fill-column-autoloads
transpose-frame-autoloads gameoflife-autoloads docker-autoloads
aio-autoloads dockerfile-mode-autoloads emacs-everywhere-autoloads
cus-dir-autoloads dumb-jump-autoloads popup-autoloads
bing-dict-autoloads hl-todo-autoloads atom-dark-theme-autoloads
ef-themes-autoloads uwu-theme-autoloads vagrant-autoloads ag-autoloads
alarm-clock-autoloads pinentry-autoloads hackernews-autoloads
notmuch-autoloads fussy-autoloads flx-autoloads affe-autoloads
consult-autoloads clang-format-autoloads apheleia-autoloads
elisp-autofmt-autoloads vimrc-mode-autoloads mpv-autoloads
gnuplot-autoloads mermaid-mode-autoloads atomic-chrome-autoloads
websocket-autoloads restore-point-autoloads ace-window-autoloads
avy-autoloads olivetti-autoloads super-save-autoloads helpful-autoloads
elisp-refs-autoloads solidity-mode-autoloads git-timemachine-autoloads
web-mode-autoloads adoc-mode-autoloads go-mode-autoloads
js2-mode-autoloads rust-playground-autoloads evil-collection-which-key
which-key super-hint-xref super-hint-rg super-hint evil-collection-xref
xref evil-collection-rg rg piper ob-shell ob-gnuplot ob-C
evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-src evil-collection-sh-script sh-script executable
ob-comint org-pcomplete org-list org-footnote org-faces org-entities
ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs
molecule-mode lsp hyperbole hideshow gptel-manual-complete
evil-collection-gptel gptel windmove evil-collection-flycheck flycheck
erc erc-backend erc-networks erc-common erc-compat erc-loaddefs
evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff
ediff-help ediff-init ediff-util dired-x consult-ripgrep-all desktop
frameset server evil-collection-eww eww vtable mule-util url-queue
mm-url evil-collection-gnus gnus nnheader gnus-util range epa-file
evil-collection-epa epa derived epg rfc6068 epg-config saveplace recentf
tree-widget winner edit-list refine loop list-utils prompts file-info
browse-at-remote f image-roll evil-collection-image image-mode exif
toc-mode rst scratch sql evil-collection-view view persistent-scratch
exercism persist async-await iter2 generator promise url-http url-auth
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw
nsm promise-rejection-tracking promise-finally promise-done
promise-es6-extensions promise-core async request mailheader mail-utils
a indent-bars evil-collection-outline noutline outline mode-line-bell
powerthesaurus jeison dash s evil-collection-ripgrep ripgrep
evil-collection-wgrep wgrep evil-collection-grep grep
evil-collection-vlf vlf vlf-base vlf-tune gptai ctrlf hl-line
nerd-icons-completion nerd-icons nerd-icons-faces nerd-icons-data
nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon
nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon
nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon
nerd-icons-data-pomicon nerd-icons-data-ipsicon disable-mouse mingus
libmpdee evil-collection-mpdel mpdel mpdel-browser libmpdel-directory
mpdel-playlist mpdel-tablist mpdel-song mpdel-core navigel
evil-collection-bookmark bookmark evil-collection-tablist tablist
tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw mode-local find-func cedet
libmpdel tq time-stamp posframe esup esup-child benchmark
ssh-config-mode jq-mode json-mode json-snatcher js c-ts-common treesit
cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
cc-vars cc-defs evil-collection-yaml-mode yaml-mode toml-mode conf-mode
align highlight facemenu nix-mode ffap smie nix-repl nix-shell nix-store
evil-collection-magit-section magit-section cursor-sensor llama nix-log
nix-instantiate nix-shebang nix-format nix sudo-edit tramp trampver
tramp-integration tramp-message tramp-compat shell pcomplete parse-time
iso8601 time-date tramp-loaddefs evil-collection-devdocs devdocs mathjax
evil-terminal-cursor-changer evil-visualstar evil-commentary
evil-commentary-integration evil-collection-evil-mc evil-mc
evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make
evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars
evil-mc-known-commands evil-mc-common evil-exchange evil-lion evil-args
smartscan timeout ess ess-utils ess-custom evil-collection-unimpaired
evil-collection-vc-git evil-collection-tabulated-list
evil-collection-tab-bar evil-collection-simple evil-collection-replace
evil-collection-process-menu evil-collection-package-menu
evil-collection-minibuffer evil-collection-man evil-collection-kmacro
evil-collection-indent evil-collection-imenu evil-collection-help
evil-collection-flymake evil-collection-elisp-mode evil-collection-eldoc
evil-collection-elpaca evil-collection-dired evil-collection-diff-mode
evil-collection-custom evil-collection-compile evil-collection-comint
evil-collection-calendar evil-collection-buff-menu evil-collection
annalist sqlite3 sqlite3-api treebundel vc-git diff-mode track-changes
files-x git-link dired dired-loaddefs texfrag face-remap shr pixel-fill
kinsoku url-file puny svg dom preview latex latex-flymake flymake
project compile text-property-search comint ansi-osc tex-ispell
tex-style tex dbus xml crm texmathp auctex display-line-numbers
elec-pair lisp-mnt package browse-url xdg url-handlers xterm-color
edit-list-autoloads refine-autoloads list-utils-autoloads loop-autoloads
prompts-autoloads file-info-autoloads hydra-autoloads lv-autoloads
browse-at-remote-autoloads image-roll-autoloads
saveplace-pdf-view-autoloads pdfgrep-autoloads toc-mode-autoloads
scratch-autoloads persistent-scratch-autoloads exercism-autoloads
a-autoloads request-autoloads async-autoloads async-await-autoloads
promise-autoloads iter2-autoloads persist-autoloads
indent-bars-autoloads rainbow-delimiters-autoloads
rainbow-mode-autoloads mode-line-bell-autoloads powerthesaurus-autoloads
hydra lv jeison-autoloads ripgrep-autoloads wgrep-autoloads
vlf-autoloads gptai-autoloads popper-autoloads ctrlf-autoloads
nerd-icons-dired-autoloads nerd-icons-completion-autoloads
nerd-icons-autoloads disable-mouse-autoloads mingus-autoloads
libmpdee-autoloads mpdel-autoloads libmpdel-autoloads navigel-autoloads
tablist-autoloads posframe-autoloads esup-autoloads quickrun-autoloads
ht-autoloads ssh-config-mode-autoloads jq-mode-autoloads
json-mode-autoloads json-snatcher-autoloads yaml-mode-autoloads
toml-mode-autoloads highlight-escape-sequences-autoloads
highlight-autoloads highlight-numbers-autoloads parent-mode-autoloads
nix-mode-autoloads magit-section-autoloads llama-autoloads
sudo-edit-autoloads attrap-autoloads f-autoloads dash-autoloads
s-autoloads devdocs-autoloads mathjax-autoloads
evil-terminal-cursor-changer-autoloads evil-surround-autoloads
evil-visualstar-autoloads evil-commentary-autoloads evil-mc-autoloads
evil-exchange-autoloads evil-lion-autoloads evil-args-autoloads
smartscan-autoloads timeout-autoloads ess-autoloads
info-colors-autoloads evil-collection-autoloads annalist-autoloads
sqlite3-autoloads treebundel-autoloads git-link-autoloads
texfrag-autoloads auctex-autoloads tex-site xterm-color-autoloads ispell
which-func imenu man ansi-color autorevert filenotify cal-menu calendar
cal-loaddefs advice evil evil-integration evil-maps evil-commands reveal
evil-jumps evil-command-window evil-types evil-search evil-ex
evil-macros evil-repeat evil-states evil-core comp comp-cstr warnings
comp-run comp-common rx evil-common thingatpt rect evil-vars ring
undo-fu goto-chg evil-autoloads undo-fu-autoloads goto-chg-autoloads
transient pcase format-spec transient-autoloads general memoize
sanityinc-tomorrow-bright-theme color-theme-sanityinc-tomorrow color
minions compat general-autoloads memoize-autoloads
color-theme-sanityinc-tomorrow-autoloads minions-autoloads
el-patch-autoloads el-patch el-patch-stub edmacro kmacro vc
vc-dispatcher cl-extra help-mode elpaca-use-package use-package
use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core
elpaca-use-package-autoloads elpaca-log elpaca-ui elpaca-menu-elpa
elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods
url-history url-cookie generate-lisp-file url-domsuf url-util url-parse
auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
map byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org
elpaca elpaca-process elpaca-autoloads early-init cus-edit pp cus-load
icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc
paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
simple cl-generic indonesian philippine cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite emoji-zwj charscript charprop case-table
epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
loaddefs theme-loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget keymap hashtable-print-readable backquote threads dbusbind
inotify dynamic-setting system-font-setting font-render-setting cairo
gtk pgtk lcms2 multi-tty move-toolbar make-network-process
tty-child-frames native-compile mps emacs)

Memory information:
((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0)
  (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0)
  (buffers 1000 0))

--=20




Acknowledgement sent to Eval Exec <execvy@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#77914; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 20 Apr 2025 09:45:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.