Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/clang/lib/AST/ExprConstShared.h
35259 views
1
//===--- ExprConstShared.h - Shared consetxpr functionality ----*- 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
// Shared functionality between the new constant expression
10
// interpreter (AST/Interp/) and the current one (ExprConstant.cpp).
11
//
12
//===----------------------------------------------------------------------===//
13
14
#ifndef LLVM_CLANG_LIB_AST_EXPRCONSTSHARED_H
15
#define LLVM_CLANG_LIB_AST_EXPRCONSTSHARED_H
16
17
namespace llvm {
18
class APFloat;
19
}
20
namespace clang {
21
class QualType;
22
class LangOptions;
23
} // namespace clang
24
using namespace clang;
25
/// Values returned by __builtin_classify_type, chosen to match the values
26
/// produced by GCC's builtin.
27
enum class GCCTypeClass {
28
None = -1,
29
Void = 0,
30
Integer = 1,
31
// GCC reserves 2 for character types, but instead classifies them as
32
// integers.
33
Enum = 3,
34
Bool = 4,
35
Pointer = 5,
36
// GCC reserves 6 for references, but appears to never use it (because
37
// expressions never have reference type, presumably).
38
PointerToDataMember = 7,
39
RealFloat = 8,
40
Complex = 9,
41
// GCC reserves 10 for functions, but does not use it since GCC version 6 due
42
// to decay to pointer. (Prior to version 6 it was only used in C++ mode).
43
// GCC claims to reserve 11 for pointers to member functions, but *actually*
44
// uses 12 for that purpose, same as for a class or struct. Maybe it
45
// internally implements a pointer to member as a struct? Who knows.
46
PointerToMemberFunction = 12, // Not a bug, see above.
47
ClassOrStruct = 12,
48
Union = 13,
49
// GCC reserves 14 for arrays, but does not use it since GCC version 6 due to
50
// decay to pointer. (Prior to version 6 it was only used in C++ mode).
51
// GCC reserves 15 for strings, but actually uses 5 (pointer) for string
52
// literals.
53
// Lang = 16,
54
// OpaqueType = 17,
55
BitInt = 18,
56
Vector = 19
57
};
58
59
GCCTypeClass EvaluateBuiltinClassifyType(QualType T,
60
const LangOptions &LangOpts);
61
62
void HandleComplexComplexMul(llvm::APFloat A, llvm::APFloat B, llvm::APFloat C,
63
llvm::APFloat D, llvm::APFloat &ResR,
64
llvm::APFloat &ResI);
65
void HandleComplexComplexDiv(llvm::APFloat A, llvm::APFloat B, llvm::APFloat C,
66
llvm::APFloat D, llvm::APFloat &ResR,
67
llvm::APFloat &ResI);
68
69
#endif
70
71