Hi,
The problem appears in revision 201034 in version 4.9. I attached a
one-line patch that fixes it. I also reported this problem
at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57791
Bootstrap and regression-tested on x86_64-linux.
In method "gfc_check_pointer_assign()" in expr.c, the loop on line
3763 should break immediately after "warn" is set to "true".
2013-07-23 Chang <pcha...@cs.wisc.edu>
* expr.c (gfc_check_pointer_assign): Exit loop after setting warn.
Index: gcc/fortran/expr.c
===================================================================
--- gcc/fortran/expr.c (revision 201034)
+++ gcc/fortran/expr.c (working copy)
@@ -3764,7 +3764,10 @@
ns && ns->proc_name && ns->proc_name->attr.flavor != FL_PROCEDURE;
ns = ns->parent)
if (ns->parent == lvalue->symtree->n.sym->ns)
- warn = true;
+ {
+ warn = true;
+ break;
+ }
if (warn)
gfc_warning ("Pointer at %L in pointer assignment might outlive the "
-Chang
Index: gcc/fortran/expr.c
===================================================================
--- gcc/fortran/expr.c (revision 201034)
+++ gcc/fortran/expr.c (working copy)
@@ -3764,7 +3764,10 @@
ns && ns->proc_name && ns->proc_name->attr.flavor != FL_PROCEDURE;
ns = ns->parent)
if (ns->parent == lvalue->symtree->n.sym->ns)
- warn = true;
+ {
+ warn = true;
+ break;
+ }
if (warn)
gfc_warning ("Pointer at %L in pointer assignment might outlive the "