diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-03-08 01:08:28 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-03-08 01:08:28 +0000 |
| commit | 8dbcfc39cd24ae785768044faf38b519fe769577 (patch) | |
| tree | 6f0b60c79e6130d35c657ec86477437b247f673c /clang/lib | |
| parent | 0cf55e99c6810cb624486f2a6ff51886f6e23d2e (diff) | |
| download | bcm5719-llvm-8dbcfc39cd24ae785768044faf38b519fe769577.tar.gz bcm5719-llvm-8dbcfc39cd24ae785768044faf38b519fe769577.zip | |
[libclang] Fix a crash when serializing a preprocessing record that contains
an #include entry that did not resolve to header file.
Part of rdar://11007039
llvm-svn: 152275
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 7 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 5 |
2 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 5684949e7eb..03f3e278db7 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -3447,9 +3447,10 @@ PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) { case PPD_INCLUSION_DIRECTIVE: { const char *FullFileNameStart = BlobStart + Record[0]; - const FileEntry *File - = PP.getFileManager().getFile(StringRef(FullFileNameStart, - BlobLen - Record[0])); + StringRef FullFileName(FullFileNameStart, BlobLen - Record[0]); + const FileEntry *File = 0; + if (!FullFileName.empty()) + File = PP.getFileManager().getFile(FullFileName); // FIXME: Stable encoding InclusionDirective::InclusionKind Kind diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 8b6859cd427..d21dac68de1 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -1832,7 +1832,10 @@ void ASTWriter::WritePreprocessorDetail(PreprocessingRecord &PPRec) { Record.push_back(static_cast<unsigned>(ID->getKind())); SmallString<64> Buffer; Buffer += ID->getFileName(); - Buffer += ID->getFile()->getName(); + // Check that the FileEntry is not null because it was not resolved and + // we create a PCH even with compiler errors. + if (ID->getFile()) + Buffer += ID->getFile()->getName(); Stream.EmitRecordWithBlob(InclusionAbbrev, Record, Buffer); continue; } |

