diff options
Diffstat (limited to 'clang/lib/CodeGen/ModuleBuilder.cpp')
-rw-r--r-- | clang/lib/CodeGen/ModuleBuilder.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/ModuleBuilder.cpp b/clang/lib/CodeGen/ModuleBuilder.cpp index a33b3a38fb5..bc7acbc39ca 100644 --- a/clang/lib/CodeGen/ModuleBuilder.cpp +++ b/clang/lib/CodeGen/ModuleBuilder.cpp @@ -66,10 +66,16 @@ namespace { } virtual void HandleCXXStaticMemberVarInstantiation(VarDecl *VD) { + if (Diags.hasErrorOccurred()) + return; + Builder->HandleCXXStaticMemberVarInstantiation(VD); } virtual bool HandleTopLevelDecl(DeclGroupRef DG) { + if (Diags.hasErrorOccurred()) + return true; + // Make sure to emit all elements of a Decl. for (DeclGroupRef::iterator I = DG.begin(), E = DG.end(); I != E; ++I) Builder->EmitTopLevelDecl(*I); @@ -81,6 +87,9 @@ namespace { /// client hack on the type, which can occur at any point in the file /// (because these can be defined in declspecs). virtual void HandleTagDeclDefinition(TagDecl *D) { + if (Diags.hasErrorOccurred()) + return; + Builder->UpdateCompletedType(D); // In C++, we may have member functions that need to be emitted at this @@ -98,6 +107,9 @@ namespace { } virtual void HandleTagDeclRequiredDefinition(const TagDecl *D) LLVM_OVERRIDE { + if (Diags.hasErrorOccurred()) + return; + if (CodeGen::CGDebugInfo *DI = Builder->getModuleDebugInfo()) if (const RecordDecl *RD = dyn_cast<RecordDecl>(D)) DI->completeRequiredType(RD); |