$ cat > test.cpp namespace N1 { namespace N2 { } } namespace N2 { } using namespace N1; using namespace N2; $ g++ --version g++ (GCC) 3.3.2 (Debian) $ g++ -c test.cpp test.cpp:13: error: `<type error>' is not a namespace $
Related to bug 12272. Confirmed. The error message on the mainline: pr13377.cc:13: error: expected namespace-name pr13377.cc:13: error: `<type error>' is not a namespace
Testing a patch.
Subject: Bug 13377 CVSROOT: /cvs/gcc Module name: gcc Changes by: reichelt@gcc.gnu.org 2005-08-31 10:32:54 Modified files: gcc/cp : ChangeLog parser.c gcc/testsuite : ChangeLog gcc/testsuite/g++.dg/tc1: dr101.C Added files: gcc/testsuite/g++.dg/lookup: ambig4.C ambig5.C Log message: PR c++/13377 * parser.c (cp_parser_lookup_name): Pass LOOKUP_COMPLAIN to lookup_name_real on final parse. * g++.dg/lookup/ambig4.C: New test. * g++.dg/lookup/ambig5.C: New test. * g++.dg/tc1/dr101.C: Adjust error markers. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4864&r2=1.4865 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/parser.c.diff?cvsroot=gcc&r1=1.352&r2=1.353 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.5985&r2=1.5986 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/lookup/ambig4.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/lookup/ambig5.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/tc1/dr101.C.diff?cvsroot=gcc&r1=1.2&r2=1.3
Subject: Bug 13377 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-4_0-branch Changes by: reichelt@gcc.gnu.org 2005-08-31 10:54:35 Modified files: gcc/cp : ChangeLog parser.c gcc/testsuite : ChangeLog gcc/testsuite/g++.dg/tc1: dr101.C Added files: gcc/testsuite/g++.dg/lookup: ambig4.C ambig5.C Log message: PR c++/13377 * parser.c (cp_parser_lookup_name): Pass LOOKUP_COMPLAIN to lookup_name_real on final parse. * g++.dg/lookup/ambig4.C: New test. * g++.dg/lookup/ambig5.C: New test. * g++.dg/tc1/dr101.C: Adjust error markers. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4648.2.87&r2=1.4648.2.88 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/parser.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.319.2.13&r2=1.319.2.14 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.5084.2.363&r2=1.5084.2.364 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/lookup/ambig4.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/lookup/ambig5.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/tc1/dr101.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.2&r2=1.2.58.1
For the testcase ================================== namespace N { int i; } int i; using namespace N; void foo() { i; } ================================== we now get ambig4.C: In function 'void foo()': ambig4.C:10: error: use of 'i' is ambiguous ambig4.C:6: error: first declared as 'int i' here ambig4.C:3: error: also declared as 'int N::i' here ambig4.C:10: error: 'i' was not declared in this scope Btw, this is the testcase which was a regression from GCC 3.3.x. For the testcase ================================== namespace N { namespace M {} } namespace M {} using namespace N; using namespace M; ================================== we now get (since the patch for PR23586 is also in place): ambig5.C:13: error: use of 'M' is ambiguous ambig5.C:10: error: first declared as 'namespace M { }' here ambig5.C:7: error: also declared as 'namespace M { }' here ambig5.C:13: error: 'M' is not a namespace-name ambig5.C:13: error: expected namespace-name before ';' token This is still a little suboptimal (first we say it's ambiguous, then we say it's not declared/not a namespace-name), but I think the user can figure out the problem now. So this is fixed on mainline and the 4.0 branch.
Subject: Bug 13377 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: reichelt@gcc.gnu.org 2005-09-01 11:32:20 Modified files: gcc/cp : ChangeLog parser.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/lookup: ambig4.C ambig5.C Log message: PR c++/13377 * parser.c (cp_parser_lookup_name): Pass LOOKUP_COMPLAIN to lookup_name_real on final parse. * g++.dg/lookup/ambig4.C: New test. * g++.dg/lookup/ambig5.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3892.2.231&r2=1.3892.2.232 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/parser.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.157.2.59&r2=1.157.2.60 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3389.2.422&r2=1.3389.2.423 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/lookup/ambig4.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.6.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/lookup/ambig5.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.6.1
Fixed on the 3.4 branch, too.