From patchwork Tue Sep 4 18:31:16 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Diego Novillo X-Patchwork-Id: 181650 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]) by ozlabs.org (Postfix) with SMTP id 59A5B2C00A2 for ; Wed, 5 Sep 2012 04:31:39 +1000 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1347388300; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:Received:Received:Received:Date:From:To:Subject: Message-ID:MIME-Version:Content-Type:Content-Disposition: User-Agent:Mailing-List:Precedence:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:Sender:Delivered-To; bh=tcb+tc4 YmIvE2DjQ8cQh26/BdQA=; b=J30YGO2J+vuTw3N0kDezokdxP+NH0m9BZEwsuXr aQeztzPNSl1lpN4avVO5mofH7+psqJg6wxeghyrIzERrJ6hmx3eBK/2L0kI8rzFv H6srkjBCjST+RH5suuzfdRw3yfMPT5Z+Pei5OGyrbLhe3fAaiAzc/dBJTwjpgDet 1gng= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:X-Google-DKIM-Signature:Received:Received:Received:Received:Received:Date:From:To:Subject:Message-ID:MIME-Version:Content-Type:Content-Disposition:User-Agent:X-Gm-Message-State:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=bFpYcuOVfxiXytzLBrKefcmMCFWWneXMhqv5bxtKceZl9BPGG7w0IUaBE4lbif LNHfqgPLSQSse8fYte8nDULPhOakluql9krdcR6vrEwMhvs1jbxec1hvuCxOvOg+ CwUJD2Q9QP9icVd/ziBlwCTXOvi7TVWDYRbukUxdHy4MQ=; Received: (qmail 30121 invoked by alias); 4 Sep 2012 18:31:35 -0000 Received: (qmail 30109 invoked by uid 22791); 4 Sep 2012 18:31:33 -0000 X-SWARE-Spam-Status: No, hits=-4.3 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, KHOP_RCVD_TRUST, RCVD_IN_DNSWL_LOW, RCVD_IN_HOSTKARMA_YE, RP_MATCHES_RCVD, TW_CP X-Spam-Check-By: sourceware.org Received: from mail-gg0-f201.google.com (HELO mail-gg0-f201.google.com) (209.85.161.201) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 04 Sep 2012 18:31:19 +0000 Received: by ggnb1 with SMTP id b1so740808ggn.2 for ; Tue, 04 Sep 2012 11:31:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=date:from:to:subject:message-id:mime-version:content-type :content-disposition:organization:user-agent:x-gm-message-state; bh=VwgS4NJIi53OpBc83HJ/+jCt8Jz4AsX5MEA8k7yRiTQ=; b=a61Y2XWlV8rkROouTkNqledN4tmwghY3assNcfXqxux+1WRHPis0MMKhZYLUtjUfk4 pw15xBI+86xeMcEPsmSj17f1D+qWuVzb+ibOGh42nq7bMsfEh8HGFzQaFsBdGXq85C8K 4GxSZqpUteDgzwDPVqmPWCTvviV4pitjlE/aLfZl+jVxVPk9wb49G7RTtKGclSlEa9Kj 6wNpf8RDXA+jhLnIR3va2I7cVHJKpCxdbvGv8KpuhojgvcZVOxXjxSLeTyuroEEOChMx p5u4hmbGfpNyHMmtvfknewrVcsfNLi9EKIBh0u7Epu21SkqMrlKi2LG6XsZDPRyj5k4W 1F3A== Received: by 10.236.78.232 with SMTP id g68mr1818480yhe.3.1346783479081; Tue, 04 Sep 2012 11:31:19 -0700 (PDT) Received: by 10.236.78.232 with SMTP id g68mr1818472yhe.3.1346783478875; Tue, 04 Sep 2012 11:31:18 -0700 (PDT) Received: from wpzn4.hot.corp.google.com (216-239-44-65.google.com [216.239.44.65]) by gmr-mx.google.com with ESMTPS id n2si1726126anp.3.2012.09.04.11.31.18 (version=TLSv1/SSLv3 cipher=AES128-SHA); Tue, 04 Sep 2012 11:31:18 -0700 (PDT) Received: from torture.tor.corp.google.com (torture.tor.corp.google.com [172.29.41.4]) by wpzn4.hot.corp.google.com (Postfix) with ESMTP id B5A261E0048 for ; Tue, 4 Sep 2012 11:31:18 -0700 (PDT) Received: by torture.tor.corp.google.com (Postfix, from userid 54752) id 19C13C0B18; Tue, 4 Sep 2012 14:31:16 -0400 (EDT) Date: Tue, 4 Sep 2012 14:31:16 -0400 From: Diego Novillo To: gcc-patches@gcc.gnu.org Subject: Fix PR 54478 - Work around g++ 4.3 parsing bug Message-ID: <20120904183116.GA7669@google.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Gm-Message-State: ALoCoQkPj2un227mV96EIx0yrYy0DYGw0IT3U+1USfwH19zJEbC6WWpHXMrPXicqGeoQPVLtc/iFjxX9EZogP8uE6D7yxYkiFD0W7FpTy1joRPSMvNGz3tnf0qvc1uK3BiJ4EqMC72McE/u2ATVMyGl6iCZ1BI9IPyHguZYyCvKwIKSYIkha2a1NCGA0hv4Ump3sb8LLybGxjKQkzjelI2nolSOl2Hx1PBPaJsG2Uj+UBxmjClRAhqM= X-IsSubscribed: yes 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 This patch works around a parsing problem with g++ 4.3. The parser is failing to lookup calls to the template function reserve when called from other member functions: vec_t::reserve (...) The parser thinks that the '<' in reserve is a less-than operation. This problem does not happen after 4.3. This code is going to change significantly, so this won't be needed soon. Tested on x86_64 with g++ 4.3 and g++ 4.6. Diego. PR bootstrap/54478 * vec.h (vec_t::alloc): Remove explicit type specification in call to reserve. (vec_t::copy): Likewise. (vec_t::reserve): Likewise. (vec_t::reserve_exact): Likewise. (vec_t::safe_splice): Likewise. (vec_t::safe_push): Likewise. (vec_t::safe_grow): Likewise. (vec_t::safe_grow_cleared): Likewise. (vec_t::safe_insert): Likewise. diff --git a/gcc/vec.h b/gcc/vec.h index ac426e9..c0f1bb2 100644 --- a/gcc/vec.h +++ b/gcc/vec.h @@ -655,7 +655,7 @@ template vec_t * vec_t::alloc (int nelems MEM_STAT_DECL) { - return vec_t::reserve_exact ((vec_t *) NULL, nelems PASS_MEM_STAT); + return reserve_exact ((vec_t *) NULL, nelems PASS_MEM_STAT); } template @@ -699,8 +699,8 @@ vec_t::copy (ALONE_MEM_STAT_DECL) if (len) { - new_vec = vec_t::reserve_exact (static_cast *> (NULL), - len PASS_MEM_STAT); + new_vec = reserve_exact (static_cast *> (NULL), + len PASS_MEM_STAT); new_vec->embedded_init (len, len); memcpy (new_vec->address (), vec_, sizeof (T) * len); } @@ -736,7 +736,7 @@ vec_t::reserve (vec_t **vec, int nelems VEC_CHECK_DECL MEM_STAT_DECL) bool extend = (*vec) ? !(*vec)->space (nelems VEC_CHECK_PASS) : nelems != 0; if (extend) - *vec = vec_t::reserve (*vec, nelems PASS_MEM_STAT); + *vec = reserve (*vec, nelems PASS_MEM_STAT); return extend; } @@ -755,7 +755,7 @@ vec_t::reserve_exact (vec_t **vec, int nelems VEC_CHECK_DECL bool extend = (*vec) ? !(*vec)->space (nelems VEC_CHECK_PASS) : nelems != 0; if (extend) - *vec = vec_t::reserve_exact (*vec, nelems PASS_MEM_STAT); + *vec = reserve_exact (*vec, nelems PASS_MEM_STAT); return extend; } @@ -796,8 +796,7 @@ vec_t::safe_splice (vec_t **dst, vec_t *src VEC_CHECK_DECL { if (src) { - vec_t::reserve_exact (dst, VEC_length (T, src) VEC_CHECK_PASS - MEM_STAT_INFO); + reserve_exact (dst, VEC_length (T, src) VEC_CHECK_PASS MEM_STAT_INFO); (*dst)->splice (src VEC_CHECK_PASS); } } @@ -843,7 +842,7 @@ template T & vec_t::safe_push (vec_t **vec, T obj VEC_CHECK_DECL MEM_STAT_DECL) { - vec_t::reserve (vec, 1 VEC_CHECK_PASS PASS_MEM_STAT); + reserve (vec, 1 VEC_CHECK_PASS PASS_MEM_STAT); return (*vec)->quick_push (obj VEC_CHECK_PASS); } @@ -858,7 +857,7 @@ template T * vec_t::safe_push (vec_t **vec, const T *ptr VEC_CHECK_DECL MEM_STAT_DECL) { - vec_t::reserve (vec, 1 VEC_CHECK_PASS PASS_MEM_STAT); + reserve (vec, 1 VEC_CHECK_PASS PASS_MEM_STAT); return (*vec)->quick_push (ptr VEC_CHECK_PASS); } @@ -898,8 +897,8 @@ vec_t::safe_grow (vec_t **vec, int size VEC_CHECK_DECL MEM_STAT_DECL) { VEC_ASSERT (size >= 0 && VEC_length (T, *vec) <= (unsigned)size, "grow", T, A); - vec_t::reserve_exact (vec, size - (int)VEC_length (T, *vec) - VEC_CHECK_PASS PASS_MEM_STAT); + reserve_exact (vec, size - (int)VEC_length (T, *vec) + VEC_CHECK_PASS PASS_MEM_STAT); (*vec)->prefix_.num_ = size; } @@ -915,7 +914,7 @@ vec_t::safe_grow_cleared (vec_t **vec, int size VEC_CHECK_DECL MEM_STAT_DECL) { int oldsize = VEC_length (T, *vec); - vec_t::safe_grow (vec, size VEC_CHECK_PASS PASS_MEM_STAT); + safe_grow (vec, size VEC_CHECK_PASS PASS_MEM_STAT); memset (&((*vec)->address ()[oldsize]), 0, sizeof (T) * (size - oldsize)); } @@ -972,7 +971,7 @@ void vec_t::safe_insert (vec_t **vec, unsigned ix, T obj VEC_CHECK_DECL MEM_STAT_DECL) { - vec_t::reserve (vec, 1 VEC_CHECK_PASS PASS_MEM_STAT); + reserve (vec, 1 VEC_CHECK_PASS PASS_MEM_STAT); (*vec)->quick_insert (ix, obj VEC_CHECK_PASS); } @@ -988,7 +987,7 @@ void vec_t::safe_insert (vec_t **vec, unsigned ix, T *ptr VEC_CHECK_DECL MEM_STAT_DECL) { - vec_t::reserve (vec, 1 VEC_CHECK_PASS PASS_MEM_STAT); + reserve (vec, 1 VEC_CHECK_PASS PASS_MEM_STAT); (*vec)->quick_insert (ix, ptr VEC_CHECK_PASS); }