aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2021-07-14 17:25:29 +0200
committerHarald Anlauf <anlauf@gmx.de>2021-07-14 17:25:29 +0200
commit269ca408e2839d7f3554a91515d73d4d95352f68 (patch)
tree89e5daef93e0b204ea62218985889b99fc94eb69 /gcc/fortran/trans-expr.c
parent6d1cdb27828d2ef1ae1ab0209836646a269b9610 (diff)
downloadgcc-269ca408e2839d7f3554a91515d73d4d95352f68.zip
gcc-269ca408e2839d7f3554a91515d73d4d95352f68.tar.gz
gcc-269ca408e2839d7f3554a91515d73d4d95352f68.tar.bz2
Fortran - ICE in gfc_conv_expr_present initializing non-dummy class variable
gcc/fortran/ChangeLog: PR fortran/100949 * trans-expr.c (gfc_trans_class_init_assign): Call gfc_conv_expr_present only for dummy variables. gcc/testsuite/ChangeLog: PR fortran/100949 * gfortran.dg/pr100949.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r--gcc/fortran/trans-expr.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index de406ad..9e0dcde 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -1741,8 +1741,9 @@ gfc_trans_class_init_assign (gfc_code *code)
}
}
- if (code->expr1->symtree->n.sym->attr.optional
- || code->expr1->symtree->n.sym->ns->proc_name->attr.entry_master)
+ if (code->expr1->symtree->n.sym->attr.dummy
+ && (code->expr1->symtree->n.sym->attr.optional
+ || code->expr1->symtree->n.sym->ns->proc_name->attr.entry_master))
{
tree present = gfc_conv_expr_present (code->expr1->symtree->n.sym);
tmp = build3_loc (input_location, COND_EXPR, TREE_TYPE (tmp),