diff options
author | Daniel Kraft <d@domob.eu> | 2010-08-17 10:20:03 +0200 |
---|---|---|
committer | Daniel Kraft <domob@gcc.gnu.org> | 2010-08-17 10:20:03 +0200 |
commit | 571d54deb6edc944f1e9f361302b2fa99b568d64 (patch) | |
tree | c4e60dabb6b71164f854d91556581ddd4452d41a /gcc/fortran/primary.c | |
parent | 3373692b59f62e6dfeaa6a3b2f19610bf6ea3886 (diff) | |
download | gcc-571d54deb6edc944f1e9f361302b2fa99b568d64.zip gcc-571d54deb6edc944f1e9f361302b2fa99b568d64.tar.gz gcc-571d54deb6edc944f1e9f361302b2fa99b568d64.tar.bz2 |
re PR fortran/38936 ([F03] ASSOCIATE construct / improved SELECT TYPE (a=>expr))
2010-08-17 Daniel Kraft <d@domob.eu>
PR fortran/38936
* gfortran.h (struct gfc_association_list): New member `where'.
(gfc_is_associate_pointer) New method.
* match.c (gfc_match_associate): Remember locus for each associate
name matched and do not try to set variable flag.
* parse.c (parse_associate): Use remembered locus for symbols.
* primary.c (match_variable): Instead of variable-flag check for
associate names set it for all such names used.
* symbol.c (gfc_is_associate_pointer): New method.
* resolve.c (resolve_block_construct): Don't generate assignments
to give associate-names their values.
(resolve_fl_var_and_proc): Allow associate-names to be deferred-shape.
(resolve_symbol): Set some more attributes for associate variables,
set variable flag here and check it and don't try to build an
explicitely shaped array-spec for array associate variables.
* trans-expr.c (gfc_conv_variable): Dereference in case of association
to scalar variable.
* trans-types.c (gfc_is_nodesc_array): Handle array association symbols.
(gfc_sym_type): Return pointer type for association to scalar vars.
* trans-decl.c (gfc_get_symbol_decl): Defer association symbols.
(trans_associate_var): New method.
(gfc_trans_deferred_vars): Handle association symbols.
2010-08-17 Daniel Kraft <d@domob.eu>
PR fortran/38936
* gfortran.dg/associate_1.f03: Extended to test newly supported
features like association to variables.
* gfortran.dg/associate_3.f03: Removed check for illegal change
of associate-name here...
* gfortran.dg/associate_5.f03: ...and added it here.
* gfortran.dg/associate_6.f03: No longer XFAIL'ed.
* gfortran.dg/associate_7.f03: New test.
From-SVN: r163295
Diffstat (limited to 'gcc/fortran/primary.c')
-rw-r--r-- | gcc/fortran/primary.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 0777046..8b5bc14 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -2982,12 +2982,8 @@ match_variable (gfc_expr **result, int equiv_flag, int host_flag) gfc_error ("Assigning to PROTECTED variable at %C"); return MATCH_ERROR; } - if (sym->assoc && !sym->assoc->variable) - { - gfc_error ("'%s' associated to expression can't appear in a variable" - " definition context at %C", sym->name); - return MATCH_ERROR; - } + if (sym->assoc) + sym->assoc->variable = 1; break; case FL_UNKNOWN: |