summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/ARCMigrate/ObjCMT.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp
index cffa625d3bd..c29a2de46b5 100644
--- a/clang/lib/ARCMigrate/ObjCMT.cpp
+++ b/clang/lib/ARCMigrate/ObjCMT.cpp
@@ -498,7 +498,7 @@ static bool rewriteToNSMacroDecl(const EnumDecl *EnumDcl,
static bool UseNSOptionsMacro(Preprocessor &PP, ASTContext &Ctx,
const EnumDecl *EnumDcl) {
bool PowerOfTwo = true;
- bool FoundHexdecimalEnumerator = false;
+ bool AllHexdecimalEnumerator = true;
uint64_t MaxPowerOfTwoVal = 0;
for (EnumDecl::enumerator_iterator EI = EnumDcl->enumerator_begin(),
EE = EnumDcl->enumerator_end(); EI != EE; ++EI) {
@@ -506,6 +506,7 @@ static bool UseNSOptionsMacro(Preprocessor &PP, ASTContext &Ctx,
const Expr *InitExpr = Enumerator->getInitExpr();
if (!InitExpr) {
PowerOfTwo = false;
+ AllHexdecimalEnumerator = false;
continue;
}
InitExpr = InitExpr->IgnoreParenCasts();
@@ -520,7 +521,8 @@ static bool UseNSOptionsMacro(Preprocessor &PP, ASTContext &Ctx,
else if (EnumVal > MaxPowerOfTwoVal)
MaxPowerOfTwoVal = EnumVal;
}
- if (!FoundHexdecimalEnumerator) {
+ if (AllHexdecimalEnumerator && EnumVal) {
+ bool FoundHexdecimalEnumerator = false;
SourceLocation EndLoc = Enumerator->getLocEnd();
Token Tok;
if (!PP.getRawToken(EndLoc, Tok, /*IgnoreWhiteSpace=*/true))
@@ -529,9 +531,11 @@ static bool UseNSOptionsMacro(Preprocessor &PP, ASTContext &Ctx,
FoundHexdecimalEnumerator =
(StringLit[0] == '0' && (toLowercase(StringLit[1]) == 'x'));
}
+ if (!FoundHexdecimalEnumerator)
+ AllHexdecimalEnumerator = false;
}
}
- return FoundHexdecimalEnumerator || (PowerOfTwo && (MaxPowerOfTwoVal > 2));
+ return AllHexdecimalEnumerator || (PowerOfTwo && (MaxPowerOfTwoVal > 2));
}
void ObjCMigrateASTConsumer::migrateProtocolConformance(ASTContext &Ctx,
OpenPOWER on IntegriCloud