From patchwork Thu Dec 21 07:23:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Prathamesh Kulkarni X-Patchwork-Id: 122512 Delivered-To: patch@linaro.org Received: by 10.140.22.227 with SMTP id 90csp532194qgn; Wed, 20 Dec 2017 23:23:56 -0800 (PST) X-Google-Smtp-Source: ACJfBoucepOK4vUEH4NY51iiUPPqNEF8Lv5PdyHWTg2oSXtriZfT0WaDnadgyA9/mU6ZhMDMuN1c X-Received: by 10.98.20.74 with SMTP id 71mr9653711pfu.77.1513841036666; Wed, 20 Dec 2017 23:23:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1513841036; cv=none; d=google.com; s=arc-20160816; b=nD7AC/o8PfpKo6MM61lT9oE6gcy7aQl1+fou4WQYoy9VqpaI9j+nkrvXiS/NrFwoe5 jU8wd1oXYO0UZPhs4VX/gOab2QBkRSmfhgMeY/ABuKeeW7etvLu4rx0fvVpwHI50KKvl r2PBqBVHbOnvqMr8L2X7vOLUk6N53Ocm2fQo+zLo4kz5+n9nS0K02WRP6y0uU4YR1nCK xtqNuxwgSvSwvytkrQSrbpQPoKc+o4ni9MNh25g6K5zWeVVxkvpoNSUyOUhTG+1cWohg Zf0URlwqNUCkugvfG8XmL55Q/Y8+Fx7vIdTpPTWPgJYUNm2C/KKLyb3rUp1mDRoI+Qbp H8+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=to:subject:message-id:date:from:mime-version:delivered-to:sender :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:mailing-list:dkim-signature:domainkey-signature :arc-authentication-results; bh=b4TXQ6Avf48t67X5qhVqQ1nfMOe2T91rP4SqFU8q8fc=; b=Zqk62BHQ+pIQaaF6PKEf3j9As4TGoaAoE0NbJHK8fPr7cBrrWsaG/yq5HIXdbTC7F5 HkpZHU8hSaER1T3gGi3Z+LKuL/vhw73zeboLUoGgbz1MSk1E6rs5aVd+jtKbm85chcRJ lDLXz7EInVh2gq4ki/eYey7IkD49Y+G2AVgZLQdLMIbtZ1SKH7eK2tmMK275ZFmWJJSv /2rHDyZU1PD07VypVVpZ8wYjK2puWizE2APpnRoNXpu1AlLnruvnrUf+7tIbqahygGYv f+9JIjgqXjf3RKzmWuj9vz1jw56L0kGoAb3FUnUKteoeUZy0rWxhbK67jWik+5VzAdoZ U36A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=C+XsKJmD; spf=pass (google.com: domain of gcc-patches-return-469712-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-469712-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id s17si14298561plp.176.2017.12.20.23.23.56 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Dec 2017 23:23:56 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-469712-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 header.s=default header.b=C+XsKJmD; spf=pass (google.com: domain of gcc-patches-return-469712-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-469712-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:content-type; q= dns; s=default; b=QCNNCv9DP+adHPM3Fxcvg8BEAxoJoeXEpv2scytFTvIezQ v1H3fMgMgD3beZL0PJm4r1vu8yk1jeAZk3g+U+CKh6vc2Qdy3QTwK3RzoNHjVuhu SmCp02M1ErYZNpr4rQdp0DlIpG+eQ5sAt4RjnJIfYCHQvdGXHwmR/9z7j7rt8= 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 :mime-version:from:date:message-id:subject:to:content-type; s= default; bh=bT55y1upUA93D6BiXwweea/3dpo=; b=C+XsKJmDN8xnGMpJEJyn uyoqaXcGlGpdR21TXoSaaZArWftMrRxh1lGcQDYFELaXb8TiH7bSibnH0NnCav5A EDk9SbwqnIqKmzEUpMYNx+2kRRslPD/ifQwWcE3kWk0q6QFT/Js9UWt5CwcPKT1S uLrYVGJbyMislEMASAnLd7E= Received: (qmail 57628 invoked by alias); 21 Dec 2017 07:23:42 -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 57612 invoked by uid 89); 21 Dec 2017 07:23:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=a11 X-HELO: mail-wm0-f52.google.com Received: from mail-wm0-f52.google.com (HELO mail-wm0-f52.google.com) (74.125.82.52) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 21 Dec 2017 07:23:40 +0000 Received: by mail-wm0-f52.google.com with SMTP id f9so13958307wmh.0 for ; Wed, 20 Dec 2017 23:23:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=PyxAIAiN92mKIebdvn2GsSwvUrWlNd0RPDizJbo0hvQ=; b=brz9supGKpbGbfZxODZCz6gna7bl38NydZqhGsFjU/Ig4mXgsUKH5rHYJZMXzRtsqm OnCShSv1YbMtj0FApI1LEtg579G5x2NPBDUeyZI0HW1BhHII4auPzmQTfE6O1eIjC/Hm FVtj1R3HeGaqNuTjGNbdyyMsb94jkdh1DS+aPDAP+3x9mGUDBNj98HFb7lCT7KU3jce5 Vly/uQNLN12E3kM73g2K/WZPBLXoxEYymtzZ3Y0nWP9xYhghAg+HcOdjuKDIBRA4s/P7 rUCyTDGZ4u+8d8NoK2RRGlhCMHxX8QNB/ROkvqLfKE+eoH/H7QHxRLSkXNUfs5Jkkmjz XsBA== X-Gm-Message-State: AKGB3mIFZGPGAQvKAePHRI7J3HHZrsGgp49MxbjcHCzTfi+vB7l3bEmd yuqloOKtW/9QEEC1saPSXm4ChMluNjUvk0DExS3YtBPNjHY= X-Received: by 10.28.27.206 with SMTP id b197mr9101344wmb.96.1513841017947; Wed, 20 Dec 2017 23:23:37 -0800 (PST) MIME-Version: 1.0 Received: by 10.223.162.10 with HTTP; Wed, 20 Dec 2017 23:23:36 -0800 (PST) From: Prathamesh Kulkarni Date: Thu, 21 Dec 2017 12:53:36 +0530 Message-ID: Subject: PR83501 To: gcc Patches , Jakub Jelinek X-IsSubscribed: yes Hi Jakub, Based on your suggestions in PR83501, I have updated the patch to check for integer_zerop for 2nd operand of mem_ref. With the patch, Warray-bounds started warning for the following test in Warray-bounds-3.c in line 362 and thus I removed xfail on it: TM (a5, "0123", ma.a5 + i, ma.a5); Does it look OK ? Validation in progress. Thanks, Prathamesh 2017-12-21 Prathamesh Kulkarni * tree-ssa-strlen.c (get_string_cst): New. (handle_char_store): Call get_string_cst. testsuite/ * gcc.dg/tree-ssa/pr83501-1.c: New test. * c-c++-common/Warray-bounds-3.c (test_strcpy_bounds_memarray_range): Remove xfail and adjust test for a5. diff --git a/gcc/testsuite/c-c++-common/Warray-bounds-3.c b/gcc/testsuite/c-c++-common/Warray-bounds-3.c index 73103f43d01..62667344c0a 100644 --- a/gcc/testsuite/c-c++-common/Warray-bounds-3.c +++ b/gcc/testsuite/c-c++-common/Warray-bounds-3.c @@ -359,7 +359,7 @@ void test_strcpy_bounds_memarray_range (void) TM (a5, "0", ma.a5 + i, ma.a5); TM (a5, "01", ma.a5 + i, ma.a5); TM (a5, "012", ma.a5 + i, ma.a5); - TM (a5, "0123", ma.a5 + i, ma.a5); /* { dg-warning "offset 10 from the object at .ma. is out of the bounds of referenced subobject .\(MA::\)?a5. with type .char\\\[5]. at offset 4" "strcpy" { xfail *-*-* } } */ + TM (a5, "0123", ma.a5 + i, ma.a5); /* { dg-warning "offset 10 from the object at .ma. is out of the bounds of referenced subobject .\(MA::\)?a5. with type .char ?\\\[5]' at offset 4" } */ TM (a11, "0", ma.a5, ma.a11); TM (a11, "01", ma.a5, ma.a11); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr83501.c b/gcc/testsuite/gcc.dg/tree-ssa/pr83501.c new file mode 100644 index 00000000000..d8d3bf6039a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr83501.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-strlen" } */ + +char a[4]; + +void f (void) +{ + __builtin_strcpy (a, "abc"); + + if (__builtin_strlen (a) != 3) + __builtin_abort (); +} + +/* { dg-final { scan-tree-dump-not "__builtin_strlen" "strlen" } } */ diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c index 8971c7df4f3..f1d4f6ef059 100644 --- a/gcc/tree-ssa-strlen.c +++ b/gcc/tree-ssa-strlen.c @@ -2769,6 +2769,21 @@ handle_pointer_plus (gimple_stmt_iterator *gsi) } } +/* Check if RHS is string_cst possibly wrapped by mem_ref. */ +static tree +get_string_cst (tree rhs) +{ + if (TREE_CODE (rhs) == MEM_REF + && integer_zerop (TREE_OPERAND (rhs, 1))) + { + rhs = TREE_OPERAND (rhs, 0); + if (TREE_CODE (rhs) == ADDR_EXPR) + rhs = TREE_OPERAND (rhs, 0); + } + + return (TREE_CODE (rhs) == STRING_CST) ? rhs : NULL_TREE; +} + /* Handle a single character store. */ static bool @@ -2924,11 +2939,11 @@ handle_char_store (gimple_stmt_iterator *gsi) } } else if (idx == 0 - && TREE_CODE (gimple_assign_rhs1 (stmt)) == STRING_CST + && (rhs = get_string_cst (gimple_assign_rhs1 (stmt))) && ssaname == NULL_TREE && TREE_CODE (TREE_TYPE (lhs)) == ARRAY_TYPE) { - size_t l = strlen (TREE_STRING_POINTER (gimple_assign_rhs1 (stmt))); + size_t l = strlen (TREE_STRING_POINTER (rhs)); HOST_WIDE_INT a = int_size_in_bytes (TREE_TYPE (lhs)); if (a > 0 && (unsigned HOST_WIDE_INT) a > l) {