Skip to content

Commit ac70008

Browse files
committed
Improve multideps base expr. caching.
Closes llvm#98
1 parent f8f8aa9 commit ac70008

File tree

3 files changed

+5
-6
lines changed

3 files changed

+5
-6
lines changed

clang/lib/Parse/ParseExpr.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3301,12 +3301,9 @@ ExprResult Parser::ParseOSSMultiDepExpression() {
33013301

33023302
CachedTokens LateParsedTokens;
33033303
// Save stmt to parse it after declaring iterators
3304-
while (Tok.isNot(tok::comma) &&
3305-
Tok.isNot(tok::r_brace) &&
3306-
Tok.isNot(tok::annot_pragma_ompss_end)) {
3307-
LateParsedTokens.push_back(Tok);
3308-
ConsumeAnyToken();
3309-
}
3304+
ConsumeAndStoreUntil(
3305+
tok::comma, tok::r_brace, LateParsedTokens,
3306+
/* StopAtSemi=*/ false, /* ConsumeFinalToken= */false);
33103307

33113308
ParseScope OSSMultiDepScope(this, Scope::DeclScope | Scope::CompoundStmtScope);
33123309

clang/test/OmpSs/Sema/multideps.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,6 @@ int main() {
5050
#pragma oss task in( { v1[i], i = 0:10:1 }[2], v ) // expected-error {{expected ',' or ')' in 'in' clause}} expected-error {{expected expression}}
5151
#pragma oss task in( { v[i], i = { ,}, j = i: } ) // expected-error 2 {{expected expression}}
5252
#pragma oss task in( { v[i], i = 0:v:v1 } ) // expected-error {{expression must have integral or unscoped enumeration type, not 'int [10][20]'}} expected-error {{expression must have integral or unscoped enumeration type, not 'int [10]'}}
53+
#pragma oss task in( { v[1, 2], i=0;10 } ) // expected-warning {{expression result unused}}
5354
{}
5455
}

clang/test/OmpSs/Sema/multideps.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ void foo() {
5050
#pragma oss task in( { v1[i], i = 0:10:1 }[2], v ) // expected-error {{expected ',' or ')' in 'in' clause}} expected-error {{expected expression}}
5151
#pragma oss task in( { v[i], i = { ,}, j = i: } ) // expected-error 2 {{expected expression}}
5252
#pragma oss task in( { v[i], i = 0:v:v1 } ) // expected-error {{expression must have integral or unscoped enumeration type, not 'int [10][10]'}} expected-error {{expression must have integral or unscoped enumeration type, not 'int [10]'}}
53+
#pragma oss task in( { v[1, 2], i=0;10 } ) // expected-warning {{expression result unused}}
5354
{}
5455
}
5556

0 commit comments

Comments
 (0)