This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 09/07/2012 05:07 PM, Paolo Carlini wrote:Yeah. I wasn't particularly worried by that regression.the regression of template/crash83.C because of excess errors. The latter happens because we have code in cp_parser_class_head which tries to improve error recovery for cases of missing 'template <>' in explicit specializations, and, for that rather broken testcase, it confuses the code I'm tentatively adding, resulting in the additional error message below:
crash83.C:5:27: error: an explicit specialization must be preceded by âtemplate <>â
template<typename = class A<0>: > struct B {}; // { dg-error "explicit specialization|expected" }
^
crash83.C:5:27: error: too many template-parameter-lists for A<0> (should be 1)
So we're adding a second irrelevant diagnostic to go with the first one. The error in this testcase is a simple stray ':' causing a syntax error, it has nothing to do with explicit specialization. It would be nice to improve this, but given that we're already not giving the right error, adding a second wrong error doesn't seem like a big problem.
Like a nightmare ;) If I run the testsuite with the attached "p5" a lot is broken, with template templates, variadic templates, we have all sort of problems. The below is just the beginning, template/pr39425.C times out. I think we need something radically different / radically more complex.
More importantly, I'm having troubles removing the early cp_parser_check_template_parameters check in cp_parser_class_head: one issue is that it also checks for too few template-parameter-lists not just too many, and thus catches rather broken testcases like, eg, template/error7.C or template/class2.C:
template <class T> struct A { struct B; struct A::B { }; // { dg-error "" } };
This testcase is indeed ill-formed, but its ill-formedness has nothing to do with too few template-parameter-lists. The problem is that clause 9 says
If a class-head-name contains a nested-name-specifier, the class-specifier shall refer to a class that was previously declared directly in the class or namespace to which the nested-name-specifier refers, ... and the class-specifier shall appear in a namespace enclosing the previous declaration.
The definition of A::B does not appear at namespace scope, so it is ill-formed. Removing the incorrect error is an improvement, but then we need to add the correct error rather than accept the testcase.
but there are definitely more problems with just checking template_header_count < wanted too in maybe_process_partial_specialization and removing the early check, I'm seeing many, many fails if I just try to extend "p4" like that...
Like what?
Attachment:
p5
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |