Author: dgregor Date: Sun May 30 17:30:21 2010 New Revision: 105178 URL: http://llvm.org/viewvc/llvm-project?rev=105178&view=rev Log: Don't try to parse class template specializations in C. It can only lead to heartache. Fixes <rdar://problem/8044088>.
Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp cfe/trunk/test/Parser/declarators.c Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=105178&r1=105177&r2=105178&view=diff ============================================================================== --- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original) +++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Sun May 30 17:30:21 2010 @@ -670,7 +670,7 @@ Name = Tok.getIdentifierInfo(); NameLoc = ConsumeToken(); - if (Tok.is(tok::less)) { + if (Tok.is(tok::less) && getLang().CPlusPlus) { // The name was supposed to refer to a template, but didn't. // Eat the template argument list and try to continue parsing this as // a class (or template thereof). @@ -713,8 +713,6 @@ const_cast<ParsedTemplateInfo&>(TemplateInfo).ExternLoc = SourceLocation(); } - - } } else if (Tok.is(tok::annot_template_id)) { TemplateId = static_cast<TemplateIdAnnotation *>(Tok.getAnnotationValue()); Modified: cfe/trunk/test/Parser/declarators.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/declarators.c?rev=105178&r1=105177&r2=105178&view=diff ============================================================================== --- cfe/trunk/test/Parser/declarators.c (original) +++ cfe/trunk/test/Parser/declarators.c Sun May 30 17:30:21 2010 @@ -83,3 +83,6 @@ // rdar://7608537 struct test13 { int a; } (test13x); + +// <rdar://problem/8044088> +struct X<foo::int> { }; // expected-error{{expected identifier or '('}} _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits