Index: include/llvm/ProfileData/SampleProf.h
===================================================================
--- include/llvm/ProfileData/SampleProf.h
+++ include/llvm/ProfileData/SampleProf.h
@@ -46,15 +46,27 @@
   return std::error_code(static_cast<int>(E), sampleprof_category());
 }
 
-inline sampleprof_error MergeResult(sampleprof_error &Accumulator,
-                                    sampleprof_error Result) {
-  // Prefer first error encountered as later errors may be secondary effects of
-  // the initial problem.
-  if (Accumulator == sampleprof_error::success &&
-      Result != sampleprof_error::success)
-    Accumulator = Result;
-  return Accumulator;
-}
+class SampleProfError : public ErrorInfo<SampleProfError> {
+public:
+  SampleProfError(sampleprof_error Err) : Err(Err) {
+    assert(Err != sampleprof_error::success && "Not an error");
+  }
+
+  std::string message() const override;
+
+  void log(raw_ostream &OS) const override { OS << message(); }
+
+  std::error_code convertToErrorCode() const override {
+    return make_error_code(Err);
+  }
+
+  sampleprof_error get() const { return Err; }
+
+  static char ID;
+
+private:
+  sampleprof_error Err;
+};
 
 } // end namespace llvm