Commit 3e508131 by Tobias Burnus Committed by Tobias Burnus

re PR fortran/54339 (Update gfortran manual for GCC 4.8's TS29113 changes)

2013-02-07  Tobias Burnus  <burnus@net-b.de>

        PR fortran/54339
        * gfortran.texi (Standards): Mention TS29113.
        (Varying Length Character): Mention deferred-length
        strings.
        (Fortran 2003 Status): Add unlimited polymorphic.
        (TS 29113 Status): Add TYPE(*) and DIMENSION(..).
        (C Interop): Update the section about TS29113.

From-SVN: r195845
parent 0b8e955a
2013-02-07 Tobias Burnus <burnus@net-b.de>
PR fortran/54339
* gfortran.texi (Standards): Mention TS29113.
(Varying Length Character): Mention deferred-length
strings.
(Fortran 2003 Status): Add unlimited polymorphic.
(TS 29113 Status): Add TYPE(*) and DIMENSION(..).
(C Interop): Update the section about TS29113.
2013-02-06 Paul Thomas <pault@gcc.gnu.org> 2013-02-06 Paul Thomas <pault@gcc.gnu.org>
PR fortran/55789 PR fortran/55789
......
...@@ -221,7 +221,7 @@ compiler. ...@@ -221,7 +221,7 @@ compiler.
The GNU Fortran compiler front end was The GNU Fortran compiler front end was
designed initially as a free replacement for, designed initially as a free replacement for,
or alternative to, the unix @command{f95} command; or alternative to, the Unix @command{f95} command;
@command{gfortran} is the command you will use to invoke the compiler. @command{gfortran} is the command you will use to invoke the compiler.
@menu @menu
...@@ -522,12 +522,13 @@ ISO/IEC 1539:1997 (Fortran 95). As such, it can also compile essentially all ...@@ -522,12 +522,13 @@ ISO/IEC 1539:1997 (Fortran 95). As such, it can also compile essentially all
standard-compliant Fortran 90 and Fortran 77 programs. It also supports standard-compliant Fortran 90 and Fortran 77 programs. It also supports
the ISO/IEC TR-15581 enhancements to allocatable arrays. the ISO/IEC TR-15581 enhancements to allocatable arrays.
In the future, the GNU Fortran compiler will also support ISO/IEC GNU Fortran also have a partial support for ISO/IEC 1539-1:2004 (Fortran
1539-1:2004 (Fortran 2003), ISO/IEC 1539-1:2010 (Fortran 2008) and 2003), ISO/IEC 1539-1:2010 (Fortran 2008), the Technical Specification
future Fortran standards. Partial support of the Fortran 2003 and @code{Further Interoperability of Fortran with C} (ISO/IEC TS 29113:2012).
Fortran 2008 standard is already provided; the current status of the Full support of those standards and future Fortran standards is planned.
support is reported in the @ref{Fortran 2003 status} and The current status of the support is can be found in the
@ref{Fortran 2008 status} sections of the documentation. @ref{Fortran 2003 status}, @ref{Fortran 2008 status} and
@ref{TS 29113 status} sections of the documentation.
Additionally, the GNU Fortran compilers supports the OpenMP specification Additionally, the GNU Fortran compilers supports the OpenMP specification
(version 3.1, @url{http://openmp.org/@/wp/@/openmp-specifications/}). (version 3.1, @url{http://openmp.org/@/wp/@/openmp-specifications/}).
...@@ -545,6 +546,10 @@ for them, which work with GNU Fortran. They can be found at ...@@ -545,6 +546,10 @@ for them, which work with GNU Fortran. They can be found at
@uref{http://www.fortran.com/@/iso_varying_string.f95} and at @uref{http://www.fortran.com/@/iso_varying_string.f95} and at
@uref{ftp://ftp.nag.co.uk/@/sc22wg5/@/ISO_VARYING_STRING/}. @uref{ftp://ftp.nag.co.uk/@/sc22wg5/@/ISO_VARYING_STRING/}.
Deferred-length character strings of Fortran 2003 supports part of
the features of @code{ISO_VARYING_STRING} and should be considered as
replacement. (Namely, allocatable or pointers of the type
@code{character(len=:)}.)
@c ===================================================================== @c =====================================================================
...@@ -807,8 +812,8 @@ operators bound to a type. ...@@ -807,8 +812,8 @@ operators bound to a type.
override type-bound procedures or to have deferred binding. override type-bound procedures or to have deferred binding.
@item Polymorphic entities (``@code{CLASS}'') for derived types -- including @item Polymorphic entities (``@code{CLASS}'') for derived types -- including
@code{SAME_TYPE_AS}, @code{EXTENDS_TYPE_OF} and @code{SELECT TYPE}. @code{SAME_TYPE_AS}, @code{EXTENDS_TYPE_OF} and @code{SELECT TYPE} for
Note that unlimited polymorphism is currently not supported. scalars and arrays, including unlimited polymorphism.
@item Generic interface names, which have the same name as derived types, @item Generic interface names, which have the same name as derived types,
are now supported. This allows one to write constructor functions. Note are now supported. This allows one to write constructor functions. Note
...@@ -1079,16 +1084,23 @@ The @uref{http://gcc.gnu.org/wiki/TS29113Status, wiki} has some information ...@@ -1079,16 +1084,23 @@ The @uref{http://gcc.gnu.org/wiki/TS29113Status, wiki} has some information
about the current TS 29113 implementation status. In particular, the about the current TS 29113 implementation status. In particular, the
following is implemented. following is implemented.
See also @ref{Further Interoperability of Fortran with C}.
@itemize @itemize
@item The @option{-std=f2008ts} option. @item The @option{-std=f2008ts} option.
@item The @code{OPTIONAL} attribute is allowed for dummy arguments @item The @code{OPTIONAL} attribute is allowed for dummy arguments
of @code{BIND(C) procedures.} of @code{BIND(C) procedures.}
@item The RANK intrinsic is supported. @item The @code{RANK} intrinsic is supported.
@item GNU Fortran's implementation for variables with @code{ASYNCHRONOUS} @item GNU Fortran's implementation for variables with @code{ASYNCHRONOUS}
attribute is compatible with TS 29113. attribute is compatible with TS 29113.
@item Assumed types (@code{TYPE(*)}.
@item Assumed-rank (@code{DIMENSION(..)}). However, the array descriptor
of the TS is not yet supported.
@end itemize @end itemize
...@@ -2264,7 +2276,7 @@ Derived types with the C binding attribute shall not have the @code{sequence} ...@@ -2264,7 +2276,7 @@ Derived types with the C binding attribute shall not have the @code{sequence}
attribute, type parameters, the @code{extends} attribute, nor type-bound attribute, type parameters, the @code{extends} attribute, nor type-bound
procedures. Every component must be of interoperable type and kind and may not procedures. Every component must be of interoperable type and kind and may not
have the @code{pointer} or @code{allocatable} attribute. The names of the have the @code{pointer} or @code{allocatable} attribute. The names of the
variables are irrelevant for interoperability. components are irrelevant for interoperability.
As there exist no direct Fortran equivalents, neither unions nor structs As there exist no direct Fortran equivalents, neither unions nor structs
with bit field or variable-length array members are interoperable. with bit field or variable-length array members are interoperable.
...@@ -2304,11 +2316,14 @@ be compatible with C. The dummy argument declaration is relatively ...@@ -2304,11 +2316,14 @@ be compatible with C. The dummy argument declaration is relatively
straightforward. However, one needs to be careful because C uses straightforward. However, one needs to be careful because C uses
call-by-value by default while Fortran behaves usually similar to call-by-value by default while Fortran behaves usually similar to
call-by-reference. Furthermore, strings and pointers are handled call-by-reference. Furthermore, strings and pointers are handled
differently. Note that only explicit size and assumed-size arrays are differently. Note that in Fortran 2003 and 2008 only explicit size
supported but not assumed-shape or allocatable arrays. and assumed-size arrays are supported but not assumed-shape or
deferred-shape (i.e. allocatable or pointer) arrays. However, those
are allowed since the Technical Specification 29113, see
@ref{Further Interoperability of Fortran with C}
To pass a variable by value, use the @code{VALUE} attribute. To pass a variable by value, use the @code{VALUE} attribute.
Thus the following C prototype Thus, the following C prototype
@smallexample @smallexample
@code{int func(int i, int *j)} @code{int func(int i, int *j)}
...@@ -2401,6 +2416,11 @@ The intrinsic procedures are described in @ref{Intrinsic Procedures}. ...@@ -2401,6 +2416,11 @@ The intrinsic procedures are described in @ref{Intrinsic Procedures}.
C pointers are represented in Fortran via the special opaque derived type C pointers are represented in Fortran via the special opaque derived type
@code{type(c_ptr)} (with private components). Thus one needs to @code{type(c_ptr)} (with private components). Thus one needs to
use intrinsic conversion procedures to convert from or to C pointers. use intrinsic conversion procedures to convert from or to C pointers.
For some applications, using an assumed type (@code{TYPE(*)}) can be an
alternative to a C pointer; see
@ref{Further Interoperability of Fortran with C}.
For example, For example,
@smallexample @smallexample
...@@ -2546,17 +2566,76 @@ END MODULE m ...@@ -2546,17 +2566,76 @@ END MODULE m
@node Further Interoperability of Fortran with C @node Further Interoperability of Fortran with C
@subsection Further Interoperability of Fortran with C @subsection Further Interoperability of Fortran with C
Assumed-shape and allocatable arrays are passed using an array descriptor The Technical Specification ISO/IEC TS 29113:2012 on further
(dope vector). The internal structure of the array descriptor used interoperability of Fortran with C extends the interoperability support
by GNU Fortran is not yet documented and will change. There will also be of Fortran 2003 and Fortran 2008. Besides removing some restrictions
a Technical Specification (TS 29113) which standardizes an interoperable and constraints, it adds assumed-type (@code{TYPE(*)}) and assumed-rank
array descriptor. Until then, you can use the Chasm Language (@code{dimension}) variables and allows for interoperability of
assumed-shape, assumed-rank and deferred-shape arrays, including
allocatables and pointers.
Note: Currently, GNU Fortran does not support the array descriptor
(dope vector) as specified in the Technical Specification, but uses
an array descriptor with different fields. The Chasm Language
Interoperability Tools, @url{http://chasm-interop.sourceforge.net/}, Interoperability Tools, @url{http://chasm-interop.sourceforge.net/},
which provide an interface to GNU Fortran's array descriptor. provide an interface to GNU Fortran's array descriptor.
The Technical Specification adds the following new features, which
are supported by GNU Fortran:
GNU Fortran already supports the C-interoperable @code{OPTIONAL} @itemize @bullet
attribute; for absent arguments, a @code{NULL} pointer is passed.
@item The @code{ASYNCHRONOUS} attribute has been clarified and
extended to allow its use with asynchronous communication in
user-provided libraries such as in implementations of the
Message Passing Interface specification.
@item Many constraints have been relaxed, in particular for
the @code{C_LOC} and @code{C_F_POINTER} intrinsics.
@item The @code{OPTIONAL} attribute is now allowed for dummy
arguments; an absent argument matches a @code{NULL} pointer.
@item Assumed types (@code{TYPE(*)}) have been added, which may
only be used for dummy arguments. They are unlimited polymorphic
but contrary to @code{CLASS(*)} they do not contain any type
information, similar to C's @code{void *} pointers. Expressions
of any type and kind can be passed; thus, it can be used as
replacement for @code{TYPE(C_PTR)}, avoiding the use of
@code{C_LOC} in the caller.
Note, however, that @code{TYPE(*)} only accepts scalar arguments,
unless the @code{DIMENSION} is explicitly specified. As
@code{DIMENSION(*)} only supports array (including array elements) but
no scalars, it is not a full replacement for @code{C_LOC}. On the
other hand, assumed-type assumed-rank dummy arguments
(@code{TYPE(*), DIMENSION(..)}) allow for both scalars and arrays, but
require special code on the callee side to handle the array descriptor.
@item Assumed-shape arrays (@code{DIMENSION(..)}) as dummy argument
allow that scalars and arrays of any rank can be passed as actual
argument. As the Technical Specification does not provide for direct
means to operate with them, they have to be used either from the C side
or be converted using @code{C_LOC} and @code{C_F_POINTER} to scalars
or arrays of a specific rank. The rank can be determined using the
@code{RANK} intrinisic.
@end itemize
Currently unimplemented:
@itemize @bullet
@item GNU Fortran always uses an array descriptor, which does not
match the one of the Technical Specification. The
@code{ISO_Fortran_binding.h} header file and the C functions it
specifies are not available.
@item Using assumed-shape, assumed-rank and deferred-shape arrays in
@code{BIND(C)} procedures is not fully supported. In particular,
C interoperable strings of other length than one are not supported
as this requires the new array descriptor.
@end itemize
@node GNU Fortran Compiler Directives @node GNU Fortran Compiler Directives
...@@ -3100,7 +3179,7 @@ Environment variable for filename for * IO-unit. ...@@ -3100,7 +3179,7 @@ Environment variable for filename for * IO-unit.
Environment variable for temporary file directory. Environment variable for temporary file directory.
@item @item
Environment variable forcing standard output to be line buffered (unix). Environment variable forcing standard output to be line buffered (Unix).
@end itemize @end itemize
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment