Fix regression introduced with patch for c++/775

cp:
	Fix regression introduced with patch for c++/775
	* parse.y (class_head_defn): Check for template specializations
	with a different class-key.
testsuite:
	* g++.dg/template/access1.C: New test.

From-SVN: r49016
This commit is contained in:
Nathan Sidwell 2002-01-19 20:55:35 +00:00 committed by Nathan Sidwell
parent e5550355c8
commit 3807621a13
4 changed files with 47 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2002-01-19 Nathan Sidwell <nathan@codesourcery.com>
Fix regression introduced with patch for c++/775
* parse.y (class_head_defn): Check for template specializations
with a different class-key.
2002-01-17 Jason Merrill <jason@redhat.com>
* decl.c (begin_constructor_body, begin_destructor_body): New fns.

View File

@ -2434,12 +2434,22 @@ class_head_defn:
yyungetc ('{', 1);
$$.t = $1;
$$.new_type_flag = 0;
if (TREE_CODE (TREE_TYPE ($1)) == RECORD_TYPE)
/* We might be specializing a template with a different
class-key. */
CLASSTYPE_DECLARED_CLASS (TREE_TYPE ($1))
= (current_aggr == class_type_node);
}
| class_head_apparent_template ':'
{
yyungetc (':', 1);
$$.t = $1;
$$.new_type_flag = 0;
if (TREE_CODE (TREE_TYPE ($1)) == RECORD_TYPE)
/* We might be specializing a template with a different
class-key. */
CLASSTYPE_DECLARED_CLASS (TREE_TYPE ($1))
= (current_aggr == class_type_node);
}
| aggr identifier_defn '{'
{

View File

@ -1,3 +1,7 @@
2002-01-19 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/template/access1.C: New test.
2002-01-18 Aldy Hernandez <aldyh@redhat.com>
* gcc.dg/20020118-1.c: New.

View File

@ -0,0 +1,27 @@
// { dg-do compile }
// Copyright (C) 2001 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 19 Jan 2002 <nathan@codesourcery.com>
// It is legal to specialize a template with a different class-key.
template<typename T> class X;
template<typename T> struct X<T *>
{
int i;
};
template<> struct X<int>
{
int i;
};
void foo ()
{
X<int *> xip;
X<int> xi;
xip.i;
xi.i;
}