From d7ed5e55a2d3ad13cf58bf98343a0a002ee779ca Mon Sep 17 00:00:00 2001 From: Kriang Lerdsuwanakij Date: Wed, 30 Apr 2003 17:51:41 +0000 Subject: PR c++/9432, c++/9528 PR c++/9432, c++/9528 * decl2.c (validate_nonmember_using_decl): Handle SCOPE_REF. * g++.dg/lookup/using4.C: New test. From-SVN: r66298 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl2.c | 8 ++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/lookup/using4.C | 15 +++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 gcc/testsuite/g++.dg/lookup/using4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d6fd395..eb5b26e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-04-30 Kriang Lerdsuwanakij + + PR c++/9432, c++/9528 + * decl2.c (validate_nonmember_using_decl): Handle SCOPE_REF. + 2003-04-30 Garbiel Dos Reis * decl.c (check_previous_goto_1): Adjust prototype. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index cf63b38..4f0337d 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -4236,6 +4236,14 @@ validate_nonmember_using_decl (tree decl, tree *scope, tree *name) return NULL_TREE; } + if (TREE_CODE (decl) == SCOPE_REF) + { + /* It's a nested name with template parameter dependent scope. + This can only be using-declaration for class member. */ + error ("`%T' is not a namespace", TREE_OPERAND (decl, 0)); + return NULL_TREE; + } + if (is_overloaded_fn (decl)) decl = get_first_fn (decl); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5a7ddce..96ea0ab 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-04-30 Kriang Lerdsuwanakij + + PR c++/9432, c++/9528 + * g++.dg/lookup/using4.C: New test. + 2003-04-29 Geoffrey Keating * gcc.dg/noreturn-5.c: New file. diff --git a/gcc/testsuite/g++.dg/lookup/using4.C b/gcc/testsuite/g++.dg/lookup/using4.C new file mode 100644 index 0000000..a6421c8 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/using4.C @@ -0,0 +1,15 @@ +// { dg-do compile } + +// Origin: Richard Guenther + +// PR c++/9432: ICE in validate_nonmember_using_decl when decl is a +// SCOPE_REF. + +template struct Foo; +template +struct Bar : public Foo { + void foo() + { + using Foo::i; // { dg-error "not a namespace" } + } +}; -- cgit v1.1