diff options
author | Tobias Burnus <burnus@gcc.gnu.org> | 2010-07-22 13:35:09 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2010-07-22 13:35:09 +0200 |
commit | e1d818f7eabdac4b3a814866fe05e4f2a82860ed (patch) | |
tree | 1c81ae58ff59910b6d357451fdc4a5f89c2528ae /gcc/fortran/symbol.c | |
parent | ba3ff5c2dbb31cd2e058b4a830eaac1df668ca5b (diff) | |
download | gcc-e1d818f7eabdac4b3a814866fe05e4f2a82860ed.zip gcc-e1d818f7eabdac4b3a814866fe05e4f2a82860ed.tar.gz gcc-e1d818f7eabdac4b3a814866fe05e4f2a82860ed.tar.bz2 |
re PR fortran/45019 (Aliasing of TARGET dummy argument not detected correctly)
2010-07-22 Tobias Burnus <burnus@net-b.de>
PR fortran/45019
* dependency.c (gfc_check_dependency): Add argument alising
* check.
* symbol.c (gfc_symbols_could_alias): Add argument alising
* check.
2010-07-22 Tobias Burnus <burnus@net-b.de>
PR fortran/45019
* gfortran.dg/aliasing_dummy_5.f90: New.
From-SVN: r162410
Diffstat (limited to 'gcc/fortran/symbol.c')
-rw-r--r-- | gcc/fortran/symbol.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index df6ada9..c12ea23 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -2811,6 +2811,17 @@ gfc_symbols_could_alias (gfc_symbol *lsym, gfc_symbol *rsym) if (lsym->attr.allocatable && rsym->attr.pointer) return 1; + /* Special case: Argument association, cf. F90 12.4.1.6, F2003 12.4.1.7 + and F2008 12.5.2.13 items 3b and 4b. The pointer case (a) is already + checked above. */ + if (lsym->attr.target && rsym->attr.target + && ((lsym->attr.dummy && !lsym->attr.contiguous + && (!lsym->attr.dimension || lsym->as->type == AS_ASSUMED_SHAPE)) + || (rsym->attr.dummy && !rsym->attr.contiguous + && (!rsym->attr.dimension + || rsym->as->type == AS_ASSUMED_SHAPE)))) + return 1; + return 0; } |