forked from OSchip/llvm-project
Don't try to parse class template specializations in C. It can only
lead to heartache. Fixes <rdar://problem/8044088>. llvm-svn: 105178
This commit is contained in:
parent
3dbd7b51ca
commit
d5a479cbb5
|
@ -670,7 +670,7 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
|
||||||
Name = Tok.getIdentifierInfo();
|
Name = Tok.getIdentifierInfo();
|
||||||
NameLoc = ConsumeToken();
|
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.
|
// The name was supposed to refer to a template, but didn't.
|
||||||
// Eat the template argument list and try to continue parsing this as
|
// Eat the template argument list and try to continue parsing this as
|
||||||
// a class (or template thereof).
|
// a class (or template thereof).
|
||||||
|
@ -713,8 +713,6 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
|
||||||
const_cast<ParsedTemplateInfo&>(TemplateInfo).ExternLoc
|
const_cast<ParsedTemplateInfo&>(TemplateInfo).ExternLoc
|
||||||
= SourceLocation();
|
= SourceLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
} else if (Tok.is(tok::annot_template_id)) {
|
} else if (Tok.is(tok::annot_template_id)) {
|
||||||
TemplateId = static_cast<TemplateIdAnnotation *>(Tok.getAnnotationValue());
|
TemplateId = static_cast<TemplateIdAnnotation *>(Tok.getAnnotationValue());
|
||||||
|
|
|
@ -83,3 +83,6 @@ void test12() {
|
||||||
|
|
||||||
// rdar://7608537
|
// rdar://7608537
|
||||||
struct test13 { int a; } (test13x);
|
struct test13 { int a; } (test13x);
|
||||||
|
|
||||||
|
// <rdar://problem/8044088>
|
||||||
|
struct X<foo::int> { }; // expected-error{{expected identifier or '('}}
|
||||||
|
|
Loading…
Reference in New Issue