[PATCH] D139480: [BOLT] Handle access errors while reading profile

Maksim Panchenko via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 7 17:12:07 PST 2022


This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rG0f915826cc86: [BOLT] Handle access errors while reading profile (authored by maksfb).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139480/new/

https://reviews.llvm.org/D139480

Files:
  bolt/lib/Profile/DataAggregator.cpp
  bolt/test/unreadable-profile.test


Index: bolt/test/unreadable-profile.test
===================================================================
--- /dev/null
+++ bolt/test/unreadable-profile.test
@@ -0,0 +1,13 @@
+REQUIRES: system-linux
+
+RUN: touch %t.profile && chmod 000 %t.profile
+RUN: %clang %S/Inputs/hello.c -o %t
+RUN: not llvm-bolt %t -o %t.bolt --data %t.profile 2>&1 \
+RUN:   | FileCheck %s --check-prefix CHECK-NOPERM
+RUN: not llvm-bolt %t -o %t.bolt --data %t.fake.profile 2>&1 \
+RUN:   | FileCheck %s --check-prefix CHECK-FAKE
+
+## Check that llvm-bolt gracefully handles errors accessing profile data.
+
+CHECK-NOPERM: Permission denied
+CHECK-FAKE: No such file or directory
Index: bolt/lib/Profile/DataAggregator.cpp
===================================================================
--- bolt/lib/Profile/DataAggregator.cpp
+++ bolt/lib/Profile/DataAggregator.cpp
@@ -327,15 +327,22 @@
     return true;
 
   Expected<sys::fs::file_t> FD = sys::fs::openNativeFileForRead(FileName);
-  if (!FD)
+  if (!FD) {
+    consumeError(FD.takeError());
     return false;
+  }
 
   char Buf[7] = {0, 0, 0, 0, 0, 0, 0};
 
   auto Close = make_scope_exit([&] { sys::fs::closeFile(*FD); });
   Expected<size_t> BytesRead = sys::fs::readNativeFileSlice(
       *FD, makeMutableArrayRef(Buf, sizeof(Buf)), 0);
-  if (!BytesRead || *BytesRead != 7)
+  if (!BytesRead) {
+    consumeError(BytesRead.takeError());
+    return false;
+  }
+
+  if (*BytesRead != 7)
     return false;
 
   if (strncmp(Buf, "PERFILE", 7) == 0)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D139480.481114.patch
Type: text/x-patch
Size: 1496 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221208/4f27d317/attachment.bin>


More information about the llvm-commits mailing list