From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2153) id EA6CB398792C; Thu, 17 Sep 2020 17:04:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EA6CB398792C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1600362266; bh=01rVRyCgciYVtduxbg0pgx7ln2QzV6tSIiv3I6EmdRI=; h=From:To:Subject:Date:From; b=p5TOkvgnkFwA7mX5Fgak4JJu275agARsrogKIM2KwUOgYvUUrXI+vcv0IdKqpH+3z fbBQo9gGv+MdGC1wU9Y9q3qABbu6BnRvhzQHISVQSX6F0xjVW0tzVW7jEU0O1h/RXu v8zlgnwYBqqCfIEyqT6OE9CrUW1ldSAkTa9+6tks= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Jakub Jelinek To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/vendors/redhat/heads/gcc-8-branch)] Fortran : ICE in gfc_trans_label_assign PR50392 X-Act-Checkin: gcc X-Git-Author: Mark Eggleston X-Git-Refname: refs/vendors/redhat/heads/gcc-8-branch X-Git-Oldrev: 02163d6e09292269778ccdb636aae419fee3b651 X-Git-Newrev: 68f72fe0a13fe38190d3447ae98377b6b005c696 Message-Id: <20200917170426.EA6CB398792C@sourceware.org> Date: Thu, 17 Sep 2020 17:04:26 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Sep 2020 17:04:27 -0000 https://gcc.gnu.org/g:68f72fe0a13fe38190d3447ae98377b6b005c696 commit 68f72fe0a13fe38190d3447ae98377b6b005c696 Author: Mark Eggleston Date: Thu May 7 08:15:26 2020 +0100 Fortran : ICE in gfc_trans_label_assign PR50392 A function may contain an assigned goto. If the the return variable is an integer a statement can be assigned to it. Prior to this fix this resulted in an ICE. 2020-05-28 Tobias Burnus gcc/fortran/ PR fortran/50392 * trans-decl.c (gfc_get_symbol_decl): Remove unnecessary block delimiters. Add auxiliary variables if a label is assigned to a return variable. (gfc_gat_fake_result): If the symbol has an assign attribute set declaration from the symbol's backend declaration. 2020-05-28 Mark Eggleston gcc/testsuite/ PR fortran/50392 * gfortran.dg/pr50392.f: New test. (cherry picked from commit a7fd43c38f7469a3ef5ee30e889d60e1376d4dfc) Diff: --- gcc/fortran/trans-decl.c | 11 ++++++++--- gcc/testsuite/gfortran.dg/pr50392.f | 12 ++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 30ed449e12f..3780d27a9f6 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -1673,9 +1673,7 @@ gfc_get_symbol_decl (gfc_symbol * sym) TREE_USED (sym->backend_decl) = 1; if (sym->attr.assign && GFC_DECL_ASSIGN (sym->backend_decl) == 0) - { - gfc_add_assign_aux_vars (sym); - } + gfc_add_assign_aux_vars (sym); if ((sym->attr.dimension || IS_CLASS_ARRAY (sym)) && DECL_LANG_SPECIFIC (sym->backend_decl) @@ -1689,6 +1687,10 @@ gfc_get_symbol_decl (gfc_symbol * sym) return sym->backend_decl; } + if (sym->result == sym && sym->attr.assign + && GFC_DECL_ASSIGN (sym->backend_decl) == 0) + gfc_add_assign_aux_vars (sym); + if (sym->backend_decl) return sym->backend_decl; @@ -3142,6 +3144,9 @@ gfc_get_fake_result_decl (gfc_symbol * sym, int parent_flag) else current_fake_result_decl = build_tree_list (NULL, decl); + if (sym->attr.assign) + DECL_LANG_SPECIFIC (decl) = DECL_LANG_SPECIFIC (sym->backend_decl); + return decl; } diff --git a/gcc/testsuite/gfortran.dg/pr50392.f b/gcc/testsuite/gfortran.dg/pr50392.f new file mode 100644 index 00000000000..2cb883e41a3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr50392.f @@ -0,0 +1,12 @@ +! { dg-do compile } +! + function kf() + integer kf + assign 1 to kf ! { dg-warning "Deleted feature: ASSIGN statement at" } + kf = 2 + goto kf ! { dg-warning "Deleted feature: Assigned GOTO statement at" } + kf = 1 + 1 continue + kf = 0 + end +