From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18055 invoked by alias); 28 Jan 2011 09:51:37 -0000 Received: (qmail 18045 invoked by uid 22791); 28 Jan 2011 09:51:37 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 28 Jan 2011 09:51:34 +0000 From: "bkoz at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug libstdc++/36104] [4.3/4.4/4.5/4.6 Regression] gnu-versioned-namespace is broken X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: libstdc++ X-Bugzilla-Keywords: build X-Bugzilla-Severity: normal X-Bugzilla-Who: bkoz at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: bkoz at gcc dot gnu.org X-Bugzilla-Target-Milestone: 4.6.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 Date: Fri, 28 Jan 2011 10:22:00 -0000 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: 2011-01/txt/msg03086.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36104 --- Comment #15 from Benjamin Kosnik 2011-01-28 09:51:23 UTC --- Patches 1-3 restore gcc-4.2 behavior. Configure works, the library builds, most all of the tests pass regression, etc. Unfortunately, this is still annoyingly wrong on close inspection. Namespaces nested within std containing definitions will be mis-versioned. Using versioning + modes fails. The inline namespace code, which unfortunately includes most of the macros used to define namespaces in every libstdc++ header, was done as part of the initial work for this feature, nee namespace association. Then changes were made, nesting was made de rigeur, and the original macros were pushed and squeezed into submission. Yet more modes were added: parallel, profile. Yet another level of nesting was added for versioning, overloading the namespace macros with another condition. C++0x support starts to partition the std:: namespace into finer bits: chrono, regex, etc. All of these nested namespaces + current macros are wrong. Patch 4 fixes these issues, and provides a saner infrastructure for future debug/profile/parallel work.