diff options
| author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-12-09 11:46:02 +0000 | 
|---|---|---|
| committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-12-09 11:46:02 +0000 | 
| commit | 586f49f76129a561826d596d6108ac9b9fe1672a (patch) | |
| tree | b28a92b457928ac38f806da8e59d485852428a53 /gcc | |
| parent | 7aa7231b5c8ade1064578396abe1ee99c657f367 (diff) | |
| download | ppe42-gcc-586f49f76129a561826d596d6108ac9b9fe1672a.tar.gz ppe42-gcc-586f49f76129a561826d596d6108ac9b9fe1672a.zip | |
	* decl.c (grokdeclarator): Update the name of the TEMPLATE_DECL, as
	well as the TYPE_DECL, when a typedef name is assigned to a
	previously anonymous type.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24218 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/cp/decl.c | 7 | ||||
| -rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/derived1.C | 24 | 
3 files changed, 37 insertions, 0 deletions
| diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 40280afc8a2..fc5d228611b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +1998-12-09  Mark Mitchell  <mark@markmitchell.com> + +	* decl.c (grokdeclarator): Update the name of the TEMPLATE_DECL, as +	well as the TYPE_DECL, when a typedef name is assigned to a +	previously anonymous type. +  1998-12-08  Andrew MacLeod  <amacleod@cygnus.com>  	* cp/except.c (call_eh_info): use __start_cp_handler instead of diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 260053b3bc4..6f23465ee44 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -10378,6 +10378,13 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)  	  if (TYPE_LANG_SPECIFIC (type))  	    TYPE_WAS_ANONYMOUS (type) = 1; +	  /* If this is a typedef within a template class, the nested +	     type is a (non-primary) template.  The name for the +	     template needs updating as well.  */ +	  if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type)) +	    DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))  +	      = TYPE_IDENTIFIER (type); +  	  /* XXX Temporarily set the scope.   	     When returning, start_decl expects it as NULL_TREE,  	     and will then then set it using pushdecl. */ diff --git a/gcc/testsuite/g++.old-deja/g++.pt/derived1.C b/gcc/testsuite/g++.old-deja/g++.pt/derived1.C new file mode 100644 index 00000000000..e2275f4328d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/derived1.C @@ -0,0 +1,24 @@ +// Build don't link: + +class A +{ +public: +  typedef int Info; +}; + +template <class T> +class B : public A +{ +public: +  typedef struct{ +    int a;  +    int b; +  } Info; +}; + +void f() +{ +  B<A>::Info ie; +  ie.a=1; +  ie.b=2; +} | 

