This revision was automatically updated to reflect the committed changes. Closed by commit rL283271: [CUDA] Destroy deferred diagnostics before destroying the ASTContext's… (authored by jlebar).
Changed prior to commit: https://reviews.llvm.org/D25260?vs=73578&id=73580#toc Repository: rL LLVM https://reviews.llvm.org/D25260 Files: cfe/trunk/include/clang/AST/ASTContext.h cfe/trunk/lib/CodeGen/CodeGenModule.cpp Index: cfe/trunk/include/clang/AST/ASTContext.h =================================================================== --- cfe/trunk/include/clang/AST/ASTContext.h +++ cfe/trunk/include/clang/AST/ASTContext.h @@ -325,12 +325,6 @@ }; llvm::DenseMap<Module*, PerModuleInitializers*> ModuleInitializers; - /// Diagnostics that are emitted if and only if the given function is - /// codegen'ed. Access these through FunctionDecl::addDeferredDiag() and - /// FunctionDecl::takeDeferredDiags(). - llvm::DenseMap<const FunctionDecl *, std::vector<PartialDiagnosticAt>> - DeferredDiags; - public: /// \brief A type synonym for the TemplateOrInstantiation mapping. typedef llvm::PointerUnion<VarTemplateDecl *, MemberSpecializationInfo *> @@ -454,6 +448,12 @@ /// \brief Allocator for partial diagnostics. PartialDiagnostic::StorageAllocator DiagAllocator; + /// Diagnostics that are emitted if and only if the given function is + /// codegen'ed. Access these through FunctionDecl::addDeferredDiag() and + /// FunctionDecl::takeDeferredDiags(). + llvm::DenseMap<const FunctionDecl *, std::vector<PartialDiagnosticAt>> + DeferredDiags; + /// \brief The current C++ ABI. std::unique_ptr<CXXABI> ABI; CXXABI *createCXXABI(const TargetInfo &T); Index: cfe/trunk/lib/CodeGen/CodeGenModule.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp @@ -509,6 +509,9 @@ DiagnosticBuilder Builder(getDiags().Report(Loc, PD.getDiagID())); PD.Emit(Builder); } + // Clear the deferred diags so they don't outlive the ASTContext's + // PartialDiagnostic allocator. + DeferredDiags.clear(); } void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
Index: cfe/trunk/include/clang/AST/ASTContext.h =================================================================== --- cfe/trunk/include/clang/AST/ASTContext.h +++ cfe/trunk/include/clang/AST/ASTContext.h @@ -325,12 +325,6 @@ }; llvm::DenseMap<Module*, PerModuleInitializers*> ModuleInitializers; - /// Diagnostics that are emitted if and only if the given function is - /// codegen'ed. Access these through FunctionDecl::addDeferredDiag() and - /// FunctionDecl::takeDeferredDiags(). - llvm::DenseMap<const FunctionDecl *, std::vector<PartialDiagnosticAt>> - DeferredDiags; - public: /// \brief A type synonym for the TemplateOrInstantiation mapping. typedef llvm::PointerUnion<VarTemplateDecl *, MemberSpecializationInfo *> @@ -454,6 +448,12 @@ /// \brief Allocator for partial diagnostics. PartialDiagnostic::StorageAllocator DiagAllocator; + /// Diagnostics that are emitted if and only if the given function is + /// codegen'ed. Access these through FunctionDecl::addDeferredDiag() and + /// FunctionDecl::takeDeferredDiags(). + llvm::DenseMap<const FunctionDecl *, std::vector<PartialDiagnosticAt>> + DeferredDiags; + /// \brief The current C++ ABI. std::unique_ptr<CXXABI> ABI; CXXABI *createCXXABI(const TargetInfo &T); Index: cfe/trunk/lib/CodeGen/CodeGenModule.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp @@ -509,6 +509,9 @@ DiagnosticBuilder Builder(getDiags().Report(Loc, PD.getDiagID())); PD.Emit(Builder); } + // Clear the deferred diags so they don't outlive the ASTContext's + // PartialDiagnostic allocator. + DeferredDiags.clear(); } void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits