Patchwork [fortran] PR50405 - Statement function with itself as argument SEGV's

login
register
mail settings
Submitter Bud Davis
Date May 17, 2013, 3:22 a.m.
Message ID <1368760968.56247.YahooMailClassic@web182202.mail.bf1.yahoo.com>
Download mbox | patch
Permalink /patch/244464/
State New
Headers show

Comments

Bud Davis - May 17, 2013, 3:22 a.m.
Not to much to add beyond the title and the patch.
The test file fails before (eventually, when you run out of stack) and passes after the patch is applied.  No new testsuite failures.


--bud



!{ dg-do compile }
! submitted by zeccav@gmail.com
!{ dg-prune-output "Obsolescent feature: Statement function at" }
       f(f) = 0 ! { dg-error "Self referential argument" }
       end

 

2013-05-17  Bud Davis  <jmdavis@link.com>

        PR fortran/50405
        resolve.c (resolve_formal_arglist): Detect error when an argument
        has the same name as the function.
Tobias Burnus - May 17, 2013, 7:19 a.m.
Am 17.05.2013 05:22, schrieb Bud Davis:
> Not to much to add beyond the title and the patch.
> The test file fails before (eventually, when you run out of stack) and passes after the patch is applied.  No new testsuite failures.
>
>
> --bud
>
> Index: gcc/gcc/fortran/resolve.c
> ===================================================================
> --- gcc/gcc/fortran/resolve.c    (revision 198955)
> +++ gcc/gcc/fortran/resolve.c    (working copy)
> @@ -306,6 +306,14 @@
>              && !resolve_procedure_interface (sym))
>       return;
>   
> +      if (strcmp (proc->name,sym->name) == 0)

Missing blank after the comma.

> +        {
> +       gfc_error ("Self referential argument "
> +       "'%s' at %L is not allowed", sym->name,
> +       &proc->declared_at);
> +       return;

Indentation is wrong. (As a friend of hyphens, I would add one between 
self and referential, but it is also fine without.)

> !{ dg-do compile }
> ! submitted by zeccav@gmail.com
> !{ dg-prune-output "Obsolescent feature: Statement function at" }

Please add "! PR fortran/50405" as comment.

Instead of dg-prune-output,  you could also use: '! { dg-options "" }'. 
That will override the default setting, i.e. it removes the "-pedantic".

>         f(f) = 0 ! { dg-error "Self referential argument" }
>         end
>
> 2013-05-17  Bud Davis  <jmdavis@link.com>
>
>          PR fortran/50405
>          resolve.c (resolve_formal_arglist): Detect error when an argument
>          has the same name as the function.

OK and thanks for the patch!

Tobias

PS: Nice that you are back to (casual) gfortran development.

Patch

Index: gcc/gcc/fortran/resolve.c
===================================================================
--- gcc/gcc/fortran/resolve.c    (revision 198955)
+++ gcc/gcc/fortran/resolve.c    (working copy)
@@ -306,6 +306,14 @@ 
            && !resolve_procedure_interface (sym))
     return;
 
+      if (strcmp (proc->name,sym->name) == 0)
+        {
+       gfc_error ("Self referential argument "
+       "'%s' at %L is not allowed", sym->name,
+       &proc->declared_at);
+       return;
+        }
+
       if (sym->attr.if_source != IFSRC_UNKNOWN)
     resolve_formal_arglist (sym);