Hi Alex,

welcome to the gfortran community.  It is great that you are trying
to get actively involved.

You already did quite a few things right: patches shall be sent to
the gcc-patches ML, but Fortran reviewers usually notice them only
where they are copied to the fortran ML.

There are some general recommendations on the formatting of C code,
like indentation, of the patches, and of the commit log entries.

Regarding coding standards, see https://www.gnu.org/prep/standards/ .

Regarding testcases, a recommendation is to have a look at
existing testcases, e.g. in gcc/testsuite/gfortran.dg/, and then
decide if the testcase shall test the compile-time or run-time
behaviour, and add the necessary dejagnu directives.

You should also verify if your patch passes regression testing.
For changes to gfortran, it is usually sufficient to run

make check-fortran -j <n>

where <n> is the number of parallel tests.
You would need to report also the platform where you tested on.

There is also a legal issue to consider before non-trivial patches can
be accepted for incorporation: https://gcc.gnu.org/contribute.html#legal

If your patch is accepted and if you do not have write-access to the
repository, one of the maintainers will likely take care of it.
If you become a regular contributor, you will probably want to consider
getting write access.

Cheers,
Harald



On 6/24/23 19:17, Alexander Westbrooks via Gcc-patches wrote:
Hello,

I am new to the GFortran community. Over the past two weeks I created a
patch that should fix PR82943 for GFortran. I have attached it to this
email. The patch allows the code below to compile successfully. I am
working on creating test cases next, but I am new to the process so it may
take me some time. After I make test cases, do I email them to you as well?
Do I need to make a pull-request on github in order to get the patch
reviewed?

Thank you,

Alexander Westbrooks

module testmod

     public :: foo

     type, public :: tough_lvl_0(a, b)
         integer, kind :: a = 1
         integer, len :: b
     contains
         procedure :: foo
     end type

     type, public, EXTENDS(tough_lvl_0) :: tough_lvl_1 (c)
         integer, len :: c
     contains
         procedure :: bar
     end type

     type, public, EXTENDS(tough_lvl_1) :: tough_lvl_2 (d)
         integer, len :: d
     contains
         procedure :: foobar
     end type

contains
     subroutine foo(this)
         class(tough_lvl_0(1,*)), intent(inout) :: this
     end subroutine

     subroutine bar(this)
         class(tough_lvl_1(1,*,*)), intent(inout) :: this
     end subroutine

     subroutine foobar(this)
         class(tough_lvl_2(1,*,*,*)), intent(inout) :: this
     end subroutine

end module

PROGRAM testprogram
     USE testmod

     TYPE(tough_lvl_0(1,5))     :: test_pdt_0
     TYPE(tough_lvl_1(1,5,6))   :: test_pdt_1
     TYPE(tough_lvl_2(1,5,6,7)) :: test_pdt_2

     CALL test_pdt_0%foo()

     CALL test_pdt_1%foo()
     CALL test_pdt_1%bar()

     CALL test_pdt_2%foo()
     CALL test_pdt_2%bar()
     CALL test_pdt_2%foobar()


END PROGRAM testprogram

Reply via email to