[{"id":1762111,"web_url":"http://patchwork.ozlabs.org/comment/1762111/","msgid":"<54FC95A6-AAA0-464A-BFB7-FC27738AFC20@suse.de>","list_archive_url":null,"date":"2017-09-02T11:51:10","subject":"Re: [PATCH] Add UBSAN_{PTR, BOUNDS} folding (PR sanitizer/81981,\n\ttake 2)","submitter":{"id":4338,"url":"http://patchwork.ozlabs.org/api/people/4338/","name":"Richard Biener","email":"rguenther@suse.de"},"content":"On September 1, 2017 10:28:16 PM GMT+02:00, Jakub Jelinek <jakub@redhat.com> wrote:\n>On Fri, Sep 01, 2017 at 07:10:51PM +0200, Richard Biener wrote:\n>> OK, I thought we have one.  Can you add a helper for it please? \n>> replace_with_nop or so?  I thought there's maybe replace_with_value\n>which\n>> handles null lhs by replacing with nop.  (can't check, writing from\n>phone)\n>\n>Actually, you're right, replace_call_with_value does the right thing\n>when called on call without lhs (all these internal fns don't have\n>lhs),\n>and NULL_TREE val ensures we'd ICE if that ever wasn't the case.\n>\n>Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?\n\nOK. \n\nRichard. \n\n>2017-09-01  Jakub Jelinek  <jakub@redhat.com>\n>\n>\tPR sanitizer/81981\n>\t* gimple-fold.c (gimple_fold_call): Optimize away useless UBSAN_PTR\n>\tand UBSAN_BOUNDS internal calls.  Clean up IFN_UBSAN_OBJECT_SIZE\n>\thandling.  Use replace_call_with_value with NULL instead of\n>\tgsi_replace, unlink_stmt_vdef and release_defs.\n>\n>\t* gcc.dg/ubsan/pr81981.c: New test.\n>\n>--- gcc/gimple-fold.c.jj\t2017-09-01 09:26:37.054748039 +0200\n>+++ gcc/gimple-fold.c\t2017-09-01 19:37:03.283795450 +0200\n>@@ -3936,18 +3936,43 @@ gimple_fold_call (gimple_stmt_iterator *\n> \t\t\t\t\tgimple_call_arg (stmt, 2));\n> \t  break;\n> \tcase IFN_UBSAN_OBJECT_SIZE:\n>-\t  if (integer_all_onesp (gimple_call_arg (stmt, 2))\n>-\t      || (TREE_CODE (gimple_call_arg (stmt, 1)) == INTEGER_CST\n>-\t\t  && TREE_CODE (gimple_call_arg (stmt, 2)) == INTEGER_CST\n>-\t\t  && tree_int_cst_le (gimple_call_arg (stmt, 1),\n>-\t\t\t\t      gimple_call_arg (stmt, 2))))\n>+\t  {\n>+\t    tree offset = gimple_call_arg (stmt, 1);\n>+\t    tree objsize = gimple_call_arg (stmt, 2);\n>+\t    if (integer_all_onesp (objsize)\n>+\t\t|| (TREE_CODE (offset) == INTEGER_CST\n>+\t\t    && TREE_CODE (objsize) == INTEGER_CST\n>+\t\t    && tree_int_cst_le (offset, objsize)))\n>+\t      {\n>+\t\treplace_call_with_value (gsi, NULL_TREE);\n>+\t\treturn true;\n>+\t      }\n>+\t  }\n>+\t  break;\n>+\tcase IFN_UBSAN_PTR:\n>+\t  if (integer_zerop (gimple_call_arg (stmt, 1)))\n> \t    {\n>-\t      gsi_replace (gsi, gimple_build_nop (), false);\n>-\t      unlink_stmt_vdef (stmt);\n>-\t      release_defs (stmt);\n>+\t      replace_call_with_value (gsi, NULL_TREE);\n> \t      return true;\n> \t    }\n> \t  break;\n>+\tcase IFN_UBSAN_BOUNDS:\n>+\t  {\n>+\t    tree index = gimple_call_arg (stmt, 1);\n>+\t    tree bound = gimple_call_arg (stmt, 2);\n>+\t    if (TREE_CODE (index) == INTEGER_CST\n>+\t\t&& TREE_CODE (bound) == INTEGER_CST)\n>+\t      {\n>+\t\tindex = fold_convert (TREE_TYPE (bound), index);\n>+\t\tif (TREE_CODE (index) == INTEGER_CST\n>+\t\t    && tree_int_cst_le (index, bound))\n>+\t\t  {\n>+\t\t    replace_call_with_value (gsi, NULL_TREE);\n>+\t\t    return true;\n>+\t\t  }\n>+\t      }\n>+\t  }\n>+\t  break;\n> \tcase IFN_GOACC_DIM_SIZE:\n> \tcase IFN_GOACC_DIM_POS:\n> \t  result = fold_internal_goacc_dim (stmt);\n>--- gcc/testsuite/gcc.dg/ubsan/pr81981.c.jj\t2017-09-01\n>19:35:37.555782465 +0200\n>+++ gcc/testsuite/gcc.dg/ubsan/pr81981.c\t2017-09-01 19:35:37.555782465\n>+0200\n>@@ -0,0 +1,21 @@\n>+/* PR sanitizer/81981 */\n>+/* { dg-do compile } */\n>+/* { dg-options \"-O2 -Wmaybe-uninitialized -fsanitize=undefined\n>-ffat-lto-objects\" } */\n>+\n>+int v;\n>+\n>+int\n>+foo (int i)\n>+{\n>+  int t[1], u[1];\n>+  int n = 0;\n>+\n>+  if (i)\n>+    {\n>+      t[n] = i;\n>+      u[0] = i;\n>+    }\n>+\n>+  v = u[0];\t\t/* { dg-warning \"may be used uninitialized in this\n>function\" } */\n>+  return t[0];\t\t/* { dg-warning \"may be used uninitialized in this\n>function\" } */\n>+}\n>\n>\n>\tJakub","headers":{"Return-Path":"<gcc-patches-return-461340-incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","mailing list gcc-patches@gcc.gnu.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-461340-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"E61tWN4P\"; dkim-atps=neutral","sourceware.org; auth=none"],"Received":["from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xkvb55RNjz9s7p\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat,  2 Sep 2017 21:51:28 +1000 (AEST)","(qmail 73289 invoked by alias); 2 Sep 2017 11:51:21 -0000","(qmail 73280 invoked by uid 89); 2 Sep 2017 11:51:20 -0000","from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by\n\tsourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tSat, 02 Sep 2017 11:51:15 +0000","from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254])\tby\n\tmx1.suse.de (Postfix) with ESMTP id 0EF86AAEF;\n\tSat,  2 Sep 2017 11:51:13 +0000 (UTC)"],"DomainKey-Signature":"a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:in-reply-to:references:mime-version:content-type\n\t:content-transfer-encoding:subject:to:cc:from:message-id; q=dns;\n\ts=default; b=mCyXjqyWZ8LvGMAhM2CWY0QsKRoHD35k2mB+0YFM5UwVGyopbp\n\tI3qP+ufVIxhVNenHnNaD3oty1Nn4FmFPENXHuRvDVJ7TSFo9gf/y6s3hZM1elJbo\n\tA8YNJ2GiLQURI70O40703A9ncNgZNGtoofNaf1/9TU6rwnrIWLoZwCKKA=","DKIM-Signature":"v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:in-reply-to:references:mime-version:content-type\n\t:content-transfer-encoding:subject:to:cc:from:message-id; s=\n\tdefault; bh=xenrvXc7wgcbYOfzphSmIzSiWMk=; b=E61tWN4PmC/fv2/DR2Ks\n\totMMAj5kro7TBiKpHA7Rjaf2ZEcVwRxF1qTUcxG2x10YAv0Dz/YTMTFEXInOI0wQ\n\tgEHXtsR4mO5oX/+emOjIpxsXJeBaJJdYxZQE0CQiiCKNweiYKIJ9s/1t5DElTVSU\n\tZ3ff+1zA7vSIa7z34ArNBNQ=","Mailing-List":"contact gcc-patches-help@gcc.gnu.org; run by ezmlm","Precedence":"bulk","List-Id":"<gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>","List-Archive":"<http://gcc.gnu.org/ml/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-help@gcc.gnu.org>","Sender":"gcc-patches-owner@gcc.gnu.org","X-Virus-Found":"No","X-Spam-SWARE-Status":"No, score=-16.9 required=5.0 tests=BAYES_00, GIT_PATCH_1,\n\tGIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=","X-HELO":"mx1.suse.de","Date":"Sat, 02 Sep 2017 13:51:10 +0200","User-Agent":"K-9 Mail for Android","In-Reply-To":"<20170901202816.GR2323@tucnak>","References":"<20170901111654.GE2323@tucnak>\n\t<C026072F-D7E6-42FC-A44E-E4080575E585@suse.de>\n\t<20170901135328.GL2323@tucnak>\n\t<E8CEFE96-C8AA-4199-8C57-10BBD88BBBC4@suse.de>\n\t<20170901202816.GR2323@tucnak>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Transfer-Encoding":"quoted-printable","Subject":"Re: [PATCH] Add UBSAN_{PTR, BOUNDS} folding (PR sanitizer/81981,\n\ttake 2)","To":"Jakub Jelinek <jakub@redhat.com>","CC":"gcc-patches@gcc.gnu.org","From":"Richard Biener <rguenther@suse.de>","Message-ID":"<54FC95A6-AAA0-464A-BFB7-FC27738AFC20@suse.de>"}}]