mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-22 08:29:26 +08:00
decl.c (add_binding): Don't complain about a redeclaration of a semantically identical typedef in a...
* decl.c (add_binding): Don't complain about a redeclaration of a semantically identical typedef in a local scope. From-SVN: r27213
This commit is contained in:
parent
6c123729de
commit
263505afaf
@ -1,3 +1,8 @@
|
||||
1999-05-28 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* decl.c (add_binding): Don't complain about a redeclaration of a
|
||||
semantically identical typedef in a local scope.
|
||||
|
||||
1999-05-28 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* decl.c (complete_array_type): Allocate off same obstack. Fix
|
||||
|
@ -1143,6 +1143,20 @@ add_binding (id, decl)
|
||||
BINDING_VALUE (binding) = decl;
|
||||
INHERITED_VALUE_BINDING_P (binding) = 0;
|
||||
}
|
||||
else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
|
||||
&& TREE_CODE (decl) == TYPE_DECL
|
||||
&& DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
|
||||
&& same_type_p (TREE_TYPE (decl),
|
||||
TREE_TYPE (BINDING_VALUE (binding))))
|
||||
/* We have two typedef-names, both naming the same type to have
|
||||
the same name. This is OK because of:
|
||||
|
||||
[dcl.typedef]
|
||||
|
||||
In a given scope, a typedef specifier can be used to redefine
|
||||
the name of any type declared in that scope to refer to the
|
||||
type to which it already refers. */
|
||||
ok = 0;
|
||||
else
|
||||
{
|
||||
cp_error ("declaration of `%#D'", decl);
|
||||
|
17
gcc/testsuite/g++.old-deja/g++.other/typedef7.C
Normal file
17
gcc/testsuite/g++.old-deja/g++.other/typedef7.C
Normal file
@ -0,0 +1,17 @@
|
||||
// Build don't link:
|
||||
// Origin: Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
typedef int I;
|
||||
typedef int I;
|
||||
|
||||
struct A {
|
||||
typedef int I;
|
||||
typedef int I;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct S {
|
||||
typedef int I;
|
||||
typedef int I;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user