Your message dated Tue, 13 Jan 2004 20:24:10 +0100
with message-id <[EMAIL PROTECTED]>
and subject line Bug#223391: gcc-3.2: Anonymous namespaces can sometimes still 
cause cross-object symbol conflicts
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--------------------------------------
Received: (at submit) by bugs.debian.org; 9 Dec 2003 01:38:39 +0000
>From [EMAIL PROTECTED] Mon Dec 08 19:38:09 2003
Return-path: <[EMAIL PROTECTED]>
Received: from ptr-64-201-187-81.ptr.terago.ca (mars.net-itech.com) 
[64.201.187.81] 
        by master.debian.org with smtp (Exim 3.35 1 (Debian))
        id 1ATWHP-0003dp-00; Mon, 08 Dec 2003 19:03:11 -0600
Received: (qmail 32723 invoked from network); 9 Dec 2003 01:03:10 -0000
Received: from unknown (HELO insight.internal.nit.ca) (192.168.12.100)
  by mars.net-itech.com with SMTP; 9 Dec 2003 01:02:51 -0000
Received: from apenwarr by insight.internal.nit.ca with local (Exim 3.34 #1 
(Debian))
        id 1ATWGe-0001ZU-00; Mon, 08 Dec 2003 20:02:24 -0500
Received: from apenwarr by insight.internal.nit.ca with local (Exim 3.34 #1 
(Debian))
        id 1ATWBI-0001YC-00; Mon, 08 Dec 2003 19:56:52 -0500
From: Avery Pennarun <[EMAIL PROTECTED]>
To: Debian Bug Tracking System <[EMAIL PROTECTED]>
Subject: gcc-3.2: Anonymous namespaces can sometimes still cause cross-object 
symbol conflicts
X-Mailer: reportbug 1.50
Date: Mon, 08 Dec 2003 19:56:51 -0500
Message-Id: <[EMAIL PROTECTED]>
Resent-From: [EMAIL PROTECTED]
Resent-Date: Mon, 8 Dec 2003 20:02:24 -0500
Resent-To: [EMAIL PROTECTED]
Resent-Message-Id: <[EMAIL PROTECTED]>
Delivered-To: [EMAIL PROTECTED]
X-Spam-Checker-Version: SpamAssassin 
        2.60-master.debian.org_2003_11_25-bugs.debian.org_2003_11_20 
        (1.212-2003-09-23-exp) on master.debian.org
X-Spam-Status: No, hits=-2.4 required=4.0 tests=BAYES_99,HAS_PACKAGE,
        NO_DNS_FOR_FROM autolearn=no 
        version=2.60-master.debian.org_2003_11_25-bugs.debian.org_2003_11_20
X-Spam-Level: 

Package: gcc-3.2
Version: 1:3.2.3-0pre9
Severity: normal

The attached test program, when compiled with

        make CXX=g++-2.95
        
produces this output:

        creating test2.o
        creating test1.o
        starting

but when compiled with

        make CXX=g++-3.2
        
produces this output:

        creating test1.o
        creating test1.o
        starting

This is because C++ anonymous namespaces (namespaces created without names,
ie. namespace { ... };) are actually exported from object files using weak
symbols, and only one of the symbols is actually linked into the final
program.  The weak symbols have funny auto-generated names that are intended
to avoid name conflicts between object files, but the name-generation scheme
used in gcc 3.2 is based on the *source* filename, which might be the same
for two different object files.  In my example, the makefile does this:

        g++-3.2 -c -o test1.o -DTEST='"test1.o"' testx.cc
        g++-3.2 -c -o test2.o -DTEST='"test2.o"' testx.cc

