From: arthur.cohen@embecosm.com
To: gcc-patches@gcc.gnu.org
Cc: gcc-rust@gcc.gnu.org, Owen Avery <powerboat9.gamer@gmail.com>
Subject: [COMMITTED 093/101] gccrs: Unify storage of associated items in SingleASTNode
Date: Tue, 30 Jan 2024 13:07:49 +0100 [thread overview]
Message-ID: <20240130121026.807464-96-arthur.cohen@embecosm.com> (raw)
In-Reply-To: <20240130121026.807464-2-arthur.cohen@embecosm.com>
From: Owen Avery <powerboat9.gamer@gmail.com>
gcc/rust/ChangeLog:
* ast/rust-ast-fragment.cc
(Fragment::assert_single_fragment): Update.
* ast/rust-ast.h
(class TraitImplItem): Move definition before that of TraitItem.
(class TraitItem):
Inherit from TraitImplItem instead of AssociatedItem.
(class SingleASTNode): Unify handling of associated items.
(SingleASTNode::take_assoc_item): Move from...
(SingleASTNode::take_impl_item): ...here, but leave stub calling
take_assoc_item behind.
(SingleASTNode::take_trait_item):
Cast associated item to TraitItem.
(SingleASTNode::take_trait_impl_item):
Cast associated item to TraitImplItem.
* ast/rust-ast.cc
(SingleASTNode::SingleASTNode):
Unify handling of associated items.
(SingleASTNode::operator=): Likewise.
(SingleASTNode::accept_vis): Likewise.
(SingleASTNode::is_error): Likewise.
(SingleASTNode::as_string): Likewise.
* ast/rust-item.h
(class Function): Remove direct inheritence from AssociatedItem.
(class ConstantItem): Likewise.
* ast/rust-macro.h
(class MacroInvocation):
Remove direct inheritence from AssociatedItem and TraitImplItem.
---
gcc/rust/ast/rust-ast-fragment.cc | 4 +-
gcc/rust/ast/rust-ast.cc | 52 +++++--------------------
gcc/rust/ast/rust-ast.h | 63 ++++++++++++++-----------------
gcc/rust/ast/rust-item.h | 8 +---
gcc/rust/ast/rust-macro.h | 2 -
5 files changed, 42 insertions(+), 87 deletions(-)
diff --git a/gcc/rust/ast/rust-ast-fragment.cc b/gcc/rust/ast/rust-ast-fragment.cc
index e7574519465..d8bf4aa213b 100644
--- a/gcc/rust/ast/rust-ast-fragment.cc
+++ b/gcc/rust/ast/rust-ast-fragment.cc
@@ -153,14 +153,12 @@ void
Fragment::assert_single_fragment (SingleASTNode::NodeType expected) const
{
static const std::map<SingleASTNode::NodeType, const char *> str_map = {
- {SingleASTNode::NodeType::IMPL, "impl"},
+ {SingleASTNode::NodeType::ASSOC_ITEM, "associated item"},
{SingleASTNode::NodeType::ITEM, "item"},
{SingleASTNode::NodeType::TYPE, "type"},
{SingleASTNode::NodeType::EXPRESSION, "expr"},
{SingleASTNode::NodeType::STMT, "stmt"},
{SingleASTNode::NodeType::EXTERN, "extern"},
- {SingleASTNode::NodeType::TRAIT, "trait"},
- {SingleASTNode::NodeType::TRAIT_IMPL, "trait impl"},
};
auto actual = nodes[0].get_kind ();
diff --git a/gcc/rust/ast/rust-ast.cc b/gcc/rust/ast/rust-ast.cc
index b9096032d41..360a9ceb6db 100644
--- a/gcc/rust/ast/rust-ast.cc
+++ b/gcc/rust/ast/rust-ast.cc
@@ -60,16 +60,8 @@ SingleASTNode::SingleASTNode (SingleASTNode const &other)
external_item = other.external_item->clone_external_item ();
break;
- case TRAIT:
- trait_item = other.trait_item->clone_trait_item ();
- break;
-
- case IMPL:
- impl_item = other.impl_item->clone_associated_item ();
- break;
-
- case TRAIT_IMPL:
- trait_impl_item = other.trait_impl_item->clone_trait_impl_item ();
+ case ASSOC_ITEM:
+ assoc_item = other.assoc_item->clone_associated_item ();
break;
case TYPE:
@@ -100,16 +92,8 @@ SingleASTNode::operator= (SingleASTNode const &other)
external_item = other.external_item->clone_external_item ();
break;
- case TRAIT:
- trait_item = other.trait_item->clone_trait_item ();
- break;
-
- case IMPL:
- impl_item = other.impl_item->clone_associated_item ();
- break;
-
- case TRAIT_IMPL:
- trait_impl_item = other.trait_impl_item->clone_trait_impl_item ();
+ case ASSOC_ITEM:
+ assoc_item = other.assoc_item->clone_associated_item ();
break;
case TYPE:
@@ -140,16 +124,8 @@ SingleASTNode::accept_vis (ASTVisitor &vis)
external_item->accept_vis (vis);
break;
- case TRAIT:
- trait_item->accept_vis (vis);
- break;
-
- case IMPL:
- impl_item->accept_vis (vis);
- break;
-
- case TRAIT_IMPL:
- trait_impl_item->accept_vis (vis);
+ case ASSOC_ITEM:
+ assoc_item->accept_vis (vis);
break;
case TYPE:
@@ -171,12 +147,8 @@ SingleASTNode::is_error ()
return stmt == nullptr;
case EXTERN:
return external_item == nullptr;
- case TRAIT:
- return trait_item == nullptr;
- case IMPL:
- return impl_item == nullptr;
- case TRAIT_IMPL:
- return trait_impl_item == nullptr;
+ case ASSOC_ITEM:
+ return assoc_item == nullptr;
case TYPE:
return type == nullptr;
}
@@ -198,12 +170,8 @@ SingleASTNode::as_string () const
return "Stmt: " + stmt->as_string ();
case EXTERN:
return "External Item: " + external_item->as_string ();
- case TRAIT:
- return "Trait Item: " + trait_item->as_string ();
- case IMPL:
- return "Impl Item: " + impl_item->as_string ();
- case TRAIT_IMPL:
- return "Trait Impl Item: " + trait_impl_item->as_string ();
+ case ASSOC_ITEM:
+ return "Associated Item: " + assoc_item->as_string ();
case TYPE:
return "Type: " + type->as_string ();
}
diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h
index a45085489e8..256a527118a 100644
--- a/gcc/rust/ast/rust-ast.h
+++ b/gcc/rust/ast/rust-ast.h
@@ -1657,8 +1657,22 @@ public:
virtual location_t get_locus () const = 0;
};
+// Abstract base class for items used in a trait impl
+class TraitImplItem : public AssociatedItem
+{
+protected:
+ virtual TraitImplItem *clone_associated_item_impl () const override = 0;
+
+public:
+ // Unique pointer custom clone function
+ std::unique_ptr<TraitImplItem> clone_trait_impl_item () const
+ {
+ return std::unique_ptr<TraitImplItem> (clone_associated_item_impl ());
+ }
+};
+
// Item used in trait declarations - abstract base class
-class TraitItem : virtual public AssociatedItem
+class TraitItem : public TraitImplItem
{
protected:
TraitItem (location_t locus)
@@ -1689,20 +1703,6 @@ public:
location_t get_locus () const override { return locus; }
};
-// Abstract base class for items used in a trait impl
-class TraitImplItem : virtual public AssociatedItem
-{
-protected:
- virtual TraitImplItem *clone_associated_item_impl () const override = 0;
-
-public:
- // Unique pointer custom clone function
- std::unique_ptr<TraitImplItem> clone_trait_impl_item () const
- {
- return std::unique_ptr<TraitImplItem> (clone_associated_item_impl ());
- }
-};
-
// Abstract base class for an item used inside an extern block
class ExternalItem : public Visitable
{
@@ -1831,9 +1831,7 @@ public:
ITEM,
STMT,
EXTERN,
- TRAIT,
- IMPL,
- TRAIT_IMPL,
+ ASSOC_ITEM,
TYPE,
};
@@ -1845,9 +1843,7 @@ private:
std::unique_ptr<Item> item;
std::unique_ptr<Stmt> stmt;
std::unique_ptr<ExternalItem> external_item;
- std::unique_ptr<TraitItem> trait_item;
- std::unique_ptr<AssociatedItem> impl_item;
- std::unique_ptr<TraitImplItem> trait_impl_item;
+ std::unique_ptr<AssociatedItem> assoc_item;
std::unique_ptr<Type> type;
public:
@@ -1867,16 +1863,8 @@ public:
: kind (EXTERN), external_item (std::move (item))
{}
- SingleASTNode (std::unique_ptr<TraitItem> item)
- : kind (TRAIT), trait_item (std::move (item))
- {}
-
SingleASTNode (std::unique_ptr<AssociatedItem> item)
- : kind (IMPL), impl_item (std::move (item))
- {}
-
- SingleASTNode (std::unique_ptr<TraitImplItem> trait_impl_item)
- : kind (TRAIT_IMPL), trait_impl_item (std::move (trait_impl_item))
+ : kind (ASSOC_ITEM), assoc_item (std::move (item))
{}
SingleASTNode (std::unique_ptr<Type> type)
@@ -1936,7 +1924,8 @@ public:
std::unique_ptr<TraitItem> take_trait_item ()
{
rust_assert (!is_error ());
- return std::move (trait_item);
+ return std::unique_ptr<TraitItem> (
+ static_cast<TraitItem *> (assoc_item.release ()));
}
std::unique_ptr<ExternalItem> take_external_item ()
@@ -1945,16 +1934,22 @@ public:
return std::move (external_item);
}
- std::unique_ptr<AssociatedItem> take_impl_item ()
+ std::unique_ptr<AssociatedItem> take_assoc_item ()
{
rust_assert (!is_error ());
- return std::move (impl_item);
+ return std::move (assoc_item);
+ }
+
+ std::unique_ptr<AssociatedItem> take_impl_item ()
+ {
+ return take_assoc_item ();
}
std::unique_ptr<TraitImplItem> take_trait_impl_item ()
{
rust_assert (!is_error ());
- return std::move (trait_impl_item);
+ return std::unique_ptr<TraitImplItem> (
+ static_cast<TraitImplItem *> (assoc_item.release ()));
}
std::unique_ptr<Type> take_type ()
diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h
index a995273de12..5b9eb64560d 100644
--- a/gcc/rust/ast/rust-item.h
+++ b/gcc/rust/ast/rust-item.h
@@ -1289,9 +1289,7 @@ protected:
class LetStmt;
// Rust function declaration AST node
-class Function : public VisItem,
- virtual public AssociatedItem,
- public TraitImplItem
+class Function : public VisItem, public TraitImplItem
{
FunctionQualifiers qualifiers;
Identifier function_name;
@@ -2314,9 +2312,7 @@ protected:
/* "Constant item" AST node - used for constant, compile-time expressions
* within module scope (like constexpr) */
-class ConstantItem : public VisItem,
- virtual public AssociatedItem,
- public TraitImplItem
+class ConstantItem : public VisItem, public TraitImplItem
{
// either has an identifier or "_" - maybe handle in identifier?
// bool identifier_is_underscore;
diff --git a/gcc/rust/ast/rust-macro.h b/gcc/rust/ast/rust-macro.h
index 41c21cffa95..bcf5b0b5a99 100644
--- a/gcc/rust/ast/rust-macro.h
+++ b/gcc/rust/ast/rust-macro.h
@@ -598,8 +598,6 @@ class MacroInvocation : public TypeNoBounds,
public Pattern,
public Item,
public TraitItem,
- public TraitImplItem,
- virtual public AssociatedItem,
public ExternalItem,
public ExprWithoutBlock
{
--
2.42.1
next prev parent reply other threads:[~2024-01-30 12:11 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-30 12:06 [PATCHSET] Update Rust frontend January 2024 arthur.cohen
2024-01-30 12:06 ` [COMMITTED 001/101] gccrs: Add visibility to trait item arthur.cohen
2024-01-30 12:06 ` [COMMITTED 002/101] gccrs: Add a test to highlight public trait type parsing arthur.cohen
2024-01-30 12:06 ` [COMMITTED 003/101] gccrs: Fix error emission for self pointers arthur.cohen
2024-01-30 12:06 ` [COMMITTED 004/101] gccrs: Report self parameter parsing error kind arthur.cohen
2024-01-30 12:06 ` [COMMITTED 005/101] gccrs: Add new test for parsing errors on self pointers arthur.cohen
2024-01-30 12:06 ` [COMMITTED 006/101] gccrs: ast: Change *Path nodes API arthur.cohen
2024-01-30 12:06 ` [COMMITTED 007/101] gccrs: rib: Add Namespace enum arthur.cohen
2024-01-30 12:06 ` [COMMITTED 008/101] gccrs: forever-stack: Fix basic get logic arthur.cohen
2024-01-30 12:06 ` [COMMITTED 009/101] gccrs: foreverstack: Specialize `get` for Namespace::Labels arthur.cohen
2024-01-30 12:06 ` [COMMITTED 010/101] gccrs: forever stack: Fix resolve_path signature arthur.cohen
2024-01-30 12:06 ` [COMMITTED 011/101] gccrs: forever stack: Improve resolve_path implementation arthur.cohen
2024-01-30 12:06 ` [COMMITTED 012/101] gccrs: foreverstack: Add `to_canonical_path` method arthur.cohen
2024-01-30 12:06 ` [COMMITTED 013/101] gccrs: foreverstack: Add `to_rib` method arthur.cohen
2024-01-30 12:06 ` [COMMITTED 014/101] gccrs: resolve: Format if properly arthur.cohen
2024-01-30 12:06 ` [COMMITTED 015/101] gccrs: forever stack: Remove development debug info arthur.cohen
2024-01-30 12:06 ` [COMMITTED 016/101] gccrs: Reject auto traits with generic parameters arthur.cohen
2024-01-30 12:06 ` [COMMITTED 017/101] gccrs: Add regression test for generic auto traits arthur.cohen
2024-01-30 12:06 ` [COMMITTED 018/101] gccrs: Reject auto traits with super trait arthur.cohen
2024-01-30 12:06 ` [COMMITTED 019/101] gccrs: Add a regression test for super trait on auto trait arthur.cohen
2024-01-30 12:06 ` [COMMITTED 020/101] gccrs: Add check for associated items on auto traits arthur.cohen
2024-01-30 12:06 ` [COMMITTED 021/101] gccrs: Emit an error on variadic non extern functions arthur.cohen
2024-01-30 12:06 ` [COMMITTED 022/101] gccrs: Add a test regular variadic functions errors arthur.cohen
2024-01-30 12:06 ` [COMMITTED 023/101] gccrs: Add ast validation check on union variant number arthur.cohen
2024-01-30 12:06 ` [COMMITTED 024/101] gccrs: Replace TOK suffix with KW arthur.cohen
2024-01-30 12:06 ` [COMMITTED 025/101] gccrs: Add edition separation for keywords arthur.cohen
2024-01-30 12:06 ` [COMMITTED 026/101] gccrs: Treat underscore as a keyword arthur.cohen
2024-01-30 12:06 ` [COMMITTED 027/101] gccrs: Add await keyword arthur.cohen
2024-01-30 12:06 ` [COMMITTED 028/101] gccrs: Replace some keyword raw values arthur.cohen
2024-01-30 12:06 ` [COMMITTED 029/101] gccrs: Add a list of weak keyword arthur.cohen
2024-01-30 12:06 ` [COMMITTED 030/101] gccrs: Replace some weak keyword raw value with constexpr arthur.cohen
2024-01-30 12:06 ` [COMMITTED 031/101] gccrs: Introduce a proper keyword list arthur.cohen
2024-01-30 12:06 ` [COMMITTED 032/101] gccrs: Added support to Parse ASYNC function arthur.cohen
2024-01-30 12:06 ` [COMMITTED 033/101] gccrs: ctx: Add Labels ForeverStack to the resolver arthur.cohen
2024-01-30 12:06 ` [COMMITTED 034/101] gccrs: nr2.0: Add base for late name resolution arthur.cohen
2024-01-30 12:06 ` [COMMITTED 035/101] gccrs: toplevel: Use DefaultResolver for Function arthur.cohen
2024-01-30 12:06 ` [COMMITTED 036/101] gccrs: nr2.0: Store mappings in NameResolutionContext arthur.cohen
2024-01-30 12:06 ` [COMMITTED 037/101] gccrs: late: Start setting up builtin types arthur.cohen
2024-01-30 12:06 ` [COMMITTED 038/101] gccrs: late: Start storing mappings properly in the resolver arthur.cohen
2024-01-30 12:06 ` [COMMITTED 039/101] gccrs: early: Resolve paths properly arthur.cohen
2024-01-30 12:06 ` [COMMITTED 040/101] gccrs: toplevel: Add comment about running the collector twice arthur.cohen
2024-01-30 12:06 ` [COMMITTED 041/101] gccrs: ast: Add NodeId to UseTree base class arthur.cohen
2024-01-30 12:06 ` [COMMITTED 042/101] gccrs: early: Move `use` declaration resolving to TopLevel arthur.cohen
2024-01-30 12:06 ` [COMMITTED 043/101] gccrs: toplevel: Resolve `use` declarations arthur.cohen
2024-01-30 12:07 ` [COMMITTED 044/101] gccrs: Create base class for TupleStructItems and TuplePatternItems arthur.cohen
2024-01-30 12:07 ` [COMMITTED 045/101] gccrs: Add unsafety member to modules arthur.cohen
2024-01-30 12:07 ` [COMMITTED 046/101] gccrs: Parse module safety arthur.cohen
2024-01-30 12:07 ` [COMMITTED 047/101] gccrs: Emit an error on unsafe modules arthur.cohen
2024-01-30 12:07 ` [COMMITTED 048/101] gccrs: Add a regression test for unsafe module validation arthur.cohen
2024-01-30 12:07 ` [COMMITTED 049/101] gccrs: Remove backend dependancy on resolution rib information arthur.cohen
2024-01-30 12:07 ` [COMMITTED 050/101] gccrs: Remove class AST::InherentImplItem arthur.cohen
2024-01-30 12:07 ` [COMMITTED 051/101] gccrs: Split async and const function qualifiers arthur.cohen
2024-01-30 12:07 ` [COMMITTED 052/101] gccrs: Allow const and async specifiers in functions arthur.cohen
2024-01-30 12:07 ` [COMMITTED 053/101] gccrs: Add async const function ast validation pass arthur.cohen
2024-01-30 12:07 ` [COMMITTED 054/101] gccrs: Add a regression test for async const functions arthur.cohen
2024-01-30 12:07 ` [COMMITTED 055/101] gccrs: Add AST validation check for const in trait arthur.cohen
2024-01-30 12:07 ` [COMMITTED 056/101] gccrs: Add regression test for const fn " arthur.cohen
2024-01-30 12:07 ` [COMMITTED 057/101] gccrs: Make feature gate visitor inherit from default one arthur.cohen
2024-01-30 12:07 ` [COMMITTED 058/101] gccrs: Change the attribute checker visitor to " arthur.cohen
2024-01-30 12:07 ` [COMMITTED 059/101] gccrs: Make early name resolver inherit from " arthur.cohen
2024-01-30 12:07 ` [COMMITTED 060/101] gccrs: Add multiple regression test in name resolution arthur.cohen
2024-01-30 12:07 ` [COMMITTED 061/101] gccrs: Add execution test for name resolution 2.0 arthur.cohen
2024-01-30 12:07 ` [COMMITTED 062/101] gccrs: Make function bodies truly optional arthur.cohen
2024-01-30 12:07 ` [COMMITTED 063/101] gccrs: Add validation for functions without body arthur.cohen
2024-01-30 12:07 ` [COMMITTED 064/101] gccrs: Add a regression test for function body check arthur.cohen
2024-01-30 12:07 ` [COMMITTED 065/101] gccrs: Generate error for const trait functions arthur.cohen
2024-01-30 12:07 ` [COMMITTED 066/101] gccrs: Renamed `WIN64` to `WIN_64` arthur.cohen
2024-01-30 12:07 ` [COMMITTED 067/101] gccrs: Allow enabling lang_items and no_core features arthur.cohen
2024-01-30 12:07 ` [COMMITTED 068/101] gccrs: Make default resolver inherit from default visitor arthur.cohen
2024-01-30 12:07 ` [COMMITTED 069/101] gccrs: Make expand visitor " arthur.cohen
2024-01-30 12:07 ` [COMMITTED 070/101] gccrs: Change cfg stripper to use " arthur.cohen
2024-01-30 12:07 ` [COMMITTED 071/101] gccrs: refactor builtins initialization and attributes arthur.cohen
2024-01-30 12:07 ` [COMMITTED 072/101] gccrs: HIR: add missing getters arthur.cohen
2024-01-30 12:07 ` [COMMITTED 073/101] gccrs: TyTy: Fix missed nodiscard arthur.cohen
2024-01-30 12:07 ` [COMMITTED 074/101] gccrs: BIR: " arthur.cohen
2024-01-30 12:07 ` [COMMITTED 075/101] gccrs: TyTy: refactor to new API arthur.cohen
2024-01-30 12:07 ` [COMMITTED 076/101] gccrs: TyTy: Common interface for fucntion-like types arthur.cohen
2024-01-30 12:07 ` [COMMITTED 077/101] gccrs: TyTy: SubstitutionRef cast specialization arthur.cohen
2024-01-30 12:07 ` [COMMITTED 078/101] gccrs: BIR: Cleanup arthur.cohen
2024-01-30 12:07 ` [COMMITTED 079/101] gccrs: split rust-mangle.cc into two files arthur.cohen
2024-01-30 12:07 ` [COMMITTED 080/101] gccrs: Handle `async` qualifier inside trait arthur.cohen
2024-01-30 12:07 ` [COMMITTED 081/101] gccrs: Generate error for `async` trait fucntions arthur.cohen
2024-01-30 12:07 ` [COMMITTED 082/101] gccrs: ast: Fix lifetime type parsing arthur.cohen
2024-01-30 12:07 ` [COMMITTED 083/101] gccrs: ast: Unify explicitly and implicitly elided lifettimes arthur.cohen
2024-01-30 12:07 ` [COMMITTED 084/101] gccrs: ast: Full lifetime elision handling arthur.cohen
2024-01-30 12:07 ` [COMMITTED 085/101] gccrs: ast: Infer static lifetime for const and static items arthur.cohen
2024-01-30 12:07 ` [COMMITTED 086/101] gccrs: ast: Lower 'for' lifetimes arthur.cohen
2024-01-30 12:07 ` [COMMITTED 087/101] gccrs: TyTy: Refactor FnType deprecated API arthur.cohen
2024-01-30 12:07 ` [COMMITTED 088/101] gccrs: Handle newlines during string parsing while lexing arthur.cohen
2024-01-30 12:07 ` [COMMITTED 089/101] gccrs: Handle `async` functions in traits arthur.cohen
2024-01-30 12:07 ` [COMMITTED 090/101] gccrs: Fix inconsistent formatting arthur.cohen
2024-01-30 12:07 ` [COMMITTED 091/101] gccrs: Handle `async` keyword for regular implementations arthur.cohen
2024-01-30 12:07 ` [COMMITTED 092/101] gccrs: Add improved error when a field is redefined in a struct constructor arthur.cohen
2024-01-30 12:07 ` arthur.cohen [this message]
2024-01-30 12:07 ` [COMMITTED 094/101] gccrs: Added newline to get more readable lexdump arthur.cohen
2024-01-30 12:07 ` [COMMITTED 095/101] gccrs: Test: fix missing lifetime in a test arthur.cohen
2024-01-30 12:07 ` [COMMITTED 096/101] gccrs: AST: Fix for lifetime parsing arthur.cohen
2024-01-30 12:07 ` [COMMITTED 097/101] gccrs: AST: Fix for lifetime lowering arthur.cohen
2024-01-30 12:07 ` [COMMITTED 098/101] gccrs: Test: check implemented for lifetime handling arthur.cohen
2024-01-30 12:07 ` [COMMITTED 099/101] gccrs: Add improved error when no fields in initializer arthur.cohen
2024-01-30 12:07 ` [COMMITTED 100/101] gccrs: Remove TraitImplItem arthur.cohen
2024-01-30 12:07 ` [COMMITTED 101/101] gccrs: Fix output line ending patterns arthur.cohen
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=20240130121026.807464-96-arthur.cohen@embecosm.com \
--to=arthur.cohen@embecosm.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=gcc-rust@gcc.gnu.org \
--cc=powerboat9.gamer@gmail.com \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).