aboutsummaryrefslogtreecommitdiff
path: root/lib/Parse/ParseDecl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Parse/ParseDecl.cpp')
-rw-r--r--lib/Parse/ParseDecl.cpp17
1 files changed, 5 insertions, 12 deletions
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp
index 1a8e5d9f95..e31b87bd43 100644
--- a/lib/Parse/ParseDecl.cpp
+++ b/lib/Parse/ParseDecl.cpp
@@ -1283,7 +1283,7 @@ void Parser::ParseTypeQualifierListOpt(DeclSpec &DS) {
DS.AddAttributes(ParseAttributes());
continue; // do *not* consume the next token!
}
-
+
// If the specifier combination wasn't legal, issue a diagnostic.
if (isInvalid) {
assert(PrevSpec && "Method did not return previous specifier!");
@@ -1943,6 +1943,7 @@ void Parser::ParseBracketDeclarator(Declarator &D) {
StaticLoc = ConsumeToken();
// If there is a type-qualifier-list, read it now.
+ // Type qualifiers in an array subscript are a C99 feature.
DeclSpec DS;
ParseTypeQualifierListOpt(DS);
@@ -1962,9 +1963,10 @@ void Parser::ParseBracketDeclarator(Declarator &D) {
if (Tok.is(tok::star) && GetLookAheadToken(1).is(tok::r_square)) {
ConsumeToken(); // Eat the '*'.
- if (StaticLoc.isValid())
+ if (StaticLoc.isValid()) {
Diag(StaticLoc, diag::err_unspecified_vla_size_with_static);
- StaticLoc = SourceLocation(); // Drop the static.
+ StaticLoc = SourceLocation(); // Drop the static.
+ }
isStar = true;
} else if (Tok.isNot(tok::r_square)) {
// Parse the assignment-expression now.
@@ -1980,15 +1982,6 @@ void Parser::ParseBracketDeclarator(Declarator &D) {
MatchRHSPunctuation(tok::r_square, StartLoc);
- // If C99 isn't enabled, emit an ext-warn if the arg list wasn't empty and if
- // it was not a constant expression.
- if (!getLang().C99) {
- // TODO: check C90 array constant exprness.
- if (isStar || StaticLoc.isValid() ||
- 0/*TODO: NumElts is not a C90 constantexpr */)
- Diag(StartLoc, diag::ext_c99_array_usage);
- }
-
// Remember that we parsed a pointer type, and remember the type-quals.
D.AddTypeInfo(DeclaratorChunk::getArray(DS.getTypeQualifiers(),
StaticLoc.isValid(), isStar,