From 3648a0963e538dee51a41f09097bd3682ceb98f7 Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Mon, 19 Dec 2005 17:26:29 +0000 Subject: [PATCH] re PR c++/20552 (ICE in write_type, at cp/mangle.c:1579) PR c++/20552 Backport: 2004-03-08 Mark Mitchell * decl.c (duplicate_decls): Don't check IDENTIFIER_ERROR_LOCUS. * g++.dg/ext/typeof10.C: New test. From-SVN: r108795 --- gcc/cp/ChangeLog | 8 ++++++++ gcc/cp/decl.c | 5 +---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/ext/typeof10.C | 11 +++++++++++ 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/typeof10.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index cdfb99314674..c540dbde9054 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2005-12-19 Volker Reichelt + + PR c++/20552 + Backport: + 2004-03-08 Mark Mitchell + + * decl.c (duplicate_decls): Don't check IDENTIFIER_ERROR_LOCUS. + 2005-12-07 Volker Reichelt PR c++/19397 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b9199da3169f..5adb3a8d3f0c 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1380,10 +1380,7 @@ duplicate_decls (tree newdecl, tree olddecl) else return NULL_TREE; } - - /* Already complained about this, so don't do so again. */ - else if (current_class_type == NULL_TREE - || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type) + else { error ("conflicting declaration '%#D'", newdecl); cp_error_at ("'%D' has a previous declaration as `%#D'", diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9eee42191478..b66555668ac0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-12-19 Volker Reichelt + + PR c++/20552 + * g++.dg/ext/typeof10.C: New test. + 2005-12-14 Kaveh R. Ghazi * g++.old-deja/g++.brendan/redecl1.C, diff --git a/gcc/testsuite/g++.dg/ext/typeof10.C b/gcc/testsuite/g++.dg/ext/typeof10.C new file mode 100644 index 000000000000..1b357ad9d7b1 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/typeof10.C @@ -0,0 +1,11 @@ +// PR c++/20552 +// Origin: Ivan Godard + +template struct A +{ + void foo() + { + typedef int T; // { dg-error "previous" } + typedef __typeof__(*this) T; // { dg-error "conflicting" } + } +}; -- 2.47.2