diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-03-12 07:23:15 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-03-12 07:23:15 +0000 |
commit | 2601a4ee73c810742e09d7c4dacaf52107724a05 (patch) | |
tree | 9d2487b8fa851f63c3e54366226f651952dcfcfa /gcc | |
parent | 21282b1e9210c0df065ef4bb38a7cfbaa2c47d06 (diff) | |
download | gcc-2601a4ee73c810742e09d7c4dacaf52107724a05.zip gcc-2601a4ee73c810742e09d7c4dacaf52107724a05.tar.gz gcc-2601a4ee73c810742e09d7c4dacaf52107724a05.tar.bz2 |
re PR c++/9336 (ICE in cp_line_of, at cp/error.c:2191)
PR c++/9336
* g++.dg/parse/namespace8.C: New test.
PR c++/9336
* decl2.c (do_nonmember_using_decl): Do not call duplicate decls
to merge old and new declarations.
From-SVN: r64216
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/namespace8.C | 6 |
4 files changed, 23 insertions, 10 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a8788f2..a45fc53 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-03-11 Mark Mitchell <mark@codesourcery.com> + + PR c++/9336 + * decl2.c (do_nonmember_using_decl): Do not call duplicate decls + to merge old and new declarations. + 2003-03-12 Alexandre Oliva <aoliva@redhat.com> * g++.1: Remove. @@ -8,6 +14,10 @@ 2003-03-11 Mark Mitchell <mark@codesourcery.com> + PR c++/9336 + * decl2.c (do_nonmember_using_decl): Do not call duplicate decls + to merge old and new declarations. + PR c++/9924 * decl2.c (do_nonmember_using_decl): Ignore anticipated builtins. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index b96f65f..b4654c9 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -4222,12 +4222,6 @@ do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype, { tree tmp, tmp1; - if (oldval && !is_overloaded_fn (oldval)) - { - duplicate_decls (OVL_CURRENT (BINDING_VALUE (decls)), oldval); - oldval = NULL_TREE; - } - *newval = oldval; for (tmp = BINDING_VALUE (decls); tmp; tmp = OVL_NEXT (tmp)) { @@ -4290,12 +4284,12 @@ do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype, else { *newval = BINDING_VALUE (decls); - if (oldval) - duplicate_decls (*newval, oldval); - } + if (oldval && !decls_match (*newval, oldval)) + error ("`%D' is already declared in this scope", name); + } *newtype = BINDING_TYPE (decls); - if (oldtype && *newtype && oldtype != *newtype) + if (oldtype && *newtype && !same_type_p (oldtype, *newtype)) { error ("using declaration `%D' introduced ambiguous type `%T'", name, oldtype); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8cd81af..637bdac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2003-03-11 Mark Mitchell <mark@codesourcery.com> + PR c++/9336 + * g++.dg/parse/namespace8.C: New test. + PR c++/9924 * g++.dg/overload/builtin2.C: New test. diff --git a/gcc/testsuite/g++.dg/parse/namespace8.C b/gcc/testsuite/g++.dg/parse/namespace8.C new file mode 100644 index 0000000..d5a9b0a --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/namespace8.C @@ -0,0 +1,6 @@ +namespace X { + typedef struct { + } x; +} +typedef X::x x; +using X::x; |