This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
c++/47: Re: 2.95.1 nested classes broken
- To: gcc-gnats at sourceware dot cygnus dot com
- Subject: c++/47: Re: 2.95.1 nested classes broken
- From: "Martin v. Loewis" <martin at loewis dot home dot cs dot tu-berlin dot de>
- Date: Sun, 5 Mar 2000 11:08:17 +0100
- References: <199909270547.WAA32443@linux1.magma-da.com>
- Resent-Cc: gcc-prs at gcc dot gnu dot org
- Resent-Reply-To: gcc-gnats@gcc.gnu.org, "Martin v. Loewis" <martin@loewis.home.cs.tu-berlin.de>
>Number: 47
>Category: c++
>Synopsis: [not accepted] nested classes broken
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sun Mar 05 02:16:02 PST 2000
>Closed-Date:
>Last-Modified:
>Originator: raymond@magma.magma-da.com
>Release: 2.95.2
>Organization:
>Environment:
>Description:
Date: Sun, 26 Sep 1999 22:47:46 -0700
Original-Message-Id: <199909270547.WAA32443@linux1.magma-da.com>
Dear gcc maintainers,
In gcc-2.95.1 the scoping of nested classes is broken. The snippet below
compiles with gcc-2.7.2, egcs-1.1.2 and a wide variety of newer commercial
C++ compilers, but it fails on 2.95.1.
Thanks,
-Raymond
----------------------------------------------------------------------
49[linux1:]~/src/test>cat namescope.cxx
class A {
public:
class B;
class C;
};
class A::B {
};
class A::C {
class D;
};
class A::C::D {
public:
B* foo(); // A::B should be in scope
};
----------------------------------------------------------------------
50[linux1:]~/src/test>/usr/local/gcc-2.95/bin/g++ -v namescope.cxx
Reading specs from /usr/local/gcc-2.95/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/specs
gcc version 2.95.1 19990816 (release)
/usr/local/gcc-2.95/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di686 -Dpentiumpro -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ namescope.cxx /tmp/cc8RbNC5.ii
GNU CPP version 2.95.1 19990816 (release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/gcc-2.95/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/../../../../include/g++-3
/usr/local/include
/usr/local/gcc-2.95/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/../../../../i686-pc-linux-gnu/include
/usr/local/gcc-2.95/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/include
/usr/include
End of search list.
The following default directories have been omitted from the search path:
End of omitted list.
/usr/local/gcc-2.95/lib/gcc-lib/i686-pc-linux-gnu/2.95.1/cc1plus /tmp/cc8RbNC5.ii -quiet -dumpbase namescope.cc -version -o /tmp/ccbQ8vF6.s
GNU C++ version 2.95.1 19990816 (release) (i686-pc-linux-gnu) compiled by GNU C version 2.95.1 19990816 (release).
namescope.cxx:16: syntax error before `*'
51[linux1:]~/src/test>
----------------------------------------------------------------------
FYI:
51[linux1:]~/src/test>g++ -v -Wall -c namescope.cxx
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91 -D__ELF__ -Dunix -Di386 -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux -Asystem(posix) -D__EXCEPTIONS -Wall -Asystem(unix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ namescope.cxx /tmp/ccibKqii.ii
GNU CPP version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/include/g++-2
/usr/local/include
/usr/i386-redhat-linux/include
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include
/usr/include
End of search list.
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/cc1plus /tmp/ccibKqii.ii -quiet -dumpbase namescope.cc -Wall -version -o /tmp/ccJ9v2Sl.s
GNU C++ version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (i386-redhat-linux) compiled by GNU C version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).
as -V -Qy -o namescope.o /tmp/ccJ9v2Sl.s
GNU assembler version 2.9.1 (i386-redhat-linux), using BFD version 2.9.1.0.23
52[linux1:]~/src/test>
----------------------------------------------------------------------
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: