[PATCH] D35586: [ProfData] Detect if zlib is available
Wei-Ren Chen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 19 16:06:07 PDT 2017
chenwj updated this revision to Diff 107405.
chenwj added a comment.
@dblaikie Done.
https://reviews.llvm.org/D35586
Files:
include/llvm/ProfileData/InstrProf.h
lib/ProfileData/InstrProf.cpp
test/tools/llvm-profdata/Inputs/compressed.profraw
test/tools/llvm-profdata/nocompress.test
Index: test/tools/llvm-profdata/nocompress.test
===================================================================
--- /dev/null
+++ test/tools/llvm-profdata/nocompress.test
@@ -0,0 +1,16 @@
+REGENERATE: You need a checkout of clang with compiler-rt to generate the
+REGENERATE: binary file here. These shell commands can be used to regenerate
+REGENERATE: it.
+REGENERATE:
+REGENERATE: $ SRC=path/to/llvm
+REGENERATE: $ CFE=$SRC/tools/clang
+REGENERATE: $ TESTDIR=$SRC/test/tools/llvm-profdata
+REGENERATE: $ CFE_TESTDIR=$CFE/test/Profile
+REGENERATE: $ clang -o a.out -fprofile-instr-generate $CFE_TESTDIR/c-general.c
+REGENERATE: $ LLVM_PROFILE_FILE=$TESTDIR/Inputs/compressed.profraw ./a.out
+
+RUN: not llvm-profdata show %p/Inputs/compressed.profraw -o %t 2>&1 | FileCheck %s
+
+REQUIRES: nozlib
+
+CHECK: error: {{.*}} Profile uses zlib compression but the profile reader was built without zlib support
Index: lib/ProfileData/InstrProf.cpp
===================================================================
--- lib/ProfileData/InstrProf.cpp
+++ lib/ProfileData/InstrProf.cpp
@@ -111,6 +111,8 @@
return "Failed to uncompress data (zlib)";
case instrprof_error::empty_raw_profile:
return "Empty raw profile file";
+ case instrprof_error::zlib_unavailable:
+ return "Profile uses zlib compression but the profile reader was built without zlib support";
}
llvm_unreachable("A value of instrprof_error has no message.");
}
@@ -430,6 +432,9 @@
SmallString<128> UncompressedNameStrings;
StringRef NameStrings;
if (isCompressed) {
+ if (!llvm::zlib::isAvailable())
+ return make_error<InstrProfError>(instrprof_error::zlib_unavailable);
+
StringRef CompressedNameStrings(reinterpret_cast<const char *>(P),
CompressedSize);
if (Error E =
Index: include/llvm/ProfileData/InstrProf.h
===================================================================
--- include/llvm/ProfileData/InstrProf.h
+++ include/llvm/ProfileData/InstrProf.h
@@ -295,7 +295,8 @@
value_site_count_mismatch,
compress_failed,
uncompress_failed,
- empty_raw_profile
+ empty_raw_profile,
+ zlib_unavailable
};
inline std::error_code make_error_code(instrprof_error E) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D35586.107405.patch
Type: text/x-patch
Size: 2259 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170719/31a16e8d/attachment.bin>
More information about the llvm-commits
mailing list