From patchwork Fri Sep 2 14:08:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Lange X-Patchwork-Id: 931 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:ecc5:0:0:0:0:0 with SMTP id s5csp750935wro; Fri, 2 Sep 2022 07:10:30 -0700 (PDT) X-Google-Smtp-Source: AA6agR42d8OXzuPy9njVfMb/itSybGXxoInU7KmALv0vy5kVwbEDkgoYulcvm/ZZujSdGhQboOFe X-Received: by 2002:a17:907:84a:b0:733:735:2b1a with SMTP id ww10-20020a170907084a00b0073307352b1amr27052466ejb.290.1662127830332; Fri, 02 Sep 2022 07:10:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662127830; cv=none; d=google.com; s=arc-20160816; b=gWfaOl1rs2m/Jk2Dxrvqob1TiD+lnX1KLl+918+3WlPbwrqy22seaF6OTcYXXCoIMq MADmTyATsegOGiewnbWS2GEvPqHfk4WL7E+MZD99Zww39Q25UJCKK3OE56vDRAQ9Asbh HMizeUK/otGZwT15EusAJpZfThqr5xZ+TcwfAKYpzOJjcDyUl4ulniK4oV7poQK31cc4 M6bls+pAwcyShTD4SsMR9wmMOwRZgwwtPBXEfp6iR/kUbhGSD5S9i6ztlNkUDxxqD/ZF 2hbMUhpyfaa7xc0CAA4DvhhMCoT0vokw/nrKeS4I9RgYCUEn53UqYbm4hkFZMbAoMg2u Fobw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:to:from:dkim-signature :dmarc-filter:delivered-to; bh=Q9ZSlmEPMtYgEuDjPoawT7tbUHynhJ8yn9zQOF1U0Kw=; b=zr9V0e45OTRsq92hSWi252WUUhkmkH+4eOv7PGYdFwN5CF90E9nBgDG/5FL6s9ywWc wJ3/zofzrr9rTRXhthx3xWZUkSyeaUKI3H2A3BZF75q1Kypqq4bL8PtQbjR3SZ62DSih 0xPEU8tqyXd55JNRGHKOH77Ffpbp85kfT35t+/qHNjKGxzjqo8/scp6sA4bts8xaTsFt Ngi3tawnjDuar8JMp3Xo7/w4kITDfPnYN/hPQCoX93BdXbI0OC4+cdqIodg3AIDm1h4W Tmb+xf04EG+b+uMDqDzLq+gsv3iiH8PpZSIQ2VURY8LzSZBHvb9+sI2VNmLIztJsvm6H 8wrA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@tim-lange.me header.s=default2108 header.b="HSb/f8EB"; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id cw18-20020a170906479200b0073160e42274si1763188ejc.718.2022.09.02.07.10.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Sep 2022 07:10:30 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=fail header.i=@tim-lange.me header.s=default2108 header.b="HSb/f8EB"; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B2A63385828B for ; Fri, 2 Sep 2022 14:10:25 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from www523.your-server.de (www523.your-server.de [159.69.224.22]) by sourceware.org (Postfix) with ESMTPS id 2BA563858C54 for ; Fri, 2 Sep 2022 14:10:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2BA563858C54 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tim-lange.me Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tim-lange.me DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tim-lange.me; s=default2108; h=Content-Transfer-Encoding:MIME-Version: Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=Q9ZSlmEPMtYgEuDjPoawT7tbUHynhJ8yn9zQOF1U0Kw=; b=HSb/f8EBvIqD5o2JyQzX9m3OV5 eUToxDDYHZZTrn0QhY4P4VUDlEqqvvqkQeKT+1/I1wleZQYKIVAWMzU9/lBpgRbPXSKYAV+2F3BtL d8QPQlH/SPSsZf7d6KVo7TSh/0Iki4XkTmMEDQO5YflH/yFjNRiauvXz0nitye01J1SzT/VJUjreR up6+VbZl7ljLo+N7XJ/0v65i7hOSBLGpoD4s/yBYlxd1RJYlJbDUXolNEL2jyI/1K8C2Y/C6uwIQQ XrsfcxiOv2VQS1fGYpLifaS98/TQvWRK9eIhVoMTJft7Vvrf7M/DlOFxvD7BuSLY7nB56JcwNTLBy He6B5pFg==; Received: from sslproxy05.your-server.de ([78.46.172.2]) by www523.your-server.de with esmtpsa (TLSv1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.92.3) (envelope-from ) id 1oU7Mt-000FQP-GK; Fri, 02 Sep 2022 16:09:59 +0200 Received: from [2a02:908:1861:d6a0::6b5] (helo=fedora..) by sslproxy05.your-server.de with esmtpsa (TLSv1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oU7Mt-000PcQ-8R; Fri, 02 Sep 2022 16:09:59 +0200 From: Tim Lange To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/2] analyzer: return a concrete offset for cast_regions Date: Fri, 2 Sep 2022 16:08:33 +0200 Message-Id: <20220902140834.11636-1-mail@tim-lange.me> X-Mailer: git-send-email 2.37.2 MIME-Version: 1.0 X-Authenticated-Sender: mail@tim-lange.me X-Virus-Scanned: Clear (ClamAV 0.103.6/26646/Fri Sep 2 09:55:25 2022) X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_INFOUSMEBIZ, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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: , Cc: Tim Lange Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1742867351861787701?= X-GMAIL-MSGID: =?utf-8?q?1742867351861787701?= This patch fixes a bug where maybe_fold_sub_svalue did not fold the access of a single char from a string to a char when the offset was zero because get_relative_concrete_offset did return false for cast_regions. Regrtested on Linux x86_64. 2022-09-02 Tim Lange gcc/analyzer/ChangeLog: * region.cc (cast_region::get_relative_concrete_offset): New overloaded method. * region.h: Add cast_region::get_relative_concrete_offset. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/fold-string-to-char.c: New test. --- gcc/analyzer/region.cc | 10 ++++++++++ gcc/analyzer/region.h | 2 ++ gcc/testsuite/gcc.dg/analyzer/fold-string-to-char.c | 8 ++++++++ 3 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/analyzer/fold-string-to-char.c diff --git a/gcc/analyzer/region.cc b/gcc/analyzer/region.cc index f4aba6b9c88..9c8279b130d 100644 --- a/gcc/analyzer/region.cc +++ b/gcc/analyzer/region.cc @@ -1556,6 +1556,16 @@ cast_region::dump_to_pp (pretty_printer *pp, bool simple) const } } +/* Implementation of region::get_relative_concrete_offset vfunc + for cast_region. */ + +bool +cast_region::get_relative_concrete_offset (bit_offset_t *out) const +{ + *out = (int) 0; + return true; +} + /* class heap_allocated_region : public region. */ /* Implementation of region::dump_to_pp vfunc for heap_allocated_region. */ diff --git a/gcc/analyzer/region.h b/gcc/analyzer/region.h index d37584b7285..34ce1fa1714 100644 --- a/gcc/analyzer/region.h +++ b/gcc/analyzer/region.h @@ -1087,6 +1087,8 @@ public: void accept (visitor *v) const final override; void dump_to_pp (pretty_printer *pp, bool simple) const final override; + bool get_relative_concrete_offset (bit_offset_t *out) const final override; + const region *get_original_region () const { return m_original_region; } private: diff --git a/gcc/testsuite/gcc.dg/analyzer/fold-string-to-char.c b/gcc/testsuite/gcc.dg/analyzer/fold-string-to-char.c new file mode 100644 index 00000000000..46139216bba --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/fold-string-to-char.c @@ -0,0 +1,8 @@ +#include "analyzer-decls.h" + +void test_1 (void) +{ + char str[] = "Hello"; + char *ptr = str; + __analyzer_eval (ptr[0] == 'H'); /* { dg-warning "TRUE" } */ +}