diff options
Diffstat (limited to 'gcc/fortran/match.c')
-rw-r--r-- | gcc/fortran/match.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 413487d6f4b..0dc2c7295b1 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -852,6 +852,15 @@ gfc_match_assignment (void) return MATCH_NO; } + if (lvalue->symtree->n.sym->attr.protected + && lvalue->symtree->n.sym->attr.use_assoc) + { + gfc_current_locus = old_loc; + gfc_free_expr (lvalue); + gfc_error ("Setting value of PROTECTED variable at %C"); + return MATCH_ERROR; + } + rvalue = NULL; m = gfc_match (" %e%t", &rvalue); if (m != MATCH_YES) @@ -898,6 +907,15 @@ gfc_match_pointer_assignment (void) if (m != MATCH_YES) goto cleanup; + if (lvalue->symtree->n.sym->attr.protected + && lvalue->symtree->n.sym->attr.use_assoc) + { + gfc_error ("Assigning to a PROTECTED pointer at %C"); + m = MATCH_ERROR; + goto cleanup; + } + + new_st.op = EXEC_POINTER_ASSIGN; new_st.expr = lvalue; new_st.expr2 = rvalue; |