summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseTemplate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Parse/ParseTemplate.cpp')
-rw-r--r--clang/lib/Parse/ParseTemplate.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp
index 64fc8fdf47c..65705e8d32e 100644
--- a/clang/lib/Parse/ParseTemplate.cpp
+++ b/clang/lib/Parse/ParseTemplate.cpp
@@ -431,14 +431,24 @@ Parser::ParseTemplateIdAfterTemplateName(DeclTy *Template,
}
}
- if (Tok.isNot(tok::greater))
+ if (Tok.isNot(tok::greater) && Tok.isNot(tok::greatergreater))
return true;
- // Determine the location of the '>'. Only consume this token if the
- // caller asked us to.
+ // Determine the location of the '>' or '>>'. Only consume this
+ // token if the caller asked us to.
RAngleLoc = Tok.getLocation();
- if (ConsumeLastToken)
+ if (Tok.is(tok::greatergreater)) {
+ if (!getLang().CPlusPlus0x)
+ Diag(Tok.getLocation(), diag::err_two_right_angle_brackets_need_space);
+
+ Tok.setKind(tok::greater);
+ if (!ConsumeLastToken) {
+ // Since we're not supposed to consume the '>>' token, we need
+ // to insert a second '>' token after the first.
+ PP.EnterToken(Tok);
+ }
+ } else if (ConsumeLastToken)
ConsumeToken();
return false;
@@ -670,6 +680,6 @@ Parser::ParseTemplateArgumentList(TemplateArgList &TemplateArgs,
ConsumeToken();
}
- return Tok.isNot(tok::greater);
+ return Tok.isNot(tok::greater) && Tok.isNot(tok::greatergreater);
}
OpenPOWER on IntegriCloud