Procedure Pointers: a first patch

Janus Weil jaydub66@googlemail.com
Sun May 4 12:53:00 GMT 2008


Hi all,

attached you find a patch which contains a first attempt to implement
procedure pointers. It's just a start, so don't expect too much yet.
It should handle most kinds of proc-pointer declarations, and I have
started to work on proc-pointer assignments (where I'm stuck right
now), but haven't looked into calling proc-pointers.

You'll also find a small test case, which at this point produces a
gimplification failure:

gimplification failed:
ptr <addr_expr 0xb7c18e60
    type <pointer_type 0xb7bf5c30
        type <function_type 0xb7bf5bc8 type <void_type 0xb7beb8f0 void>
            QI
            size <integer_cst 0xb7be147c constant 8>
            unit size <integer_cst 0xb7be1498 constant 1>
            align 8 symtab 0 alias set -1 canonical type 0xb7bf5bc8
            pointer_to_this <pointer_type 0xb7bf5c30>>
        unsigned SI
        size <integer_cst 0xb7be1604 constant 32>
        unit size <integer_cst 0xb7be13f0 constant 4>
        align 32 symtab 0 alias set -1 canonical type 0xb7bf5c30>
    constant
    arg 0 <function_decl 0xb7c1d930 ptr type <function_type 0xb7bf5bc8>
        addressable public external QI file procptr.f90 line 13 col 0 align 8
        chain <function_decl 0xb7c1d8c0 procptrtest type
<function_type 0xb7bf5bc8>
            public static QI file procptr.f90 line 13 col 0 align 8
attributes <tree_list 0xb7c1cc5c> initial <block 0xb7ee0618> result
<result_decl 0xb7be6260 D.612>
            (mem:QI (symbol_ref:SI ("MAIN__") [flags 0x3]
<function_decl 0xb7c1d8c0 procptrtest>) [0 S1 A8])
            saved-insns 0xb7be62ac chain <function_decl 0xb7c1d850 proc>>>>
procptr.f90: In function 'procptrtest':
procptr.f90:20: internal compiler error: gimplification failed

I tried to understand this error message, but I don't really see
what's going wrong. I guess I'm missing something in trans-expr.c(?).
Any hints or ideas are most welcome.

At this point proc-pointer assignments are treated as EXPR_VARIABLE,
but it might be better to introduce a new EXPR_PROCEDURE. I already
discussed this with Tobias, and will probably change it later. Right
now I would be satisfied with *any* solution that works ;)

Cheers,
Janus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: procptr134918.diff
Type: text/x-patch
Size: 4096 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20080504/8b9d2702/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: procptr.f90
Type: text/x-fortran
Size: 218 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20080504/8b9d2702/attachment-0001.bin>


More information about the Fortran mailing list