From patchwork Tue Nov 15 16:09:21 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Szabolcs Nagy X-Patchwork-Id: 82364 Delivered-To: patch@linaro.org Received: by 10.140.97.165 with SMTP id m34csp1605202qge; Tue, 15 Nov 2016 08:10:00 -0800 (PST) X-Received: by 10.107.132.74 with SMTP id g71mr30882373iod.19.1479226200183; Tue, 15 Nov 2016 08:10:00 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id n12si16158231ioi.71.2016.11.15.08.09.59 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 Nov 2016 08:10:00 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-441483-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org; spf=pass (google.com: domain of gcc-patches-return-441483-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-441483-patch=linaro.org@gcc.gnu.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:content-type; q=dns; s=default; b=GZRHqmW7SKmzUW7+p3CbOSkS7ARv9Md7JIQVhr2sRZj T56H4i4vMSoaMnDf91zorbuvp1DDN7zwz9pOv6y5zY3oDFk7s9HHw8GTkXFMyC5w IDmuH2veL7jKXTCHAtIpK1GnLTd4RSqrSDSajHmuawa56HgNYjMmKOLFPTWyP/dw = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:content-type; s=default; bh=sDMComvT1Ock0KiEdqxsgIRu2DQ=; b=E867tBaNMbj1c1Fkm oskEpXG2hBt6YVwMpG2VlWewVqal5e+hOb4WGtK3p5KER/vBbJDNhOn0QHvBshyg YI2ayGCgrboPnHjsuBWqNdmyoa//gOGyivklz7vvR4NO60M2WD8RZgNjKIdMVncQ mYJJP2umTKkRWzzmnMkJ6S/AjI= Received: (qmail 68618 invoked by alias); 15 Nov 2016 16:09:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 68585 invoked by uid 89); 15 Nov 2016 16:09:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=unsuccessful, 59, 7, Hx-spam-relays-external:sk:EUR03-A, halt X-Spam-User: qpsmtpd, 3 recipients X-HELO: EUR03-AM5-obe.outbound.protection.outlook.com Received: from mail-eopbgr30061.outbound.protection.outlook.com (HELO EUR03-AM5-obe.outbound.protection.outlook.com) (40.107.3.61) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 15 Nov 2016 16:09:29 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Szabolcs.Nagy@arm.com; Received: from [10.2.206.73] (217.140.96.140) by HE1PR0802MB2154.eurprd08.prod.outlook.com (10.172.126.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.659.11; Tue, 15 Nov 2016 16:09:26 +0000 Message-ID: <582B3331.30402@arm.com> Date: Tue, 15 Nov 2016 16:09:21 +0000 From: Szabolcs Nagy User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" CC: , , Subject: [PATCH][PR libgfortran/78314] Fix ieee_support_halting X-ClientProxiedBy: DB5PR08CA0058.eurprd08.prod.outlook.com (10.166.166.154) To HE1PR0802MB2154.eurprd08.prod.outlook.com (10.172.126.14) X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2154; 2:qGEvsvcIn8E4DssBIanklq/SZov1/QT1AWxTQzzJTpchWqGRY/GYUm1fvBXtz3TL7YDXR85SdoZkipaUmjn5UQ4tG3XzS7/P7Vavbi052Yk4uU5orIwJfAvTJ1uJOLN+XarBhwp6RHONLhYP+IbjexRIlkV6E2oVYR/IlJ3BMI0=; 3:w9v5o6XHhSX6TNhyNMsMoY4+y/uu94qwXY6qcrEOuXWzcYUc63RCw41fDGiWrzOusEsVnk2hCusqL6kQpS4ShWUCPOXp3YxnRLhJMzmISV0WnSrwHWiJnDJ3peQ1JqhW5M7QvCRQeXouA7hv1uAy2rU9quzxzdEqSc6CFeZ0FbA= X-MS-Office365-Filtering-Correlation-Id: 95ed161d-b582-4e91-b88f-08d40d71c5ab X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:HE1PR0802MB2154; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2154; 25:l62ASRBx1etX2MP38QDcBQPyP8LRRdLetOpMw5eFkDiF418m/FtPlWQc9oSoLKtQjTsl46egZLzcrMPUDnuy2q6tshKbRISGeFj2oEz5K88Fevy1DCdTHzbrKBbyuKWCNQuVHrvbM1ItRoDvqY8tLTNYZfQbyp/ee/SsZqdJ+ONixnc3dy0wx+V+ASnSkXpSrGcfpuQvExgaz2qHEkCPbM6GzlcZB0asPsg/jgvBuCIQxFGCUrfdcc6CQw2wObma1UUqP+6eofmU/0obyyXWrZh+zWIhy+csl2Baqce3rMDJTnBjvChShfVcb082iyX/S2xh4nSM1eiQfcTldxDoL48RddSfnt6/OdBpQIcG++2WWTsblcu1Q9Onr0EnI6TIS6W2VZpuj2SjF+BnaPTz7CxX/gr5vHfXCIKY47YyTV1d2E387o6V82cwqxqi3IXTb14jYDsNznUffKeLkxj+ZIRKpT//YgDvhzcZAZMMRKV1Qlpr6HYgMVlnk6mkvahfXO1H0LYTHyPRdb8VDc0doBpLdfFJ0zZGqNkMBZTNLZ2L2PT3Sgc1jOCs4/5xcLIRsTWnwkz7BR6jI6dzql2qxdT+plyOM9YBvCLHzs9lhrBKbyqaGXp3twflLDUXOiOfTUFNU0jCo2yNTSSssNhJ6O90f2WSmuFLaIZluVkYs/eGaryVHbvNOPQlut8RQfYRnLXU+peTL/IckAo3IclY+XWAAo7IHn7xtVEjoVdABQkz3MCJqAunME1sOecLFKZngLMLOj0NLeH3tByfpYKb6POlho3vgkFj5fTAuyMIUpFkUTaqO16iU4pwyVB4dG5TW9vb+srAB9dwg3XJVJIi0Q== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2154; 31:iRiwVDWTulcxM4ln7wDAlF2LYPxu3VXTidfpvfb2Gzt6H1RV1v4zKlKfXt3eVKOsY7/p3FZ03vpe98kCPeMct/5SEfN04HRRSVNXpzFheZManmqIFVFOijCuDUUCtWfMADik7rEirIvvDSIUEmfIXTxws+nLILDLqRoGhCo+J3c6m4lzez8lrDH6QADOCVLuqoPdCSTVyzkT9voyL4caGY3zjiSK5fB4iY7PX/RkKVGi8P+ka9acYo6jzBW3S+v46YGUDVYUMJXTN/ZWxtCDXtVj8PS8ZyzDTkvHQ1cKMIY=; 20:W3PRwOtIueweVlwRnlfk0uQ0g4+YOJ0wNY1K0R2hVFWNh5SHMaB1VANCvltV6tlXVRldzeKRxZ9+DRhOb+7DiXJzy+ikQyKiEgJjgGSHQcGL1ILAtQ/QsVquYGa85YQMQjtfnxyoaH3vKV4vAjcuILup3y7qwaYYcz8xOL+Dqms= NoDisclaimer: True X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(20558992708506); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415395)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6055026); SRVR:HE1PR0802MB2154; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0802MB2154; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2154; 4:q+l399lfjg78HNnmZfmuHhGRFe6pjppsVTDZ2zNe3wU/UDoME4g9J808sGRZwvbAdUvc6RxcwyqOx9gDcUD8xZUKV134o3HbNpC2B/O5HRbjgbPnfnhI06yZvGlDF9Q8jOBlsaTN99GLiPIPG4j6D8An8blEQpebZ6FcFHJK0S+HbFwnOtNLerFkLvNMijncadPjNykWrdNkaPn49AWaMd3Ey/RyQ4Sn+v0kBv5x+iEBWPL0VOsLE8AR45+J0mt4nivzhBdmC6dfUhp1XCFrDPFvkIl6oU/wc/Xk4vQLzqv76i532dUpAX1RqcmjRbZJ/KMH88QY5IPM237OjfCxb1FQiu4eFqkbPlCZzotpXKMERXHu0FRhr1rBvU4ANZshRivbDP91QfRGfAgy/eVADgrNsvUC4BOecD6DSNtcEI9o3xwnZe+tE2FIOVVwYD5TKIGx5A+k6PmKHvSBt4CJh7XykDB4aWInBDQNsLXSuqEG3KMNPIk/I7yHQWkTWVvH X-Forefront-PRVS: 012792EC17 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(6049001)(7916002)(199003)(377424004)(189002)(568964002)(65816999)(81156014)(2351001)(65806001)(6666003)(5660300001)(270700001)(106356001)(105586002)(2906002)(7846002)(101416001)(4001350100001)(42186005)(50986999)(7736002)(97736004)(4001150100001)(6916009)(450100001)(305945005)(81166006)(21490400002)(54356999)(8676002)(77096005)(2501003)(65956001)(5000100001)(36756003)(92566002)(83506001)(64126003)(189998001)(4610100001)(84326002)(3846002)(6116002)(2476003)(33656002)(512874002)(4326007)(66066001)(110136003)(86362001)(68736007)(5890100001); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0802MB2154; H:[10.2.206.73]; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2154; 23:Z5mnXwCH3Zl7+qYfiIRONkkS0InZzsKHOkAGXeG?= =?us-ascii?Q?dXMUS/BTk/nyMaT6lY8eELjTepwlSbVIKybGfsukedCqUrGUZYlpc/zyraui?= =?us-ascii?Q?pFVVsw0RKUiAdOtpVNHfViRXrAA+Kao3R6gR9KFZQ33x64OTzCetX3vZ0ibX?= =?us-ascii?Q?g+bqCoQr6Az+9xq/FBmS3JJzzIqGx4PMdTF+gfWFGt0/AaUH7f/ieF41Lxn9?= =?us-ascii?Q?XWm/EAAZzoWTvhTMhUVGyS8dCtH8V6WcypSatcfM8w1csWYZIqSwcY9zfuvr?= =?us-ascii?Q?5V9CXD1W5f1R1Cp+glXh0a3a80hthF6FH/AaCYvejKgXJVYHeAgP5q/jY18A?= =?us-ascii?Q?m2OAMAnfEjBdWMPX4rY768rfW7aFfDDiThh8937Oinh+p1mm+RlurGq0NHHI?= =?us-ascii?Q?WzvA/uFBVv9kxFbtV8hxzPhG2O6HeDKejyu9xiE6dMxvutTKAhRGExicCFeV?= =?us-ascii?Q?B4ghPv+EKfq8h33ZMzZDz8c0Rq/B1M1PngQf0eLsKXMscRZmnHUXyw/xUPVC?= =?us-ascii?Q?hXu2Dtz/Z1Vom6eIPJ/lliYeltURXSBHU8USudcxZCkF4DAJyguv75MqAUnk?= =?us-ascii?Q?4MVIbW7tpueixupCPV9WmgkrTBrRjFrjMAWJ5Hl8IrAG6twTSHawuyAU9B2M?= =?us-ascii?Q?jLp6bUxfke53DfV0iCir77h3fmDhAXWVfuxWCrbG+Y5r4ok5Kaa/FapgSDFO?= =?us-ascii?Q?yZydos0D2LHTUNfdXri6r/93bsyoPDZYKGpZxREWoI/MpQObhwWjCpNLqMbD?= =?us-ascii?Q?7SB9dLfs5txSHrl1Y4lz1CPAf3P3p+msmFJqTahF6e/WFhUgjotDE7rsNePf?= =?us-ascii?Q?rLHeU2eIASAExCH8GwVH72nDcyA3wkBIcEYNjsIkOgHPjeYzekPYeRwRxGct?= =?us-ascii?Q?+z+Q2JqZ4I799fAgKfcoQnrE1n2zTYkdh9asJztLWjiO8U/bPCzJ0MtTXZow?= =?us-ascii?Q?dPvnp3Sd/4oPel7O/9IyDftVyn77nCP+1+s3PJsw6ItoWYXizxnE6L7xbJOQ?= =?us-ascii?Q?o/Nx4/QFYPy9reB+SmPgQQuBdI9gbhdlTjBZGrXaYuA5XOxxR4jRLuvMFVgj?= =?us-ascii?Q?HnWVamx8ZhIDP224iqAxXREY0WnyZttWAQiQY3raCySbKZfLqAfjB/inqIPR?= =?us-ascii?Q?oap/bjjB1Sng18CJZAkWdQSTA1JIbz1YR2uDTea3iipaDufLafkXyoecvU7/?= =?us-ascii?Q?tMw02EnMsWOphgPRaVyebBOufVtLuuxlr3hUqr6iLdRwCsJrTXM5ZFQujuyb?= =?us-ascii?Q?H6to0gkki5iQRwl8Dd7EUfozODe7hSGbU6q+U/4to5LsxVf/EN2d3NCKYwY0?= =?us-ascii?Q?LV7Ozt2IGdcJTQcctOBoVNhNP/CpGING9Ts1ciZuUu3jZnZo59SFtZEnAyub?= =?us-ascii?Q?Xts/JJPorP7DxetlrCbpB8ddgEUc=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2154; 6:wooUCOIvxy56PTaFQXJFHldW3kaHaMNyzQTAQJLvA8a+S9L5tSHMQ9uLrfAtm36PivlRMUO9jfx13ftyzUpXfsGEmiAm2q8/uLdvafvthAhdGLnFqnimWMS84r4p+YowKJf8YaU3tepT8s+6O5SwrQbDYMFbAcD7wHI6geFgXeR3lLeacnccuEnW7eNJE3M8XbTlXPrxk2vcymLnRL9bDOoB4gCV0YM0/FnHoQjfOO/3sxi9RDSrt+pt3hx97p+DT17+s18AqBuNNu1vymeQb/WNi6SXhTvGVkSnkCOBY0b8cQ3xjQ2iDiVXAhPOpTInmitP2wm5fqEA7KQq4NXVoQ==; 5:1nmF7nt5JB2x34ttUxVa0PgQFomEwpCBt50cr8LN6yv2hfR+EdD3Lou8jNrrkZX/zxZOG6tUlEGUgC7LGiYecvG9B8Vnsq7EVQcjfMxB/sDCIBfFOkG1Wkle2pfI7m3SKDlNiTZ+//B7XPms+qnPxzqyLeMwyZnwXKOIzxLU7BE=; 24:tL/yg+EYSXUOt6e99Rc6M5HEEsfouKl6tN3UnXWUThRiHWvzc9cMe2WuViEmHlMdFxekoLGqEn/HsKFXhDarxrf1mrmaj832vee/weSijVQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2154; 7:OyWneEL786kJB0AlTew1XmglpSK1JuML+TTHtP3Tbz3Hmjhgcz2ZLXb3WPAT6FcqlhGpYOc3IqP4E7OKKjUBRi5yK8zC5If6xAYhu+OkGAS2ZRFQ5e0vgk+KdwC5ZBwoD8gMnpXCk1HeVcXZfy2sn3+AdaiTqMQCyecTEyu4P9GohlKHlOf+Em89IYwROwNyk0Yhxq8yzNjyt3rH5gxu5WTunUUX5DmJYmBZB3HVCfeCleaLdAj2RPoIUn4GiGPm8GrvBkei8hWyGNS3i3kvVZ+DABksaQFY8VJ8NnhT4VkQRr1xYmsGw75PKfOfrpOibqCSPk/bnALag6VcHNS6s78F3uRML+dqvp6psX10K2k= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Nov 2016 16:09:26.0850 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2154 X-IsSubscribed: yes When fpu trapping is enabled in libgfortran, the return value of feenableexcept is not checked. Glibc reports there if the operation was unsuccessful which happens if the target has no trapping support. There seems to be a separate api for checking trapping support: ieee_support_halting, but it only checked if the exception status flags are available, so check trapping support too by enabling and disabling traps. Updated the test that changed trapping to use ieee_support_halting, (I think this is better than XFAILing the test case as it tests for things that work without trapping support just fine.) Tested on aarch64-linux-gnu and x86_64-linux-gnu. gcc/testsuite/ 2016-11-15 Szabolcs Nagy PR libgfortran/78314 * gfortran.dg/ieee/ieee_6.f90: Use ieee_support_halting. libgfortran/ 2016-11-15 Szabolcs Nagy PR libgfortran/78314 * config/fpu-glibc.h (support_fpu_trap): Use feenableexcept. diff --git a/gcc/testsuite/gfortran.dg/ieee/ieee_6.f90 b/gcc/testsuite/gfortran.dg/ieee/ieee_6.f90 index 8fb4f6f..43aa3bf 100644 --- a/gcc/testsuite/gfortran.dg/ieee/ieee_6.f90 +++ b/gcc/testsuite/gfortran.dg/ieee/ieee_6.f90 @@ -9,7 +9,7 @@ implicit none type(ieee_status_type) :: s1, s2 - logical :: flags(5), halt(5) + logical :: flags(5), halt(5), haltworks type(ieee_round_type) :: mode real :: x @@ -18,6 +18,7 @@ call ieee_set_flag(ieee_all, .false.) call ieee_set_rounding_mode(ieee_down) call ieee_set_halting_mode(ieee_all, .false.) + haltworks = ieee_support_halting(ieee_overflow) call ieee_get_status(s1) call ieee_set_status(s1) @@ -46,7 +47,7 @@ call ieee_get_rounding_mode(mode) if (mode /= ieee_to_zero) call abort call ieee_get_halting_mode(ieee_all, halt) - if ((.not. halt(1)) .or. any(halt(2:))) call abort + if ((haltworks .and. .not. halt(1)) .or. any(halt(2:))) call abort call ieee_set_status(s2) @@ -58,7 +59,7 @@ call ieee_get_rounding_mode(mode) if (mode /= ieee_to_zero) call abort call ieee_get_halting_mode(ieee_all, halt) - if ((.not. halt(1)) .or. any(halt(2:))) call abort + if ((haltworks .and. .not. halt(1)) .or. any(halt(2:))) call abort call ieee_set_status(s1) @@ -79,6 +80,6 @@ call ieee_get_rounding_mode(mode) if (mode /= ieee_to_zero) call abort call ieee_get_halting_mode(ieee_all, halt) - if ((.not. halt(1)) .or. any(halt(2:))) call abort + if ((haltworks .and. .not. halt(1)) .or. any(halt(2:))) call abort end diff --git a/libgfortran/config/fpu-glibc.h b/libgfortran/config/fpu-glibc.h index 6e505da..e254fb1 100644 --- a/libgfortran/config/fpu-glibc.h +++ b/libgfortran/config/fpu-glibc.h @@ -121,7 +121,43 @@ get_fpu_trap_exceptions (void) int support_fpu_trap (int flag) { - return support_fpu_flag (flag); + int exceptions = 0; + int old, ret; + + if (!support_fpu_flag (flag)) + return 0; + +#ifdef FE_INVALID + if (flag & GFC_FPE_INVALID) exceptions |= FE_INVALID; +#endif + +#ifdef FE_DIVBYZERO + if (flag & GFC_FPE_ZERO) exceptions |= FE_DIVBYZERO; +#endif + +#ifdef FE_OVERFLOW + if (flag & GFC_FPE_OVERFLOW) exceptions |= FE_OVERFLOW; +#endif + +#ifdef FE_UNDERFLOW + if (flag & GFC_FPE_UNDERFLOW) exceptions |= FE_UNDERFLOW; +#endif + +#ifdef FE_DENORMAL + if (flag & GFC_FPE_DENORMAL) exceptions |= FE_DENORMAL; +#endif + +#ifdef FE_INEXACT + if (flag & GFC_FPE_INEXACT) exceptions |= FE_INEXACT; +#endif + + old = fedisableexcept (exceptions); + if (old == -1) + return 0; + + ret = feenableexcept (exceptions) != -1; + feenableexcept (old); + return ret; }