This makes the compiler output different for the two object files, although
the symbol names end up being the same (as you can see with 'nm -D
test1.o').

Note that:

 - gcc-2.95 (debian 2.95.4-0.01042) does *not* exhibit this problem; it
   seems to use a random number for its random namespace symbol names.
   
 - there is probably no reason to make the symbols from that namespace
   anything other than file-local anyway.  Anonymous namespaces are
   explicitly not expected to be accessible from any other object.
   
Source code follows.

Have fun,

Avery



-- System Information
Debian Release: testing/unstable
Architecture: i386
Kernel: Linux insight 2.4.19 #1 mer sep 4 10:52:04 EDT 2002 i686
Locale: LANG=fr_CA, LC_CTYPE=fr_CA

Versions of packages gcc-3.2 depends on:
ii  binutils                2.13.90.0.18-1.7 The GNU assembler, linker and bina
ii  cpp-3.2                 1:3.2.3-0pre9    The GNU C preprocessor
ii  gcc-3.2-base            1:3.2.3-0pre9    The GNU Compiler Collection (base 
ii  libc6                   2.3.2.ds1-10     GNU C Library: Shared libraries an
ii  libgcc1                 1:3.3-2          GCC support library


>>>>>>>>>>>>>>>>>>>>>>>> Makefile >>>>>>>>>>>>>>>>>


main: main.o test1.o test2.o
        $(CXX) -o main $^

test%.o: testx.cc
        $(CXX) -c -o $@ -DTEST='"$@"' $^

clean:
        rm -f *.o *~ *.so main


>>>>>>>>>>>>>>>>>>>>>>>> main.cc >>>>>>>>>>>>>>>>>>>>>>

#include <stdio.h>

int main()
{
        printf("starting\n");
        return 0;
}


>>>>>>>>>>>>>>>>>>>>>>>> testx.cc >>>>>>>>>>>>>>>>>>>>>>>

#include <stdio.h>

namespace {
        struct Blah {
                Blah() { printf("creating %s\n", TEST); }
        };

        static Blah blah;
};



>>>>>>>>>>>>>>>>>>>>>> END >>>>>>>>>>>>>>>>>>>>



---------------------------------------
Received: (at 223391-done) by bugs.debian.org; 13 Jan 2004 20:29:17 +0000
>From [EMAIL PROTECTED] Tue Jan 13 14:29:17 2004
Return-path: <[EMAIL PROTECTED]>
Received: from mail.cs.tu-berlin.de [130.149.17.13] 
        by master.debian.org with esmtp (Exim 3.35 1 (Debian))
        id 1AgUF3-0005tK-00; Tue, 13 Jan 2004 13:30:21 -0600
Received: from bolero.cs.tu-berlin.de ([EMAIL PROTECTED] [130.149.19.1])
        by mail.cs.tu-berlin.de (8.9.3p2/8.9.3) with ESMTP id UAA20937;
        Tue, 13 Jan 2004 20:24:10 +0100 (MET)
Received: (from [EMAIL PROTECTED])
        by bolero.cs.tu-berlin.de (8.12.10+Sun/8.12.8/Submit) id i0DJOAMs017501;
        Tue, 13 Jan 2004 20:24:10 +0100 (MET)
From: Matthias Klose <[EMAIL PROTECTED]>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <[EMAIL PROTECTED]>
Date: Tue, 13 Jan 2004 20:24:10 +0100
To: Avery Pennarun <[EMAIL PROTECTED]>, [EMAIL PROTECTED]
Subject: Re: Bug#223391: gcc-3.2: Anonymous namespaces can sometimes still 
cause cross-object symbol conflicts
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
X-Mailer: VM 7.03 under 21.4 (patch 6) "Common Lisp" XEmacs Lucid
Delivered-To: [EMAIL PROTECTED]
X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2004_01_13 
        (1.212-2003-09-23-exp) on master.debian.org
X-Spam-Status: No, hits=-3.0 required=4.0 tests=HAS_BUG_NUMBER autolearn=no 
        version=2.60-bugs.debian.org_2004_01_13
X-Spam-Level: 

This is fixed in current gcc-3.3, which is the default gcc in
Debian. Therefore closing the report.

Avery Pennarun writes:
> Package: gcc-3.2
> Version: 1:3.2.3-0pre9
> Severity: normal
> 
> The attached test program, when compiled with
> 
>       make CXX=g++-2.95
>       
> produces this output:
> 
>       creating test2.o
>       creating test1.o
>       starting
> 
> but when compiled with
> 
>       make CXX=g++-3.2
>       
> produces this output:
> 
>       creating test1.o
>       creating test1.o
>       starting
> 
> This is because C++ anonymous namespaces (namespaces created without names,
> ie. namespace { ... };) are actually exported from object files using weak
> symbols, and only one of the symbols is actually linked into the final
> program.  The weak symbols have funny auto-generated names that are intended
> to avoid name conflicts between object files, but the name-generation scheme
> used in gcc 3.2 is based on the *source* filename, which might be the same
> for two different object files.  In my example, the makefile does this:
> 
>       g++-3.2 -c -o test1.o -DTEST='"test1.o"' testx.cc
>       g++-3.2 -c -o test2.o -DTEST='"test2.o"' testx.cc
> 
> This makes the compiler output different for the two object files, although
> the symbol names end up being the same (as you can see with 'nm -D
> test1.o').
> 
> Note that:
> 
>  - gcc-2.95 (debian 2.95.4-0.01042) does *not* exhibit this problem; it
>    seems to use a random number for its random namespace symbol names.
>    
>  - there is probably no reason to make the symbols from that namespace
>    anything other than file-local anyway.  Anonymous namespaces are
>    explicitly not expected to be accessible from any other object.
>    
> Source code follows.
> 
> Have fun,
> 
> Avery
> 
> 
> 
> -- System Information
> Debian Release: testing/unstable
> Architecture: i386
> Kernel: Linux insight 2.4.19 #1 mer sep 4 10:52:04 EDT 2002 i686
> Locale: LANG=fr_CA, LC_CTYPE=fr_CA
> 
> Versions of packages gcc-3.2 depends on:
> ii  binutils                2.13.90.0.18-1.7 The GNU assembler, linker and 
> bina
> ii  cpp-3.2                 1:3.2.3-0pre9    The GNU C preprocessor
> ii  gcc-3.2-base            1:3.2.3-0pre9    The GNU Compiler Collection 
> (base 
> ii  libc6                   2.3.2.ds1-10     GNU C Library: Shared libraries 
> an
> ii  libgcc1                 1:3.3-2          GCC support library
> 
> 
> >>>>>>>>>>>>>>>>>>>>>>>> Makefile >>>>>>>>>>>>>>>>>
> 
> 
> main: main.o test1.o test2.o
>       $(CXX) -o main $^
> 
> test%.o: testx.cc
>       $(CXX) -c -o $@ -DTEST='"$@"' $^
> 
> clean:
>       rm -f *.o *~ *.so main
> 
> 
> >>>>>>>>>>>>>>>>>>>>>>>> main.cc >>>>>>>>>>>>>>>>>>>>>>
> 
> #include <stdio.h>
> 
> int main()
> {
>       printf("starting\n");
>       return 0;
> }
> 
> 
> >>>>>>>>>>>>>>>>>>>>>>>> testx.cc >>>>>>>>>>>>>>>>>>>>>>>
> 
> #include <stdio.h>
> 
> namespace {
>       struct Blah {
>               Blah() { printf("creating %s\n", TEST); }
>       };
> 
>       static Blah blah;
> };
> 
> 
> 
> >>>>>>>>>>>>>>>>>>>>>> END >>>>>>>>>>>>>>>>>>>>
> 
> 
> 
> 
> -- 
> To UNSUBSCRIBE, email to [EMAIL PROTECTED]
> with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]


Reply via email to