The following invalid testcase causes an ICE on mainline:
=================================
namespace N {}
template<typename> struct A
{
A<typename N::X<int> > a;
};
=================================
bug.cc:5: error: 'X' in namespace 'N' does not name a type
bug.cc:5: internal compiler error: in make_typename_type, at cp/decl.c:2685
Please submit a full bug report, [etc.]
Mark, the ICE was introduced by your patch for PR18738:
http://gcc.gnu.org/ml/gcc-cvs/2004-12/msg00592.html
Before we got a regression w.r.t. the error message.
Right before the ICE we had:
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: missing `>' to terminate the template argument list
bug.cc:5: error: template argument 1 is invalid
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: missing `>' to terminate the template argument list
bug.cc:5: error: template argument 1 is invalid
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: missing `>' to terminate the template argument list
bug.cc:5: error: template argument 1 is invalid
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: missing `>' to terminate the template argument list
bug.cc:5: error: template argument 1 is invalid
bug.cc:5: error: `A< <template-parameter-1-1> >' is not a template
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: no class template named `X' in `N'
bug.cc:5: error: expected `(' before '<' token
bug.cc:5: error: expected primary-expression before "int"
bug.cc:5: error: expected `>' before "int"
bug.cc:5: error: missing `>' to terminate the template argument list
bug.cc:5: error: expected unqualified-id before '>' token
(This is probably a new record, 10 times the same message!)
Alexandre, this was introduced by your patch for PR18757:
http://gcc.gnu.org/ml/gcc-cvs/2004-12/msg00382.html
Before we only had the following error message:
bug.cc:5: error: 'X' in namespace 'N' does not name a type
bug.cc:5: error: no class template named 'X' in 'N'
bug.cc:5: error: missing '>' to terminate the template argument list
bug.cc:5: error: template argument 1 is invalid
bug.cc:5: error: expected unqualified-id before '>' token
which is much better.
While the ICE is only present on mainline (because the patch for
PR18738 has not been backported yet) the error message regression
also affects the 3.4 branch.
--
Summary: [3.4/4.0 regression] bad error message / ICE for invalid
template parameter
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Keywords: ice-on-invalid-code, error-recovery, diagnostic
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: reichelt at gcc dot gnu dot org
CC: aoliva at gcc dot gnu dot org,gcc-bugs at gcc dot gnu
dot org,mmitchel at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19253