From: Fariborz Jahanian Date: Tue, 17 Sep 2013 23:32:51 +0000 (+0000) Subject: ObjectiveC migrator. infer NS_OPTIONS correctly in the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bb2405f293c79732748282538198e1d2d0f1b459;p=clang ObjectiveC migrator. infer NS_OPTIONS correctly in the presense of parenthesized enumerator initializers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190901 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp index c15b410744..5d36fa7b8a 100644 --- a/lib/ARCMigrate/ObjCMT.cpp +++ b/lib/ARCMigrate/ObjCMT.cpp @@ -508,7 +508,7 @@ static bool UseNSOptionsMacro(Preprocessor &PP, ASTContext &Ctx, PowerOfTwo = false; continue; } - InitExpr = InitExpr->IgnoreImpCasts(); + InitExpr = InitExpr->IgnoreParenCasts(); if (const BinaryOperator *BO = dyn_cast(InitExpr)) if (BO->isShiftOp() || BO->isBitwiseOp()) return true; diff --git a/test/ARCMT/objcmt-ns-macros.m b/test/ARCMT/objcmt-ns-macros.m index ccf666c1e0..edc3ffd404 100644 --- a/test/ARCMT/objcmt-ns-macros.m +++ b/test/ARCMT/objcmt-ns-macros.m @@ -126,3 +126,23 @@ typedef enum { D_NSTickMarkAbove = 1 } D_NSTickMarkPosition DEPRECATED; + +#define NS_ENUM_AVAILABLE(X,Y) + +enum { + NSFStrongMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 0), + NSFOpaqueMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 0), + NSFMallocMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 0), + NSFMachVirtualMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 0), + NSFWeakMemory NS_ENUM_AVAILABLE(10_8, 6_0) = (5UL << 0), + + NSFObjectPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 8), + NSFOpaquePersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 8), + NSFObjectPointerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 8), + NSFCStringPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 8), + NSFStructPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 8), + NSFIntegerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (5UL << 8), + NSFCopyIn NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 16), +}; + +typedef NSUInteger NSFOptions; diff --git a/test/ARCMT/objcmt-ns-macros.m.result b/test/ARCMT/objcmt-ns-macros.m.result index b94b31b882..674de3e916 100644 --- a/test/ARCMT/objcmt-ns-macros.m.result +++ b/test/ARCMT/objcmt-ns-macros.m.result @@ -126,3 +126,23 @@ typedef enum { D_NSTickMarkAbove = 1 } D_NSTickMarkPosition DEPRECATED; + +#define NS_ENUM_AVAILABLE(X,Y) + +typedef NS_OPTIONS(NSUInteger, NSFOptions) { + NSFStrongMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 0), + NSFOpaqueMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 0), + NSFMallocMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 0), + NSFMachVirtualMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 0), + NSFWeakMemory NS_ENUM_AVAILABLE(10_8, 6_0) = (5UL << 0), + + NSFObjectPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 8), + NSFOpaquePersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 8), + NSFObjectPointerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 8), + NSFCStringPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 8), + NSFStructPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 8), + NSFIntegerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (5UL << 8), + NSFCopyIn NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 16), +}; + +