diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-06-14 13:24:27 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2013-06-14 13:24:27 +0200 |
commit | 9d82744163502abea13ff680e9f7e9f5ced3bfaf (patch) | |
tree | a8016d97c1cb33f2f03c3f53a496efefaabe1d84 | |
parent | ffe7516f004d3ad9d5453b6c8c42ad23309ec6e0 (diff) | |
download | gcc-9d82744163502abea13ff680e9f7e9f5ced3bfaf.zip gcc-9d82744163502abea13ff680e9f7e9f5ced3bfaf.tar.gz gcc-9d82744163502abea13ff680e9f7e9f5ced3bfaf.tar.bz2 |
re PR fortran/57508 ([OOP] Intrinsic assignment+defined-assignment for comps: PROCEDURE attribute of '_F.DA0' conflicts with VARIABLE attribute)
2013-06-14 Tobias Burnus <burnus@net-b.de>
PR fortran/57508
* resolve.c (get_temp_from_expr): Don't copy function
result attributes to temporary.
2013-06-14 Tobias Burnus <burnus@net-b.de>
PR fortran/57508
* gfortran.dg/defined_assignment_7.f90: New.
From-SVN: r200089
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/defined_assignment_7.f90 | 29 |
4 files changed, 44 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 07ab220..89c2ea4 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2013-06-14 Tobias Burnus <burnus@net-b.de> + PR fortran/57508 + * resolve.c (get_temp_from_expr): Don't copy function + result attributes to temporary. + +2013-06-14 Tobias Burnus <burnus@net-b.de> + PR fortran/57596 * trans-decl.c (gfc_trans_deferred_vars): Honor OPTIONAL for nullify and deferred-strings' length variable. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index b2e8fdc..2788994 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9295,6 +9295,10 @@ get_temp_from_expr (gfc_expr *e, gfc_namespace *ns) /* Add the attributes and the arrayspec to the temporary. */ tmp->n.sym->attr = gfc_expr_attr (e); + tmp->n.sym->attr.function = 0; + tmp->n.sym->attr.result = 0; + tmp->n.sym->attr.flavor = FL_VARIABLE; + if (as) { tmp->n.sym->as = gfc_copy_array_spec (as); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 119a764..ea929e0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-06-14 Tobias Burnus <burnus@net-b.de> + + PR fortran/57508 + * gfortran.dg/defined_assignment_7.f90: New. + 2013-06-14 Paolo Carlini <paolo.carlini@oracle.com> PR c++/57599 diff --git a/gcc/testsuite/gfortran.dg/defined_assignment_7.f90 b/gcc/testsuite/gfortran.dg/defined_assignment_7.f90 new file mode 100644 index 0000000..5f60f50 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/defined_assignment_7.f90 @@ -0,0 +1,29 @@ +! { dg-compile } +! +! PR fortran/57508 +! +module ForTrilinos_ref_counter + type ref_counter + contains + procedure :: assign + generic :: assignment(=) => assign + end type +contains + subroutine assign (lhs, rhs) + class (ref_counter), intent(inout) :: lhs + class (ref_counter), intent(in) :: rhs + end subroutine +end module +module FEpetra_BlockMap + use ForTrilinos_ref_counter, only : ref_counter + type :: Epetra_BlockMap + type(ref_counter) :: counter + end type +contains + function from_struct() result(new_Epetra_BlockMap) + type(Epetra_BlockMap) :: new_Epetra_BlockMap + end function + type(Epetra_BlockMap) function create_arbitrary() + create_arbitrary = from_struct() + end function +end module |