diff options
author | Daniel Franke <franke.daniel@gmail.com> | 2009-12-14 14:10:56 -0500 |
---|---|---|
committer | Daniel Franke <dfranke@gcc.gnu.org> | 2009-12-14 14:10:56 -0500 |
commit | 21779d2e103ee370190538d2d0667cc378125642 (patch) | |
tree | 84ec3fe6182b4469ceeed23df4a240f156c63c2a /gcc/fortran/expr.c | |
parent | 4e25ca6b3001f31fe48671c3d8c5f17cb7984288 (diff) | |
download | gcc-21779d2e103ee370190538d2d0667cc378125642.zip gcc-21779d2e103ee370190538d2d0667cc378125642.tar.gz gcc-21779d2e103ee370190538d2d0667cc378125642.tar.bz2 |
re PR fortran/42354 (Invalidly accepts C_LOC in init expressions)
gcc/fortran/:
2009-12-14 Daniel Franke <franke.daniel@gmail.com>
PR fortran/42354
* expr.c (check_init_expr): Do not check for specification functions.
gcc/testsuite/:
2009-12-14 Daniel Franke <franke.daniel@gmail.com>
PR fortran/42354
* gfortran.dg/iso_c_binding_init_expr.f03: New.
* gfortran.dg/intrinsic_std_1.f90: Fixed expected error message.
* gfortran.dg/function_kinds_5.f90: Likewise.
* gfortran.dg/selected_char_kind_3.f90: Likewise.
From-SVN: r155234
Diffstat (limited to 'gcc/fortran/expr.c')
-rw-r--r-- | gcc/fortran/expr.c | 61 |
1 files changed, 30 insertions, 31 deletions
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 35918a6..72420ff 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -2286,40 +2286,39 @@ check_init_expr (gfc_expr *e) case EXPR_FUNCTION: t = FAILURE; - if ((m = check_specification_function (e)) != MATCH_YES) - { - gfc_intrinsic_sym* isym; - gfc_symbol* sym; + { + gfc_intrinsic_sym* isym; + gfc_symbol* sym; - sym = e->symtree->n.sym; - if (!gfc_is_intrinsic (sym, 0, e->where) - || (m = gfc_intrinsic_func_interface (e, 0)) != MATCH_YES) - { - gfc_error ("Function '%s' in initialization expression at %L " - "must be an intrinsic or a specification function", - e->symtree->n.sym->name, &e->where); - break; - } + sym = e->symtree->n.sym; + if (!gfc_is_intrinsic (sym, 0, e->where) + || (m = gfc_intrinsic_func_interface (e, 0)) != MATCH_YES) + { + gfc_error ("Function '%s' in initialization expression at %L " + "must be an intrinsic function", + e->symtree->n.sym->name, &e->where); + break; + } - if ((m = check_conversion (e)) == MATCH_NO - && (m = check_inquiry (e, 1)) == MATCH_NO - && (m = check_null (e)) == MATCH_NO - && (m = check_transformational (e)) == MATCH_NO - && (m = check_elemental (e)) == MATCH_NO) - { - gfc_error ("Intrinsic function '%s' at %L is not permitted " - "in an initialization expression", - e->symtree->n.sym->name, &e->where); - m = MATCH_ERROR; - } + if ((m = check_conversion (e)) == MATCH_NO + && (m = check_inquiry (e, 1)) == MATCH_NO + && (m = check_null (e)) == MATCH_NO + && (m = check_transformational (e)) == MATCH_NO + && (m = check_elemental (e)) == MATCH_NO) + { + gfc_error ("Intrinsic function '%s' at %L is not permitted " + "in an initialization expression", + e->symtree->n.sym->name, &e->where); + m = MATCH_ERROR; + } - /* Try to scalarize an elemental intrinsic function that has an - array argument. */ - isym = gfc_find_function (e->symtree->n.sym->name); - if (isym && isym->elemental - && (t = scalarize_intrinsic_call (e)) == SUCCESS) - break; - } + /* Try to scalarize an elemental intrinsic function that has an + array argument. */ + isym = gfc_find_function (e->symtree->n.sym->name); + if (isym && isym->elemental + && (t = scalarize_intrinsic_call (e)) == SUCCESS) + break; + } if (m == MATCH_YES) t = gfc_simplify_expr (e, 0); |