public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer
@ 2013-04-15 14:07 samuel.debionne@ujf-grenoble.fr
  2013-04-15 14:44 ` [Bug fortran/56968] [F03] " janus at gcc dot gnu.org
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: samuel.debionne@ujf-grenoble.fr @ 2013-04-15 14:07 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

             Bug #: 56968
           Summary: Issue with a procedure defined with a generic name
                    returning procedure pointer
    Classification: Unclassified
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: samuel.debionne@ujf-grenoble.fr


Created attachment 29875
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29875
Test case that shows the bug

In short, a genericly named procedure fails to return a procedure pointer :

    ptr => specific_name_get_proc_ptr()    ! OK
    ptr => generic_name_get_proc_ptr()  ! KO
           1
Error: Interface mismatch in procedure pointer assignment at (1):
Type/rank mismatch in return value of 'generic_name_get_proc_ptr'

Attached is a test case that show the problem with gfortran 4.7, 4.8 and
trunk.

See http://gcc.gnu.org/ml/fortran/2013-04/msg00151.html for the complete story.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
@ 2013-04-15 14:44 ` janus at gcc dot gnu.org
  2013-04-15 15:02 ` dominiq at lps dot ens.fr
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: janus at gcc dot gnu.org @ 2013-04-15 14:44 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
           Keywords|                            |rejects-valid
   Last reconfirmed|                            |2013-04-15
                 CC|                            |janus at gcc dot gnu.org
         AssignedTo|unassigned at gcc dot       |janus at gcc dot gnu.org
                   |gnu.org                     |
     Ever Confirmed|0                           |1
            Summary|Issue with a procedure      |[F03] Issue with a
                   |defined with a generic name |procedure defined with a
                   |returning procedure pointer |generic name returning
                   |                            |procedure pointer

--- Comment #1 from janus at gcc dot gnu.org 2013-04-15 14:44:25 UTC ---
Here is a draft patch which fixes the behavior for the test case:


Index: gcc/fortran/expr.c
===================================================================
--- gcc/fortran/expr.c    (revision 197943)
+++ gcc/fortran/expr.c    (working copy)
@@ -3540,7 +3540,11 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_ex
     }
       else if (rvalue->expr_type == EXPR_FUNCTION)
     {
-      s2 = rvalue->symtree->n.sym->result;
+      if (rvalue->symtree->n.sym->attr.generic)
+        s2 = rvalue->value.function.esym->result;
+      else
+        s2 = rvalue->symtree->n.sym->result;
+
       name = s2->name;
     }
       else


Regtesting now ...


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
  2013-04-15 14:44 ` [Bug fortran/56968] [F03] " janus at gcc dot gnu.org
@ 2013-04-15 15:02 ` dominiq at lps dot ens.fr
  2013-04-15 17:15 ` [Bug fortran/56968] [4.7/4.8/4.9 Regression] " janus at gcc dot gnu.org
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: dominiq at lps dot ens.fr @ 2013-04-15 15:02 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2013-04-15 15:02:48 UTC ---
For the record, gfortran 4.4.6 compiles the test, but not 4.5.3, 4.6.4, 4.7.3,
4.8.0, and trunk.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
  2013-04-15 14:44 ` [Bug fortran/56968] [F03] " janus at gcc dot gnu.org
  2013-04-15 15:02 ` dominiq at lps dot ens.fr
@ 2013-04-15 17:15 ` janus at gcc dot gnu.org
  2013-04-15 17:16 ` janus at gcc dot gnu.org
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: janus at gcc dot gnu.org @ 2013-04-15 17:15 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[F03] Issue with a          |[4.7/4.8/4.9 Regression]
                   |procedure defined with a    |[F03] Issue with a
                   |generic name returning      |procedure defined with a
                   |procedure pointer           |generic name returning
                   |                            |procedure pointer

--- Comment #3 from janus at gcc dot gnu.org 2013-04-15 17:15:51 UTC ---
(In reply to comment #2)
> For the record, gfortran 4.4.6 compiles the test, but not 4.5.3, 4.6.4, 4.7.3,
> 4.8.0, and trunk.

Oh, so it's even a regression. The 4.5 and 4.6 branches have been closed by
now, I think, but we should probably backport to 4.7 and 4.8.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
                   ` (2 preceding siblings ...)
  2013-04-15 17:15 ` [Bug fortran/56968] [4.7/4.8/4.9 Regression] " janus at gcc dot gnu.org
@ 2013-04-15 17:16 ` janus at gcc dot gnu.org
  2013-04-15 17:36 ` burnus at gcc dot gnu.org
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: janus at gcc dot gnu.org @ 2013-04-15 17:16 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

--- Comment #4 from janus at gcc dot gnu.org 2013-04-15 17:16:50 UTC ---
(In reply to comment #1)
> Regtesting now ...

Completed successfully. Will commit to trunk as obvious ...


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
                   ` (3 preceding siblings ...)
  2013-04-15 17:16 ` janus at gcc dot gnu.org
@ 2013-04-15 17:36 ` burnus at gcc dot gnu.org
  2013-04-15 18:35 ` janus at gcc dot gnu.org
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: burnus at gcc dot gnu.org @ 2013-04-15 17:36 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |burnus at gcc dot gnu.org

--- Comment #5 from Tobias Burnus <burnus at gcc dot gnu.org> 2013-04-15 17:35:57 UTC ---
(In reply to comment #1)
> Index: gcc/fortran/expr.c
> ===================================================================
> --- gcc/fortran/expr.c    (revision 197943)
> +++ gcc/fortran/expr.c    (working copy)
> @@ -3540,7 +3540,11 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_ex
>      }
>        else if (rvalue->expr_type == EXPR_FUNCTION)
>      {
> -      s2 = rvalue->symtree->n.sym->result;
> +      if (rvalue->symtree->n.sym->attr.generic)
> +        s2 = rvalue->value.function.esym->result;
> +      else
> +        s2 = rvalue->symtree->n.sym->result;

I think you should directly use

if (rvalue->value.function.esym)
  s2 = rvalue->value.function.esym->result;


I was additionally wondering whether one should also take care of isym besides
esym, but probably no intrinsic returns a pointer.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
                   ` (4 preceding siblings ...)
  2013-04-15 17:36 ` burnus at gcc dot gnu.org
@ 2013-04-15 18:35 ` janus at gcc dot gnu.org
  2013-04-16  8:50 ` janus at gcc dot gnu.org
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: janus at gcc dot gnu.org @ 2013-04-15 18:35 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

--- Comment #6 from janus at gcc dot gnu.org 2013-04-15 18:35:56 UTC ---
(In reply to comment #5)
> (In reply to comment #1)
> > Index: gcc/fortran/expr.c
> > ===================================================================
> > --- gcc/fortran/expr.c    (revision 197943)
> > +++ gcc/fortran/expr.c    (working copy)
> > @@ -3540,7 +3540,11 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_ex
> >      }
> >        else if (rvalue->expr_type == EXPR_FUNCTION)
> >      {
> > -      s2 = rvalue->symtree->n.sym->result;
> > +      if (rvalue->symtree->n.sym->attr.generic)
> > +        s2 = rvalue->value.function.esym->result;
> > +      else
> > +        s2 = rvalue->symtree->n.sym->result;
> 
> I think you should directly use
> 
> if (rvalue->value.function.esym)
>   s2 = rvalue->value.function.esym->result;

yes, I also thought about this variant. Might indeed be the better choice.


> I was additionally wondering whether one should also take care of isym besides
> esym, but probably no intrinsic returns a pointer.

I could not find any intrinsic function which returns a pointer, and even less
so a procedure pointer (which is what this patch is dealing with).


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
                   ` (5 preceding siblings ...)
  2013-04-15 18:35 ` janus at gcc dot gnu.org
@ 2013-04-16  8:50 ` janus at gcc dot gnu.org
  2013-04-16  8:54 ` burnus at gcc dot gnu.org
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: janus at gcc dot gnu.org @ 2013-04-16  8:50 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

--- Comment #7 from janus at gcc dot gnu.org 2013-04-16 08:50:35 UTC ---
(In reply to comment #6)
> > I think you should directly use
> > 
> > if (rvalue->value.function.esym)
> >   s2 = rvalue->value.function.esym->result;
> 
> yes, I also thought about this variant. Might indeed be the better choice.

Ok, I have verified that this also regtests cleanly and fixes the test case (as
expected). Will commit the following patch later today (unless further
suggestions come up):

Index: gcc/fortran/expr.c
===================================================================
--- gcc/fortran/expr.c    (revision 197988)
+++ gcc/fortran/expr.c    (working copy)
@@ -3540,7 +3540,11 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_ex
     }
       else if (rvalue->expr_type == EXPR_FUNCTION)
     {
-      s2 = rvalue->symtree->n.sym->result;
+      if (rvalue->value.function.esym)
+        s2 = rvalue->value.function.esym->result;
+      else
+        s2 = rvalue->symtree->n.sym->result;
+
       name = s2->name;
     }
       else


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
                   ` (6 preceding siblings ...)
  2013-04-16  8:50 ` janus at gcc dot gnu.org
@ 2013-04-16  8:54 ` burnus at gcc dot gnu.org
  2013-04-16 19:14 ` janus at gcc dot gnu.org
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: burnus at gcc dot gnu.org @ 2013-04-16  8:54 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

--- Comment #8 from Tobias Burnus <burnus at gcc dot gnu.org> 2013-04-16 08:54:19 UTC ---
(In reply to comment #7)
> Ok, I have verified that this also regtests cleanly and fixes the test case (as
> expected). Will commit the following patch later today (unless further
> suggestions come up):

Looks good to me (with a test case ;-). After committal, please copy the output
from your commit message at http://gcc.gnu.org/ml/gcc-cvs/current to the PR.
Thanks for the patch!


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
                   ` (7 preceding siblings ...)
  2013-04-16  8:54 ` burnus at gcc dot gnu.org
@ 2013-04-16 19:14 ` janus at gcc dot gnu.org
  2013-04-26 19:31 ` janus at gcc dot gnu.org
  2013-04-26 22:30 ` janus at gcc dot gnu.org
  10 siblings, 0 replies; 12+ messages in thread
From: janus at gcc dot gnu.org @ 2013-04-16 19:14 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

--- Comment #9 from janus at gcc dot gnu.org 2013-04-16 19:14:33 UTC ---
Fixed on trunk with:

Author: janus
Date: Tue Apr 16 19:07:34 2013
New Revision: 198008

URL: http://gcc.gnu.org/viewcvs?rev=198008&root=gcc&view=rev
Log:
2013-04-16  Janus Weil  <janus@gcc.gnu.org>

    PR fortran/56968
    * expr.c (gfc_check_pointer_assign): Handle generic functions returning
    procedure pointers.


2013-04-16  Janus Weil  <janus@gcc.gnu.org>

    PR fortran/56968
    * gfortran.dg/proc_ptr_41.f90: New.

Added:
    trunk/gcc/testsuite/gfortran.dg/proc_ptr_41.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/expr.c
    trunk/gcc/testsuite/ChangeLog



Will backport to 4.8 and 4.7 in a few days if no problems show up.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
                   ` (8 preceding siblings ...)
  2013-04-16 19:14 ` janus at gcc dot gnu.org
@ 2013-04-26 19:31 ` janus at gcc dot gnu.org
  2013-04-26 22:30 ` janus at gcc dot gnu.org
  10 siblings, 0 replies; 12+ messages in thread
From: janus at gcc dot gnu.org @ 2013-04-26 19:31 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

--- Comment #10 from janus at gcc dot gnu.org 2013-04-26 19:31:41 UTC ---
Fixed on the 4.8 branch with:


Author: janus
Date: Fri Apr 26 19:20:55 2013
New Revision: 198345

URL: http://gcc.gnu.org/viewcvs?rev=198345&root=gcc&view=rev
Log:
2013-04-26  Janus Weil  <janus@gcc.gnu.org>

    Backports from trunk:

    PR fortran/56814
    * interface.c (check_result_characteristics): Get result from interface
    if present.

    PR fortran/56968
    * expr.c (gfc_check_pointer_assign): Handle generic functions returning
    procedure pointers.

    PR fortran/53685
    PR fortran/57022
    * check.c (gfc_calculate_transfer_sizes): Fix for array-valued SOURCE
    expressions.
    * target-memory.h (gfc_element_size): New prototype.
    * target-memory.c (size_array): Remove.
    (gfc_element_size): New function.
    (gfc_target_expr_size): Modified to always return the full size of the
    expression.


2013-04-26  Janus Weil  <janus@gcc.gnu.org>

    Backports from trunk:

    PR fortran/56968
    * gfortran.dg/proc_ptr_41.f90: New.

    PR fortran/56814
    * gfortran.dg/proc_ptr_42.f90: New.

    PR fortran/53685
    PR fortran/57022
    * gfortran.dg/transfer_check_4.f90: New.

Added:
    branches/gcc-4_8-branch/gcc/testsuite/gfortran.dg/proc_ptr_41.f90
    branches/gcc-4_8-branch/gcc/testsuite/gfortran.dg/proc_ptr_42.f90
    branches/gcc-4_8-branch/gcc/testsuite/gfortran.dg/transfer_check_4.f90
Modified:
    branches/gcc-4_8-branch/gcc/fortran/ChangeLog
    branches/gcc-4_8-branch/gcc/fortran/check.c
    branches/gcc-4_8-branch/gcc/fortran/expr.c
    branches/gcc-4_8-branch/gcc/fortran/interface.c
    branches/gcc-4_8-branch/gcc/fortran/target-memory.c
    branches/gcc-4_8-branch/gcc/fortran/target-memory.h
    branches/gcc-4_8-branch/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Bug fortran/56968] [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
  2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
                   ` (9 preceding siblings ...)
  2013-04-26 19:31 ` janus at gcc dot gnu.org
@ 2013-04-26 22:30 ` janus at gcc dot gnu.org
  10 siblings, 0 replies; 12+ messages in thread
From: janus at gcc dot gnu.org @ 2013-04-26 22:30 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56968

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED

--- Comment #11 from janus at gcc dot gnu.org 2013-04-26 22:30:41 UTC ---
Fixed on the 4.7 branch with:


Author: janus
Date: Fri Apr 26 22:26:02 2013
New Revision: 198348

URL: http://gcc.gnu.org/viewcvs?rev=198348&root=gcc&view=rev
Log:
2013-04-26  Janus Weil  <janus@gcc.gnu.org>

    Backports from trunk:

    PR fortran/56968
    * expr.c (gfc_check_pointer_assign): Handle generic functions returning
    procedure pointers.

    PR fortran/53685
    PR fortran/57022
    * check.c (gfc_calculate_transfer_sizes): Fix for array-valued SOURCE
    expressions.
    * target-memory.h (gfc_element_size): New prototype.
    * target-memory.c (size_array): Remove.
    (gfc_element_size): New function.
    (gfc_target_expr_size): Modified to always return the full size of the
    expression.


2013-04-26  Janus Weil  <janus@gcc.gnu.org>

    Backports from trunk:

    PR fortran/56968
    * gfortran.dg/proc_ptr_41.f90: New.

    PR fortran/53685
    PR fortran/57022
    * gfortran.dg/transfer_check_4.f90: New.

Added:
    branches/gcc-4_7-branch/gcc/testsuite/gfortran.dg/proc_ptr_41.f90
    branches/gcc-4_7-branch/gcc/testsuite/gfortran.dg/transfer_check_4.f90
Modified:
    branches/gcc-4_7-branch/gcc/fortran/ChangeLog
    branches/gcc-4_7-branch/gcc/fortran/check.c
    branches/gcc-4_7-branch/gcc/fortran/expr.c
    branches/gcc-4_7-branch/gcc/fortran/target-memory.c
    branches/gcc-4_7-branch/gcc/fortran/target-memory.h
    branches/gcc-4_7-branch/gcc/testsuite/ChangeLog


Closing. Thanks for the report!


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2013-04-26 22:30 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-15 14:07 [Bug fortran/56968] New: Issue with a procedure defined with a generic name returning procedure pointer samuel.debionne@ujf-grenoble.fr
2013-04-15 14:44 ` [Bug fortran/56968] [F03] " janus at gcc dot gnu.org
2013-04-15 15:02 ` dominiq at lps dot ens.fr
2013-04-15 17:15 ` [Bug fortran/56968] [4.7/4.8/4.9 Regression] " janus at gcc dot gnu.org
2013-04-15 17:16 ` janus at gcc dot gnu.org
2013-04-15 17:36 ` burnus at gcc dot gnu.org
2013-04-15 18:35 ` janus at gcc dot gnu.org
2013-04-16  8:50 ` janus at gcc dot gnu.org
2013-04-16  8:54 ` burnus at gcc dot gnu.org
2013-04-16 19:14 ` janus at gcc dot gnu.org
2013-04-26 19:31 ` janus at gcc dot gnu.org
2013-04-26 22:30 ` janus at gcc dot gnu.org

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).