summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>2012-04-15 11:47:49 +0000
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>2012-04-15 11:47:49 +0000
commit182f5311a9e33ce63fce90ab72fd59d6ace6f2b8 (patch)
treed267d4a18b3c610c373995a9be40e5f5368961db
parentb1f743252f41c31a9903828c3ea2e15cc64efbf4 (diff)
downloadgcc-182f5311a9e33ce63fce90ab72fd59d6ace6f2b8.tar.gz
2012-04-15 Janus Weil <janus@gcc.gnu.org>
PR fortran/51082 * trans-expr.c (gfc_conv_expr_reference): Check if the expression is a simple function call (or a more involved PPC reference). 2012-04-15 Janus Weil <janus@gcc.gnu.org> PR fortran/51082 * gfortran.dg/proc_ptr_comp_34.f90: New test case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@186465 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-expr.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_34.f9030
4 files changed, 42 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 9bb46acb427..4db00bba59e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2012-04-15 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/51082
+ * trans-expr.c (gfc_conv_expr_reference): Check if the expression is a
+ simple function call (or a more involved PPC reference).
+
2012-04-15 Tobias Burnus <burnus@net-b.de>
PR fortran/52916
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 036b55bdf96..cd48d5a67af 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -5650,7 +5650,7 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr)
&& ((expr->value.function.esym
&& expr->value.function.esym->result->attr.pointer
&& !expr->value.function.esym->result->attr.dimension)
- || (!expr->value.function.esym
+ || (!expr->value.function.esym && !expr->ref
&& expr->symtree->n.sym->attr.pointer
&& !expr->symtree->n.sym->attr.dimension)))
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 16d63285890..1d3e820c2a7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-04-15 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/51082
+ * gfortran.dg/proc_ptr_comp_34.f90: New test case.
+
2012-04-14 Tobias Burnus <burnus@net-b.de>
PR fortran/52916
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_34.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_34.f90
new file mode 100644
index 00000000000..031f74418ca
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_34.f90
@@ -0,0 +1,30 @@
+! { dg-do run }
+!
+! PR 51082: [F03] Wrong result for a pointer to a proc-pointer component
+!
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+
+program ala
+ implicit none
+
+ type process_list
+ procedure(ala1), pointer, nopass :: process
+ end type
+
+ type(process_list), target :: p_list
+ type(process_list), pointer :: p
+
+ p_list%process => ala1
+ p => p_list
+
+ write(*,*) p_list%process(1.0)
+ write(*,*) p%process(1.0) !!!! failed
+
+contains
+
+ real function ala1(x)
+ real, intent(in) :: x
+ ala1 = x
+ end function
+
+end program