1 //===--- FunctionPointer.h - Types for the constexpr VM ----------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_CLANG_AST_INTERP_FUNCTION_POINTER_H
10 #define LLVM_CLANG_AST_INTERP_FUNCTION_POINTER_H
13 #include "Primitives.h"
14 #include "clang/AST/APValue.h"
20 class FunctionPointer final
{
25 FunctionPointer() : Func(nullptr) {}
26 FunctionPointer(const Function
*Func
) : Func(Func
) { assert(Func
); }
28 const Function
*getFunction() const { return Func
; }
30 APValue
toAPValue() const {
32 return APValue(static_cast<Expr
*>(nullptr), CharUnits::Zero(), {},
33 /*OnePastTheEnd=*/false, /*IsNull=*/true);
35 return APValue(Func
->getDecl(), CharUnits::Zero(), {},
36 /*OnePastTheEnd=*/false, /*IsNull=*/false);
39 void print(llvm::raw_ostream
&OS
) const {
42 OS
<< Func
->getName();
48 std::string
toDiagnosticString(const ASTContext
&Ctx
) const {
52 return toAPValue().getAsString(Ctx
, Func
->getDecl()->getType());
55 ComparisonCategoryResult
compare(const FunctionPointer
&RHS
) const {
57 return ComparisonCategoryResult::Equal
;
58 return ComparisonCategoryResult::Unordered
;
62 inline llvm::raw_ostream
&operator<<(llvm::raw_ostream
&OS
,