From patchwork Fri Dec 12 21:06:31 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Wakely X-Patchwork-Id: 420678 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 F27DE140081 for ; Sat, 13 Dec 2014 08:06:42 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:subject:message-id:mime-version:content-type; q=dns; s= default; b=UoKFMObT7hnHsC7m2wVQlRv715oA018FmCYo0Vq7zB4HBAfdrrPtE GF10w46yo4xhU5plRs6CAo0pS78fBgdCWXkQvx0Ws+Wutf/Ih+C+ddvU0BjywQUm p/HylT5fymRuaRMlB7ODWEhVVi3ACcSYVCIqRFoLPum/sDaN8j1BlI= 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:date :from:to:subject:message-id:mime-version:content-type; s= default; bh=D9QK2HQN6XujEaA/pRXQn8PoxS8=; b=VUC6mwkC3FKPXbFgQjGL YamFPJo8xu8MOG+rjgfZrvdtXCB5tDiaECkYVZQ5GVi2tWLL7TiVWWsEka6IHyxr TV3Wntn6Ko8J7/kMlx88FIuFvlXIgVF8L6Fcz8UjA3+Vl54cFugA35or5CTg2EM8 2aYCnXkUnWGHNohIbN1qzPw= Received: (qmail 6073 invoked by alias); 12 Dec 2014 21:06:36 -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 6051 invoked by uid 89); 12 Dec 2014 21:06:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Fri, 12 Dec 2014 21:06:34 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id sBCL6W5i027719 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 12 Dec 2014 16:06:33 -0500 Received: from localhost (ovpn-116-25.ams2.redhat.com [10.36.116.25]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id sBCL6WwR027629; Fri, 12 Dec 2014 16:06:32 -0500 Date: Fri, 12 Dec 2014 21:06:31 +0000 From: Jonathan Wakely To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: [patch] Fix std::shared_ptr FAILs with -fno-rtti Message-ID: <20141212210631.GQ3134@redhat.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) A couple of small fixes for shared_ptr tests that fail with -fno-rtti. Tested x86_64-linux, committed to trunk. commit ec3619710af701b1030a6eb45862a41dc3e18ad8 Author: Jonathan Wakely Date: Fri Dec 12 16:17:45 2014 +0000 PR libstdc++/58594 * include/bits/shared_ptr_base.h: Cast away cv-quals. * testsuite/20_util/shared_ptr/creation/58594-no-rtti.cc: New. * testsuite/20_util/shared_ptr/creation/private.cc: Make allocator rebindable so test passes with -fno-rtti. diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h index 737a1a2..3ef783f 100644 --- a/libstdc++-v3/include/bits/shared_ptr_base.h +++ b/libstdc++-v3/include/bits/shared_ptr_base.h @@ -1120,7 +1120,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _M_ptr(), _M_refcount() { typedef typename allocator_traits<_Alloc>::template - rebind_traits<_Tp> __traits; + rebind_traits::type> __traits; _Deleter __del = { __a }; auto __guard = std::__allocate_guarded(__del._M_alloc); _M_ptr = __guard.get(); diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/58594-no-rtti.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/58594-no-rtti.cc new file mode 100644 index 0000000..2eb8b95 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/58594-no-rtti.cc @@ -0,0 +1,27 @@ +// { dg-options "-std=gnu++11 -fno-rtti" } +// { dg-do compile } + +// Copyright (C) 2014 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include + +// libstdc++/58594 +void test01() +{ + std::make_shared(); +} diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc index 46487bb..63ab555 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc @@ -37,8 +37,17 @@ public: }; template -struct MyAlloc : std::allocator +struct MyAlloc : std::allocator { + template + struct rebind { typedef MyAlloc other; }; + + MyAlloc() = default; + MyAlloc(const MyAlloc&) = default; + + template + MyAlloc(const MyAlloc&) { } + void construct(T* p) { ::new((void*)p) T(); } void destroy(T* p) { p->~T(); } }; @@ -49,4 +58,3 @@ int main() auto p = std::allocate_shared(a); return p->get(); } -