From: "Matt Jolly" <kangie@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/rust-patches:1.88 commit in: /
Date: Sat, 31 May 2025 05:55:30 +0000 (UTC) [thread overview]
Message-ID: <1748670886.1352f9e072e5d9c0e6835b2ca1fcf54717539961.kangie@gentoo> (raw)
Message-ID: <20250531055530.GRo9Bx18ISJrEwrNVIPsGPw8r6pHEt09JoZOfNbaR-s@z> (raw)
commit: 1352f9e072e5d9c0e6835b2ca1fcf54717539961
Author: Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Sat May 31 05:54:46 2025 +0000
Commit: Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Sat May 31 05:54:46 2025 +0000
URL: https://gitweb.gentoo.org/proj/rust-patches.git/commit/?id=1352f9e0
Add patches for Rust 1.86.0-r2
Patches:
- 1.85.0-cross-compile-libz.patch
- 1.85.0-musl-dynamic-linking.patch
- 1.67.0-doc-wasm.patch
- 1.86.0-znver.patch
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>
1.86.0-znver.patch | 186 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 186 insertions(+)
diff --git a/1.86.0-znver.patch b/1.86.0-znver.patch
new file mode 100644
index 0000000..5b93a76
--- /dev/null
+++ b/1.86.0-znver.patch
@@ -0,0 +1,186 @@
+https://github.com/rust-lang/rust/issues/138054
+https://bugs.gentoo.org/953109#c7
+diff --git a/library/portable-simd/crates/core_simd/src/lib.rs b/library/portable-simd/crates/core_simd/src/lib.rs
+index 7f57847c9c234..717b882b64ba1 100644
+--- a/library/portable-simd/crates/core_simd/src/lib.rs
++++ b/library/portable-simd/crates/core_simd/src/lib.rs
+@@ -35,7 +35,11 @@
+ feature(stdarch_x86_avx512)
+ )]
+ #![warn(missing_docs, clippy::missing_inline_in_public_items)] // basically all items, really
+-#![deny(unsafe_op_in_unsafe_fn, clippy::undocumented_unsafe_blocks)]
++#![deny(
++ unsafe_op_in_unsafe_fn,
++ unreachable_pub,
++ clippy::undocumented_unsafe_blocks
++)]
+ #![doc(test(attr(deny(warnings))))]
+ #![allow(internal_features)]
+ #![unstable(feature = "portable_simd", issue = "86656")]
+diff --git a/library/portable-simd/crates/core_simd/src/masks/bitmask.rs b/library/portable-simd/crates/core_simd/src/masks/bitmask.rs
+index db4312d5bf88a..8221d8f17e90e 100644
+--- a/library/portable-simd/crates/core_simd/src/masks/bitmask.rs
++++ b/library/portable-simd/crates/core_simd/src/masks/bitmask.rs
+@@ -5,7 +5,7 @@ use core::marker::PhantomData;
+
+ /// A mask where each lane is represented by a single bit.
+ #[repr(transparent)]
+-pub struct Mask<T, const N: usize>(
++pub(crate) struct Mask<T, const N: usize>(
+ <LaneCount<N> as SupportedLaneCount>::BitMask,
+ PhantomData<T>,
+ )
+@@ -78,7 +78,7 @@ where
+ {
+ #[inline]
+ #[must_use = "method returns a new mask and does not mutate the original value"]
+- pub fn splat(value: bool) -> Self {
++ pub(crate) fn splat(value: bool) -> Self {
+ let mut mask = <LaneCount<N> as SupportedLaneCount>::BitMask::default();
+ if value {
+ mask.as_mut().fill(u8::MAX)
+@@ -93,12 +93,12 @@ where
+
+ #[inline]
+ #[must_use = "method returns a new bool and does not mutate the original value"]
+- pub unsafe fn test_unchecked(&self, lane: usize) -> bool {
++ pub(crate) unsafe fn test_unchecked(&self, lane: usize) -> bool {
+ (self.0.as_ref()[lane / 8] >> (lane % 8)) & 0x1 > 0
+ }
+
+ #[inline]
+- pub unsafe fn set_unchecked(&mut self, lane: usize, value: bool) {
++ pub(crate) unsafe fn set_unchecked(&mut self, lane: usize, value: bool) {
+ unsafe {
+ self.0.as_mut()[lane / 8] ^= ((value ^ self.test_unchecked(lane)) as u8) << (lane % 8)
+ }
+@@ -106,7 +106,7 @@ where
+
+ #[inline]
+ #[must_use = "method returns a new vector and does not mutate the original value"]
+- pub fn to_int(self) -> Simd<T, N> {
++ pub(crate) fn to_int(self) -> Simd<T, N> {
+ unsafe {
+ core::intrinsics::simd::simd_select_bitmask(
+ self.0,
+@@ -118,19 +118,19 @@ where
+
+ #[inline]
+ #[must_use = "method returns a new mask and does not mutate the original value"]
+- pub unsafe fn from_int_unchecked(value: Simd<T, N>) -> Self {
++ pub(crate) unsafe fn from_int_unchecked(value: Simd<T, N>) -> Self {
+ unsafe { Self(core::intrinsics::simd::simd_bitmask(value), PhantomData) }
+ }
+
+ #[inline]
+- pub fn to_bitmask_integer(self) -> u64 {
++ pub(crate) fn to_bitmask_integer(self) -> u64 {
+ let mut bitmask = [0u8; 8];
+ bitmask[..self.0.as_ref().len()].copy_from_slice(self.0.as_ref());
+ u64::from_ne_bytes(bitmask)
+ }
+
+ #[inline]
+- pub fn from_bitmask_integer(bitmask: u64) -> Self {
++ pub(crate) fn from_bitmask_integer(bitmask: u64) -> Self {
+ let mut bytes = <LaneCount<N> as SupportedLaneCount>::BitMask::default();
+ let len = bytes.as_mut().len();
+ bytes
+@@ -141,7 +141,7 @@ where
+
+ #[inline]
+ #[must_use = "method returns a new mask and does not mutate the original value"]
+- pub fn convert<U>(self) -> Mask<U, N>
++ pub(crate) fn convert<U>(self) -> Mask<U, N>
+ where
+ U: MaskElement,
+ {
+@@ -151,13 +151,13 @@ where
+
+ #[inline]
+ #[must_use = "method returns a new bool and does not mutate the original value"]
+- pub fn any(self) -> bool {
++ pub(crate) fn any(self) -> bool {
+ self != Self::splat(false)
+ }
+
+ #[inline]
+ #[must_use = "method returns a new bool and does not mutate the original value"]
+- pub fn all(self) -> bool {
++ pub(crate) fn all(self) -> bool {
+ self == Self::splat(true)
+ }
+ }
+diff --git a/library/portable-simd/crates/core_simd/src/masks/full_masks.rs b/library/portable-simd/crates/core_simd/src/masks/full_masks.rs
+index ae55cf1f8fa87..a693ea90b9cb8 100644
+--- a/library/portable-simd/crates/core_simd/src/masks/full_masks.rs
++++ b/library/portable-simd/crates/core_simd/src/masks/full_masks.rs
+@@ -3,7 +3,7 @@
+ use crate::simd::{LaneCount, MaskElement, Simd, SupportedLaneCount};
+
+ #[repr(transparent)]
+-pub struct Mask<T, const N: usize>(Simd<T, N>)
++pub(crate) struct Mask<T, const N: usize>(Simd<T, N>)
+ where
+ T: MaskElement,
+ LaneCount<N>: SupportedLaneCount;
+@@ -103,36 +103,36 @@ where
+ {
+ #[inline]
+ #[must_use = "method returns a new mask and does not mutate the original value"]
+- pub fn splat(value: bool) -> Self {
++ pub(crate) fn splat(value: bool) -> Self {
+ Self(Simd::splat(if value { T::TRUE } else { T::FALSE }))
+ }
+
+ #[inline]
+ #[must_use = "method returns a new bool and does not mutate the original value"]
+- pub unsafe fn test_unchecked(&self, lane: usize) -> bool {
++ pub(crate) unsafe fn test_unchecked(&self, lane: usize) -> bool {
+ T::eq(self.0[lane], T::TRUE)
+ }
+
+ #[inline]
+- pub unsafe fn set_unchecked(&mut self, lane: usize, value: bool) {
++ pub(crate) unsafe fn set_unchecked(&mut self, lane: usize, value: bool) {
+ self.0[lane] = if value { T::TRUE } else { T::FALSE }
+ }
+
+ #[inline]
+ #[must_use = "method returns a new vector and does not mutate the original value"]
+- pub fn to_int(self) -> Simd<T, N> {
++ pub(crate) fn to_int(self) -> Simd<T, N> {
+ self.0
+ }
+
+ #[inline]
+ #[must_use = "method returns a new mask and does not mutate the original value"]
+- pub unsafe fn from_int_unchecked(value: Simd<T, N>) -> Self {
++ pub(crate) unsafe fn from_int_unchecked(value: Simd<T, N>) -> Self {
+ Self(value)
+ }
+
+ #[inline]
+ #[must_use = "method returns a new mask and does not mutate the original value"]
+- pub fn convert<U>(self) -> Mask<U, N>
++ pub(crate) fn convert<U>(self) -> Mask<U, N>
+ where
+ U: MaskElement,
+ {
+@@ -221,14 +221,14 @@ where
+
+ #[inline]
+ #[must_use = "method returns a new bool and does not mutate the original value"]
+- pub fn any(self) -> bool {
++ pub(crate) fn any(self) -> bool {
+ // Safety: use `self` as an integer vector
+ unsafe { core::intrinsics::simd::simd_reduce_any(self.to_int()) }
+ }
+
+ #[inline]
+ #[must_use = "method returns a new bool and does not mutate the original value"]
+- pub fn all(self) -> bool {
++ pub(crate) fn all(self) -> bool {
+ // Safety: use `self` as an integer vector
+ unsafe { core::intrinsics::simd::simd_reduce_all(self.to_int()) }
+ }
next reply other threads:[~2025-05-31 5:59 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-31 5:55 Matt Jolly [this message]
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.87 commit in: / Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.88 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:master " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.88.0_beta20250526 " Matt Jolly
-- strict thread matches above, loose matches on Subject: below --
2025-07-29 6:39 [gentoo-commits] proj/rust-patches:1.86.0-r2-1 " Matt Jolly
2025-07-29 6:39 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-07-29 6:38 Matt Jolly
2025-07-29 6:23 Matt Jolly
2025-07-29 6:21 Matt Jolly
2025-06-03 4:33 Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.85 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.83 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.82 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.80 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.78 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.77 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.76 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.75 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.74 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-03 4:33 [gentoo-commits] proj/rust-patches:1.75 " Matt Jolly
2025-06-03 4:33 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.85 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.82 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.83 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.80 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.76 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.77 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.78 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.74 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.75 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:48 [gentoo-commits] proj/rust-patches:1.74 " Matt Jolly
2025-06-02 9:48 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.85 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.83 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.82 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.80 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.78 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.77 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.76 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.75 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.74 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-06-02 9:25 [gentoo-commits] proj/rust-patches:1.74 " Matt Jolly
2025-06-02 9:25 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.85 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.82 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.83 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.80 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.77 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.78 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.76 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.74 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.74 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:55 [gentoo-commits] proj/rust-patches:1.75 " Matt Jolly
2025-05-31 5:55 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.85 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.84 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.83 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.82 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.80 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.78 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.75 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.76 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.77 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.74 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
2025-05-31 5:53 [gentoo-commits] proj/rust-patches:1.74 " Matt Jolly
2025-05-31 5:53 ` [gentoo-commits] proj/rust-patches:1.86 " Matt Jolly
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1748670886.1352f9e072e5d9c0e6835b2ca1fcf54717539961.kangie@gentoo \
--to=kangie@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox