[modules] Check for delegating constructor cycles when building a module and don't write them out to the module file.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177000 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Argyrios Kyrtzidis 2013-03-14 04:44:56 +00:00
Родитель 2d1b09641e
Коммит 975d353997
2 изменённых файлов: 12 добавлений и 9 удалений

Просмотреть файл

@ -616,6 +616,12 @@ void Sema::ActOnEndOfTranslationUnit() {
<< I->first;
}
if (LangOpts.CPlusPlus11 &&
Diags.getDiagnosticLevel(diag::warn_delegating_ctor_cycle,
SourceLocation())
!= DiagnosticsEngine::Ignored)
CheckDelegatingCtorCycles();
if (TUKind == TU_Module) {
// If we are building a module, resolve all of the exported declarations
// now.
@ -700,12 +706,6 @@ void Sema::ActOnEndOfTranslationUnit() {
}
if (LangOpts.CPlusPlus11 &&
Diags.getDiagnosticLevel(diag::warn_delegating_ctor_cycle,
SourceLocation())
!= DiagnosticsEngine::Ignored)
CheckDelegatingCtorCycles();
// If there were errors, disable 'unused' warnings since they will mostly be
// noise.
if (!Diags.hasErrorOccurred()) {

Просмотреть файл

@ -3464,6 +3464,8 @@ void ASTWriter::WriteASTCore(Sema &SemaRef,
Module *WritingModule) {
using namespace llvm;
bool isModule = WritingModule != 0;
// Make sure that the AST reader knows to finalize itself.
if (Chain)
Chain->finalizeForWriting();
@ -3535,7 +3537,8 @@ void ASTWriter::WriteASTCore(Sema &SemaRef,
// Build a record containing all of the delegating constructors we still need
// to resolve.
RecordData DelegatingCtorDecls;
AddLazyVectorDecls(*this, SemaRef.DelegatingCtorDecls, DelegatingCtorDecls);
if (!isModule)
AddLazyVectorDecls(*this, SemaRef.DelegatingCtorDecls, DelegatingCtorDecls);
// Write the set of weak, undeclared identifiers. We always write the
// entire table, since later PCH files in a PCH chain are only interested in
@ -3770,11 +3773,11 @@ void ASTWriter::WriteASTCore(Sema &SemaRef,
Stream.EmitRecordWithBlob(ModuleOffsetMapAbbrev, Record,
Buffer.data(), Buffer.size());
}
WritePreprocessor(PP, WritingModule != 0);
WritePreprocessor(PP, isModule);
WriteHeaderSearch(PP.getHeaderSearchInfo(), isysroot);
WriteSelectors(SemaRef);
WriteReferencedSelectorsPool(SemaRef);
WriteIdentifierTable(PP, SemaRef.IdResolver, WritingModule != 0);
WriteIdentifierTable(PP, SemaRef.IdResolver, isModule);
WriteFPPragmaOptions(SemaRef.getFPOptions());
WriteOpenCLExtensions(SemaRef);