From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by sourceware.org (Postfix) with ESMTPS id 5A0293858D34 for ; Thu, 2 Jul 2020 20:23:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5A0293858D34 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=alves.ped@gmail.com Received: by mail-wr1-f51.google.com with SMTP id s10so29917935wrw.12 for ; Thu, 02 Jul 2020 13:23:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=KCQnhzRefH3fETPkTZh5SihTD3LZyrEdTCSSPmfzkhg=; b=rxdXcK0dDBJoXZvW3h+EgQs92fs9/n4SIdVnPfsO/whQgi/DGOROXUnwH5uz9nKcJh M8V+sE64osW0w1DvMqfQ45WDVnxFho172MrD5NQwNs64MjHLIx3YnT9PL19+6XP60I6E ZMtJzvhT7ioKavioYOMxLxG6KN8HZuK7YpHxzlP5cVqRZp1pS3zNn0Pn9BK50xDEegs2 pKr6O5igeSi/+dqk85YVe6LfqbRbgMJNSvcKotBG6qDQHMFT2hBxz9FPGr4O9PdOz/9X mEe/cDlYdUAp5k7Faxojj+N4Hg4MmVSa4Ge4COtMS6pnf4V+d+7gjYweVXz/7x4rmcyJ 8IwA== X-Gm-Message-State: AOAM533GB52OgwmXY3XsQGQP4Skkgojrt86weeWetFTTo1LLMKCBiQvP 00vtCBRd4UPOIShv9/zLmgagV0w40brKBg== X-Google-Smtp-Source: ABdhPJyBzBOxX5kJ4GsKp4b1xngEAbcf64aRDwQOQIGJsw6f+RxT3Fts4/Z8prxjY3ewLcUJzNwzqg== X-Received: by 2002:a5d:4ac3:: with SMTP id y3mr32017121wrs.133.1593721436455; Thu, 02 Jul 2020 13:23:56 -0700 (PDT) Received: from ?IPv6:2001:8a0:f922:c400:56ee:75ff:fe8d:232b? ([2001:8a0:f922:c400:56ee:75ff:fe8d:232b]) by smtp.gmail.com with ESMTPSA id x11sm10975979wmc.26.2020.07.02.13.23.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 02 Jul 2020 13:23:55 -0700 (PDT) Subject: Re: [PATCH] Make out of range type conversions explicit To: Gary Benson , gdb-patches@sourceware.org References: <1593525480-5685-1-git-send-email-gbenson@redhat.com> From: Pedro Alves Message-ID: Date: Thu, 2 Jul 2020 21:23:52 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 In-Reply-To: <1593525480-5685-1-git-send-email-gbenson@redhat.com> Content-Type: multipart/mixed; boundary="------------5745E39E0BCAFF04C9E635F0" Content-Language: en-US X-Spam-Status: No, score=-8.5 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jul 2020 20:24:00 -0000 This is a multi-part message in MIME format. --------------5745E39E0BCAFF04C9E635F0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 6/30/20 2:58 PM, Gary Benson via Gdb-patches wrote: > HI all, > > Clang fails to compile two testcases with the following warning: > implicit conversion from 'X' to 'Y' changes value from x to y > [-Wconstant-conversion]. This patch adds casts that make the > value-changing conversions explicit. It's helpful if you show the full error. Like: gdb compile failed, /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/charset.c:144:20: warning: implicit conversion from 'int' to 'char' changes value from 162 to -94 [-Wconstant-conversion] 11, 162, 17); ^~~ /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/charset.c:151:16: warning: implicit conversion from 'int' to 'char' changes value from 167 to -89 [-Wconstant-conversion] 167, ^~~ /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/charset.c:168:16: warning: implicit conversion from 'int' to 'char' changes value from 167 to -89 [-Wconstant-conversion] 167, ^~~ 3 warnings generated. === gdb Summary === # of untested testcases 1 Above, I think a better fix would be to change init_string to take unsigned char parameters, since we're really passing down raw bytes. The other one is: ~~~~~~ gdb compile failed, /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/structs2.c:16:14: warning: implicit conversion from 'int' to 'signed char' changes value from 130 to -126 [-Wconstant-conversion] param_reg (130, 120, 33000, 32000); ~~~~~~~~~ ^~~ /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/structs2.c:16:24: warning: implicit conversion from 'int' to 'short' changes value from 33000 to -32536 [-Wconstant-conversion] param_reg (130, 120, 33000, 32000); ~~~~~~~~~ ^~~~~ 2 warnings generated. WARNING: Prototypes not supported, rebuilding with -DNO_PROTOTYPES gdb compile failed, /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/structs2.c:16:14: warning: implicit conversion from 'int' to 'signed char' changes value from 130 to -126 [-Wconstant-conversion] param_reg (130, 120, 33000, 32000); ~~~~~~~~~ ^~~ /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/structs2.c:16:24: warning: implicit conversion from 'int' to 'short' changes value from 33000 to -32536 [-Wconstant-conversion] param_reg (130, 120, 33000, 32000); ~~~~~~~~~ ^~~~~ 2 warnings generated. === gdb Summary === # of untested testcases 1 ~~~~~~ Here, param_reg's prototype is: static void param_reg (register signed char pr_char, register unsigned char pr_uchar, register short pr_short, register unsigned short pr_ushort); pr_char and pr_short are signed, so how about just passing down negative numbers. That's what the testcase expects GDB will show: gdb_test "continue" \ ".*pr_char=-126.*pr_uchar=120.*pr_short=-32536.*pr_ushort=32000.*bkpt = 1.*" \ "structs2 continue2" I think it's best to push fix each testcase in its own commit. See patches attached. --------------5745E39E0BCAFF04C9E635F0 Content-Type: text/x-patch; name="0001-Fix-gdb.base-charset.exp-with-Clang.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-Fix-gdb.base-charset.exp-with-Clang.patch" >From c28e13dcfba073df759db149c70f3512d47b287a Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 2 Jul 2020 15:54:36 +0100 Subject: [PATCH 1/2] Fix gdb.base/charset.exp with Clang gdb.base/charset.exp fails to run with Clang, because of: gdb compile failed, /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/charset.c:144:20: warning: implicit conversion from 'int' to 'char' changes value from 162 to -94 [-Wconstant-conversion] 11, 162, 17); ^~~ /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/charset.c:151:16: warning: implicit conversion from 'int' to 'char' changes value from 167 to -89 [-Wconstant-conversion] 167, ^~~ /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/charset.c:168:16: warning: implicit conversion from 'int' to 'char' changes value from 167 to -89 [-Wconstant-conversion] 167, ^~~ 3 warnings generated. === gdb Summary === # of untested testcases 1 Fix it by changing init_string to take unsigned char parameters. --- gdb/testsuite/gdb.base/charset.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/gdb/testsuite/gdb.base/charset.c b/gdb/testsuite/gdb.base/charset.c index ec4927da515..20d548b1928 100644 --- a/gdb/testsuite/gdb.base/charset.c +++ b/gdb/testsuite/gdb.base/charset.c @@ -77,12 +77,21 @@ short short_array[3]; int int_array[3]; long long_array[3]; +/* These are unsigned char so we can pass down characters >127 without + explicit casts or warnings. */ + void init_string (char string[], - char x, - char alert, char backspace, char form_feed, - char line_feed, char carriage_return, char horizontal_tab, - char vertical_tab, char cent, char misc_ctrl) + unsigned char x, + unsigned char alert, + unsigned char backspace, + unsigned char form_feed, + unsigned char line_feed, + unsigned char carriage_return, + unsigned char horizontal_tab, + unsigned char vertical_tab, + unsigned char cent, + unsigned char misc_ctrl) { int i; base-commit: c2ecccb33c307faa21f4d2f47348e7346b032d94 -- 2.14.5 --------------5745E39E0BCAFF04C9E635F0 Content-Type: text/x-patch; name="0002-Fix-gdb.base-structs2.exp-with-Clang.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0002-Fix-gdb.base-structs2.exp-with-Clang.patch" >From f10f83231bcf196cf80c8214f6460484e330f97d Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 2 Jul 2020 19:32:40 +0100 Subject: [PATCH 2/2] Fix gdb.base/structs2.exp with Clang gdb.base/structs2.exp fails to run with Clang, because of: gdb compile failed, /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/structs2.c:16:14: warning: implicit conversion from 'int' to 'signed char' changes value from 130 to -126 [-Wconstant-conversion] param_reg (130, 120, 33000, 32000); ~~~~~~~~~ ^~~ /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/structs2.c:16:24: warning: implicit conversion from 'int' to 'short' changes value from 33000 to -32536 [-Wconstant-conversion] param_reg (130, 120, 33000, 32000); ~~~~~~~~~ ^~~~~ 2 warnings generated. === gdb Summary === # of untested testcases 1 Fix it by passing actual negative numbers. --- gdb/testsuite/gdb.base/structs2.c | 2 +- gdb/testsuite/gdb.base/structs2.exp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gdb/testsuite/gdb.base/structs2.c b/gdb/testsuite/gdb.base/structs2.c index 7c8be035221..aac7bce8c15 100644 --- a/gdb/testsuite/gdb.base/structs2.c +++ b/gdb/testsuite/gdb.base/structs2.c @@ -13,7 +13,7 @@ main () bkpt = 0; param_reg (120, 130, 32000, 33000); - param_reg (130, 120, 33000, 32000); + param_reg (-120, 130, -32000, 33000); return 0; } diff --git a/gdb/testsuite/gdb.base/structs2.exp b/gdb/testsuite/gdb.base/structs2.exp index 8a7d9c69378..5722be3109c 100644 --- a/gdb/testsuite/gdb.base/structs2.exp +++ b/gdb/testsuite/gdb.base/structs2.exp @@ -49,5 +49,5 @@ if [test_compiler_info gcc-3-*] { setup_xfail hppa*-* gcc/15860 } gdb_test "continue" \ - ".*pr_char=-126.*pr_uchar=120.*pr_short=-32536.*pr_ushort=32000.*bkpt = 1.*" \ + ".*pr_char=-120.*pr_uchar=130.*pr_short=-32000.*pr_ushort=33000.*bkpt = 1.*" \ "structs2 continue2" -- 2.14.5 --------------5745E39E0BCAFF04C9E635F0--