From patchwork Thu Mar 2 17:49:32 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 734711 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vZ0JC411qz9s5g for ; Fri, 3 Mar 2017 04:52:11 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="hlPdabgn"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to:cc :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=mj/m42rb7FIAWU5sFMnuCO0UurHj50f6oygrJFIhBwg2TYiuK1 LUmBDFQt6u/4QeJp6D36/CUzjYcsBys92kLsm7q/JZZHEM2anO9ODldguh6Xq3sn 8glIyClSfzdiV4hyLaLK3qlOvuzX3MsVvG8rcDHYLbcFmZDRFrt0qSrP0= 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:to:cc :from:subject:message-id:date:mime-version:content-type; s= default; bh=Ri13kfNa/jG/znns8cQffBWLs8I=; b=hlPdabgnCe25yXQ2D5Fs q8K6TzdR9Qka6Gdg04UiNb5HgYXHpHyMUezgir7yqgzv78GAqYQ2jf8mmyphsaxb 8+ytp/rDX19e5kvMjyKxw8EZjI7Y6rgD9Hvr3EqGiU3KY0tRX6M7TsIvRXnv3ZH3 JuDTnTCnpU9n9hN1F1jO/sY= Received: (qmail 44019 invoked by alias); 2 Mar 2017 17:49:37 -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 43963 invoked by uid 89); 2 Mar 2017 17:49:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 02 Mar 2017 17:49:34 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id E330EABA2; Thu, 2 Mar 2017 17:49:32 +0000 (UTC) To: GCC Patches Cc: Jakub Jelinek From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Subject: Fix ICE in use-after-scope w/ -fno-tree-dce (PR, sanitize/79783). Message-ID: <0c9de9bb-a232-07d4-302d-c59108484ccf@suse.cz> Date: Thu, 2 Mar 2017 18:49:32 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 X-IsSubscribed: yes Hello. It can happen with inlining and -fno-tree-dce that VAR_DECL for a SSA NAME was removed and thus the poisoning should not have any usage. Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. Ready to be installed? Martin From d8aa72dc1d696f5500c00b6c2f532f2a87cf58d2 Mon Sep 17 00:00:00 2001 From: marxin Date: Thu, 2 Mar 2017 11:55:00 +0100 Subject: [PATCH] Fix ICE in use-after-scope w/ -fno-tree-dce (PR sanitize/79783). gcc/ChangeLog: 2017-03-02 Martin Liska PR sanitize/79783 * asan.c (asan_expand_poison_ifn): Do not expand ASAN_POISON when having a SSA NAME w/o VAR_DECL assigned to it. gcc/testsuite/ChangeLog: 2017-03-02 Martin Liska PR sanitize/79783 * g++.dg/asan/pr79783.C: New test. --- gcc/asan.c | 5 ++++- gcc/testsuite/g++.dg/asan/pr79783.C | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/asan/pr79783.C diff --git a/gcc/asan.c b/gcc/asan.c index 6cdd59b7ea7..307423ced03 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -3107,7 +3107,10 @@ asan_expand_poison_ifn (gimple_stmt_iterator *iter, { gimple *g = gsi_stmt (*iter); tree poisoned_var = gimple_call_lhs (g); - if (!poisoned_var) + + /* It can happen with inlining and -fno-tree-dce that VAR_DECL for a SSA + NAME was removed and thus the poisoning should not have any usage. */ + if (!poisoned_var || SSA_NAME_VAR (poisoned_var) == NULL_TREE) { gsi_remove (iter, true); return true; diff --git a/gcc/testsuite/g++.dg/asan/pr79783.C b/gcc/testsuite/g++.dg/asan/pr79783.C new file mode 100644 index 00000000000..939f60b2819 --- /dev/null +++ b/gcc/testsuite/g++.dg/asan/pr79783.C @@ -0,0 +1,19 @@ +// PR sanitizer/79783 +// { dg-options "-fno-tree-dce" } + +struct A +{ + static void foo(const char&) {} +}; + +struct B +{ + B() { A::foo(char()); } +}; + +struct C +{ + virtual void bar() const { B b; } +}; + +C c; -- 2.11.1