Commit ab1668f6 by Tobias Burnus Committed by Tobias Burnus

re PR fortran/49397 ([F03] ICE with proc pointer assignment)

2014-02-18  Tobias Burnus  <burnus@net-b.de>

        PR fortran/49397
        * expr.c (gfc_check_pointer_assign): Add check for
        F2008Cor2, C729.
        * trans-decl.c (gfc_get_symbol_decl): Correctly generate
        * external
        decl in a corner case.

2014-02-18  Tobias Burnus  <burnus@net-b.de>

        PR fortran/49397
        * gfortran.dg/proc_ptr_45.f90: New.
        * gfortran.dg/proc_ptr_46.f90: New.

From-SVN: r207854
parent 70aacc97
2014-02-18 Tobias Burnus <burnus@net-b.de>
PR fortran/49397
* expr.c (gfc_check_pointer_assign): Add check for
F2008Cor2, C729.
* trans-decl.c (gfc_get_symbol_decl): Correctly generate external
decl in a corner case.
2014-02-18 Janus Weil <janus@gcc.gnu.org> 2014-02-18 Janus Weil <janus@gcc.gnu.org>
PR fortran/60231 PR fortran/60231
......
...@@ -3581,6 +3581,16 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue) ...@@ -3581,6 +3581,16 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
return false; return false;
} }
/* Check F2008Cor2, C729. */
if (!s2->attr.intrinsic && s2->attr.if_source == IFSRC_UNKNOWN
&& !s2->attr.external && !s2->attr.subroutine && !s2->attr.function)
{
gfc_error ("Procedure pointer target '%s' at %L must be either an "
"intrinsic, host or use associated, referenced or have "
"the EXTERNAL attribute", s2->name, &rvalue->where);
return false;
}
return true; return true;
} }
......
...@@ -1362,9 +1362,10 @@ gfc_get_symbol_decl (gfc_symbol * sym) ...@@ -1362,9 +1362,10 @@ gfc_get_symbol_decl (gfc_symbol * sym)
if (sym->attr.flavor == FL_PROCEDURE) if (sym->attr.flavor == FL_PROCEDURE)
{ {
/* Catch function declarations. Only used for actual parameters, /* Catch functions. Only used for actual parameters,
procedure pointers and procptr initialization targets. */ procedure pointers and procptr initialization targets. */
if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic) if (sym->attr.use_assoc || sym->attr.intrinsic
|| sym->attr.if_source != IFSRC_DECL)
{ {
decl = gfc_get_extern_function_decl (sym); decl = gfc_get_extern_function_decl (sym);
gfc_set_decl_location (decl, &sym->declared_at); gfc_set_decl_location (decl, &sym->declared_at);
......
2014-02-18 Tobias Burnus <burnus@net-b.de>
PR fortran/49397
* gfortran.dg/proc_ptr_45.f90: New.
* gfortran.dg/proc_ptr_46.f90: New.
2014-02-18 Adam Butcher <adam@jessamine.co.uk> 2014-02-18 Adam Butcher <adam@jessamine.co.uk>
PR c++/60190 PR c++/60190
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment