blob: e5fa093e6e1256b102bb9b08186c7ce52d7bb79d [file] [log] [blame]
Clement Courbet03a3d292019-09-30 13:53:50 +00001//===-- Error.h -------------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_TOOLS_LLVM_EXEGESIS_ERROR_H
10#define LLVM_TOOLS_LLVM_EXEGESIS_ERROR_H
11
12#include "llvm/ADT/Twine.h"
13#include "llvm/Support/Error.h"
14
15namespace llvm {
16namespace exegesis {
17
18// A class representing failures that happened within llvm-exegesis, they are
19// used to report informations to the user.
20class Failure : public StringError {
21public:
22 Failure(const Twine &S) : StringError(S, inconvertibleErrorCode()) {}
23};
24
Miloš Stojanović446268a2020-02-06 17:08:05 +010025// A class representing failures that happened during clustering calculations.
26class ClusteringError : public ErrorInfo<ClusteringError> {
27public:
28 static char ID;
Miloš Stojanović20529272020-02-07 13:45:10 +010029 ClusteringError(const Twine &S) : Msg(S.str()) {}
Miloš Stojanović446268a2020-02-06 17:08:05 +010030
31 void log(raw_ostream &OS) const override;
32
33 std::error_code convertToErrorCode() const override;
Miloš Stojanović20529272020-02-07 13:45:10 +010034
Miloš Stojanović446268a2020-02-06 17:08:05 +010035private:
Miloš Stojanović20529272020-02-07 13:45:10 +010036 std::string Msg;
37};
38
39// A class representing failures that happened during snippet execution.
40// Instead of terminating the program crashes are logged into the output.
41class SnippetCrash : public ErrorInfo<SnippetCrash> {
42public:
43 static char ID;
44 SnippetCrash(const Twine &S) : Msg(S.str()) {}
45
46 void log(raw_ostream &OS) const override;
47
48 std::error_code convertToErrorCode() const override;
49
50private:
51 std::string Msg;
Miloš Stojanović446268a2020-02-06 17:08:05 +010052};
53
Clement Courbet03a3d292019-09-30 13:53:50 +000054} // namespace exegesis
55} // namespace llvm
56
57#endif