aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/expr.c
diff options
context:
space:
mode:
authorDaniel Franke <franke.daniel@gmail.com>2009-12-14 14:10:56 -0500
committerDaniel Franke <dfranke@gcc.gnu.org>2009-12-14 14:10:56 -0500
commit21779d2e103ee370190538d2d0667cc378125642 (patch)
tree84ec3fe6182b4469ceeed23df4a240f156c63c2a /gcc/fortran/expr.c
parent4e25ca6b3001f31fe48671c3d8c5f17cb7984288 (diff)
downloadgcc-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.c61
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);