{"id":808635,"url":"http://patchwork.ozlabs.org/api/patches/808635/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/patch/20170901111654.GE2323@tucnak/","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/projects/17/?format=json","name":"GNU Compiler Collection","link_name":"gcc","list_id":"gcc-patches.gcc.gnu.org","list_email":"gcc-patches@gcc.gnu.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170901111654.GE2323@tucnak>","list_archive_url":null,"date":"2017-09-01T11:16:54","name":"Add UBSAN_{PTR,BOUNDS} folding (PR sanitizer/81981)","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"5f087931798442af73250fe35b239a4733c906df","submitter":{"id":671,"url":"http://patchwork.ozlabs.org/api/people/671/?format=json","name":"Jakub Jelinek","email":"jakub@redhat.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/gcc/patch/20170901111654.GE2323@tucnak/mbox/","series":[{"id":1002,"url":"http://patchwork.ozlabs.org/api/series/1002/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/list/?series=1002","date":"2017-09-01T11:16:54","name":"Add UBSAN_{PTR,BOUNDS} folding (PR sanitizer/81981)","version":1,"mbox":"http://patchwork.ozlabs.org/series/1002/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/808635/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/808635/checks/","tags":{},"related":[],"headers":{"Return-Path":"<gcc-patches-return-461262-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-461262-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=\"fcI/Z1bQ\"; dkim-atps=neutral","sourceware.org; auth=none","ext-mx10.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx10.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=jakub@redhat.com"],"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 3xkGt22Nmsz9s7F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  1 Sep 2017 21:17:13 +1000 (AEST)","(qmail 53979 invoked by alias); 1 Sep 2017 11:17:06 -0000","(qmail 53923 invoked by uid 89); 1 Sep 2017 11:17:05 -0000","from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by\n\tsourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tFri, 01 Sep 2017 11:17:00 +0000","from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com\n\t[10.5.11.11])\t(using TLSv1.2 with cipher AECDH-AES256-SHA\n\t(256/256 bits))\t(No client certificate requested)\tby\n\tmx1.redhat.com (Postfix) with ESMTPS id EC5B161485;\n\tFri,  1 Sep 2017 11:16:58 +0000 (UTC)","from tucnak.zalov.cz (ovpn-116-33.ams2.redhat.com\n\t[10.36.116.33])\tby smtp.corp.redhat.com (Postfix) with ESMTPS\n\tid 93A605C7A2; Fri,  1 Sep 2017 11:16:58 +0000 (UTC)","from tucnak.zalov.cz (localhost [127.0.0.1])\tby tucnak.zalov.cz\n\t(8.15.2/8.15.2) with ESMTP id v81BGu7d007306;\n\tFri, 1 Sep 2017 13:16:56 +0200","(from jakub@localhost)\tby tucnak.zalov.cz (8.15.2/8.15.2/Submit)\n\tid v81BGsqO007305; Fri, 1 Sep 2017 13:16:54 +0200"],"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:from:to:cc:subject:message-id:reply-to:mime-version\n\t:content-type; q=dns; s=default; b=nZ7JzWUxSaMvrsfwhns/hmBphFJ3t\n\tB7RDdxbCPPOQpGLvRN4uhbq69Xnqdu720X/4VfUw220Du9D51qJgcMe5YP693Mxb\n\thR6oNomFXOszDFVj8OdgPm5GGKZBaybBj5hCcM9vF8VAmg3FemyoP6M4+fgRAnMA\n\tW05dhefj6ivKXE=","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:from:to:cc:subject:message-id:reply-to:mime-version\n\t:content-type; s=default; bh=hxR93A6ITUNI0QRYOmhie0dArIs=; b=fcI\n\t/Z1bQ2bPEAfwoUYXU3tzVZaAEQV64S25l0W6lgmyl5TC8Bm7FnSl+veMt0HqkGDy\n\tI5JUzzFRPp9NJxKIC5kE0nfGTwCALvzDbUdV9UjV1aqIRXjeW7sbWXE0A+7Af7Cq\n\ttoeXf1IgELNePPfzFWsljvuE6NziHRNZqNH5rh68=","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_HELO_PASS autolearn=ham version=3.3.2 spammy=","X-HELO":"mx1.redhat.com","DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com EC5B161485","Date":"Fri, 1 Sep 2017 13:16:54 +0200","From":"Jakub Jelinek <jakub@redhat.com>","To":"Richard Biener <rguenther@suse.de>","Cc":"gcc-patches@gcc.gnu.org","Subject":"[PATCH] Add UBSAN_{PTR,BOUNDS} folding (PR sanitizer/81981)","Message-ID":"<20170901111654.GE2323@tucnak>","Reply-To":"Jakub Jelinek <jakub@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","User-Agent":"Mutt/1.7.1 (2016-10-04)","X-IsSubscribed":"yes"},"content":"Hi!\n\nThis patch fixes the following testcase by folding some ubsan internal fns\nwe'd either remove anyway during sanopt, or lower into if (cond)\ndo_something during sanopt where cond would be always false.\n\nAdditionally, I've tried to clean up a little bit IFN_UBSAN_OBJECT_SIZE\nhandling by using variables for the call arguments that make it clear\nwhat the arguments are.\n\nBootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?\n\n2017-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.\n\n\t* gcc.dg/ubsan/pr81981.c: New test.\n\n\n\tJakub","diff":"--- gcc/gimple-fold.c.jj\t2017-08-10 02:31:21.000000000 +0200\n+++ gcc/gimple-fold.c\t2017-08-29 18:50:49.993673432 +0200\n@@ -3938,11 +3938,23 @@ 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\tgsi_replace (gsi, gimple_build_nop (), false);\n+\t\tunlink_stmt_vdef (stmt);\n+\t\trelease_defs (stmt);\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@@ -3950,6 +3962,25 @@ gimple_fold_call (gimple_stmt_iterator *\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    gsi_replace (gsi, gimple_build_nop (), false);\n+\t\t    unlink_stmt_vdef (stmt);\n+\t\t    release_defs (stmt);\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-08-29 18:54:33.826107761 +0200\n+++ gcc/testsuite/gcc.dg/ubsan/pr81981.c\t2017-08-29 18:55:36.721386827 +0200\n@@ -0,0 +1,21 @@\n+/* PR sanitizer/81981 */\n+/* { dg-do compile } */\n+/* { dg-options \"-O2 -Wmaybe-uninitialized -fsanitize=undefined -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 function\" } */\n+  return t[0];\t\t/* { dg-warning \"may be used uninitialized in this function\" } */\n+}\n","prefixes":[]}