public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/52022] New: [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument
@ 2012-01-27 17:54 burnus at gcc dot gnu.org
  2012-01-27 18:05 ` [Bug fortran/52022] " burnus at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-01-27 17:54 UTC (permalink / raw)
  To: gcc-bugs

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

             Bug #: 52022
           Summary: [4.5/4.6/4.7 Regression] Wrong-code with procedures
                    passed as actual argument
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: burnus@gcc.gnu.org


Reported by patnel97269 at http://gcc.gnu.org/ml/fortran/2012-01/msg00232.html

The following program - a stripped-down version of the original version -
compiles and successfully runs with GCC 4.3 and 4.4. It prints:
   2.0000000000000000        4.0000000000000000

Using GCC 4.5, 4.6 and 4.7, one gets instead a SEGFAULT.

In 4.4, the passed argument is:
    sol (cost1);
while 4.5/4.6/4.7 pass the argument:
  sol (&cost1);
which does not make much sense.

There might be internally some confusion between procedures dummies (pass
address of procedure to be called) and procedures pointers (pass address of the
callee such that it can be assigned to).


module m
contains
  function cost1(x) result(y)
        double precision,dimension(:) :: x
        double precision,dimension(:),allocatable :: y
        allocate(y(2))
        y=2d0*x
  end function cost1
end module m
program test
   use m
   implicit none
   call sol(cost1)
contains
  subroutine  sol(cost3)
    interface
        function cost3(p) result(y)
                double precision,dimension(:) :: p
                double precision,dimension(:),allocatable :: y
        end function cost3
    end interface

    print *,cost3([1d0,2d0])
  end subroutine
end program test


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

* [Bug fortran/52022] [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument
  2012-01-27 17:54 [Bug fortran/52022] New: [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument burnus at gcc dot gnu.org
@ 2012-01-27 18:05 ` burnus at gcc dot gnu.org
  2012-01-27 20:43 ` burnus at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-01-27 18:05 UTC (permalink / raw)
  To: gcc-bugs

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

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

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

--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-01-27 17:24:42 UTC ---
The issue is seemingly a side effect of supporting proc-pointer returning
functions (a GCC 4.5 features).

This does not interact well with passing nonprocedure-pointer functions, that
return allocatables, as can be seen from the following chunk in trans-expr.c's
gfc_conv_procedure_call:

                  if (fsym && e->expr_type != EXPR_NULL
                      && ((fsym->attr.pointer
                           && fsym->attr.flavor != FL_PROCEDURE)
                          || (fsym->attr.proc_pointer
                              && !(e->expr_type == EXPR_VARIABLE
                                   && e->symtree->n.sym->attr.dummy))
                          || (fsym->attr.proc_pointer
                              && e->expr_type == EXPR_VARIABLE
                              && gfc_is_proc_ptr_comp (e, NULL))
                          || fsym->attr.allocatable))

Untested patch: Do the same as we already do for pointers.

--- trans-expr.c        (revision 183625)
+++ trans-expr.c        (working copy)
@@ -3664,3 +3664,4 @@ gfc_conv_procedure_call (gfc_se * se, gf
                              && gfc_is_proc_ptr_comp (e, NULL))
-                         || fsym->attr.allocatable))
+                         || (fsym->attr.allocatable
+                             && fsym->attr.flavor != FL_PROCEDURE)))
                    {


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

* [Bug fortran/52022] [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument
  2012-01-27 17:54 [Bug fortran/52022] New: [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument burnus at gcc dot gnu.org
  2012-01-27 18:05 ` [Bug fortran/52022] " burnus at gcc dot gnu.org
@ 2012-01-27 20:43 ` burnus at gcc dot gnu.org
  2012-01-27 21:07 ` jakub at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-01-27 20:43 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-01-27 20:12:00 UTC ---
Author: burnus
Date: Fri Jan 27 20:11:51 2012
New Revision: 183643

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=183643
Log:
2012-01-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/52022
        * trans-expr.c (gfc_conv_procedure_call): Fix passing
        of functions, which return allocatables.

2012-01-27  Tobias Burnus  <burnus@net-b.de>

        PR fortran/52022
        * gfortran.dg/dummy_procedure_7.f90: New.


Added:
    trunk/gcc/testsuite/gfortran.dg/dummy_procedure_7.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/trans-expr.c
    trunk/gcc/testsuite/ChangeLog


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

* [Bug fortran/52022] [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument
  2012-01-27 17:54 [Bug fortran/52022] New: [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument burnus at gcc dot gnu.org
  2012-01-27 18:05 ` [Bug fortran/52022] " burnus at gcc dot gnu.org
  2012-01-27 20:43 ` burnus at gcc dot gnu.org
@ 2012-01-27 21:07 ` jakub at gcc dot gnu.org
  2012-01-28 11:00 ` burnus at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: jakub at gcc dot gnu.org @ 2012-01-27 21:07 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P4
                 CC|                            |jakub at gcc dot gnu.org


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

* [Bug fortran/52022] [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument
  2012-01-27 17:54 [Bug fortran/52022] New: [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument burnus at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2012-01-27 21:07 ` jakub at gcc dot gnu.org
@ 2012-01-28 11:00 ` burnus at gcc dot gnu.org
  2012-01-28 11:41 ` burnus at gcc dot gnu.org
  2012-01-28 11:55 ` burnus at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-01-28 11:00 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-01-28 10:00:20 UTC ---
Author: burnus
Date: Sat Jan 28 10:00:13 2012
New Revision: 183665

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=183665
Log:
2012-01-28  Tobias Burnus  <burnus@net-b.de>

        PR fortran/52022
        * trans-expr.c (gfc_conv_procedure_call): Fix passing
        of functions, which return allocatables.

2012-01-28  Tobias Burnus  <burnus@net-b.de>

        PR fortran/52022
        * gfortran.dg/dummy_procedure_7.f90: New.


Added:
    branches/gcc-4_6-branch/gcc/testsuite/gfortran.dg/dummy_procedure_7.f90
Modified:
    branches/gcc-4_6-branch/gcc/fortran/ChangeLog
    branches/gcc-4_6-branch/gcc/fortran/trans-expr.c
    branches/gcc-4_6-branch/gcc/testsuite/ChangeLog


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

* [Bug fortran/52022] [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument
  2012-01-27 17:54 [Bug fortran/52022] New: [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument burnus at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2012-01-28 11:00 ` burnus at gcc dot gnu.org
@ 2012-01-28 11:41 ` burnus at gcc dot gnu.org
  2012-01-28 11:55 ` burnus at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-01-28 11:41 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-01-28 10:59:22 UTC ---
Author: burnus
Date: Sat Jan 28 10:59:18 2012
New Revision: 183666

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=183666
Log:
2012-01-28  Tobias Burnus  <burnus@net-b.de>

        PR fortran/52022
        * trans-expr.c (gfc_conv_procedure_call): Fix passing
        of functions, which return allocatables.

2012-01-28  Tobias Burnus  <burnus@net-b.de>

        PR fortran/52022
        * gfortran.dg/dummy_procedure_7.f90: New.


Added:
    branches/gcc-4_5-branch/gcc/testsuite/gfortran.dg/dummy_procedure_7.f90
Modified:
    branches/gcc-4_5-branch/gcc/fortran/ChangeLog
    branches/gcc-4_5-branch/gcc/fortran/trans-expr.c
    branches/gcc-4_5-branch/gcc/testsuite/ChangeLog


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

* [Bug fortran/52022] [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument
  2012-01-27 17:54 [Bug fortran/52022] New: [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument burnus at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2012-01-28 11:41 ` burnus at gcc dot gnu.org
@ 2012-01-28 11:55 ` burnus at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-01-28 11:55 UTC (permalink / raw)
  To: gcc-bugs

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

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

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

--- Comment #5 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-01-28 11:27:46 UTC ---
FIXED on the trunk (4.7) and the 4.5 and 4.6 branches.


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

end of thread, other threads:[~2012-01-28 11:28 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-27 17:54 [Bug fortran/52022] New: [4.5/4.6/4.7 Regression] Wrong-code with procedures passed as actual argument burnus at gcc dot gnu.org
2012-01-27 18:05 ` [Bug fortran/52022] " burnus at gcc dot gnu.org
2012-01-27 20:43 ` burnus at gcc dot gnu.org
2012-01-27 21:07 ` jakub at gcc dot gnu.org
2012-01-28 11:00 ` burnus at gcc dot gnu.org
2012-01-28 11:41 ` burnus at gcc dot gnu.org
2012-01-28 11:55 ` burnus 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).