From: Nathan Sidwell Date: Sat, 19 Jan 2002 20:55:35 +0000 (+0000) Subject: Fix regression introduced with patch for c++/775 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3807621a13b69e6b12fbae5d4667c696c0898da2;p=platform%2Fupstream%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index abb6417..b4c9f70 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-01-19 Nathan Sidwell + + 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 * decl.c (begin_constructor_body, begin_destructor_body): New fns. diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index 31fc850..420e428 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -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 '{' { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6d56315..54e1a36 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-01-19 Nathan Sidwell + + * g++.dg/template/access1.C: New test. + 2002-01-18 Aldy Hernandez * gcc.dg/20020118-1.c: New. diff --git a/gcc/testsuite/g++.dg/template/access1.C b/gcc/testsuite/g++.dg/template/access1.C new file mode 100644 index 0000000..1622e08 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/access1.C @@ -0,0 +1,27 @@ +// { dg-do compile } + +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 19 Jan 2002 + +// It is legal to specialize a template with a different class-key. + +template class X; + +template struct X +{ + int i; +}; +template<> struct X +{ + int i; +}; + +void foo () +{ + X xip; + X xi; + + xip.i; + xi.i; +} +