diff options
author | Zachary Turner <zturner@google.com> | 2017-10-11 23:33:06 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2017-10-11 23:33:06 +0000 |
commit | 337462b36512cc001891a98fb98fa5693651722f (patch) | |
tree | 4b1708ba51865a9a5611fe209082e9ace07e7a8d /clang/lib | |
parent | d791eaa5594053918e517439469e7747bd52d91c (diff) | |
download | llvm-337462b36512cc001891a98fb98fa5693651722f.zip llvm-337462b36512cc001891a98fb98fa5693651722f.tar.gz llvm-337462b36512cc001891a98fb98fa5693651722f.tar.bz2 |
[ADT] Make Twine's copy constructor private.
There's a lot of misuse of Twine scattered around LLVM. This
ranges in severity from benign (returning a Twine from a function
by value that is just a string literal) to pretty sketchy (storing
a Twine by value in a class). While there are some uses for
copying Twines, most of the very compelling ones are confined
to the Twine class implementation itself, and other uses are
either dubious or easily worked around.
This patch makes Twine's copy constructor private, and fixes up
all callsites.
Differential Revision: https://reviews.llvm.org/D38767
llvm-svn: 315530
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/CodeGen/CGObjCMac.cpp | 75 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenAction.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChains/MSVC.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChains/MinGW.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Tooling/CompilationDatabase.cpp | 6 |
5 files changed, 41 insertions, 46 deletions
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp index 98435fe..97a337a 100644 --- a/clang/lib/CodeGen/CGObjCMac.cpp +++ b/clang/lib/CodeGen/CGObjCMac.cpp @@ -981,17 +981,17 @@ protected: /// EmitPropertyList - Emit the given property list. The return /// value has type PropertyListPtrTy. - llvm::Constant *EmitPropertyList(Twine Name, - const Decl *Container, + llvm::Constant *EmitPropertyList(const Twine &Name, const Decl *Container, const ObjCContainerDecl *OCD, const ObjCCommonTypesHelper &ObjCTypes, bool IsClassProperty); /// EmitProtocolMethodTypes - Generate the array of extended method type /// strings. The return value has type Int8PtrPtrTy. - llvm::Constant *EmitProtocolMethodTypes(Twine Name, - ArrayRef<llvm::Constant*> MethodTypes, - const ObjCCommonTypesHelper &ObjCTypes); + llvm::Constant * + EmitProtocolMethodTypes(const Twine &Name, + ArrayRef<llvm::Constant *> MethodTypes, + const ObjCCommonTypesHelper &ObjCTypes); /// GetProtocolRef - Return a reference to the internal protocol /// description, creating an empty one if it has not been @@ -1021,11 +1021,11 @@ public: /// \param Align - The alignment for the variable, or 0. /// \param AddToUsed - Whether the variable should be added to /// "llvm.used". - llvm::GlobalVariable *CreateMetadataVar(Twine Name, + llvm::GlobalVariable *CreateMetadataVar(const Twine &Name, ConstantStructBuilder &Init, StringRef Section, CharUnits Align, bool AddToUsed); - llvm::GlobalVariable *CreateMetadataVar(Twine Name, + llvm::GlobalVariable *CreateMetadataVar(const Twine &Name, llvm::Constant *Init, StringRef Section, CharUnits Align, bool AddToUsed); @@ -1241,7 +1241,7 @@ private: /// EmitMethodList - Emit the method list for the given /// implementation. The return value has type MethodListPtrTy. - llvm::Constant *emitMethodList(Twine Name, MethodListType MLT, + llvm::Constant *emitMethodList(const Twine &Name, MethodListType MLT, ArrayRef<const ObjCMethodDecl *> Methods); /// GetOrEmitProtocol - Get the protocol object for the given @@ -1265,7 +1265,7 @@ private: /// EmitProtocolList - Generate the list of referenced /// protocols. The return value has type ProtocolListPtrTy. - llvm::Constant *EmitProtocolList(Twine Name, + llvm::Constant *EmitProtocolList(const Twine &Name, ObjCProtocolDecl::protocol_iterator begin, ObjCProtocolDecl::protocol_iterator end); @@ -1413,7 +1413,7 @@ private: /// Emit the method list for the given implementation. The return value /// has type MethodListnfABITy. - llvm::Constant *emitMethodList(Twine Name, MethodListType MLT, + llvm::Constant *emitMethodList(const Twine &Name, MethodListType MLT, ArrayRef<const ObjCMethodDecl *> Methods); /// EmitIvarList - Emit the ivar list for the given @@ -1440,7 +1440,7 @@ private: /// EmitProtocolList - Generate the list of referenced /// protocols. The return value has type ProtocolListPtrTy. - llvm::Constant *EmitProtocolList(Twine Name, + llvm::Constant *EmitProtocolList(const Twine &Name, ObjCProtocolDecl::protocol_iterator begin, ObjCProtocolDecl::protocol_iterator end); @@ -3057,7 +3057,7 @@ CGObjCMac::EmitProtocolExtension(const ObjCProtocolDecl *PD, }; */ llvm::Constant * -CGObjCMac::EmitProtocolList(Twine name, +CGObjCMac::EmitProtocolList(const Twine &Name, ObjCProtocolDecl::protocol_iterator begin, ObjCProtocolDecl::protocol_iterator end) { // Just return null for empty protocol lists @@ -3090,7 +3090,7 @@ CGObjCMac::EmitProtocolList(Twine name, section = "__OBJC,__cat_cls_meth,regular,no_dead_strip"; llvm::GlobalVariable *GV = - CreateMetadataVar(name, values, section, CGM.getPointerAlign(), false); + CreateMetadataVar(Name, values, section, CGM.getPointerAlign(), false); return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.ProtocolListPtrTy); } @@ -3123,11 +3123,9 @@ PushProtocolProperties(llvm::SmallPtrSet<const IdentifierInfo*,16> &PropertySet, struct _objc_property[prop_count]; }; */ -llvm::Constant *CGObjCCommonMac::EmitPropertyList(Twine Name, - const Decl *Container, - const ObjCContainerDecl *OCD, - const ObjCCommonTypesHelper &ObjCTypes, - bool IsClassProperty) { +llvm::Constant *CGObjCCommonMac::EmitPropertyList( + const Twine &Name, const Decl *Container, const ObjCContainerDecl *OCD, + const ObjCCommonTypesHelper &ObjCTypes, bool IsClassProperty) { if (IsClassProperty) { // Make this entry NULL for OS X with deployment target < 10.11, for iOS // with deployment target < 9.0. @@ -3198,10 +3196,9 @@ llvm::Constant *CGObjCCommonMac::EmitPropertyList(Twine Name, return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.PropertyListPtrTy); } -llvm::Constant * -CGObjCCommonMac::EmitProtocolMethodTypes(Twine Name, - ArrayRef<llvm::Constant*> MethodTypes, - const ObjCCommonTypesHelper &ObjCTypes) { +llvm::Constant *CGObjCCommonMac::EmitProtocolMethodTypes( + const Twine &Name, ArrayRef<llvm::Constant *> MethodTypes, + const ObjCCommonTypesHelper &ObjCTypes) { // Return null for empty list. if (MethodTypes.empty()) return llvm::Constant::getNullValue(ObjCTypes.Int8PtrPtrTy); @@ -3762,8 +3759,9 @@ void CGObjCMac::emitMethodConstant(ConstantArrayBuilder &builder, /// int count; /// struct objc_method_description list[count]; /// }; -llvm::Constant *CGObjCMac::emitMethodList(Twine name, MethodListType MLT, - ArrayRef<const ObjCMethodDecl *> methods) { +llvm::Constant * +CGObjCMac::emitMethodList(const Twine &Name, MethodListType MLT, + ArrayRef<const ObjCMethodDecl *> methods) { StringRef prefix; StringRef section; bool forProtocol = false; @@ -3828,7 +3826,7 @@ llvm::Constant *CGObjCMac::emitMethodList(Twine name, MethodListType MLT, } methodArray.finishAndAddTo(values); - llvm::GlobalVariable *GV = CreateMetadataVar(prefix + name, values, section, + llvm::GlobalVariable *GV = CreateMetadataVar(prefix + Name, values, section, CGM.getPointerAlign(), true); return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.MethodDescriptionListPtrTy); @@ -3845,7 +3843,7 @@ llvm::Constant *CGObjCMac::emitMethodList(Twine name, MethodListType MLT, } methodArray.finishAndAddTo(values); - llvm::GlobalVariable *GV = CreateMetadataVar(prefix + name, values, section, + llvm::GlobalVariable *GV = CreateMetadataVar(prefix + Name, values, section, CGM.getPointerAlign(), true); return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.MethodListPtrTy); } @@ -3868,11 +3866,9 @@ llvm::Function *CGObjCCommonMac::GenerateMethod(const ObjCMethodDecl *OMD, return Method; } -llvm::GlobalVariable *CGObjCCommonMac::CreateMetadataVar(Twine Name, - ConstantStructBuilder &Init, - StringRef Section, - CharUnits Align, - bool AddToUsed) { +llvm::GlobalVariable *CGObjCCommonMac::CreateMetadataVar( + const Twine &Name, ConstantStructBuilder &Init, StringRef Section, + CharUnits Align, bool AddToUsed) { llvm::GlobalVariable *GV = Init.finishAndCreateGlobal(Name, Align, /*constant*/ false, llvm::GlobalValue::PrivateLinkage); @@ -3883,7 +3879,7 @@ llvm::GlobalVariable *CGObjCCommonMac::CreateMetadataVar(Twine Name, return GV; } -llvm::GlobalVariable *CGObjCCommonMac::CreateMetadataVar(Twine Name, +llvm::GlobalVariable *CGObjCCommonMac::CreateMetadataVar(const Twine &Name, llvm::Constant *Init, StringRef Section, CharUnits Align, @@ -6526,9 +6522,9 @@ void CGObjCNonFragileABIMac::emitMethodConstant(ConstantArrayBuilder &builder, /// struct _objc_method method_list[method_count]; /// } /// -llvm::Constant * -CGObjCNonFragileABIMac::emitMethodList(Twine name, MethodListType kind, - ArrayRef<const ObjCMethodDecl *> methods) { +llvm::Constant *CGObjCNonFragileABIMac::emitMethodList( + const Twine &Name, MethodListType kind, + ArrayRef<const ObjCMethodDecl *> methods) { // Return null for empty list. if (methods.empty()) return llvm::Constant::getNullValue(ObjCTypes.MethodListnfABIPtrTy); @@ -6585,7 +6581,7 @@ CGObjCNonFragileABIMac::emitMethodList(Twine name, MethodListType kind, } methodArray.finishAndAddTo(values); - auto *GV = values.finishAndCreateGlobal(prefix + name, CGM.getPointerAlign(), + auto *GV = values.finishAndCreateGlobal(prefix + Name, CGM.getPointerAlign(), /*constant*/ false, llvm::GlobalValue::PrivateLinkage); if (CGM.getTriple().isOSBinFormatMachO()) @@ -6872,10 +6868,9 @@ llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol( /// } /// @endcode /// -llvm::Constant * -CGObjCNonFragileABIMac::EmitProtocolList(Twine Name, - ObjCProtocolDecl::protocol_iterator begin, - ObjCProtocolDecl::protocol_iterator end) { +llvm::Constant *CGObjCNonFragileABIMac::EmitProtocolList( + const Twine &Name, ObjCProtocolDecl::protocol_iterator begin, + ObjCProtocolDecl::protocol_iterator end) { SmallVector<llvm::Constant *, 16> ProtocolRefs; // Just return null for empty protocol lists diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index 7f9c377..cdaa1fd 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -586,7 +586,7 @@ void BackendConsumer::UnsupportedDiagHandler( FullSourceLoc Loc = getBestLocationFromDebugLoc(D, BadDebugInfo, Filename, Line, Column); - Diags.Report(Loc, diag::err_fe_backend_unsupported) << D.getMessage().str(); + Diags.Report(Loc, diag::err_fe_backend_unsupported) << D.getMessage(); if (BadDebugInfo) // If we were not able to translate the file:line:col information diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index ae41ee9..b0e2a76 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -369,7 +369,7 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, SmallString<128> ImplibName(Output.getFilename()); llvm::sys::path::replace_extension(ImplibName, "lib"); - CmdArgs.push_back(Args.MakeArgString(std::string("-implib:") + ImplibName)); + CmdArgs.push_back(Args.MakeArgString(Twine("-implib:") + ImplibName)); } if (TC.getSanitizerArgs().needsAsanRt()) { diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index 660b0c7..72a0ac4 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -479,7 +479,7 @@ void toolchains::MinGW::AddClangCXXStdlibIncludeArgs( for (auto &CppIncludeBase : CppIncludeBases) { addSystemInclude(DriverArgs, CC1Args, CppIncludeBase); CppIncludeBase += llvm::sys::path::get_separator(); - addSystemInclude(DriverArgs, CC1Args, CppIncludeBase + Arch); + addSystemInclude(DriverArgs, CC1Args, Twine(CppIncludeBase) + Arch); addSystemInclude(DriverArgs, CC1Args, CppIncludeBase + "backward"); } break; diff --git a/clang/lib/Tooling/CompilationDatabase.cpp b/clang/lib/Tooling/CompilationDatabase.cpp index 0e83557..121e001 100644 --- a/clang/lib/Tooling/CompilationDatabase.cpp +++ b/clang/lib/Tooling/CompilationDatabase.cpp @@ -289,7 +289,7 @@ std::unique_ptr<FixedCompilationDatabase> FixedCompilationDatabase::loadFromCommandLine(int &Argc, const char *const *Argv, std::string &ErrorMsg, - Twine Directory) { + const Twine &Directory) { ErrorMsg.clear(); if (Argc == 0) return nullptr; @@ -306,8 +306,8 @@ FixedCompilationDatabase::loadFromCommandLine(int &Argc, new FixedCompilationDatabase(Directory, StrippedArgs)); } -FixedCompilationDatabase:: -FixedCompilationDatabase(Twine Directory, ArrayRef<std::string> CommandLine) { +FixedCompilationDatabase::FixedCompilationDatabase( + const Twine &Directory, ArrayRef<std::string> CommandLine) { std::vector<std::string> ToolCommandLine(1, "clang-tool"); ToolCommandLine.insert(ToolCommandLine.end(), CommandLine.begin(), CommandLine.end()); |