aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/symbol.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@gcc.gnu.org>2010-07-22 13:35:09 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2010-07-22 13:35:09 +0200
commite1d818f7eabdac4b3a814866fe05e4f2a82860ed (patch)
tree1c81ae58ff59910b6d357451fdc4a5f89c2528ae /gcc/fortran/symbol.c
parentba3ff5c2dbb31cd2e058b4a830eaac1df668ca5b (diff)
downloadgcc-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.c11
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;
}