forked from OSchip/llvm-project
parser: improve diagnostics for MS attributes
Switch to using BalancedDelimiterTracker to get better diagnostics for unbalanced delimiters. This still does not handle any of the attributes, simply improves the parsing. llvm-svn: 239758
This commit is contained in:
parent
717820faa0
commit
425efcf6ea
|
@ -3780,7 +3780,7 @@ SourceLocation Parser::SkipCXX11Attributes() {
|
|||
return EndLoc;
|
||||
}
|
||||
|
||||
/// ParseMicrosoftAttributes - Parse a Microsoft attribute [Attr]
|
||||
/// ParseMicrosoftAttributes - Parse Microsoft attributes [Attr]
|
||||
///
|
||||
/// [MS] ms-attribute:
|
||||
/// '[' token-seq ']'
|
||||
|
@ -3792,13 +3792,15 @@ void Parser::ParseMicrosoftAttributes(ParsedAttributes &attrs,
|
|||
SourceLocation *endLoc) {
|
||||
assert(Tok.is(tok::l_square) && "Not a Microsoft attribute list");
|
||||
|
||||
while (Tok.is(tok::l_square)) {
|
||||
do {
|
||||
// FIXME: If this is actually a C++11 attribute, parse it as one.
|
||||
ConsumeBracket();
|
||||
BalancedDelimiterTracker T(*this, tok::l_square);
|
||||
T.consumeOpen();
|
||||
SkipUntil(tok::r_square, StopAtSemi | StopBeforeMatch);
|
||||
if (endLoc) *endLoc = Tok.getLocation();
|
||||
ExpectAndConsume(tok::r_square);
|
||||
}
|
||||
T.consumeClose();
|
||||
if (endLoc)
|
||||
*endLoc = T.getCloseLocation();
|
||||
} while (Tok.is(tok::l_square));
|
||||
}
|
||||
|
||||
void Parser::ParseMicrosoftIfExistsClassDeclaration(DeclSpec::TST TagType,
|
||||
|
|
|
@ -52,6 +52,9 @@ void deprecated_enum_test(void) {
|
|||
[returnvalue:SA_Post( attr=1)]
|
||||
int foo1([SA_Post(attr=1)] void *param);
|
||||
|
||||
[unbalanced(attribute) /* expected-note {{to match this '['}} */
|
||||
void f(void); /* expected-error {{expected ']'}} */
|
||||
|
||||
void ms_intrinsics(int a) {
|
||||
__noop();
|
||||
__assume(a);
|
||||
|
|
Loading…
Reference in New Issue