Add code generation and sema checking for __builtin_va_arg.
llvm-svn: 43006
diff --git a/clang/Parse/ParseExpr.cpp b/clang/Parse/ParseExpr.cpp
index 8a576ed..c69d4d2 100644
--- a/clang/Parse/ParseExpr.cpp
+++ b/clang/Parse/ParseExpr.cpp
@@ -793,9 +793,9 @@
switch (T) {
default: assert(0 && "Not a builtin primary expression!");
- case tok::kw___builtin_va_arg:
- Res = ParseAssignmentExpression();
- if (Res.isInvalid) {
+ case tok::kw___builtin_va_arg: {
+ ExprResult Expr = ParseAssignmentExpression();
+ if (Expr.isInvalid) {
SkipUntil(tok::r_paren);
return Res;
}
@@ -803,11 +803,15 @@
if (ExpectAndConsume(tok::comma, diag::err_expected_comma, "",tok::r_paren))
return ExprResult(true);
- ParseTypeName();
+ TypeTy *Ty = ParseTypeName();
- MatchRHSPunctuation(tok::r_paren, LParenLoc);
+ if (Tok.isNot(tok::r_paren)) {
+ Diag(Tok, diag::err_expected_rparen);
+ return ExprResult(true);
+ }
+ Res = Actions.ActOnVAArg(StartLoc, Expr.Val, Ty, ConsumeParen());
break;
-
+ }
case tok::kw___builtin_offsetof: {
SourceLocation TypeLoc = Tok.getLocation();
TypeTy *Ty = ParseTypeName();