summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseInit.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-10-26 23:35:51 +0000
committerChris Lattner <sabre@nondot.org>2008-10-26 23:35:51 +0000
commit248388e3131be2fda43387653ced370b6aaf95b2 (patch)
tree4229892b3e6813d6bec36ff408399316f3f610b3 /clang/lib/Parse/ParseInit.cpp
parent9a53fdc23ecdd74ae801ffa4acbf6b548fb291d4 (diff)
downloadbcm5719-llvm-248388e3131be2fda43387653ced370b6aaf95b2.tar.gz
bcm5719-llvm-248388e3131be2fda43387653ced370b6aaf95b2.zip
pass designators into sema. This completes parser-level designator
support as far as I know. llvm-svn: 58217
Diffstat (limited to 'clang/lib/Parse/ParseInit.cpp')
-rw-r--r--clang/lib/Parse/ParseInit.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/clang/lib/Parse/ParseInit.cpp b/clang/lib/Parse/ParseInit.cpp
index 655d8e75c72..82a33c21dad 100644
--- a/clang/lib/Parse/ParseInit.cpp
+++ b/clang/lib/Parse/ParseInit.cpp
@@ -236,14 +236,6 @@ ParseInitializerWithPotentialDesignator(InitListDesignations &Designations,
Parser::ExprResult Parser::ParseBraceInitializer() {
SourceLocation LBraceLoc = ConsumeBrace();
- // We support empty initializers, but tell the user that they aren't using
- // C99-clean code.
- if (Tok.is(tok::r_brace)) {
- Diag(LBraceLoc, diag::ext_gnu_empty_initializer);
- // Match the '}'.
- return Actions.ActOnInitList(LBraceLoc, 0, 0, ConsumeBrace());
- }
-
/// InitExprs - This is the actual list of expressions contained in the
/// initializer.
llvm::SmallVector<ExprTy*, 8> InitExprs;
@@ -252,6 +244,15 @@ Parser::ExprResult Parser::ParseBraceInitializer() {
/// was specified for it, if any.
InitListDesignations InitExprDesignations(Actions);
+ // We support empty initializers, but tell the user that they aren't using
+ // C99-clean code.
+ if (Tok.is(tok::r_brace)) {
+ Diag(LBraceLoc, diag::ext_gnu_empty_initializer);
+ // Match the '}'.
+ return Actions.ActOnInitList(LBraceLoc, 0, 0, InitExprDesignations,
+ ConsumeBrace());
+ }
+
bool InitExprsOk = true;
while (1) {
@@ -293,8 +294,8 @@ Parser::ExprResult Parser::ParseBraceInitializer() {
if (Tok.is(tok::r_brace)) break;
}
if (InitExprsOk && Tok.is(tok::r_brace))
- return Actions.ActOnInitList(LBraceLoc, &InitExprs[0], InitExprs.size(),
- ConsumeBrace());
+ return Actions.ActOnInitList(LBraceLoc, &InitExprs[0], InitExprs.size(),
+ InitExprDesignations, ConsumeBrace());
// On error, delete any parsed subexpressions.
for (unsigned i = 0, e = InitExprs.size(); i != e; ++i)
OpenPOWER on IntegriCloud