aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2013-06-14 13:24:27 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2013-06-14 13:24:27 +0200
commit9d82744163502abea13ff680e9f7e9f5ced3bfaf (patch)
treea8016d97c1cb33f2f03c3f53a496efefaabe1d84
parentffe7516f004d3ad9d5453b6c8c42ad23309ec6e0 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/defined_assignment_7.f9029
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