From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27289 invoked by alias); 20 Nov 2012 16:28:03 -0000 Received: (qmail 24299 invoked by uid 55); 20 Nov 2012 16:26:26 -0000 From: "dnovillo at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/55398] [4.8 Regression] va_arg usage with non-POD Date: Tue, 20 Nov 2012 16:28:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: middle-end X-Bugzilla-Keywords: build, ice-on-valid-code X-Bugzilla-Severity: blocker X-Bugzilla-Who: dnovillo at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: dnovillo at gcc dot gnu.org X-Bugzilla-Target-Milestone: 4.8.0 X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2012-11/txt/msg01938.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55398 --- Comment #8 from Diego Novillo 2012-11-20 16:26:24 UTC --- Author: dnovillo Date: Tue Nov 20 16:26:09 2012 New Revision: 193667 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=193667 Log: Convert vec<> into a POD. This fixes PR 55398 by making vec<> a true POD. I thought we could get away with having private fields, but we can't. We fail to pass vec<> instances through varargs. The patch makes every field public and mangles the field names in the hope that no future patch will try to make use of them directly. It's horrible, but I could not think of anything better. Tested with clang++ as the host compiler. 2012-11-20 Diego Novillo PR middle-end/55398 * vec.h (class vec_prefix): Make every field public. Rename field alloc_ to alloc_PRIVATE_. Rename field num_ to num_PRIVATE_. Update all users. (class vec): Make every field public. Rename field pfx_ to pfx_PRIVATE_. Rename field data_ to data_PRIVATE_. Update all users. (class vec): Make every field public. Rename field vec_ to vec_PRIVATE_. Update all users. Modified: trunk/gcc/ChangeLog trunk/gcc/vec.c trunk/gcc/vec.h