r360369 - Simplify tracking of end of consumed decl-specifier sequence.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Thu May 9 12:45:46 PDT 2019


Author: rsmith
Date: Thu May  9 12:45:46 2019
New Revision: 360369

URL: http://llvm.org/viewvc/llvm-project?rev=360369&view=rev
Log:
Simplify tracking of end of consumed decl-specifier sequence.

Patch by Tyker!

Differential Revision: https://reviews.llvm.org/D60934

Modified:
    cfe/trunk/lib/Parse/ParseDecl.cpp

Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=360369&r1=360368&r2=360369&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Thu May  9 12:45:46 2019
@@ -3004,12 +3004,12 @@ void Parser::ParseDeclarationSpecifiers(
   while (1) {
     bool isInvalid = false;
     bool isStorageClass = false;
-    bool isAlreadyConsumed = false;
     const char *PrevSpec = nullptr;
     unsigned DiagID = 0;
 
-    // This value need to be set when isAlreadyConsumed is set to true.
-    SourceLocation RangeEnd;
+    // This value needs to be set to the location of the last token if the last
+    // token of the specifier is already consumed.
+    SourceLocation ConsumedEnd;
 
     // HACK: MSVC doesn't consider _Atomic to be a keyword and its STL
     // implementation for VS2013 uses _Atomic as an identifier for one of the
@@ -3566,8 +3566,7 @@ void Parser::ParseDeclarationSpecifiers(
       SourceLocation ExplicitLoc = Loc;
       SourceLocation CloseParenLoc;
       ExplicitSpecifier ExplicitSpec(nullptr, ExplicitSpecKind::ResolvedTrue);
-      isAlreadyConsumed = true;
-      RangeEnd = ExplicitLoc;
+      ConsumedEnd = ExplicitLoc;
       ConsumeToken(); // kw_explicit
       if (Tok.is(tok::l_paren)) {
         if (getLangOpts().CPlusPlus2a) {
@@ -3575,7 +3574,7 @@ void Parser::ParseDeclarationSpecifiers(
           BalancedDelimiterTracker Tracker(*this, tok::l_paren);
           Tracker.consumeOpen();
           ExplicitExpr = ParseConstantExpression();
-          RangeEnd = Tok.getLocation();
+          ConsumedEnd = Tok.getLocation();
           if (ExplicitExpr.isUsable()) {
             CloseParenLoc = Tok.getLocation();
             Tracker.consumeClose();
@@ -3934,10 +3933,7 @@ void Parser::ParseDeclarationSpecifiers(
       continue;
     }
 
-    assert((!isAlreadyConsumed || RangeEnd != SourceLocation()) &&
-                                     "both or neither of isAlreadyConsumed and "
-                                     "RangeEnd needs to be set");
-    DS.SetRangeEnd(isAlreadyConsumed ? RangeEnd : Tok.getLocation());
+    DS.SetRangeEnd(ConsumedEnd.isValid() ? ConsumedEnd : Tok.getLocation());
 
     // If the specifier wasn't legal, issue a diagnostic.
     if (isInvalid) {
@@ -3958,7 +3954,7 @@ void Parser::ParseDeclarationSpecifiers(
         Diag(Loc, DiagID) << PrevSpec;
     }
 
-    if (DiagID != diag::err_bool_redeclaration && !isAlreadyConsumed)
+    if (DiagID != diag::err_bool_redeclaration && ConsumedEnd.isInvalid())
       // After an error the next token can be an annotation token.
       ConsumeAnyToken();
 




More information about the cfe-commits mailing list