public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/37253]  New: Segmentation fault with procedure pointer
@ 2008-08-27 10:51 dominiq at lps dot ens dot fr
  2008-08-27 12:37 ` [Bug fortran/37253] " janus at gcc dot gnu dot org
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: dominiq at lps dot ens dot fr @ 2008-08-27 10:51 UTC (permalink / raw)
  To: gcc-bugs

The following code

module myMod

  CONTAINS

  real function proc3( arg1 )
     integer :: arg1
     proc3 = arg1+7
  end function proc3

  subroutine proc4( arg1 )
     procedure(real), pointer :: arg1
     print*, 'the func: ', arg1(0)
  end subroutine proc4

end module myMod

program myProg
  use myMod
  PROCEDURE (real), POINTER :: p => NULL()
  p => proc3
  print*, 'the func: ', p(0)
  call proc4( p )
end program myProg

gives a segmentation fault at run time:

[ibook-dhum] f90/bug% a.out 
 the func:    7.0000000    
Segmentation fault


-- 
           Summary: Segmentation fault with procedure pointer
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dominiq at lps dot ens dot fr


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


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

* [Bug fortran/37253] Segmentation fault with procedure pointer
  2008-08-27 10:51 [Bug fortran/37253] New: Segmentation fault with procedure pointer dominiq at lps dot ens dot fr
@ 2008-08-27 12:37 ` janus at gcc dot gnu dot org
  2008-08-27 20:31 ` burnus at gcc dot gnu dot org
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: janus at gcc dot gnu dot org @ 2008-08-27 12:37 UTC (permalink / raw)
  To: gcc-bugs



-- 

janus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |janus at gcc dot gnu dot org
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2008-08-27 12:35:40
               date|                            |


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


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

* [Bug fortran/37253] Segmentation fault with procedure pointer
  2008-08-27 10:51 [Bug fortran/37253] New: Segmentation fault with procedure pointer dominiq at lps dot ens dot fr
  2008-08-27 12:37 ` [Bug fortran/37253] " janus at gcc dot gnu dot org
@ 2008-08-27 20:31 ` burnus at gcc dot gnu dot org
  2008-08-27 20:34 ` burnus at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: burnus at gcc dot gnu dot org @ 2008-08-27 20:31 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from burnus at gcc dot gnu dot org  2008-08-27 20:30 -------
  call proc4( p )
should transfer to the tree code as
  proc4(&p)
(procpointer passed by reference) but it is actually
  proc(p)
The latter is OK for a PROCEDURE dummy argument but nor for a PROCEDURE POINTER
dummy argument.

I know we came across the pass-by-refence issue before when implementing
procpointers (cf. proc_ptr_7.f90). Why does not not work in this case? In
proc_ptr_7.f90 we have:

  procedure(Integer(c_int)), pointer :: ptr
  call foo(ptr)
with
  subroutine foo(a)
  procedure(integer(c_int)), pointer :: a

which produces:
  foo (&ptr);

What is different here? 

 * * *

I think there is some issue with saving the information in the module. If one
moves proc4 to the main program (via contains) then it work, i.e. the
procpointer information is lost.


-- 

burnus at gcc dot gnu dot org changed:

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


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


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

* [Bug fortran/37253] Segmentation fault with procedure pointer
  2008-08-27 10:51 [Bug fortran/37253] New: Segmentation fault with procedure pointer dominiq at lps dot ens dot fr
  2008-08-27 12:37 ` [Bug fortran/37253] " janus at gcc dot gnu dot org
  2008-08-27 20:31 ` burnus at gcc dot gnu dot org
@ 2008-08-27 20:34 ` burnus at gcc dot gnu dot org
  2008-08-27 21:12 ` janus at gcc dot gnu dot org
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: burnus at gcc dot gnu dot org @ 2008-08-27 20:34 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from burnus at gcc dot gnu dot org  2008-08-27 20:33 -------
Actual, I have the feeling the attr.proc_pointer is not saved at all in
module.c, cf. ab_attribute in that file. One should check whether other
attributes are also missing.

Dominique: Thanks for finding it; may this helps also with PR 37254.


-- 


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


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

* [Bug fortran/37253] Segmentation fault with procedure pointer
  2008-08-27 10:51 [Bug fortran/37253] New: Segmentation fault with procedure pointer dominiq at lps dot ens dot fr
                   ` (2 preceding siblings ...)
  2008-08-27 20:34 ` burnus at gcc dot gnu dot org
@ 2008-08-27 21:12 ` janus at gcc dot gnu dot org
  2008-08-28 11:25 ` janus at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: janus at gcc dot gnu dot org @ 2008-08-27 21:12 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from janus at gcc dot gnu dot org  2008-08-27 21:10 -------

> Actual, I have the feeling the attr.proc_pointer is not saved at all in
> module.c, cf. ab_attribute in that file.

Exactly. Thanks for pointing this out. The following patch fixes it:

Index: gcc/fortran/module.c
===================================================================
--- gcc/fortran/module.c        (revision 139622)
+++ gcc/fortran/module.c        (working copy)
@@ -1643,7 +1643,7 @@ mio_internal_string (char *string)

 typedef enum
 { AB_ALLOCATABLE, AB_DIMENSION, AB_EXTERNAL, AB_INTRINSIC, AB_OPTIONAL,
-  AB_POINTER, AB_TARGET, AB_DUMMY, AB_RESULT, AB_DATA,
+  AB_POINTER, AB_PROC_POINTER, AB_TARGET, AB_DUMMY, AB_RESULT, AB_DATA,
   AB_IN_NAMELIST, AB_IN_COMMON, AB_FUNCTION, AB_SUBROUTINE, AB_SEQUENCE,
   AB_ELEMENTAL, AB_PURE, AB_RECURSIVE, AB_GENERIC, AB_ALWAYS_EXPLICIT,
   AB_CRAY_POINTER, AB_CRAY_POINTEE, AB_THREADPRIVATE, AB_ALLOC_COMP,
@@ -1661,6 +1661,7 @@ static const mstring attr_bits[] =
     minit ("INTRINSIC", AB_INTRINSIC),
     minit ("OPTIONAL", AB_OPTIONAL),
     minit ("POINTER", AB_POINTER),
+    minit ("PROC_POINTER", AB_PROC_POINTER),
     minit ("VOLATILE", AB_VOLATILE),
     minit ("TARGET", AB_TARGET),
     minit ("THREADPRIVATE", AB_THREADPRIVATE),
@@ -1743,6 +1744,8 @@ mio_symbol_attribute (symbol_attribute *
        MIO_NAME (ab_attribute) (AB_OPTIONAL, attr_bits);
       if (attr->pointer)
        MIO_NAME (ab_attribute) (AB_POINTER, attr_bits);
+      if (attr->proc_pointer)
+       MIO_NAME (ab_attribute) (AB_PROC_POINTER, attr_bits);
       if (attr->is_protected)
        MIO_NAME (ab_attribute) (AB_PROTECTED, attr_bits);
       if (attr->value)
@@ -1839,6 +1842,9 @@ mio_symbol_attribute (symbol_attribute *
            case AB_POINTER:
              attr->pointer = 1;
              break;
+           case AB_PROC_POINTER:
+             attr->proc_pointer = 1;
+             break;
            case AB_PROTECTED:
              attr->is_protected = 1;
              break;


-- 

janus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |janus at gcc dot gnu dot org
                   |dot org                     |
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2008-08-27 12:35:40         |2008-08-27 21:10:58
               date|                            |


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


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

* [Bug fortran/37253] Segmentation fault with procedure pointer
  2008-08-27 10:51 [Bug fortran/37253] New: Segmentation fault with procedure pointer dominiq at lps dot ens dot fr
                   ` (3 preceding siblings ...)
  2008-08-27 21:12 ` janus at gcc dot gnu dot org
@ 2008-08-28 11:25 ` janus at gcc dot gnu dot org
  2008-08-28 15:13 ` janus at gcc dot gnu dot org
  2008-08-28 15:14 ` janus at gcc dot gnu dot org
  6 siblings, 0 replies; 8+ messages in thread
From: janus at gcc dot gnu dot org @ 2008-08-28 11:25 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from janus at gcc dot gnu dot org  2008-08-28 11:24 -------

> One should check whether other attributes are also missing.

attr.procedure is missing as well. I'll provide an extended patch.


-- 


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


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

* [Bug fortran/37253] Segmentation fault with procedure pointer
  2008-08-27 10:51 [Bug fortran/37253] New: Segmentation fault with procedure pointer dominiq at lps dot ens dot fr
                   ` (4 preceding siblings ...)
  2008-08-28 11:25 ` janus at gcc dot gnu dot org
@ 2008-08-28 15:13 ` janus at gcc dot gnu dot org
  2008-08-28 15:14 ` janus at gcc dot gnu dot org
  6 siblings, 0 replies; 8+ messages in thread
From: janus at gcc dot gnu dot org @ 2008-08-28 15:13 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from janus at gcc dot gnu dot org  2008-08-28 15:12 -------
Subject: Bug 37253

Author: janus
Date: Thu Aug 28 15:10:50 2008
New Revision: 139713

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139713
Log:
2008-08-28  Janus Weil  <janus@gcc.gnu.org>

        PR fortran/37253
        * module.c (ab_attribute,attr_bits,mio_symbol_attribute): Take care of
        saving attr.procedure and attr.proc_ptr to the module file.


2008-08-28  Janus Weil  <janus@gcc.gnu.org>

        PR fortran/37253
        * gfortran.dg/proc_ptr_10.f90: New.

Added:
    trunk/gcc/testsuite/gfortran.dg/proc_ptr_10.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/module.c
    trunk/gcc/testsuite/ChangeLog


-- 


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


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

* [Bug fortran/37253] Segmentation fault with procedure pointer
  2008-08-27 10:51 [Bug fortran/37253] New: Segmentation fault with procedure pointer dominiq at lps dot ens dot fr
                   ` (5 preceding siblings ...)
  2008-08-28 15:13 ` janus at gcc dot gnu dot org
@ 2008-08-28 15:14 ` janus at gcc dot gnu dot org
  6 siblings, 0 replies; 8+ messages in thread
From: janus at gcc dot gnu dot org @ 2008-08-28 15:14 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #6 from janus at gcc dot gnu dot org  2008-08-28 15:13 -------
Fixed in r139713. Closing.


-- 

janus at gcc dot gnu dot org changed:

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


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


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

end of thread, other threads:[~2008-08-28 15:14 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-08-27 10:51 [Bug fortran/37253] New: Segmentation fault with procedure pointer dominiq at lps dot ens dot fr
2008-08-27 12:37 ` [Bug fortran/37253] " janus at gcc dot gnu dot org
2008-08-27 20:31 ` burnus at gcc dot gnu dot org
2008-08-27 20:34 ` burnus at gcc dot gnu dot org
2008-08-27 21:12 ` janus at gcc dot gnu dot org
2008-08-28 11:25 ` janus at gcc dot gnu dot org
2008-08-28 15:13 ` janus at gcc dot gnu dot org
2008-08-28 15:14 ` janus at gcc dot gnu dot 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).