Early exit llvm-bolt when coming across empty data files (#176859)

perf2bolt generates empty fdata files for small binaries and right now
BOLT does this check while parsing by calling `((!hasBranchData() &&
!hasMemData()))`. Instead, early exit as soon as the buffer finishes
reading the data file and exit with error message.
This commit is contained in:
Yashwant Singh 2026-04-06 09:37:05 +05:30 committed by GitHub
parent 26697f4d07
commit 5e14916fa6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 3 deletions

View File

@ -315,11 +315,17 @@ std::error_code DataReader::parseInput() {
}
FileBuf = std::move(MB.get());
ParsingBuf = FileBuf->getBuffer();
if (ParsingBuf.empty()) {
Diag << "WARNING: empty profile data file: " << Filename << "\n";
return make_error_code(llvm::errc::io_error);
}
if (std::error_code EC = parse())
return EC;
if (!ParsingBuf.empty())
Diag << "WARNING: invalid profile data detected at line " << Line
<< ". Possibly corrupted profile.\n";
Diag << "WARNING: invalid profile data detected at line " << Line
<< ". Possibly corrupted profile.\n";
buildLTONameMaps();

View File

@ -0,0 +1,12 @@
## Check that llvm-bolt detects bad profile data and aborts
## This test uses the clang driver without target flags and will only succeed
## on Linux systems where the host triple matches the target.
REQUIRES: system-linux
RUN: %clang %cflags %S/Inputs/hello.c -o %t
RUN: touch %t.empty.fdata
RUN: not llvm-bolt %t -o %t.bolt --data %t.empty.fdata 2>&1 | FileCheck %s
CHECK: WARNING: empty profile data file
CHECK-NEXT: BOLT-ERROR: {{.*}}Input/output error