[PGO] Introduce error report macro in profile-rt
authorXinliang David Li <davidxl@google.com>
Thu, 3 Dec 2015 18:31:59 +0000 (18:31 +0000)
committerXinliang David Li <davidxl@google.com>
Thu, 3 Dec 2015 18:31:59 +0000 (18:31 +0000)
Also added a test case for runtime error reporting.

llvm-svn: 254625

compiler-rt/lib/profile/InstrProfiling.h
compiler-rt/lib/profile/InstrProfilingFile.c
compiler-rt/test/profile/instrprof-error.c [new file with mode: 0644]

index 7ee41c3..0aa2407 100644 (file)
@@ -163,4 +163,8 @@ uint64_t __llvm_profile_get_magic(void);
 /*! \brief Get the version of the file format. */
 uint64_t __llvm_profile_get_version(void);
 
+#define PROF_ERR(Format, ...) \
+ if (getenv("LLVM_PROFILE_VERBOSE_ERRORS")) \
+   fprintf(stderr, Format, __VA_ARGS__ );
+
 #endif /* PROFILE_INSTRPROFILING_H_ */
index 5663bab..8e9d2da 100644 (file)
@@ -193,13 +193,15 @@ int __llvm_profile_write_file(void) {
   int rc;
 
   /* Check the filename. */
-  if (!__llvm_profile_CurrentFilename)
+  if (!__llvm_profile_CurrentFilename) {
+    PROF_ERR("LLVM Profile: Failed to write file : %s\n", "Filename not set");
     return -1;
+  }
 
   /* Write the file. */
   rc = writeFileWithName(__llvm_profile_CurrentFilename);
-  if (rc && getenv("LLVM_PROFILE_VERBOSE_ERRORS"))
-    fprintf(stderr, "LLVM Profile: Failed to write file \"%s\": %s\n",
+  if (rc)
+    PROF_ERR("LLVM Profile: Failed to write file \"%s\": %s\n",
             __llvm_profile_CurrentFilename, strerror(errno));
   return rc;
 }
diff --git a/compiler-rt/test/profile/instrprof-error.c b/compiler-rt/test/profile/instrprof-error.c
new file mode 100644 (file)
index 0000000..4386d53
--- /dev/null
@@ -0,0 +1,12 @@
+// RUN: %clang_profgen -o %t -O3 %s
+// RUN: touch %t.profraw
+// RUN: chmod -w %t.profraw
+// RUN: LLVM_PROFILE_FILE=%t.profraw LLVM_PROFILE_VERBOSE_ERRORS=1 %run %t 1 2>&1 | FileCheck %s
+// RUN: chmod +w %t.profraw
+
+int main(int argc, const char *argv[]) {
+  if (argc < 2)
+    return 1;
+  return 0;
+}
+// CHECK: LLVM Profile: Failed to write file