summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Lebar <jlebar@google.com>2016-10-04 23:41:45 +0000
committerJustin Lebar <jlebar@google.com>2016-10-04 23:41:45 +0000
commit49e7614efb5bad5de8d7bcab0fcd59808db5495d (patch)
treef347e8486994771b461349e3a0462a8423c2c309
parent3aacfafaad4a958bdcc0043b4492f686a3e38d06 (diff)
downloadbcm5719-llvm-49e7614efb5bad5de8d7bcab0fcd59808db5495d.tar.gz
bcm5719-llvm-49e7614efb5bad5de8d7bcab0fcd59808db5495d.zip
[CUDA] Destroy deferred diagnostics before destroying the ASTContext's PartialDiagnostic allocator.
Summary: This will let us (in a separate patch) allocate deferred diagnostics in the ASTContext's PartialDiagnostic arena. Reviewers: rnk Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D25260 llvm-svn: 283271
-rw-r--r--clang/include/clang/AST/ASTContext.h12
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp3
2 files changed, 9 insertions, 6 deletions
diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h
index 0a184bc2e37..7c0d19c56f9 100644
--- a/clang/include/clang/AST/ASTContext.h
+++ b/clang/include/clang/AST/ASTContext.h
@@ -325,12 +325,6 @@ class ASTContext : public RefCountedBase<ASTContext> {
};
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 @@ private:
/// \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);
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 9bf3ae2752f..845edcd2a17 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -509,6 +509,9 @@ void CodeGenModule::Release() {
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) {
OpenPOWER on IntegriCloud