From d2241bf561c16ae50649096c5ed0ba5a2b4494a1 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Thu, 9 Oct 2014 22:04:27 +0000 Subject: [PATCH] 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 --- clang/lib/ARCMigrate/ObjCMT.cpp | 11 ++++------- clang/test/ARCMT/objcmt-ns-macros.m.result | 3 +++ clang/test/ARCMT/objcmt-undefined-ns-macros.m.result | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp index 7eebdb78d898..c6e4aaaac0c6 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()) { 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 \n"); + commit.insert(Loc, "#ifndef NS_ENUM\n#import \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 42f3239c84b4..9087065c2912 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 +#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 92cdfe3d7cfd..866e4d0e0f15 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,