Bug 8442 - [3.4 regression] rejects nested template classes
Summary: [3.4 regression] rejects nested template classes
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 3.2
: P1 critical
Target Milestone: 3.4.0
Assignee: Kriang Lerdsuwanakij
URL:
Keywords: monitored, rejects-valid
Depends on:
Blocks: 8806
  Show dependency treegraph
 
Reported: 2002-11-03 17:56 UTC by jcab
Modified: 2004-01-17 04:22 UTC (History)
6 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2003-07-30 04:28:48


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description jcab 2002-11-03 17:56:00 UTC
You can download the file from here:

http://home.JCABs-Rumblings.com/ftp/cpp_grammar_error.zip

It's a ZIP archive including the preprocessed .ii file, the original C++ source file, and the error spew.

You can read the tracking of the bug so far on the MinGW pages in SourceForge:

https://sourceforge.net/tracker/?func=detail&atid=102435&aid=632454&group_id=2435

Basically, when compiling the file, using this command: 

c:\mingw\bin\g++ -O2 -ftemplate-depth-500 -o 
cpp_grammar.o -c cpp_grammar.ii 

I get an error in a piece of code that looks like this: 

--- 
struct cpp_grammar: grammar<cpp_grammar> { 

... 

template <typename ScannerT> 
struct definition: 
cpp_expressions<ScannerT> 
{ 
... 
template < typename ParserT > 
struct brace_block_functor { 
... 
}; 

template < typename ParserT > 
static 
functor_parser<brace_block_functor<ParserT> > // 
line 2306 
brace_block(ParserT const& parser) { 
return brace_block_functor<ParserT>(parser); 
}; 
... 
}; 
... 
}; 
--- 

The error (sans the "instantiated from" super-spew) says 
this: 

--- 
cpp_grammar.cpp:2306: type/value mismatch at 
argument 1 in template parameter 
list for `template<class FunctorT> struct 
spirit::functor_parser' 
cpp_grammar.cpp:2306: expected a type, got 
`brace_block_functor' 
cpp_grammar.cpp:2306: confused by earlier errors, 
bailing out 
--- 

This is patently wrong. In fact, I have a CygWin with 
GCC 3.0.3 that compiles this program perfectly. 

In tracking this with the MinGW people, they've tried this file with the newest 3.3 compiler, and gotten other errors.

Release:
MinGW 2.0.0-3 (GCC 3.2)

Environment:
Windows 2000, MinGW 2.0.0-3, Spirit 1.5.1 (latest CVS)

How-To-Repeat:
Compile the cpp_grammar.ii file from the ZIP file above, using the following command line:

c:\mingw\bin\g++ -O2 -ftemplate-depth-500 -o 
cpp_grammar.o -c cpp_grammar.ii
Comment 1 Wolfgang Bangerth 2002-11-04 07:55:10 UTC
State-Changed-From-To: open->analyzed
State-Changed-Why: I can confirm the messages on Linux from your preprocessed 
    sources, but it is very hard to tell whether they are justfied
    or not, as the file has some 59,000 lines and invokes all
    kinds of template stuff (not that I would be unused to that
    but this seems messy). Could you try to condense the
    problem into a smaller testcase where it is simpler to
    see whether the error is justified or not?
    
    Thanks
      Wolfgang
Comment 2 jcab 2002-11-04 08:48:05 UTC
From: Juan Carlos Arevalo-Baeza <jcab@JCABs-Rumblings.com>
To: <bangerth@dealii.org>, <gcc-bugs@gcc.gnu.org>,
	<gcc-prs@gcc.gnu.org>, <jcab@JCABs-Rumblings.com>,
	<nobody@gcc.gnu.org>, <gcc-gnats@gcc.gnu.org>,
	<gcc-bugs@gcc.gnu.org>, <gcc-prs@gcc.gnu.org>, <nobody@gcc.gnu.org>
Cc:  
Subject: Re: c++/8442: Wrongful compiler error - file available
Date: Mon, 4 Nov 2002 08:48:05 -0800

 On 4 Nov 2002 15:55:11 -0000, bangerth@dealii.org wrote:
 >Synopsis: Wrongful compiler error - file available
 >
 >I can confirm the messages on Linux from your preprocessed
 >sources, but it is very hard to tell whether they are justfied
 >or not, as the file has some 59,000 lines and invokes all
 >kinds of template stuff (not that I would be unused to that
 >but this seems messy).
 
    Yes, Spirit is a complex beast. I'm sorry about that. I've=
  tried extracting the error bits, but I've been uncuccessful so=
  far. It seems to me that something in the chain of template=
  instantiations is fooling the compiler into thinking that either=
  brace_block_functor is not in scope, or something like that.
 
 >Could you try to condense the
 >problem into a smaller testcase where it is simpler to
 >see whether the error is justified or not?
 
    Maybe I can condense the error as I see it here. The code=
  looks like this:
 
 (line 2304.cpp, line 60573.ii)
 template < typename ParserT >
 static
 functor_parser<this_t::brace_block_functor<ParserT> >
 brace_block(ParserT const& parser) {
     return brace_block_functor<ParserT>(parser);
 };
 
 functor_parser is a template class that takes a single type=
  parameter, and can be implicitly constructed from that type.=
  Defined in line 50729.ii.
 
 brace_block_functor is defined in the same scope as the=
  brace_block file above, as a template class that takes a single=
  template parameter.
 
 this_t is the current scope (class scope), but it is=
  inconsequential (it was a test trying to track down this=
  problem). You get the same error without it.
 
    For some reason, according to the error messages, the compiler=
  thinks that brace_block_functor should be a type, instead of a=
  template.
 
    I tried generating similar situations using simpler code,=
  without success. The problem is that the call to this function=
  is generated kind of deep into the template instantiations, and=
  extracting the call doesn't seem to show the problem.
 
    I'll keep trying. Thanx!
 
 =A0=A0=A0Salutaciones,
 =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0JCAB
 email: jcab@JCABs-Rumblings.com
 ICQ: 10913692 @WORK: 101728263
 WWW: http://www.JCABs-Rumblings.com
 

Comment 3 Wolfgang Bangerth 2002-11-04 10:58:35 UTC
From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: Juan Carlos Arevalo-Baeza <jcab@JCABs-Rumblings.com>
Cc: gcc-bugs@gcc.gnu.org, <gcc-prs@gcc.gnu.org>, <nobody@gcc.gnu.org>,
   <gcc-gnats@gcc.gnu.org>
Subject: Re: c++/8442: Wrongful compiler error - file available
Date: Mon, 4 Nov 2002 10:58:35 -0600 (CST)

 >    Yes, Spirit is a complex beast. I'm sorry about that. I've tried
 > extracting the error bits, but I've been uncuccessful so far. It seems
 
 Start from the .ii file you have. First delete all the # lines, I use the 
 following perl script for that usually
   perl -pi -s 's/^#.*\n//g;' your_file.ii
 (This way, gcc tells you the real location in the file where something is 
 happening, not the location in the file from which you generated the .ii 
 file.) Then start deleting parts of the file that are not necessary to 
 show the problem. (Function bodies, classes that are only referenced in 
 the function bodies you deleted, classes and namespaces that were only 
 used in classes and namespaces you deleted, etc). In the beginning, the 
 pieces you scrap are usually small, but the blocks can become very large 
 at the end, so don't be scared if you don't make much progress in the 
 beginning.
 
 This is a tedious task, and may take an hour or two, but in the end you
 usually end up with something that has 10-50 lines of code and still shows
 the problem. With such an example, it is also possible for someone who is
 not used to your code to see whether this is wrong or right. Otherwise, it
 is very hard to see...
 
 Regards
   Wolfgang
 
 -------------------------------------------------------------------------
 Wolfgang Bangerth              email:           bangerth@ticam.utexas.edu
                                www: http://www.ticam.utexas.edu/~bangerth
 
 

