From 69329a52cf9187878209ea380fdcb255c0966097 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Tue, 19 May 2009 05:28:52 +0000 Subject: [PATCH] Fix a crash with -emit-html from stdin. llvm-svn: 72104 --- clang/lib/Frontend/HTMLPrint.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/clang/lib/Frontend/HTMLPrint.cpp b/clang/lib/Frontend/HTMLPrint.cpp index a4ce9e522dfb..d5eb9fb5313d 100644 --- a/clang/lib/Frontend/HTMLPrint.cpp +++ b/clang/lib/Frontend/HTMLPrint.cpp @@ -20,6 +20,7 @@ #include "clang/Basic/SourceManager.h" #include "clang/Basic/FileManager.h" #include "clang/AST/ASTContext.h" +#include "llvm/Support/MemoryBuffer.h" using namespace clang; @@ -62,9 +63,17 @@ HTMLPrinter::~HTMLPrinter() { // Format the file. FileID FID = R.getSourceMgr().getMainFileID(); const FileEntry* Entry = R.getSourceMgr().getFileEntryForID(FID); - + const char* Name; + // In some cases, in particular the case where the input is from stdin, + // there is no entry. Fall back to the memory buffer for a name in those + // cases. + if (Entry) + Name = Entry->getName(); + else + Name = R.getSourceMgr().getBuffer(FID)->getBufferIdentifier(); + html::AddLineNumbers(R, FID); - html::AddHeaderFooterInternalBuiltinCSS(R, FID, Entry->getName()); + html::AddHeaderFooterInternalBuiltinCSS(R, FID, Name); // If we have a preprocessor, relex the file and syntax highlight. // We might not have a preprocessor if we come from a deserialized AST file,