static bool UseNSOptionsMacro(ASTContext &Ctx, const EnumDecl *EnumDcl) { bool PowerOfTwo = true; for (EnumDecl::enumerator_iterator EI = EnumDcl->enumerator_begin(), EE = EnumDcl->enumerator_end(); EI != EE; ++EI) { EnumConstantDecl *Enumerator = (*EI); const Expr *InitExpr = Enumerator->getInitExpr(); if (!InitExpr) { PowerOfTwo = false; continue; } InitExpr = InitExpr->IgnoreImpCasts(); if (const BinaryOperator *BO = dyn_cast<BinaryOperator>(InitExpr)) if (BO->isShiftOp() || BO->isBitwiseOp()) return true; uint64_t EnumVal = Enumerator->getInitVal().getZExtValue(); if (PowerOfTwo && EnumVal && !llvm::isPowerOf2_64(EnumVal)) PowerOfTwo = false; } return PowerOfTwo; }