From patchwork Tue Apr 17 05:39:20 2018 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: 899069 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-476458-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="mgP7MEC6"; dkim-atps=neutral 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 40QDbD0qx3z9s1B for ; Tue, 17 Apr 2018 15:39:35 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:cc:message-id:date:mime-version:content-type; q=dns; s=default; b=FPH3u+opQfNe/qMYl04DFH+m9I+kqJhX82d7iPbp5DP5zaY65D I1/uIh41sAEGwcaKXMmrGTfcHk677iNP4Ym6Uhj2K1hz0KofkJiro+iAD4CW158X r4Gso18D6Z5FODpewPKGGU1XwhGjMhbzIrc80lCSVXTxiCOBe2BTA0/Ac= 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:from :subject:to:cc:message-id:date:mime-version:content-type; s= default; bh=beSG6ZivFug/XGWc81ZMurbjlas=; b=mgP7MEC61hmEUu0tqRpA KwWECqjG8sDA7STIkyWboFD18osxy4OKf2zCklFxnZPnaxSUFpX8rc/dcrLQGv/Y QibZFd1g5n4mL7dgn4NNvKlQqNf/mmR7MoTYsK/lCGVng2m4tOvzEhVj7fqHpkls w29aJBvbR85mD5osM/q94+U= Received: (qmail 9310 invoked by alias); 17 Apr 2018 05:39:27 -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 9298 invoked by uid 89); 17 Apr 2018 05:39:26 -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; Tue, 17 Apr 2018 05:39:25 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id D6952ACB2; Tue, 17 Apr 2018 05:39:21 +0000 (UTC) From: =?utf-8?q?Martin_Li=C5=A1ka?= Subject: [PATCH] Support bitfields in Wodr machinery (PR lto/85405). To: gcc-patches@gcc.gnu.org Cc: Jan Hubicka Message-ID: <7e3fc57b-c574-f7d4-e49e-6dba66bceff7@suse.cz> Date: Tue, 17 Apr 2018 07:39:20 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 X-IsSubscribed: yes Hi. This is Honza's ODR warning patch that I've just tested. He approved that. Patch can bootstrap on x86_64-linux-gnu and survives regression tests. Martin gcc/ChangeLog: 2018-04-16 Jan Hubicka PR lto/85405 * ipa-devirt.c (odr_types_equivalent_p): Handle bit fields. gcc/testsuite/ChangeLog: 2018-04-16 Martin Liska PR lto/85405 * g++.dg/lto/pr85405_0.C: New test. * g++.dg/lto/pr85405_1.C: New test. --- gcc/ipa-devirt.c | 11 +++++++++-- gcc/testsuite/g++.dg/lto/pr85405_0.C | 18 ++++++++++++++++++ gcc/testsuite/g++.dg/lto/pr85405_1.C | 9 +++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/lto/pr85405_0.C create mode 100644 gcc/testsuite/g++.dg/lto/pr85405_1.C diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index fa9380cce80..5da0f72d14f 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -1587,8 +1587,15 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned, "in another translation unit")); return false; } - gcc_assert (DECL_NONADDRESSABLE_P (f1) - == DECL_NONADDRESSABLE_P (f2)); + if (DECL_BIT_FIELD (f1) != DECL_BIT_FIELD (f2)) + { + warn_odr (t1, t2, f1, f2, warn, warned, + G_ ("one field is bitfield while other is not ")); + return false; + } + else + gcc_assert (DECL_NONADDRESSABLE_P (f1) + == DECL_NONADDRESSABLE_P (f2)); } /* If one aggregate has more fields than the other, they diff --git a/gcc/testsuite/g++.dg/lto/pr85405_0.C b/gcc/testsuite/g++.dg/lto/pr85405_0.C new file mode 100644 index 00000000000..1a41d81099c --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr85405_0.C @@ -0,0 +1,18 @@ +// { dg-lto-do link } +// { dg-lto-options {{-fPIC -shared -flto}} } + +class VclReferenceBase { // { dg-lto-warning "7: type 'struct VclReferenceBase' violates the C\\+\\+ One Definition Rule" } + int mnRefCnt; + bool mbDisposed : 1; + virtual ~VclReferenceBase(); +}; +class a; +class b { + a &e; + bool c(); +}; +class B { + VclReferenceBase d; +}; +class a : B {}; +bool b::c() { return false; } diff --git a/gcc/testsuite/g++.dg/lto/pr85405_1.C b/gcc/testsuite/g++.dg/lto/pr85405_1.C new file mode 100644 index 00000000000..78606185624 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr85405_1.C @@ -0,0 +1,9 @@ +class VclReferenceBase { + int mnRefCnt; + bool mbDisposed; + +protected: + virtual ~VclReferenceBase(); +}; +class : VclReferenceBase { +} a;