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 "

Reply via email to