xref: /llvm-project/clang/test/Analysis/Inputs/llvm.h (revision 4448affede5100658530aea8793ae7a7bc05a110)
1 #pragma clang system_header
2 
3 #include "system-header-simulator-cxx.h"
4 
5 namespace llvm {
6 template <class X, class Y>
7 const X *cast(Y Value);
8 
9 template <class X, class Y>
10 const X *dyn_cast(Y *Value);
11 template <class X, class Y>
12 const X &dyn_cast(Y &Value);
13 
14 template <class X, class Y>
15 const X *cast_or_null(Y Value);
16 
17 template <class X, class Y>
18 const X *dyn_cast_or_null(Y *Value);
19 template <class X, class Y>
20 const X *dyn_cast_or_null(Y &Value);
21 
22 template <class X, class Y> inline bool isa(const Y &Val);
23 
24 template <typename First, typename Second, typename... Rest, typename Y>
isa(const Y & Val)25 inline bool isa(const Y &Val) {
26   return isa<First>(Val) || isa<Second, Rest...>(Val);
27 }
28 
29 template <typename... X, class Y>
isa_and_nonnull(const Y & Val)30 inline bool isa_and_nonnull(const Y &Val) {
31   if (!Val)
32     return false;
33   return isa<X...>(Val);
34 }
35 
36 template <typename X, typename Y>
37 std::unique_ptr<X> cast(std::unique_ptr<Y> &&Value);
38 } // namespace llvm
39