Author: samsonov Date: Wed Oct 15 17:17:27 2014 New Revision: 219857 URL: http://llvm.org/viewvc/llvm-project?rev=219857&view=rev Log: Move SanitizerBlacklist object from CodeGenModule to ASTContext.
Soon we'll need to have access to blacklist before the CodeGen phase (see http://reviews.llvm.org/D5687), so parse and construct the blacklist earlier. Modified: cfe/trunk/include/clang/AST/ASTContext.h cfe/trunk/include/clang/Basic/SanitizerBlacklist.h cfe/trunk/lib/AST/ASTContext.cpp cfe/trunk/lib/Basic/SanitizerBlacklist.cpp cfe/trunk/lib/CodeGen/CodeGenModule.cpp cfe/trunk/lib/CodeGen/CodeGenModule.h Modified: cfe/trunk/include/clang/AST/ASTContext.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=219857&r1=219856&r2=219857&view=diff ============================================================================== --- cfe/trunk/include/clang/AST/ASTContext.h (original) +++ cfe/trunk/include/clang/AST/ASTContext.h Wed Oct 15 17:17:27 2014 @@ -30,6 +30,7 @@ #include "clang/Basic/LangOptions.h" #include "clang/Basic/OperatorKinds.h" #include "clang/Basic/PartialDiagnostic.h" +#include "clang/Basic/SanitizerBlacklist.h" #include "clang/Basic/VersionTuple.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/FoldingSet.h" @@ -392,6 +393,10 @@ private: /// this ASTContext object. LangOptions &LangOpts; + /// \brief Blacklist object that is used by sanitizers to decide which + /// entities should not be instrumented. + std::unique_ptr<SanitizerBlacklist> SanitizerBL; + /// \brief The allocator used to create AST objects. /// /// AST objects are never destructed; rather, all memory associated with the @@ -517,6 +522,10 @@ public: const LangOptions& getLangOpts() const { return LangOpts; } + const SanitizerBlacklist &getSanitizerBlacklist() const { + return *SanitizerBL; + } + DiagnosticsEngine &getDiagnostics() const; FullSourceLoc getFullLoc(SourceLocation Loc) const { Modified: cfe/trunk/include/clang/Basic/SanitizerBlacklist.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/SanitizerBlacklist.h?rev=219857&r1=219856&r2=219857&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/SanitizerBlacklist.h (original) +++ cfe/trunk/include/clang/Basic/SanitizerBlacklist.h Wed Oct 15 17:17:27 2014 @@ -18,6 +18,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Support/SpecialCaseList.h" #include <memory> +#include <string> namespace llvm { class GlobalVariable; @@ -31,8 +32,7 @@ class SanitizerBlacklist { std::unique_ptr<llvm::SpecialCaseList> SCL; public: - SanitizerBlacklist(std::unique_ptr<llvm::SpecialCaseList> SCL) - : SCL(std::move(SCL)) {} + SanitizerBlacklist(const std::string &BlacklistPath); bool isIn(const llvm::Module &M, StringRef Category = StringRef()) const; bool isIn(const llvm::Function &F) const; Modified: cfe/trunk/lib/AST/ASTContext.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=219857&r1=219856&r2=219857&view=diff ============================================================================== --- cfe/trunk/lib/AST/ASTContext.cpp (original) +++ cfe/trunk/lib/AST/ASTContext.cpp Wed Oct 15 17:17:27 2014 @@ -722,35 +722,28 @@ static bool isAddrSpaceMapManglingEnable llvm_unreachable("getAddressSpaceMapMangling() doesn't cover anything."); } -ASTContext::ASTContext(LangOptions& LOpts, SourceManager &SM, +ASTContext::ASTContext(LangOptions &LOpts, SourceManager &SM, IdentifierTable &idents, SelectorTable &sels, Builtin::Context &builtins) - : FunctionProtoTypes(this_()), - TemplateSpecializationTypes(this_()), - DependentTemplateSpecializationTypes(this_()), - SubstTemplateTemplateParmPacks(this_()), - GlobalNestedNameSpecifier(nullptr), - Int128Decl(nullptr), UInt128Decl(nullptr), Float128StubDecl(nullptr), - BuiltinVaListDecl(nullptr), - ObjCIdDecl(nullptr), ObjCSelDecl(nullptr), ObjCClassDecl(nullptr), - ObjCProtocolClassDecl(nullptr), BOOLDecl(nullptr), - CFConstantStringTypeDecl(nullptr), ObjCInstanceTypeDecl(nullptr), - FILEDecl(nullptr), - jmp_bufDecl(nullptr), sigjmp_bufDecl(nullptr), ucontext_tDecl(nullptr), - BlockDescriptorType(nullptr), BlockDescriptorExtendedType(nullptr), - cudaConfigureCallDecl(nullptr), - NullTypeSourceInfo(QualType()), - FirstLocalImport(), LastLocalImport(), - SourceMgr(SM), LangOpts(LOpts), - AddrSpaceMap(nullptr), Target(nullptr), PrintingPolicy(LOpts), - Idents(idents), Selectors(sels), - BuiltinInfo(builtins), - DeclarationNames(*this), - ExternalSource(nullptr), Listener(nullptr), - Comments(SM), CommentsLoaded(false), - CommentCommandTraits(BumpAlloc, LOpts.CommentOpts), - LastSDM(nullptr, 0) -{ + : FunctionProtoTypes(this_()), TemplateSpecializationTypes(this_()), + DependentTemplateSpecializationTypes(this_()), + SubstTemplateTemplateParmPacks(this_()), + GlobalNestedNameSpecifier(nullptr), Int128Decl(nullptr), + UInt128Decl(nullptr), Float128StubDecl(nullptr), + BuiltinVaListDecl(nullptr), ObjCIdDecl(nullptr), ObjCSelDecl(nullptr), + ObjCClassDecl(nullptr), ObjCProtocolClassDecl(nullptr), BOOLDecl(nullptr), + CFConstantStringTypeDecl(nullptr), ObjCInstanceTypeDecl(nullptr), + FILEDecl(nullptr), jmp_bufDecl(nullptr), sigjmp_bufDecl(nullptr), + ucontext_tDecl(nullptr), BlockDescriptorType(nullptr), + BlockDescriptorExtendedType(nullptr), cudaConfigureCallDecl(nullptr), + NullTypeSourceInfo(QualType()), FirstLocalImport(), LastLocalImport(), + SourceMgr(SM), LangOpts(LOpts), + SanitizerBL(new SanitizerBlacklist(LangOpts.Sanitize.BlacklistFile)), + AddrSpaceMap(nullptr), Target(nullptr), PrintingPolicy(LOpts), + Idents(idents), Selectors(sels), BuiltinInfo(builtins), + DeclarationNames(*this), ExternalSource(nullptr), Listener(nullptr), + Comments(SM), CommentsLoaded(false), + CommentCommandTraits(BumpAlloc, LOpts.CommentOpts), LastSDM(nullptr, 0) { TUDecl = TranslationUnitDecl::Create(*this); } Modified: cfe/trunk/lib/Basic/SanitizerBlacklist.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/SanitizerBlacklist.cpp?rev=219857&r1=219856&r2=219857&view=diff ============================================================================== --- cfe/trunk/lib/Basic/SanitizerBlacklist.cpp (original) +++ cfe/trunk/lib/Basic/SanitizerBlacklist.cpp Wed Oct 15 17:17:27 2014 @@ -29,6 +29,9 @@ static StringRef GetGlobalTypeString(con return "<unknown type>"; } +SanitizerBlacklist::SanitizerBlacklist(const std::string &BlacklistPath) + : SCL(llvm::SpecialCaseList::createOrDie(BlacklistPath)) {} + bool SanitizerBlacklist::isIn(const llvm::Module &M, StringRef Category) const { return SCL->inSection("src", M.getModuleIdentifier(), Category); Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=219857&r1=219856&r2=219857&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Wed Oct 15 17:17:27 2014 @@ -89,9 +89,7 @@ CodeGenModule::CodeGenModule(ASTContext NSConcreteStackBlock(nullptr), BlockObjectAssign(nullptr), BlockObjectDispose(nullptr), BlockDescriptorType(nullptr), GenericBlockLiteralType(nullptr), LifetimeStartFn(nullptr), - LifetimeEndFn(nullptr), SanitizerBL(llvm::SpecialCaseList::createOrDie( - LangOpts.Sanitize.BlacklistFile)), - SanitizerMD(new SanitizerMetadata(*this)) { + LifetimeEndFn(nullptr), SanitizerMD(new SanitizerMetadata(*this)) { // Initialize the type cache. llvm::LLVMContext &LLVMContext = M.getContext(); @@ -743,7 +741,7 @@ void CodeGenModule::SetLLVMFunctionAttri B.addAttribute(llvm::Attribute::StackProtectReq); // Add sanitizer attributes if function is not blacklisted. - if (!SanitizerBL.isIn(*F)) { + if (!getSanitizerBlacklist().isIn(*F)) { // When AddressSanitizer is enabled, set SanitizeAddress attribute // unless __attribute__((no_sanitize_address)) is used. if (LangOpts.Sanitize.Address && !D->hasAttr<NoSanitizeAddressAttr>()) Modified: cfe/trunk/lib/CodeGen/CodeGenModule.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=219857&r1=219856&r2=219857&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CodeGenModule.h (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.h Wed Oct 15 17:17:27 2014 @@ -475,8 +475,6 @@ class CodeGenModule : public CodeGenType GlobalDecl initializedGlobalDecl; - SanitizerBlacklist SanitizerBL; - std::unique_ptr<SanitizerMetadata> SanitizerMD; /// @} @@ -1048,7 +1046,7 @@ public: void AddGlobalAnnotations(const ValueDecl *D, llvm::GlobalValue *GV); const SanitizerBlacklist &getSanitizerBlacklist() const { - return SanitizerBL; + return Context.getSanitizerBlacklist(); } SanitizerMetadata *getSanitizerMetadata() { _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