Comment 4 jcab 2002-11-05 00:36:05 UTC
From: Juan Carlos Arevalo-Baeza <jcab@JCABs-Rumblings.com>
To: <bangerth@ticam.utexas.edu>
Cc: <gcc-bugs@gcc.gnu.org>, <gcc-prs@gcc.gnu.org>,
	<nobody@gcc.gnu.org>, <gcc-gnats@gcc.gnu.org>
Subject: Re: c++/8442: Wrongful compiler error - file available
Date: Tue, 5 Nov 2002 00:36:05 -0800

 On Mon, 4 Nov 2002 10:58:35 -0600 (CST), Wolfgang Bangerth=
  wrote:
 >
 >>Yes, Spirit is a complex beast. I'm sorry about that. I've=
  tried
 >>extracting the error bits, but I've been uncuccessful so far.=
  It seems
 >
 >Start from the .ii file you have. First delete all the # lines,=
  I use the
 >following perl script for that usually
 >perl -pi -s 's/^#.*\n//g;' your_file.ii
 >(This way, gcc tells you the real location in the file where=
  something is
 >happening, not the location in the file from which you generated=
  the .ii
 >file.) Then start deleting parts of the file that are not=
  necessary to
 >show the problem. (Function bodies, classes that are only=
  referenced in
 >the function bodies you deleted, classes and namespaces that=
  were only
 >used in classes and namespaces you deleted, etc). In the=
  beginning, the
 >pieces you scrap are usually small, but the blocks can become=
  very large
 >at the end, so don't be scared if you don't make much progress=
  in the
 >beginning.
 >
 >This is a tedious task, and may take an hour or two, but in the=
  end you
 >usually end up with something that has 10-50 lines of code and=
  still shows
 >the problem. With such an example, it is also possible for=
  someone who is
 >not used to your code to see whether this is wrong or right.=
  Otherwise, it
 >is very hard to see...
 
    Ok. I managed to do as you say (turned out step by step as you=
  say <g>), and boiled it down to this code:
 
 ---
 template < class FunctorT >
 struct functor_parser {
 };
 
 template < typename ScannerT >
 struct definition
 {
     template < typename ParserT >
     struct brace_block_functor {
     };
 
     template < typename ParserT >
     static
     functor_parser<brace_block_functor<ParserT> >*
     brace_block(ParserT const& parser) { // line 15
         return 0;
     };
 };
 
 definition<char const*> def; // line 20
 ---
 
    Error spew:
 
 ---
 bug.ii: In instantiation of `definition<const char*>':
 bug.ii:20:   instantiated from here
 bug.ii:15: type/value mismatch at argument 1 in template=
  parameter list for `
    template<class FunctorT> struct functor_parser'
 bug.ii:15:   expected a type, got `brace_block_functor'
 bug.ii:15: confused by earlier errors, bailing out
 ---
 
    This is clearly wrong.
 
 =A0=A0=A0Salutaciones,
 =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0JCAB
 email: jcab@JCABs-Rumblings.com
 ICQ: 10913692 @WORK: 101728263
 WWW: http://www.JCABs-Rumblings.com
 

Comment 5 Volker Reichelt 2002-11-05 16:33:19 UTC
From: Reichelt <reichelt@igpm.rwth-aachen.de>
To: jcab@JCABs-Rumblings.com, gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org,
        nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/8442: Wrongful compiler error - file available
Date: Tue, 5 Nov 2002 16:33:19 +0100

 Hi,
 
 here's a little cleaned-up testcase:
 
 --------------------------------snip here-----------------------------
 template <typename T> struct A {};
 
 template <typename T> struct B
 {
     template <typename U> struct C {};
     template <typename U> A<C<U> > foo(U);
 };
 
 B<void> b;
 --------------------------------snip here-----------------------------
 
 With gcc 2.95.x and gcc 3.0.x the code compiles fine. With mainline
 we get the following ICE
 
 PR8442.cc: In instantiation of `B<void>':
 PR8442.cc:9:   instantiated from here
 PR8442.cc:6: error: type/value mismatch at argument 1 in template parameter 
    list for `template<class T> struct A'
 PR8442.cc:6: error:   expected a type, got `C'
 PR8442.cc:6: internal compiler error: tree check: expected var_decl, have 
    error_mark in tsubst_decl, at cp/pt.c:5793
 Please submit a full bug report, [etc.]
 
 which is replaced by an "confused by earlier errors" on the 3.2 branch
 (checked on i686-pc-linux-gnu and mips-sgi-irix6.5).
 
 Since this a regression, I rated the PR "high priority".
 
 Greetings,
 Volker
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8442
 
 
Comment 6 Kriang Lerdsuwanakij 2002-11-28 07:30:57 UTC
Responsible-Changed-From-To: unassigned->lerdsuwa
Responsible-Changed-Why: Will look at it.
Comment 7 Wolfgang Bangerth 2002-12-14 14:46:39 UTC
From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: gcc-gnats@gcc.gnu.org
Cc:  
Subject: Re: c++:8442
Date: Sat, 14 Dec 2002 14:46:39 -0600 (CST)

 This is the ChangeLog of the patch that introduced the failure in the high
 priority PR 8442:
 
   2002-01-02  Nathan Sidwell  <nathan@codesourcery.com>
 
 	PR c++/5213
 	* pt.c (convert_template_argument): Be more careful determining
 	when RECORD_TYPE templates are or are not templates.
 
 The testcase is as follows:
 ---------------------
 template <typename T> struct A {};
 
 template <typename T> struct B
 {
     template <typename U> struct C {};
     template <typename U> A<C<U> > foo(U);
 };
 
 B<void> b;
 ---------------------
 
 and it fails with this (line numbers differ) where it succeeded before:
 bash-2.05$ ../gcc/bin-2002-01-03/gcc/cc1plus -quiet PR8442.cc
 PR8442.cc: In instantiation of `B<void>':
 PR8442.cc:14:   instantiated from here
 PR8442.cc:11: type/value mismatch at argument 1 in template parameter list for
    `template<class T> struct A'
 PR8442.cc:11:   expected a type, got `C'
 PR8442.cc:11: confused by earlier errors, bailing out
 
 Nathan, would you mind taking a look at this?
 
 Regards
   Wolfgang
 
 -------------------------------------------------------------------------
 Wolfgang Bangerth              email:           bangerth@ticam.utexas.edu
                                www: http://www.ticam.utexas.edu/~bangerth
 
 
 
 

Comment 8 Kriang Lerdsuwanakij 2002-12-16 23:23:06 UTC
From: Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
To: jcab@JCABs-Rumblings.com, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
        lerdsuwa@gcc.gnu.org, gcc-bugs@gcc.gnu.org
Cc:  
Subject: Re: c++/8442: [3.2/3.3 regression] ICE on nested template classes
Date: Mon, 16 Dec 2002 23:23:06 +0700

 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8442
 
 Patch submitted for 3.2 and 3.3:
 
    http://gcc.gnu.org/ml/gcc-patches/2002-12/msg00172.html
 
 It is waiting for approval.  For the main trunk, I would like to
 wait for the new parser merge first before relook at this PR.
 
 --Kriang
 

Comment 9 Kriang Lerdsuwanakij 2002-12-18 14:58:36 UTC
From: lerdsuwa@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org
Cc:  
Subject: c++/8442
Date: 18 Dec 2002 14:58:36 -0000

 CVSROOT:	/cvs/gcc
 Module name:	gcc
 Branch: 	gcc-3_2-branch
 Changes by:	lerdsuwa@gcc.gnu.org	2002-12-18 06:58:35
 
 Modified files:
 	gcc/cp         : ChangeLog decl2.c pt.c 
 	gcc/testsuite  : ChangeLog 
 	gcc/testsuite/g++.dg/template: ttp3.C 
 Added files:
 	gcc/testsuite/g++.dg/template: type2.C 
 
 Log message:
 	PR c++/8442
 	* decl2.c (handle_class_head): Verify if the looked up name is a
 	type or template.
 	* pt.c (convert_template_argument): Fix type or template template
 	parameter decision logic.
 	
 	* g++.dg/template/type2.C: New test.
 	* g++.dg/template/ttp3.C: Change expected error message.
 
 Patches:
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=1.2685.2.114.2.54&r2=1.2685.2.114.2.55
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl2.c.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=1.520.2.7.2.10&r2=1.520.2.7.2.11
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=1.578.2.11.2.7&r2=1.578.2.11.2.8
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=1.1672.2.166.2.73&r2=1.1672.2.166.2.74
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/type2.C.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=NONE&r2=1.1.2.1
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/ttp3.C.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=1.1&r2=1.1.22.1
 

Comment 10 Kriang Lerdsuwanakij 2002-12-18 16:35:12 UTC
From: lerdsuwa@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org
Cc:  
Subject: c++/8442
Date: 18 Dec 2002 16:35:12 -0000

 CVSROOT:	/cvs/gcc
 Module name:	gcc
 Branch: 	gcc-3_3-branch
 Changes by:	lerdsuwa@gcc.gnu.org	2002-12-18 08:35:12
 
 Modified files:
 	gcc/cp         : ChangeLog decl2.c pt.c 
 	gcc/testsuite  : ChangeLog 
 	gcc/testsuite/g++.dg/template: ttp3.C 
 Added files:
 	gcc/testsuite/g++.dg/template: type2.C 
 
 Log message:
 	PR c++/8442
 	* decl2.c (handle_class_head): Verify if the looked up name is a
 	type or template.
 	* pt.c (convert_template_argument): Fix type or template template
 	parameter decision logic.
 	
 	* g++.dg/template/type2.C: New test.
 	* g++.dg/template/ttp3.C: Change expected error message.
 
 Patches:
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.3076&r2=1.3076.2.1
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl2.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.575&r2=1.575.2.1
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.635&r2=1.635.2.1
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.2261&r2=1.2261.2.1
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/type2.C.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=NONE&r2=1.1.4.1
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/ttp3.C.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.1&r2=1.1.46.1
 

Comment 11 Kriang Lerdsuwanakij 2002-12-19 21:35:09 UTC
From: Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
To: jcab@JCABs-Rumblings.com, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
        lerdsuwa@gcc.gnu.org, gcc-bugs@gcc.gnu.org
Cc:  
Subject: Re: c++/8442: [3.2/3.3 regression] ICE on nested template classes
Date: Thu, 19 Dec 2002 21:35:09 +0700

 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8442
 
 Fixed in 3.2 and 3.3 branch.
 

Comment 12 Kriang Lerdsuwanakij 2003-01-27 17:24:24 UTC
From: Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
To: gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org, lerdsuwa@gcc.gnu.org,
        gcc-prs@gcc.gnu.org, jcab@JCABs-Rumblings.com
Cc:  
Subject: Re: c++/8442: [3.4 regression] ICE on nested template classes
Date: Mon, 27 Jan 2003 17:24:24 +0700

 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8442
 
 Patch submitted for 3.4:
 
 	http://gcc.gnu.org/ml/gcc-patches/2003-01/msg02100.html
 

Comment 13 Kriang Lerdsuwanakij 2003-05-16 22:38:51 UTC
From: Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
To: gcc-prs@gcc.gnu.org, jcab@JCABs-Rumblings.com, gcc-bugs@gcc.gnu.org,
       gcc-gnats@gcc.gnu.org, lerdsuwa@gcc.gnu.org
Cc:  
Subject: Re: c++/8442: [3.4 regression] ICE on nested template classes
Date: Fri, 16 May 2003 22:38:51 +0700

 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8442
 
 A revised patch is just submitted:
 
 	http://gcc.gnu.org/ml/gcc-patches/2003-05/msg01475.html
Comment 14 Andrew Pinski 2003-07-15 21:19:42 UTC
This no longer ICE on the mainline (20030715) but gcc still does not accept it.
Comment 15 Kriang Lerdsuwanakij 2003-07-19 13:06:17 UTC
New revised patch submitted:

  http://gcc.gnu.org/ml/gcc-patches/2003-07/msg01960.html
Comment 16 CVS Commits 2003-08-01 15:06:06 UTC
Subject: Bug 8442

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	lerdsuwa@gcc.gnu.org	2003-08-01 15:06:02

Modified files:
	gcc/cp         : ChangeLog NEWS class.c cp-tree.h decl.c decl2.c 
	                 parser.c pt.c rtti.c 
	gcc/testsuite  : ChangeLog 
	gcc/testsuite/g++.dg/template: ttp3.C 
	gcc/testsuite/g++.old-deja/g++.law: visibility13.C 
	gcc/testsuite/g++.old-deja/g++.niklas: t135.C 
	gcc/testsuite/g++.old-deja/g++.pt: ttp41.C ttp43.C ttp44.C 
Added files:
	gcc/testsuite/g++.dg/template: elab1.C type2.C 

Log message:
	PR c++/8442, c++/8806
	* decl.c (qualify_lookup): Accept TEMPLATE_DECL if types are
	preferred.
	(check_elaborated_type_specifier): Add allow_template_p
	parameter.  Check tag mismatch and class template.
	(xref_tag): Add template_header_p parameter.  Add assertion
	that name is an IDENTIFIER_NODE.  Remove implicit typename
	warning.  Simplify lookup process if globalize is true.
	(cxx_init_decl_processing): Adjust call to xref_tag.
	(xref_tag_from_type): Likewise.
	* decl2.c (handle_class_head): Likewise.
	* parser.c (cp_parser_elaborated_type_specifier,
	cp_parser_class_head): Likewise.
	* rtti.c (init_rtti_processing, build_dynamic_cast1,
	tinfo_base_init, emit_support_tinfos): Likewise.
	* class.c (is_base_of_enclosing_class): Remove.
	* pt.c (convert_template_argument): Don't accept RECORD_TYPE as
	template template argument.
	* cp-tree.h (xref_tag): Adjust declaration.
	(is_base_of_enclosing_class): Remove.
	* NEWS: Document template template argument change.
	
	* g++.dg/template/elab1.C: Likewise.
	* g++.dg/template/type2.C: Likewise.
	* g++.dg/template/ttp3.C: Adjust expected error message.
	* g++.old-deja/g++.law/visibility13.C: Likewise.
	* g++.old-deja/g++.niklas/t135.C: Likewise.
	* g++.old-deja/g++.pt/ttp41.C: Likewise.
	* g++.old-deja/g++.pt/ttp43.C: Use qualified name for template
	template argument.
	* g++.old-deja/g++.pt/ttp44.C: Likewise.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.3578&r2=1.3579
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/NEWS.diff?cvsroot=gcc&r1=1.39&r2=1.40
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/class.c.diff?cvsroot=gcc&r1=1.559&r2=1.560
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/cp-tree.h.diff?cvsroot=gcc&r1=1.894&r2=1.895
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&r1=1.1105&r2=1.1106
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl2.c.diff?cvsroot=gcc&r1=1.654&r2=1.655
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/parser.c.diff?cvsroot=gcc&r1=1.96&r2=1.97
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&r1=1.747&r2=1.748
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/rtti.c.diff?cvsroot=gcc&r1=1.171&r2=1.172
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.2942&r2=1.2943
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/elab1.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/type2.C.diff?cvsroot=gcc&r1=1.1&r2=1.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/ttp3.C.diff?cvsroot=gcc&r1=1.1&r2=1.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.law/visibility13.C.diff?cvsroot=gcc&r1=1.10&r2=1.11
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.niklas/t135.C.diff?cvsroot=gcc&r1=1.3&r2=1.4
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.pt/ttp41.C.diff?cvsroot=gcc&r1=1.3&r2=1.4
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.pt/ttp43.C.diff?cvsroot=gcc&r1=1.3&r2=1.4
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.old-deja/g++.pt/ttp44.C.diff?cvsroot=gcc&r1=1.3&r2=1.4

Comment 17 Kriang Lerdsuwanakij 2003-08-01 15:08:52 UTC
Fixed in GCC 3.4.