diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2013-09-17 23:32:51 +0000 |
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-09-17 23:32:51 +0000 |
| commit | 6e1798e36aba89cd56c4bbbd1ae3e3fd83ea9bc8 (patch) | |
| tree | e50cda32cf3ff990a749cf94b16f5c7b7f45a9f8 | |
| parent | cfe210997879cb7bd3b9835ea4931c6267286349 (diff) | |
| download | bcm5719-llvm-6e1798e36aba89cd56c4bbbd1ae3e3fd83ea9bc8.tar.gz bcm5719-llvm-6e1798e36aba89cd56c4bbbd1ae3e3fd83ea9bc8.zip | |
ObjectiveC migrator. infer NS_OPTIONS correctly in the
presense of parenthesized enumerator initializers.
llvm-svn: 190901
| -rw-r--r-- | clang/lib/ARCMigrate/ObjCMT.cpp | 2 | ||||
| -rw-r--r-- | clang/test/ARCMT/objcmt-ns-macros.m | 20 | ||||
| -rw-r--r-- | clang/test/ARCMT/objcmt-ns-macros.m.result | 20 |
3 files changed, 41 insertions, 1 deletions
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp index c15b4107444..5d36fa7b8ab 100644 --- a/clang/lib/ARCMigrate/ObjCMT.cpp +++ b/clang/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<BinaryOperator>(InitExpr)) if (BO->isShiftOp() || BO->isBitwiseOp()) return true; diff --git a/clang/test/ARCMT/objcmt-ns-macros.m b/clang/test/ARCMT/objcmt-ns-macros.m index ccf666c1e0c..edc3ffd4043 100644 --- a/clang/test/ARCMT/objcmt-ns-macros.m +++ b/clang/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/clang/test/ARCMT/objcmt-ns-macros.m.result b/clang/test/ARCMT/objcmt-ns-macros.m.result index b94b31b8820..674de3e9168 100644 --- a/clang/test/ARCMT/objcmt-ns-macros.m.result +++ b/clang/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), +}; + + |

