r194710 - [objcmt] Introduce "objcmt-white-list-dir-path=" option.

Alp Toker alp at nuanti.com
Tue Dec 10 08:04:24 PST 2013


On 14/11/2013 16:33, Argyrios Kyrtzidis wrote:
> Author: akirtzidis
> Date: Thu Nov 14 10:33:29 2013
> New Revision: 194710
>
> URL: http://llvm.org/viewvc/llvm-project?rev=194710&view=rev
> Log:
> [objcmt] Introduce "objcmt-white-list-dir-path=" option.
>
> This options accepts a path to a directory, collects the filenames of the files
> it contains, and the migrator will only modify files with the same filename.
>
> Added:
>      cfe/trunk/test/ARCMT/whitelisted/
>      cfe/trunk/test/ARCMT/whitelisted/Inputs/
>      cfe/trunk/test/ARCMT/whitelisted/Inputs/header1.h
>      cfe/trunk/test/ARCMT/whitelisted/header1.h
>      cfe/trunk/test/ARCMT/whitelisted/header1.h.result
>      cfe/trunk/test/ARCMT/whitelisted/header2.h
>      cfe/trunk/test/ARCMT/whitelisted/header2.h.result
>      cfe/trunk/test/ARCMT/whitelisted/objcmt-with-whitelist.m
> Modified:
>      cfe/trunk/include/clang/Driver/Options.td
>      cfe/trunk/include/clang/Frontend/FrontendOptions.h
>      cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
>      cfe/trunk/lib/Driver/Tools.cpp
>      cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>
> Modified: cfe/trunk/include/clang/Driver/Options.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=194710&r1=194709&r2=194710&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/Options.td (original)
> +++ cfe/trunk/include/clang/Driver/Options.td Thu Nov 14 10:33:29 2013
> @@ -178,13 +178,14 @@ def objcmt_migrate_nsmacros : Flag<["-"]
>     HelpText<"Enable migration to NS_ENUM/NS_OPTIONS macros">;
>   def objcmt_migrate_protocol_conformance : Flag<["-"], "objcmt-migrate-protocol-conformance">, Flags<[CC1Option]>,
>     HelpText<"Enable migration to add protocol conformance on classes">;
> -def objcmt_atomic_property : Flag<["-"], "objcmt-atomic-property">,
> -  Flags<[CC1Option]>,
> +def objcmt_atomic_property : Flag<["-"], "objcmt-atomic-property">, Flags<[CC1Option]>,
>     HelpText<"Make migration to 'atomic' properties">;
>   def objcmt_returns_innerpointer_property : Flag<["-"], "objcmt-returns-innerpointer-property">, Flags<[CC1Option]>,
>     HelpText<"Enable migration to annotate property with NS_RETURNS_INNER_POINTER">;
>   def objcmt_ns_nonatomic_iosonly: Flag<["-"], "objcmt-ns-nonatomic-iosonly">, Flags<[CC1Option]>,
>     HelpText<"Enable migration to use NS_NONATOMIC_IOSONLY macro for setting property's 'atomic' attribute">;
> +def objcmt_white_list_dir_path: Joined<["-"], "objcmt-white-list-dir-path=">, Flags<[CC1Option]>,
> +  HelpText<"Only modify files with a filename contained in the provided directory path">;

Hi Argyrios,

Whitelist is one word.

This set of changes will need s/white[_-]list/whitelist/ and 
s/WhiteList/Whitelist/.

If you need compatibility with the misspelt form it's OK to add an 
option alias.

(Still catching up with November commits)

Alp.



>   
>   // Make sure all other -ccc- options are rejected.
>   def ccc_ : Joined<["-"], "ccc-">, Group<internal_Group>, Flags<[Unsupported]>;
>
> Modified: cfe/trunk/include/clang/Frontend/FrontendOptions.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendOptions.h?rev=194710&r1=194709&r2=194710&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Frontend/FrontendOptions.h (original)
> +++ cfe/trunk/include/clang/Frontend/FrontendOptions.h Thu Nov 14 10:33:29 2013
> @@ -186,6 +186,7 @@ public:
>       ObjCMT_MigrateAll = (ObjCMT_Literals | ObjCMT_Subscripting | ObjCMT_MigrateDecls)
>     };
>     unsigned ObjCMTAction;
> +  std::string ObjCMTWhiteListPath;
>   
>     std::string MTMigrateDir;
>     std::string ARCMTMigrateReportOut;
>
> Modified: cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ObjCMT.cpp?rev=194710&r1=194709&r2=194710&view=diff
> ==============================================================================
> --- cfe/trunk/lib/ARCMigrate/ObjCMT.cpp (original)
> +++ cfe/trunk/lib/ARCMigrate/ObjCMT.cpp Thu Nov 14 10:33:29 2013
> @@ -28,6 +28,7 @@
>   #include "clang/StaticAnalyzer/Checkers/ObjCRetainCount.h"
>   #include "clang/AST/Attr.h"
>   #include "llvm/ADT/SmallString.h"
> +#include "llvm/Support/Path.h"
>   
>   using namespace clang;
>   using namespace arcmt;
> @@ -90,6 +91,7 @@ public:
>     bool IsOutputFile;
>     llvm::SmallPtrSet<ObjCProtocolDecl *, 32> ObjCProtocolDecls;
>     llvm::SmallVector<const Decl *, 8> CFFunctionIBCandidates;
> +  llvm::StringMap<char> WhiteListFilenames;
>     
>     ObjCMigrateASTConsumer(StringRef migrateDir,
>                            unsigned astMigrateActions,
> @@ -97,12 +99,19 @@ public:
>                            FileManager &fileMgr,
>                            const PPConditionalDirectiveRecord *PPRec,
>                            Preprocessor &PP,
> -                         bool isOutputFile = false)
> +                         bool isOutputFile,
> +                         ArrayRef<std::string> WhiteList)
>     : MigrateDir(migrateDir),
>       ASTMigrateActions(astMigrateActions),
>       NSIntegerTypedefed(0), NSUIntegerTypedefed(0),
>       Remapper(remapper), FileMgr(fileMgr), PPRec(PPRec), PP(PP),
> -    IsOutputFile(isOutputFile) { }
> +    IsOutputFile(isOutputFile) {
> +
> +    for (ArrayRef<std::string>::iterator
> +           I = WhiteList.begin(), E = WhiteList.end(); I != E; ++I) {
> +      WhiteListFilenames.GetOrCreateValue(*I);
> +    }
> +  }
>   
>   protected:
>     virtual void Initialize(ASTContext &Context) {
> @@ -125,6 +134,13 @@ protected:
>     }
>   
>     virtual void HandleTranslationUnit(ASTContext &Ctx);
> +
> +  bool canModifyFile(StringRef Path) {
> +    if (WhiteListFilenames.empty())
> +      return true;
> +    return WhiteListFilenames.find(llvm::sys::path::filename(Path))
> +        != WhiteListFilenames.end();
> +  }
>   };
>   
>   }
> @@ -151,7 +167,9 @@ ASTConsumer *ObjCMigrateAction::CreateAS
>                                                          Remapper,
>                                                       CompInst->getFileManager(),
>                                                          PPRec,
> -                                                       CompInst->getPreprocessor());
> +                                                       CompInst->getPreprocessor(),
> +                                                       false,
> +                                                       ArrayRef<std::string>());
>     ASTConsumer *Consumers[] = { MTConsumer, WrappedConsumer };
>     return new MultiplexConsumer(Consumers);
>   }
> @@ -1682,6 +1700,8 @@ void ObjCMigrateASTConsumer::HandleTrans
>       assert(file);
>       if (IsReallyASystemHeader(Ctx, file, FID))
>         continue;
> +    if (!canModifyFile(file->getName()))
> +      continue;
>       SmallString<512> newText;
>       llvm::raw_svector_ostream vecOS(newText);
>       buf.write(vecOS);
> @@ -1705,6 +1725,25 @@ bool MigrateSourceAction::BeginInvocatio
>     return true;
>   }
>   
> +static std::vector<std::string> getWhiteListFilenames(StringRef DirPath) {
> +  using namespace llvm::sys::fs;
> +  using namespace llvm::sys::path;
> +
> +  std::vector<std::string> Filenames;
> +  if (DirPath.empty() || !is_directory(DirPath))
> +    return Filenames;
> +
> +  llvm::error_code EC;
> +  directory_iterator DI = directory_iterator(DirPath, EC);
> +  directory_iterator DE;
> +  for (; !EC && DI != DE; DI = DI.increment(EC)) {
> +    if (is_regular_file(DI->path()))
> +      Filenames.push_back(filename(DI->path()));
> +  }
> +
> +  return Filenames;
> +}
> +
>   ASTConsumer *MigrateSourceAction::CreateASTConsumer(CompilerInstance &CI,
>                                                     StringRef InFile) {
>     PPConditionalDirectiveRecord *
> @@ -1721,11 +1760,14 @@ ASTConsumer *MigrateSourceAction::Create
>                       FrontendOptions::ObjCMT_Subscripting;
>     }
>     CI.getPreprocessor().addPPCallbacks(PPRec);
> +  std::vector<std::string> WhiteList =
> +    getWhiteListFilenames(CI.getFrontendOpts().ObjCMTWhiteListPath);
>     return new ObjCMigrateASTConsumer(CI.getFrontendOpts().OutputFile,
>                                       ObjCMTAction,
>                                       Remapper,
>                                       CI.getFileManager(),
>                                       PPRec,
>                                       CI.getPreprocessor(),
> -                                    /*isOutputFile=*/true);
> +                                    /*isOutputFile=*/true,
> +                                    WhiteList);
>   }
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=194710&r1=194709&r2=194710&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Thu Nov 14 10:33:29 2013
> @@ -2726,6 +2726,7 @@ void Clang::ConstructJob(Compilation &C,
>       Args.AddLastArg(CmdArgs, options::OPT_objcmt_atomic_property);
>       Args.AddLastArg(CmdArgs, options::OPT_objcmt_returns_innerpointer_property);
>       Args.AddLastArg(CmdArgs, options::OPT_objcmt_ns_nonatomic_iosonly);
> +    Args.AddLastArg(CmdArgs, options::OPT_objcmt_white_list_dir_path);
>     }
>   
>     // Add preprocessing options like -I, -D, etc. if we are using the
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=194710&r1=194709&r2=194710&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Thu Nov 14 10:33:29 2013
> @@ -821,6 +821,8 @@ static InputKind ParseFrontendArgs(Front
>     if (Args.hasArg(OPT_objcmt_migrate_all))
>       Opts.ObjCMTAction |= FrontendOptions::ObjCMT_MigrateDecls;
>   
> +  Opts.ObjCMTWhiteListPath = Args.getLastArgValue(OPT_objcmt_white_list_dir_path);
> +
>     if (Opts.ARCMTAction != FrontendOptions::ARCMT_None &&
>         Opts.ObjCMTAction != FrontendOptions::ObjCMT_None) {
>       Diags.Report(diag::err_drv_argument_not_allowed_with)
>
> Added: cfe/trunk/test/ARCMT/whitelisted/Inputs/header1.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/whitelisted/Inputs/header1.h?rev=194710&view=auto
> ==============================================================================
> --- cfe/trunk/test/ARCMT/whitelisted/Inputs/header1.h (added)
> +++ cfe/trunk/test/ARCMT/whitelisted/Inputs/header1.h Thu Nov 14 10:33:29 2013
> @@ -0,0 +1 @@
> +// the contents are not important
>
> Added: cfe/trunk/test/ARCMT/whitelisted/header1.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/whitelisted/header1.h?rev=194710&view=auto
> ==============================================================================
> --- cfe/trunk/test/ARCMT/whitelisted/header1.h (added)
> +++ cfe/trunk/test/ARCMT/whitelisted/header1.h Thu Nov 14 10:33:29 2013
> @@ -0,0 +1,5 @@
> +
> + at interface I1 : NSObject
> +-(int)prop;
> +-(void)setProp:(int)p;
> + at end
>
> Added: cfe/trunk/test/ARCMT/whitelisted/header1.h.result
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/whitelisted/header1.h.result?rev=194710&view=auto
> ==============================================================================
> --- cfe/trunk/test/ARCMT/whitelisted/header1.h.result (added)
> +++ cfe/trunk/test/ARCMT/whitelisted/header1.h.result Thu Nov 14 10:33:29 2013
> @@ -0,0 +1,4 @@
> +
> + at interface I1 : NSObject
> + at property (nonatomic) int prop;
> + at end
>
> Added: cfe/trunk/test/ARCMT/whitelisted/header2.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/whitelisted/header2.h?rev=194710&view=auto
> ==============================================================================
> --- cfe/trunk/test/ARCMT/whitelisted/header2.h (added)
> +++ cfe/trunk/test/ARCMT/whitelisted/header2.h Thu Nov 14 10:33:29 2013
> @@ -0,0 +1,5 @@
> +
> + at interface I2 : NSObject
> +-(int)prop;
> +-(void)setProp:(int)p;
> + at end
>
> Added: cfe/trunk/test/ARCMT/whitelisted/header2.h.result
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/whitelisted/header2.h.result?rev=194710&view=auto
> ==============================================================================
> --- cfe/trunk/test/ARCMT/whitelisted/header2.h.result (added)
> +++ cfe/trunk/test/ARCMT/whitelisted/header2.h.result Thu Nov 14 10:33:29 2013
> @@ -0,0 +1,4 @@
> +
> + at interface I2 : NSObject
> + at property (nonatomic) int prop;
> + at end
>
> Added: cfe/trunk/test/ARCMT/whitelisted/objcmt-with-whitelist.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/whitelisted/objcmt-with-whitelist.m?rev=194710&view=auto
> ==============================================================================
> --- cfe/trunk/test/ARCMT/whitelisted/objcmt-with-whitelist.m (added)
> +++ cfe/trunk/test/ARCMT/whitelisted/objcmt-with-whitelist.m Thu Nov 14 10:33:29 2013
> @@ -0,0 +1,12 @@
> +// RUN: rm -rf %t
> +// RUN: %clang_cc1 -objcmt-migrate-readwrite-property %s -triple x86_64-apple-darwin11 -migrate -o %t.remap
> +// RUN: c-arcmt-test %t.remap | arcmt-test -verify-transformed-files %S/header1.h.result %S/header2.h.result
> +// RUN: %clang_cc1 -objcmt-migrate-readwrite-property -objcmt-white-list-dir-path=%S/Inputs %s -triple x86_64-apple-darwin11 -migrate -o %t.remap
> +// RUN: c-arcmt-test %t.remap | arcmt-test -verify-transformed-files %S/header1.h.result
> +
> + at interface NSObject
> ++ (id)alloc;
> + at end
> +
> +#include "header1.h"
> +#include "header2.h"
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-- 
http://www.nuanti.com
the browser experts




More information about the cfe-commits mailing list