On Tue, Jun 16, 2015 at 4:03 PM, Saleem Abdulrasool <compn...@compnerd.org> wrote: > Author: compnerd > Date: Tue Jun 16 15:03:47 2015 > New Revision: 239846 > > URL: http://llvm.org/viewvc/llvm-project?rev=239846&view=rev > Log: > parser: diagnose empty attribute blocks > > MS attributes do not permit empty attribute blocks. Correctly diagnose those. > We continue to parse to ensure that we recover correctly. Because the block > is > empty, we do not need to skip any tokens. > > Bonus: tweak the comment that I updated but forgot to remove the function name > in a previous commit. > > Modified: > cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td > cfe/trunk/lib/Parse/ParseDeclCXX.cpp > cfe/trunk/test/Parser/MicrosoftExtensions.c > > Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=239846&r1=239845&r2=239846&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original) > +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Tue Jun 16 15:03:47 > 2015 > @@ -1000,6 +1000,9 @@ def err_pragma_invalid_keyword : Error< > def warn_pragma_unroll_cuda_value_in_parens : Warning< > "argument to '#pragma unroll' should not be in parentheses in CUDA C/C++">, > InGroup<CudaCompat>; > + > +def err_empty_attribute_block : Error<"empty attribute block is not > allowed">;
I would prefer this to be worded differently. It's specific to Microsoft's attributes, and "attribute block" isn't a term of art I'm used to. How about: def err_empty_ms_attribute : Error<"Microsoft attribute specifier cannot be empty">; > + > } // end of Parse Issue category. > > let CategoryName = "Modules Issue" in { > > Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=239846&r1=239845&r2=239846&view=diff > ============================================================================== > --- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original) > +++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Tue Jun 16 15:03:47 2015 > @@ -3780,7 +3780,7 @@ SourceLocation Parser::SkipCXX11Attribut > return EndLoc; > } > > -/// ParseMicrosoftAttributes - Parse Microsoft attributes [Attr] > +/// Parse one or more Microsoft-style attributes [Attr] Thank you for this! :-) ~Aaron > /// > /// [MS] ms-attribute: > /// '[' token-seq ']' > @@ -3796,6 +3796,8 @@ void Parser::ParseMicrosoftAttributes(Pa > // FIXME: If this is actually a C++11 attribute, parse it as one. > BalancedDelimiterTracker T(*this, tok::l_square); > T.consumeOpen(); > + if (Tok.is(tok::r_square)) > + Diag(T.getOpenLocation(), diag::err_empty_attribute_block); > SkipUntil(tok::r_square, StopAtSemi | StopBeforeMatch); > T.consumeClose(); > if (endLoc) > > Modified: cfe/trunk/test/Parser/MicrosoftExtensions.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/MicrosoftExtensions.c?rev=239846&r1=239845&r2=239846&view=diff > ============================================================================== > --- cfe/trunk/test/Parser/MicrosoftExtensions.c (original) > +++ cfe/trunk/test/Parser/MicrosoftExtensions.c Tue Jun 16 15:03:47 2015 > @@ -55,6 +55,8 @@ int foo1([SA_Post(attr=1)] void *param); > [unbalanced(attribute) /* expected-note {{to match this '['}} */ > void f(void); /* expected-error {{expected ']'}} */ > > +[] __interface I {}; /* expected-error {{empty attribute block is not > allowed}} */ > + > void ms_intrinsics(int a) { > __noop(); > __assume(a); > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits