From patchwork Thu Oct 28 21:03:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 46762 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3F52C3857818 for ; Thu, 28 Oct 2021 21:03:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3F52C3857818 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1635455034; bh=ZVUO+2Kzn1WwdxMHZ9st+D3GcTWGxPSSKFU+msiOPoY=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=wkRlMw4Yw2KiFA6ANKWAQQUF8uaq7OC2/3BRfzkKIxHl90E+kKg6TlFSYWbGeXpuN BOahw5W1GzEqrmwQ1XfvFJs+gjjIpL2HrJiXXb5lkoGN4PLq6PA7cuEj5PtmwhhBc8 6tYb+hRm3ldyNlTX2SJhlM6a9dF11mKyWm3vBg9E= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by sourceware.org (Postfix) with ESMTPS id 090A13858405; Thu, 28 Oct 2021 21:03:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 090A13858405 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.15.9] ([79.251.15.9]) by web-mail.gmx.net (3c-app-gmx-bap70.server.lan [172.19.172.170]) (via HTTP); Thu, 28 Oct 2021 23:03:05 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/99853 - ICE: Cannot convert 'LOGICAL(4)' to 'INTEGER(8)' (etc.) Date: Thu, 28 Oct 2021 23:03:05 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:3xAIzu4COl0lGxarQHctbvKtvXf5l6XLQEisDLk+dL7XWb+z4Q62dr53wIpPEoOy1iX7Q ZMcIyJMhQI5SNsqEa5ATMSypxSeEgiSdI6SgUnAav+GPZKZPE+FbLAAqF+z9heXeN9RRfSxteVRF +sOKBTOgwrcCThi6JdrgzjapwE9U/RgXKgt8gYoUxt0PgGE+O9c+286Mx6WJKY45nODN3iF4kq9h lMdeZ1Z0CYeiUfaDY2atX+Qq9cPR0+hAH1G+dAtt1zJSUoXzHM/bhsgbuJCnZuNomQp/U3uBllFc eo= X-UI-Out-Filterresults: notjunk:1;V03:K0:f/i1f5zp8aQ=:OQrmAjIDiMCJyq1nSSW2MV /i62+80wGxqllET5tDgKrjgPiSl3qGV0DAZxx6mApmcR9ePozl+zsKq91y3tksAyI/PvgA6zi cLbd/ndF3jtYT12dV8dKL2eW1bdcrbQCgOtQnjfNTaDG0bzvepHte6vTojOmk3Kk5JQG4Y9ZO rCae90e337Y4quoaBs6g7HVrGq7kb2a3yGMIp86htU+VODfW2KsJBm/QsidAFR8bdFF+G6UiR uNjWQLLsFWZBnvkKyzlazSL6G7M4IrSkLwANWY94lsRW80lO7SX/PWsOHIkjpR5TRRLvs2kYd 275ENwBRLpQEU+aYv1G6ui8W7eTsJNCd2dgD087z1ZP04GNYfZ/O0i7r4rrD/8C0SDixOvHrR tvrOEfws6WlF8R67OEHK8tYMkt+MuYwsTnhD7aVKSGbsLD5NeYnmuwoajN/hfbj5oXHWQJZdZ XoJ/vBWGCtZyCz7KtVo+5yD9RsUcCGqf7yMksSjln3DCnepyMmuxbLVO1BkOxqv6xXbprNAND WYXCEQpNYNPdTlC4kYQGtjILn2Ks3NWPOpZTgN4IrR5rktrjCtYnXKJgYsgNuxABCtKo+/JwD 95Vv6HA2QjbnwzgeerWi2hpqC319hVkwlvJbZeHU8urgmFINl+8loRfkJvs8ok5wqJ3wjwrvo acoeRMEls4pJum9qu1sLM8KJxLmEFPKkouVQ+3dJB8CZxurGVLILuSx7xJfsQjFGKyJgchWSQ CKe1TCpyi7eHTJNiHSgaGMUbMfP6XNRUn9GyZKmFftwBWxWHpXcnNo6Dvmy740z/j9vh+P/eZ DU0zqC2 X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Harald Anlauf via Gcc-patches From: Harald Anlauf Reply-To: Harald Anlauf Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Dear Fortranners, the original fix by Steve was lingering in the PR. We did ICE in situations where in a SELECT CASE a kind conversion was deemed necessary, but it did involve different types. The check gfc_convert_type_warn () was invoked with arguments requesting to generate an internal error. A regular gfc_error is good enough here. Regtested on x86_64-pc-linux-gnu. OK? Thanks, also to Steve, Harald Fortran: generate regular error on invalid conversions of CASE expressions gcc/fortran/ChangeLog: PR fortran/99853 * resolve.c (resolve_select): Generate regular gfc_error on invalid conversions instead of an gfc_internal_error. gcc/testsuite/ChangeLog: PR fortran/99853 * gfortran.dg/pr99853.f90: New test. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index af71b132dec..8da396b32ec 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -8770,11 +8770,11 @@ resolve_select (gfc_code *code, bool select_type) if (cp->low != NULL && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low)) - gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0); + gfc_convert_type_warn (case_expr, &cp->low->ts, 1, 0); if (cp->high != NULL && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high)) - gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0); + gfc_convert_type_warn (case_expr, &cp->high->ts, 1, 0); } } } diff --git a/gcc/testsuite/gfortran.dg/pr99853.f90 b/gcc/testsuite/gfortran.dg/pr99853.f90 new file mode 100644 index 00000000000..421a656bec2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr99853.f90 @@ -0,0 +1,29 @@ +! { dg-do compile } +! { dg-options "-std=f2018" } +! PR fortran/99853 + +subroutine s1 () + select case (.true.) ! { dg-error "Cannot convert" } + case (1_8) ! { dg-error "must be of type LOGICAL" } + end select +end + +subroutine s2 () + select case (.false._1) ! { dg-error "Cannot convert" } + case (2:3) ! { dg-error "must be of type LOGICAL" } + end select +end + +subroutine s3 () + select case (3_2) ! { dg-error "Cannot convert" } + case (.false.) ! { dg-error "must be of type INTEGER" } + end select +end + +subroutine s4 (i) + select case (i) ! { dg-error "Cannot convert" } + case (.true._8) ! { dg-error "must be of type INTEGER" } + end select +end + +! { dg-prune-output "Cannot convert" }