Commit 033418dc by Tobias Burnus Committed by Tobias Burnus

re PR fortran/54389 ([F2003/F2008 difference] PURE functions and pointer dummy…

re PR fortran/54389 ([F2003/F2008 difference] PURE functions and pointer dummy arguments / DECL_PURE_P issue)

2012-08-28  Tobias Burnus  <burnus@net-b.de>

        PR fortran/54389
        * trans-decl.c (gfc_get_extern_function_decl,
        build_function_decl): Don't mark impure elemental
        functions as DECL_PURE_P and honour implicit_pure.

From-SVN: r190757
parent a21d0595
2012-08-28 Tobias Burnus <burnus@net-b.de> 2012-08-28 Tobias Burnus <burnus@net-b.de>
PR fortran/54389
* trans-decl.c (gfc_get_extern_function_decl,
build_function_decl): Don't mark impure elemental
functions as DECL_PURE_P and honour implicit_pure.
2012-08-28 Tobias Burnus <burnus@net-b.de>
PR fortran/54382 PR fortran/54382
* error.c (show_locus): Avoid out of bound access. * error.c (show_locus): Avoid out of bound access.
......
...@@ -1783,7 +1783,7 @@ gfc_get_extern_function_decl (gfc_symbol * sym) ...@@ -1783,7 +1783,7 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
/* Set attributes for PURE functions. A call to PURE function in the /* Set attributes for PURE functions. A call to PURE function in the
Fortran 95 sense is both pure and without side effects in the C Fortran 95 sense is both pure and without side effects in the C
sense. */ sense. */
if (sym->attr.pure || sym->attr.elemental) if (sym->attr.pure || sym->attr.implicit_pure)
{ {
if (sym->attr.function && !gfc_return_by_reference (sym)) if (sym->attr.function && !gfc_return_by_reference (sym))
DECL_PURE_P (fndecl) = 1; DECL_PURE_P (fndecl) = 1;
...@@ -1912,7 +1912,7 @@ build_function_decl (gfc_symbol * sym, bool global) ...@@ -1912,7 +1912,7 @@ build_function_decl (gfc_symbol * sym, bool global)
/* Set attributes for PURE functions. A call to a PURE function in the /* Set attributes for PURE functions. A call to a PURE function in the
Fortran 95 sense is both pure and without side effects in the C Fortran 95 sense is both pure and without side effects in the C
sense. */ sense. */
if (attr.pure || attr.elemental) if (attr.pure || attr.implicit_pure)
{ {
/* TODO: check if a pure SUBROUTINE has no INTENT(OUT) arguments /* TODO: check if a pure SUBROUTINE has no INTENT(OUT) arguments
including an alternate return. In that case it can also be including an alternate return. In that case it can also be
......
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