r246837 - Cleanups, no functionality change.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 3 21:09:21 PDT 2015


Author: rsmith
Date: Thu Sep  3 23:09:21 2015
New Revision: 246837

URL: http://llvm.org/viewvc/llvm-project?rev=246837&view=rev
Log:
Cleanups, no functionality change.

Modified:
    cfe/trunk/lib/Sema/SemaDecl.cpp

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=246837&r1=246836&r2=246837&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Thu Sep  3 23:09:21 2015
@@ -14014,25 +14014,23 @@ static void CheckForDuplicateEnumValues(
   }
 }
 
-bool
-Sema::IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val,
-                        bool AllowMask) const {
+bool Sema::IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val,
+                             bool AllowMask) const {
   assert(ED->hasAttr<FlagEnumAttr>() && "looking for value in non-flag enum");
+  assert(ED->isCompleteDefinition() && "expected enum definition");
 
   auto R = FlagBitsCache.insert(std::make_pair(ED, llvm::APInt()));
   llvm::APInt &FlagBits = R.first->second;
 
   if (R.second) {
     for (auto *E : ED->enumerators()) {
-      const auto &Val = E->getInitVal();
+      const auto &EVal = E->getInitVal();
       // Only single-bit enumerators introduce new flag values.
-      if (Val.isPowerOf2())
-        FlagBits = FlagBits.zextOrSelf(Val.getBitWidth()) | Val;
+      if (EVal.isPowerOf2())
+        FlagBits = FlagBits.zextOrSelf(EVal.getBitWidth()) | EVal;
     }
   }
 
-  llvm::APInt FlagMask = ~FlagBits.zextOrTrunc(Val.getBitWidth());
-
   // A value is in a flag enum if either its bits are a subset of the enum's
   // flag bits (the first condition) or we are allowing masks and the same is
   // true of its complement (the second condition). When masks are allowed, we
@@ -14041,11 +14039,8 @@ Sema::IsValueInFlagEnum(const EnumDecl *
   // While it's true that any value could be used as a mask, the assumption is
   // that a mask will have all of the insignificant bits set. Anything else is
   // likely a logic error.
-  if (!(FlagMask & Val) ||
-      (AllowMask && !(FlagMask & ~Val)))
-    return true;
-
-  return false;
+  llvm::APInt FlagMask = ~FlagBits.zextOrTrunc(Val.getBitWidth());
+  return !(FlagMask & Val) || (AllowMask && !(FlagMask & ~Val));
 }
 
 void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc,
@@ -14261,6 +14256,11 @@ void Sema::ActOnEnumBody(SourceLocation
       ECD->setType(NewTy);
   }
 
+  Enum->completeDefinition(BestType, BestPromotionType,
+                           NumPositiveBits, NumNegativeBits);
+
+  CheckForDuplicateEnumValues(*this, Elements, Enum, EnumType);
+
   if (Enum->hasAttr<FlagEnumAttr>()) {
     for (Decl *D : Elements) {
       EnumConstantDecl *ECD = cast_or_null<EnumConstantDecl>(D);
@@ -14274,11 +14274,6 @@ void Sema::ActOnEnumBody(SourceLocation
     }
   }
 
-  Enum->completeDefinition(BestType, BestPromotionType,
-                           NumPositiveBits, NumNegativeBits);
-
-  CheckForDuplicateEnumValues(*this, Elements, Enum, EnumType);
-
   // Now that the enum type is defined, ensure it's not been underaligned.
   if (Enum->hasAttrs())
     CheckAlignasUnderalignment(Enum);




More information about the cfe-commits mailing list