From: Tobias Burnus on
Hello all,

contrary to IBM I cannot announce full Fortran 2003 support (gfortran is
not yet there) nor can I announce the addition of OpenMP 3.0 (as 4.4.0
already supports it), but I can announce the following regarding today's
GCC 4.5.0 release and regarding 4.6.


--- GCC 4.6 ---

Since Tuesday, 6 April there is a GCC 4.5.0 release candidate, which
means that GCC 4.6.0 development has started on that day. Highlights of
GCC/gfortran 4.6 so far:

* Much improved compile time for large array constructors

* Experimental, single-image coarray support
(about 75% of the work has been done; full multi-image parallelization
is also planned; cf.
http://users.physik.fu-berlin.de/~tburnus/coarray/README.txt)


--- GCC 4.6.0 ---

Today, GCC 4.5.0 has been released; it offers:
- Link time optimization (e.g. inlining a C++ function in Fortran)
- More Fortran 2003/2008 support, especially: experimental polymorphism
support

See http://gcc.gnu.org/gcc-4.5/changes.html for details.

Excerpt:

-----------------------------------------------------------------

* A new link-time optimizer has been added (-flto). When this option is
used, GCC generates a bytecode representation of each input file and
writes it to special ELF sections in each object file. When the object
files are linked together, all the function bodies are read from these
ELF sections and instantiated as if they had been part of the same
translation unit. This enables interprocedural optimizations to work
across different files (and even different languages), potentially
improving the performance of the generated code. To use the link-timer
optimizer, -flto needs to be specified at compile time and during the
final link. If the program does not require any symbols to be exported,
it is possible to combine -flto and the experimental -fwhopr with
-fwhole-program to allow the interprocedural optimizers to use more
aggressive assumptions.

* [Improved and extended evaluation of complex arithmetic at compile time]

* Support for the Intel Atom processor [...]


Windows (Cygwin and MinGW)

* GCC now installs all the major language runtime libraries as DLLs when
configured with the --enable-shared option.

* Numerous other minor bugfixes and improvements, and substantial
enhancements to the Fortran language support library.


C++

* Improved experimental support for the upcoming C++0x ISO C++ standard,
including support for raw strings, lambda expressions and explicit type
conversion operators.


Fortran

* The COMMON default padding has been changed � instead of adding the
padding before a variable it is now added afterwards, which increases
the compatibility with other vendors and helps to obtain the correct
output in some cases. Cf. also the -falign-commons option (added in 4.4).

* The -finit-real= option now also supports the value snan for
signalling not-a-number; to be effective, one additionally needs to
enable trapping (e.g. via -ffpe-trap=). Note: Compile-time optimizations
can turn a signalling NaN into a quiet one.

* The new option -fcheck= has been added with the options bounds,
array-temps, do, pointer, and recursive. The bounds and array-temps
options are equivalent to -fbounds-check and -fcheck-array-temporaries.
The do option checks for invalid modification of loop iteration
variables, and the recursive option tests for recursive calls to
subroutines/functions which are not marked as recursive. With pointer
pointer association checks in calls are performed; however, neither
undefined pointers nor pointers in expressions are handled. Using
-fcheck=all enables all these run-time checks.

* The run-time checking -fcheck=bounds now warns about invalid string
lengths of character dummy arguments. Additionally, more compile-time
checks have been added.

* The new option -fno-protect-parens has been added; if set, the
compiler may reorder REAL and COMPLEX expressions without regard to
parentheses.

* GNU Fortran no longer links against libgfortranbegin. As before,
MAIN__ (assembler symbol name) is the actual Fortran main program, which
is invoked by the main function. However, main is now generated and put
in the same object file as MAIN__. For the time being, libgfortranbegin
still exists for backward compatibility. For details see the new
Mixed-Language Programming chapter in the manual.

* The I/O library was restructured for performance and cleaner code.

* Array assignments and WHERE are now run in parallel when OpenMP's
WORKSHARE is used.

* The experimental option -fwhole-file was added. The option allows
whole-file checking of procedure arguments and allows for better
optimizations. It can also be used with -fwhole-program, which is now
also supported in gfortran.
[Remark: -flto implies -fwhole-file]

* More Fortran 2003 and Fortran 2008 mathematical functions can now be
used as initialization expressions.

* Some extended attributes such as STDCALL are now supported via the
GCC$ compiler directive.

* For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
intrinsic behaves now as if zero were always positive.

* For legacy compatibiliy: On Cygwin and MinGW, the special files
CONOUT$ and CONIN$ (and CONERR$ which maps to CONOUT$) are now supported.

* Fortran 2003 support has been extended:
o Procedure-pointer function results and procedure-pointer components
(including PASS),
o allocatable scalars (experimental),
o DEFERRED type-bound procedures,
o the ERRMSG= argument of the ALLOCATE and DEALLOCATE statements have
been implemented.
o The ALLOCATE statement supports type-specs and the SOURCE= argument.
o OPERATOR(*) and ASSIGNMENT(=) are now allowed as GENERIC type-bound
procedure (i.e. as type-bound operators).
o Rounding (ROUND=, RZ, ...) for output is now supported.
o The INT_FAST{8,16,32,64,128}_T kind type parameters of the intrinsic
module ISO_C_BINDING are now supported, except for the targets listed
above as ones where GCC does not have <stdint.h> type information.
o Extensible derived types with type-bound procedure or procedure
pointer with PASS attribute now have to use CLASS in line with the
Fortran 2003 standard; the workaround to use TYPE is no longer supported.
o Experimental, incomplete support for polymorphism, including CLASS,
SELECT TYPE and dynamic dispatch of type-bound procedure calls. Some
features do not work yet such as unlimited polymorphism (CLASS(*)).

* Fortran 2008 support has been extended:
o The OPEN statement now supports the NEWUNIT= option, which returns a
unique file unit, thus preventing inadvertent use of the same unit in
different parts of the program.
o Support for unlimited format items has been added.
o The INT{8,16,32} and REAL{32,64,128} kind type parameters of the
intrinsic module ISO_FORTRAN_ENV are now supported.
o Using complex arguments with TAN, SINH, COSH, TANH, ASIN, ACOS, and
ATAN is now possible; the functions ASINH, ACOSH, and ATANH have been
added (for real and complex arguments) and ATAN(Y,X) is now an alias for
ATAN2(Y,X).
o The BLOCK construct has been implemented.
-----------------------------------------------------------------


Tobias
From: FX on
> - Link time optimization (e.g. inlining a C++ function in Fortran)

It should be mentionned that this new link-time optimization is not
supported on non-ELF targets, which notably include Windows and Mac OS.

--
FX
From: Tobias Burnus on
On 04/14/2010 02:28 PM, FX wrote:
>> - Link time optimization (e.g. inlining a C++ function in Fortran)
>
> It should be mentionned that this new link-time optimization is not
> supported on non-ELF targets, which notably include Windows and Mac OS.

That's true - but at least Windows (PE-COFF) will have it soon -
presumably in version 4.5.1. I do not know how soon Darwin/MacOS X will
get it, but I expect it also will have it soon.

Cf. http://gcc.gnu.org/ml/gcc-patches/2010-04/msg00612.html

Tobias
From: FX on
> but at least Windows (PE-COFF) will have it soon
> [...]
> Cf. http://gcc.gnu.org/ml/gcc-patches/2010-04/msg00612.html

I missed that. Excellent news!

--
FX
From: James Van Buskirk on
"Tobias Burnus" <burnus(a)net-b.de> wrote in message
news:4BC5AF17.2000300(a)net-b.de...

> * GNU Fortran no longer links against libgfortranbegin. As before,
> MAIN__ (assembler symbol name) is the actual Fortran main program, which
> is invoked by the main function. However, main is now generated and put
> in the same object file as MAIN__. For the time being, libgfortranbegin
> still exists for backward compatibility. For details see the new
> Mixed-Language Programming chapter in the manual.

There is also a new section in the manual: 5.2 Internal representation
of logical variables that contains information that, according to my
experience from the last time I tilted at this particular windmill, is
incorrect. I can't seem to find that thread today via Google; in fact
I can't get Google to find posts containing the word "end" in
comp.lang.fortran today, maybe you'll have better luck than me.
My suggestion is that you delete the section rather than create a
precedent for the situation described, which is the worst of all
possible worlds.

--
write(*,*) transfer((/17.392111325966148d0,6.5794487871554595D-85, &
6.0134700243160014d-154/),(/'x'/)); end