From 61cd123468adec0b7428057c2f043bff8ea24354 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Tue, 21 Apr 1998 22:08:05 +0000 Subject: [PATCH] * decl2.c (grokfield): Remangle the name of a member TYPE_DECL. From-SVN: r19369 --- gcc/cp/ChangeLog | 2 ++ gcc/cp/decl2.c | 6 +++++ gcc/testsuite/g++.old-deja/g++.pt/typedef3.C | 25 ++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/typedef3.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index cffacb0e2f3..9e690446789 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -5,6 +5,8 @@ Tue Apr 21 22:00:04 1998 Mark Mitchell * decl2.c (check_member_template): Set DECL_IGNORED for member class templates, too. + * decl2.c (grokfield): Remangle the name of a member TYPE_DECL. + Tue Apr 21 18:59:11 1998 Benjamin Kosnik * decl.c (duplicate_decls): Only check DECL_FRIEND_P if function. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 6b24edc0e0e..52900c478c8 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1579,6 +1579,12 @@ grokfield (declarator, declspecs, init, asmspec_tree, attrlist) DECL_CLASS_CONTEXT (value) = current_class_type; CLASSTYPE_LOCAL_TYPEDECLS (current_class_type) = 1; + /* Now that we've updated the context, we need to remangle the + name for this TYPE_DECL. */ + DECL_ASSEMBLER_NAME (value) = DECL_NAME (value); + DECL_ASSEMBLER_NAME (value) = + get_identifier (build_overload_name (TREE_TYPE (value), 1, 1)); + pushdecl_class_level (value); return value; } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/typedef3.C b/gcc/testsuite/g++.old-deja/g++.pt/typedef3.C new file mode 100644 index 00000000000..110e4814515 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/typedef3.C @@ -0,0 +1,25 @@ +// Build don't link: + +template +void f(T, T) +{ +} + +struct A { + typedef enum { + VAL1 + } result_t; +}; + +struct B { + typedef enum { + VAL2 + } result_t; +}; + + +void g() +{ + f(A::VAL1, A::VAL1); + f(B::VAL2, B::VAL2); +} -- 2.30.2