summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2014-10-09 22:04:27 +0000
committerFariborz Jahanian <fjahanian@apple.com>2014-10-09 22:04:27 +0000
commitd2241bf561c16ae50649096c5ed0ba5a2b4494a1 (patch)
tree28ead0fd2f7801549897b9dc4908964b0e263a66
parent6030e0459193d6a4bd42aab8f29000f252250290 (diff)
downloadbcm5719-llvm-d2241bf561c16ae50649096c5ed0ba5a2b4494a1.tar.gz
bcm5719-llvm-d2241bf561c16ae50649096c5ed0ba5a2b4494a1.zip
Objective-C SDK modernization. import Foundation even
when a previous definition of NS_OPTION is available ; e.g. from a pch. enhancement to rdar://18498550 llvm-svn: 219448
-rw-r--r--clang/lib/ARCMigrate/ObjCMT.cpp11
-rw-r--r--clang/test/ARCMT/objcmt-ns-macros.m.result3
-rw-r--r--clang/test/ARCMT/objcmt-undefined-ns-macros.m.result2
3 files changed, 9 insertions, 7 deletions
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp
index 7eebdb78d89..c6e4aaaac0c 100644
--- a/clang/lib/ARCMigrate/ObjCMT.cpp
+++ b/clang/lib/ARCMigrate/ObjCMT.cpp
@@ -918,8 +918,7 @@ bool ObjCMigrateASTConsumer::migrateNSEnumDecl(ASTContext &Ctx,
if (const EnumType *EnumTy = qt->getAs<EnumType>()) {
if (EnumTy->getDecl() == EnumDcl) {
bool NSOptions = UseNSOptionsMacro(PP, Ctx, EnumDcl);
- if (!Ctx.Idents.get("NS_ENUM").hasMacroDefinition() &&
- !InsertFoundation(Ctx, TypedefDcl->getLocStart()))
+ if (!InsertFoundation(Ctx, TypedefDcl->getLocStart()))
return false;
edit::Commit commit(*Editor);
rewriteToNSMacroDecl(EnumDcl, TypedefDcl, *NSAPIObj, commit, !NSOptions);
@@ -932,9 +931,7 @@ bool ObjCMigrateASTConsumer::migrateNSEnumDecl(ASTContext &Ctx,
// We may still use NS_OPTIONS based on what we find in the enumertor list.
bool NSOptions = UseNSOptionsMacro(PP, Ctx, EnumDcl);
- // For sanity check, see if macro NS_ENUM can be seen.
- if (!Ctx.Idents.get("NS_ENUM").hasMacroDefinition()
- && !InsertFoundation(Ctx, TypedefDcl->getLocStart()))
+ if (!InsertFoundation(Ctx, TypedefDcl->getLocStart()))
return false;
edit::Commit commit(*Editor);
bool Res = rewriteToNSEnumDecl(EnumDcl, TypedefDcl, *NSAPIObj,
@@ -1727,9 +1724,9 @@ bool ObjCMigrateASTConsumer::InsertFoundation(ASTContext &Ctx,
return false;
edit::Commit commit(*Editor);
if (Ctx.getLangOpts().Modules)
- commit.insert(Loc, "@import Foundation;\n");
+ commit.insert(Loc, "#ifndef NS_ENUM\n@import Foundation;\n#endif\n");
else
- commit.insert(Loc, "#import <Foundation/Foundation.h>\n");
+ commit.insert(Loc, "#ifndef NS_ENUM\n#import <Foundation/Foundation.h>\n#endif\n");
Editor->commit(commit);
FoundationIncluded = true;
return true;
diff --git a/clang/test/ARCMT/objcmt-ns-macros.m.result b/clang/test/ARCMT/objcmt-ns-macros.m.result
index 42f3239c84b..9087065c291 100644
--- a/clang/test/ARCMT/objcmt-ns-macros.m.result
+++ b/clang/test/ARCMT/objcmt-ns-macros.m.result
@@ -19,6 +19,9 @@ typedef unsigned long long uint64_t;
#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type
#define DEPRECATED __attribute__((deprecated))
+#ifndef NS_ENUM
+#import <Foundation/Foundation.h>
+#endif
typedef NS_ENUM(NSInteger, wibble) {
blah,
blarg
diff --git a/clang/test/ARCMT/objcmt-undefined-ns-macros.m.result b/clang/test/ARCMT/objcmt-undefined-ns-macros.m.result
index 92cdfe3d7cf..866e4d0e0f1 100644
--- a/clang/test/ARCMT/objcmt-undefined-ns-macros.m.result
+++ b/clang/test/ARCMT/objcmt-undefined-ns-macros.m.result
@@ -5,7 +5,9 @@
// rdar://18498550
typedef long NSInteger;
+#ifndef NS_ENUM
@import Foundation;
+#endif
typedef NS_OPTIONS(NSUInteger, UITableStyle) {
UIViewNone = 0x0,
UIViewMargin = 0x1,
OpenPOWER on IntegriCloud