From: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
To: fortran@gcc.gnu.org
Cc: Bernhard Reutner-Fischer <aldot@gcc.gnu.org>, gcc-patches@gcc.gnu.org
Subject: [PATCH,FORTRAN 22/29] Use stringpool in class and procedure-pointer result
Date: Wed, 05 Sep 2018 14:58:00 -0000 [thread overview]
Message-ID: <20180905145732.404-23-rep.dot.nop@gmail.com> (raw)
In-Reply-To: <CAC1BbcSJmqmQW7Zuv+6UQu0znbsVm85i3gP_y4Dny3czMCANgA@mail.gmail.com>
From: Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
gcc/fortran/ChangeLog:
2017-11-26 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
* class.c (finalize_component): Use stringpool.
(finalization_scalarizer): Likewise.
* frontend-passes.c (create_var): Likewise.
(get_len_trim_call): Likewise.
* iresolve.c (gfc_resolve_atomic_def): Likewise.
(gfc_resolve_atomic_ref): Likewise.
(gfc_resolve_event_query): Likewise.
* openmp.c (gfc_match_omp_declare_reduction): Likewise.
* parse.c (gfc_parse_file): Likewise.
* resolve.c (build_loc_call): Likewise.
(resolve_ordinary_assign): Likewise.
* decl.c (add_hidden_procptr_result): Likewise and use pointer
comparison instead of string comparison.
---
gcc/fortran/class.c | 10 +++++++---
gcc/fortran/decl.c | 11 +++++++----
gcc/fortran/frontend-passes.c | 10 ++++++----
gcc/fortran/iresolve.c | 6 +++---
gcc/fortran/openmp.c | 13 +++++++++----
gcc/fortran/parse.c | 2 +-
gcc/fortran/resolve.c | 6 ++++--
7 files changed, 37 insertions(+), 21 deletions(-)
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 20a68da8e9b..33c772c6eba 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -959,12 +959,13 @@ finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp,
dealloc->ext.alloc.list->expr = e;
dealloc->expr1 = gfc_lval_expr_from_sym (stat);
+ const char *sname = gfc_get_string ("%s", "associated");
gfc_code *cond = gfc_get_code (EXEC_IF);
cond->block = gfc_get_code (EXEC_IF);
cond->block->expr1 = gfc_get_expr ();
cond->block->expr1->expr_type = EXPR_FUNCTION;
cond->block->expr1->where = gfc_current_locus;
- gfc_get_sym_tree ("associated", sub_ns, &cond->block->expr1->symtree, false);
+ gfc_get_sym_tree (sname, sub_ns, &cond->block->expr1->symtree, false);
cond->block->expr1->symtree->n.sym->attr.flavor = FL_PROCEDURE;
cond->block->expr1->symtree->n.sym->attr.intrinsic = 1;
cond->block->expr1->symtree->n.sym->result = cond->block->expr1->symtree->n.sym;
@@ -1038,10 +1039,12 @@ finalization_scalarizer (gfc_symbol *array, gfc_symbol *ptr,
{
gfc_code *block;
gfc_expr *expr, *expr2;
+ const char *sname;
/* C_F_POINTER(). */
block = gfc_get_code (EXEC_CALL);
- gfc_get_sym_tree ("c_f_pointer", sub_ns, &block->symtree, true);
+ sname = gfc_get_string ("%s", "c_f_pointer");
+ gfc_get_sym_tree (sname, sub_ns, &block->symtree, true);
block->resolved_sym = block->symtree->n.sym;
block->resolved_sym->attr.flavor = FL_PROCEDURE;
block->resolved_sym->attr.intrinsic = 1;
@@ -1063,7 +1066,8 @@ finalization_scalarizer (gfc_symbol *array, gfc_symbol *ptr,
/* TRANSFER's first argument: C_LOC (array). */
expr = gfc_get_expr ();
expr->expr_type = EXPR_FUNCTION;
- gfc_get_sym_tree ("c_loc", sub_ns, &expr->symtree, false);
+ sname = gfc_get_string ("%s", "c_loc");
+ gfc_get_sym_tree (sname, sub_ns, &expr->symtree, false);
expr->symtree->n.sym->attr.flavor = FL_PROCEDURE;
expr->symtree->n.sym->intmod_sym_id = ISOCBINDING_LOC;
expr->symtree->n.sym->attr.intrinsic = 1;
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index cc14a871dfd..1f148c88eb8 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -6441,6 +6441,7 @@ static bool
add_hidden_procptr_result (gfc_symbol *sym)
{
bool case1,case2;
+ const char *ppr_name;
if (gfc_notification_std (GFC_STD_F2003) == ERROR)
return false;
@@ -6454,16 +6455,18 @@ add_hidden_procptr_result (gfc_symbol *sym)
&& gfc_state_stack->previous->state == COMP_FUNCTION
&& gfc_state_stack->previous->sym->name == sym->name;
+ ppr_name = gfc_get_string ("%s", "ppr@");
if (case1 || case2)
{
+
gfc_symtree *stree;
if (case1)
- gfc_get_sym_tree ("ppr@", gfc_current_ns, &stree, false);
+ gfc_get_sym_tree (ppr_name, gfc_current_ns, &stree, false);
else if (case2)
{
gfc_symtree *st2;
- gfc_get_sym_tree ("ppr@", gfc_current_ns->parent, &stree, false);
- st2 = gfc_new_symtree (&gfc_current_ns->sym_root, "ppr@");
+ gfc_get_sym_tree (ppr_name, gfc_current_ns->parent, &stree, false);
+ st2 = gfc_new_symtree (&gfc_current_ns->sym_root, ppr_name);
st2->n.sym = stree->n.sym;
stree->n.sym->refs++;
}
@@ -6490,7 +6493,7 @@ add_hidden_procptr_result (gfc_symbol *sym)
&& sym->result && sym->result != sym && sym->result->attr.external
&& sym == gfc_current_ns->proc_name
&& sym == sym->result->ns->proc_name
- && strcmp ("ppr@", sym->result->name) == 0)
+ && sym->result->name == ppr_name)
{
sym->result->attr.proc_pointer = 1;
sym->attr.pointer = 0;
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index d549d8b6ffd..ccbc25acf97 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -713,7 +713,7 @@ insert_block ()
static gfc_expr*
create_var (gfc_expr * e, const char *vname)
{
- char name[GFC_MAX_SYMBOL_LEN +1];
+ const char *name;
gfc_symtree *symtree;
gfc_symbol *symbol;
gfc_expr *result;
@@ -733,9 +733,9 @@ create_var (gfc_expr * e, const char *vname)
ns = insert_block ();
if (vname)
- snprintf (name, GFC_MAX_SYMBOL_LEN, "__var_%d_%s", var_num++, vname);
+ name = gfc_get_string ("__var_%d_%s", var_num++, vname);
else
- snprintf (name, GFC_MAX_SYMBOL_LEN, "__var_%d", var_num++);
+ name = gfc_get_string ("__var_%d", var_num++);
if (gfc_get_sym_tree (name, ns, &symtree, false) != 0)
gcc_unreachable ();
@@ -1985,6 +1985,7 @@ get_len_trim_call (gfc_expr *str, int kind)
{
gfc_expr *fcn;
gfc_actual_arglist *actual_arglist, *next;
+ const char *sname;
fcn = gfc_get_expr ();
fcn->expr_type = EXPR_FUNCTION;
@@ -2000,7 +2001,8 @@ get_len_trim_call (gfc_expr *str, int kind)
fcn->ts.type = BT_INTEGER;
fcn->ts.kind = gfc_charlen_int_kind;
- gfc_get_sym_tree ("__internal_len_trim", current_ns, &fcn->symtree, false);
+ sname = gfc_get_string ("%s", "__internal_len_trim");
+ gfc_get_sym_tree (sname, current_ns, &fcn->symtree, false);
fcn->symtree->n.sym->ts = fcn->ts;
fcn->symtree->n.sym->attr.flavor = FL_PROCEDURE;
fcn->symtree->n.sym->attr.function = 1;
diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c
index 2eb8f7c9113..f22e0da54c9 100644
--- a/gcc/fortran/iresolve.c
+++ b/gcc/fortran/iresolve.c
@@ -3351,7 +3351,7 @@ create_formal_for_intents (gfc_actual_arglist* actual, const sym_intent* ints)
void
gfc_resolve_atomic_def (gfc_code *c)
{
- const char *name = "atomic_define";
+ const char *name = gfc_get_string ("%s", "atomic_define");
c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
}
@@ -3359,14 +3359,14 @@ gfc_resolve_atomic_def (gfc_code *c)
void
gfc_resolve_atomic_ref (gfc_code *c)
{
- const char *name = "atomic_ref";
+ const char *name = gfc_get_string ("%s", "atomic_ref");
c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
}
void
gfc_resolve_event_query (gfc_code *c)
{
- const char *name = "event_query";
+ const char *name = gfc_get_string ("%s", "event_query");
c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
}
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index a868e34193f..fcfe671be8b 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -2860,6 +2860,7 @@ gfc_match_omp_declare_reduction (void)
gfc_namespace *combiner_ns, *initializer_ns = NULL;
gfc_omp_udr *prev_udr, *omp_udr;
const char *predef_name = NULL;
+ const char *sname;
omp_udr = gfc_get_omp_udr ();
omp_udr->name = name;
@@ -2870,8 +2871,10 @@ gfc_match_omp_declare_reduction (void)
gfc_current_ns = combiner_ns = gfc_get_namespace (gfc_current_ns, 1);
combiner_ns->proc_name = combiner_ns->parent->proc_name;
- gfc_get_sym_tree ("omp_out", combiner_ns, &omp_out, false);
- gfc_get_sym_tree ("omp_in", combiner_ns, &omp_in, false);
+ sname = gfc_get_string ("%s", "omp_out");
+ gfc_get_sym_tree (sname, combiner_ns, &omp_out, false);
+ sname = gfc_get_string ("%s", "omp_in");
+ gfc_get_sym_tree (sname, combiner_ns, &omp_in, false);
combiner_ns->omp_udr_ns = 1;
omp_out->n.sym->ts = tss[i];
omp_in->n.sym->ts = tss[i];
@@ -2903,8 +2906,10 @@ gfc_match_omp_declare_reduction (void)
gfc_current_ns = initializer_ns;
initializer_ns->proc_name = initializer_ns->parent->proc_name;
- gfc_get_sym_tree ("omp_priv", initializer_ns, &omp_priv, false);
- gfc_get_sym_tree ("omp_orig", initializer_ns, &omp_orig, false);
+ sname = gfc_get_string ("%s", "omp_priv");
+ gfc_get_sym_tree (sname, initializer_ns, &omp_priv, false);
+ sname = gfc_get_string ("%s", "omp_orig");
+ gfc_get_sym_tree (sname, initializer_ns, &omp_orig, false);
initializer_ns->omp_udr_ns = 1;
omp_priv->n.sym->ts = tss[i];
omp_orig->n.sym->ts = tss[i];
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 755bff56e24..b7265c42f58 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -6252,7 +6252,7 @@ loop:
prog_locus = gfc_current_locus;
push_state (&s, COMP_PROGRAM, gfc_new_block);
- main_program_symbol (gfc_current_ns, "MAIN__");
+ main_program_symbol (gfc_current_ns, gfc_get_string ("MAIN__"));
parse_progunit (st);
goto prog_units;
}
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 88c16d462bd..8072bd20435 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -8814,10 +8814,11 @@ fixup_array_ref (gfc_expr **expr1, gfc_expr *expr2,
static gfc_expr *
build_loc_call (gfc_expr *sym_expr)
{
+ const char *loc = gfc_get_string ("%s", "_loc");
gfc_expr *loc_call;
loc_call = gfc_get_expr ();
loc_call->expr_type = EXPR_FUNCTION;
- gfc_get_sym_tree ("_loc", gfc_current_ns, &loc_call->symtree, false);
+ gfc_get_sym_tree (loc, gfc_current_ns, &loc_call->symtree, false);
loc_call->symtree->n.sym->attr.flavor = FL_PROCEDURE;
loc_call->symtree->n.sym->attr.intrinsic = 1;
loc_call->symtree->n.sym->result = loc_call->symtree->n.sym;
@@ -10487,12 +10488,13 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
path. */
if (caf_convert_to_send)
{
+ const char *sname = gfc_get_string ("%s", GFC_PREFIX ("caf_send"));
if (code->expr2->expr_type == EXPR_FUNCTION
&& code->expr2->value.function.isym
&& code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET)
remove_caf_get_intrinsic (code->expr2);
code->op = EXEC_CALL;
- gfc_get_sym_tree (GFC_PREFIX ("caf_send"), ns, &code->symtree, true);
+ gfc_get_sym_tree (sname, ns, &code->symtree, true);
code->resolved_sym = code->symtree->n.sym;
code->resolved_sym->attr.flavor = FL_PROCEDURE;
code->resolved_sym->attr.intrinsic = 1;
--
2.19.0.rc1
next prev parent reply other threads:[~2018-09-05 14:58 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-01 12:55 [PATCH] Use gfc_add_*_component defines where appropriate Bernhard Reutner-Fischer
2015-12-01 12:55 ` [PATCH] Commentary typo fix for gfc_typenode_for_spec() Bernhard Reutner-Fischer
2015-12-01 16:00 ` Steve Kargl
2016-06-18 20:07 ` Bernhard Reutner-Fischer
2015-12-01 12:55 ` [PATCH] Derive interface buffers from max name length Bernhard Reutner-Fischer
2015-12-01 14:52 ` Janne Blomqvist
2015-12-01 16:51 ` Bernhard Reutner-Fischer
2015-12-03 9:46 ` Janne Blomqvist
2016-06-18 19:46 ` Bernhard Reutner-Fischer
2017-10-19 8:03 ` Bernhard Reutner-Fischer
2017-10-20 22:46 ` Bernhard Reutner-Fischer
2017-10-21 15:18 ` Thomas Koenig
2017-10-21 18:11 ` Bernhard Reutner-Fischer
2017-10-31 20:35 ` Bernhard Reutner-Fischer
2018-09-03 16:05 ` Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 01/29] gdbinit: break on gfc_internal_error Bernhard Reutner-Fischer
2021-10-29 18:58 ` Bernhard Reutner-Fischer
2021-10-29 22:13 ` Jerry D
2021-10-30 18:25 ` Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 09/29] Use stringpool for modules Bernhard Reutner-Fischer
2018-09-05 18:44 ` Janne Blomqvist
2018-09-05 20:59 ` Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 06/29] Use stringpool for association_list Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 02/29] Use stringpool for gfc_match_defined_op_name() Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 04/29] Use stringpool for gfc_match_generic_spec Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 13/29] Use stringpool for intrinsics and common Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 07/29] Use stringpool for some gfc_code2string return values Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 03/29] Use stringpool for gfc_get_name Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 08/29] Add uop/name helpers Bernhard Reutner-Fischer
2018-09-05 14:57 ` [PATCH,FORTRAN 00/29] Move towards stringpool, part 1 Bernhard Reutner-Fischer
2018-09-05 18:57 ` Janne Blomqvist
2018-09-07 8:09 ` Bernhard Reutner-Fischer
2018-09-19 14:40 ` Bernhard Reutner-Fischer
2023-04-13 21:04 ` Bernhard Reutner-Fischer
[not found] ` <cba81495-832c-2b95-3c30-d2ef819ea9fb@charter.net>
[not found] ` <CAC1BbcThL4Cj=mVRuGg2p8jUipwLOeosB7kwoVD27myRnKcgZA@mail.gmail.com>
2021-04-18 21:30 ` Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 25/29] Use stringpool on loading module symbols Bernhard Reutner-Fischer
2018-09-19 22:55 ` [PATCH,FORTRAN v2] " Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 21/29] Use stringpool for module tbp Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 05/29] Use stringpool for gfc_match("%n") Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 29/29] PR87103: Remove max symbol length check from gfc_new_symbol Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 23/29] Use stringpool for module binding_label Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 10/29] Do not copy name for check_function_name Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 27/29] Use stringpool for OMP clause reduction code Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 26/29] Use stringpool for mangled common names Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 12/29] Use stringpool for remaining names Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 24/29] Use stringpool for intrinsic functions Bernhard Reutner-Fischer
2018-09-05 14:58 ` Bernhard Reutner-Fischer [this message]
2018-09-05 14:58 ` [PATCH,FORTRAN 14/29] Fix write_omp_udr for user-operator REDUCTIONs Bernhard Reutner-Fischer
2018-09-05 14:58 ` [PATCH,FORTRAN 11/29] Do pointer comparison instead of strcmp Bernhard Reutner-Fischer
2018-09-05 15:02 ` [PATCH,FORTRAN 28/29] Free type-bound procedure structs Bernhard Reutner-Fischer
2021-10-29 0:05 ` Bernhard Reutner-Fischer
2021-10-29 14:54 ` Jerry D
2021-10-29 16:42 ` Bernhard Reutner-Fischer
[not found] ` <slhifq$rlb$1@ciao.gmane.io>
2021-10-29 20:09 ` Bernhard Reutner-Fischer
2021-10-31 22:35 ` Bernhard Reutner-Fischer
2018-09-05 15:02 ` [PATCH,FORTRAN 20/29] Use stringpool in class et al Bernhard Reutner-Fischer
2018-09-05 15:02 ` [PATCH,FORTRAN 18/29] Use stringpool for charkind Bernhard Reutner-Fischer
2018-09-05 15:02 ` [PATCH,FORTRAN 19/29] Use stringpool and unified uppercase handling for types Bernhard Reutner-Fischer
2018-09-05 15:02 ` [PATCH,FORTRAN 17/29] Use stringpool for iso_fortran_env Bernhard Reutner-Fischer
2018-09-05 15:02 ` [PATCH,FORTRAN 15/29] Use stringpool for iso_c_binding module names Bernhard Reutner-Fischer
2018-09-05 15:02 ` [PATCH,FORTRAN 16/29] Do pointer comparison in iso_c_binding_module Bernhard Reutner-Fischer
2015-12-01 12:56 ` [PATCH] RFC: Use Levenshtein spelling suggestions in Fortran FE Bernhard Reutner-Fischer
2015-12-01 15:02 ` Steve Kargl
2015-12-01 16:13 ` Bernhard Reutner-Fischer
2015-12-01 16:41 ` Steve Kargl
2015-12-01 17:35 ` Bernhard Reutner-Fischer
2015-12-01 19:49 ` Steve Kargl
2015-12-01 17:28 ` David Malcolm
2015-12-01 17:51 ` Bernhard Reutner-Fischer
2015-12-01 17:58 ` David Malcolm
2015-12-01 20:00 ` Steve Kargl
2015-12-03 9:29 ` Janne Blomqvist
2015-12-03 13:53 ` Mikael Morin
2015-12-04 0:08 ` Steve Kargl
2015-12-05 19:53 ` Mikael Morin
2015-12-09 1:07 ` [PATCH] v2 " David Malcolm
2015-12-10 16:15 ` Tobias Burnus
2015-12-22 13:57 ` Fortran release notes (was: [PATCH] v2 ...) Gerald Pfeifer
2015-12-12 17:02 ` [PATCH] v2 Re: [PATCH] RFC: Use Levenshtein spelling suggestions in Fortran FE Bernhard Reutner-Fischer
2015-12-27 21:43 ` [PATCH, RFC, v2] " Bernhard Reutner-Fischer
2016-03-05 22:46 ` [PATCH, fortran, v3] " Bernhard Reutner-Fischer
2016-03-07 14:57 ` David Malcolm
2016-04-23 18:22 ` Bernhard Reutner-Fischer
2016-04-25 17:07 ` David Malcolm
2016-06-18 19:59 ` [PATCH, fortran, v4] " Bernhard Reutner-Fischer
2016-06-20 10:26 ` VandeVondele Joost
2016-07-03 22:46 ` Ping: [Re: [PATCH, fortran, v4] Use Levenshtein spelling suggestions in Fortran FE] Bernhard Reutner-Fischer
2016-07-04 3:31 ` Jerry DeLisle
2016-07-04 5:03 ` Janne Blomqvist
2017-10-19 7:26 ` Bernhard Reutner-Fischer
2017-10-19 7:51 ` [PATCH, fortran, v4] Use Levenshtein spelling suggestions in Fortran FE Bernhard Reutner-Fischer
2016-06-18 19:47 ` [PATCH] Use gfc_add_*_component defines where appropriate Bernhard Reutner-Fischer
2016-06-19 9:18 ` Paul Richard Thomas
2016-06-19 10:39 ` Bernhard Reutner-Fischer
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=20180905145732.404-23-rep.dot.nop@gmail.com \
--to=rep.dot.nop@gmail.com \
--cc=aldot@gcc.gnu.org \
--cc=fortran@gcc.gnu.org \
--cc=gcc-patches@gcc.gnu.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).