xref: /openbsd-src/gnu/llvm/clang/lib/AST/Interp/ByteCodeGenError.h (revision 12c855180aad702bbcca06e0398d774beeafb155)
1e5dd7070Spatrick //===--- ByteCodeGenError.h - Byte code generation error ----------*- C -*-===//
2e5dd7070Spatrick //
3e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information.
5e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e5dd7070Spatrick //
7e5dd7070Spatrick //===----------------------------------------------------------------------===//
8e5dd7070Spatrick 
9e5dd7070Spatrick #ifndef LLVM_CLANG_AST_INTERP_BYTECODEGENERROR_H
10e5dd7070Spatrick #define LLVM_CLANG_AST_INTERP_BYTECODEGENERROR_H
11e5dd7070Spatrick 
12e5dd7070Spatrick #include "clang/AST/Decl.h"
13e5dd7070Spatrick #include "clang/AST/Stmt.h"
14e5dd7070Spatrick #include "clang/Basic/SourceLocation.h"
15e5dd7070Spatrick #include "llvm/Support/Error.h"
16e5dd7070Spatrick 
17e5dd7070Spatrick namespace clang {
18e5dd7070Spatrick namespace interp {
19e5dd7070Spatrick 
20e5dd7070Spatrick /// Error thrown by the compiler.
21e5dd7070Spatrick struct ByteCodeGenError : public llvm::ErrorInfo<ByteCodeGenError> {
22e5dd7070Spatrick public:
ByteCodeGenErrorByteCodeGenError23*12c85518Srobert   ByteCodeGenError(SourceRange Range) : Range(Range) {}
ByteCodeGenErrorByteCodeGenError24*12c85518Srobert   ByteCodeGenError(const Stmt *S) : ByteCodeGenError(S->getSourceRange()) {}
ByteCodeGenErrorByteCodeGenError25*12c85518Srobert   ByteCodeGenError(const Decl *D) : ByteCodeGenError(D->getSourceRange()) {}
26e5dd7070Spatrick 
logByteCodeGenError27e5dd7070Spatrick   void log(raw_ostream &OS) const override { OS << "unimplemented feature"; }
28e5dd7070Spatrick 
getRangeByteCodeGenError29*12c85518Srobert   const SourceRange &getRange() const { return Range; }
30e5dd7070Spatrick 
31e5dd7070Spatrick   static char ID;
32e5dd7070Spatrick 
33e5dd7070Spatrick private:
34*12c85518Srobert   // Range of the item where the error occurred.
35*12c85518Srobert   SourceRange Range;
36e5dd7070Spatrick 
37e5dd7070Spatrick   // Users are not expected to use error_code.
convertToErrorCodeByteCodeGenError38e5dd7070Spatrick   std::error_code convertToErrorCode() const override {
39e5dd7070Spatrick     return llvm::inconvertibleErrorCode();
40e5dd7070Spatrick   }
41e5dd7070Spatrick };
42e5dd7070Spatrick 
43e5dd7070Spatrick } // namespace interp
44e5dd7070Spatrick } // namespace clang
45e5dd7070Spatrick 
46e5dd7070Spatrick #endif
47