forked from OSchip/llvm-project
CodeGenAction::ExecuteAction(): check for invalid LLVM source locations
Add sign checks to deal with the fact that IR parser line/column pairs are signed integers and sometimes invalid. The crash path is potentially triggered by corrupt '.bc' files in practice, though I don't have a binary input test case that can be checked-in right now. (Unfortunately the backend itself crashes on various ill-formed '.bc' inputs so this bandage isn't as helpful as it appears yet.) llvm-svn: 212007
This commit is contained in:
parent
034bbd5db7
commit
7b463d5a07
|
@ -641,17 +641,23 @@ void CodeGenAction::ExecuteAction() {
|
|||
|
||||
bool Invalid;
|
||||
SourceManager &SM = CI.getSourceManager();
|
||||
llvm::MemoryBuffer *MainFile = SM.getBuffer(SM.getMainFileID(), &Invalid);
|
||||
FileID FID = SM.getMainFileID();
|
||||
llvm::MemoryBuffer *MainFile = SM.getBuffer(FID, &Invalid);
|
||||
if (Invalid)
|
||||
return;
|
||||
|
||||
llvm::SMDiagnostic Err;
|
||||
TheModule.reset(ParseIR(MainFile, Err, *VMContext));
|
||||
if (!TheModule) {
|
||||
// Translate from the diagnostic info to the SourceManager location.
|
||||
SourceLocation Loc = SM.translateFileLineCol(
|
||||
SM.getFileEntryForID(SM.getMainFileID()), Err.getLineNo(),
|
||||
Err.getColumnNo() + 1);
|
||||
// Translate from the diagnostic info to the SourceManager location if
|
||||
// available.
|
||||
// TODO: Unify this with ConvertBackendLocation()
|
||||
SourceLocation Loc;
|
||||
if (Err.getLineNo() > 0) {
|
||||
assert(Err.getColumnNo() >= 0);
|
||||
Loc = SM.translateFileLineCol(SM.getFileEntryForID(FID),
|
||||
Err.getLineNo(), Err.getColumnNo() + 1);
|
||||
}
|
||||
|
||||
// Strip off a leading diagnostic code if there is one.
|
||||
StringRef Msg = Err.getMessage();
|
||||
|
|
Loading…
Reference in New Issue