xref: /llvm-project/clang/test/AST/ByteCode/builtins.cpp (revision 020b8e8f8dfef2392351e66215d11cccb573a88f)
1*a07aba5dSTimm Baeder // RUN: %clang_cc1 -fexperimental-new-constant-interpreter %s -Wno-constant-evaluated -verify -fms-extensions
2*a07aba5dSTimm Baeder // RUN: %clang_cc1 -fexperimental-new-constant-interpreter %s -Wno-constant-evaluated -fms-extensions -emit-llvm -o - | FileCheck %s
3*a07aba5dSTimm Baeder // RUN: %clang_cc1 -verify=ref %s -Wno-constant-evaluated -fms-extensions
4*a07aba5dSTimm Baeder // RUN: %clang_cc1 -verify=ref %s -Wno-constant-evaluated %s -fms-extensions -emit-llvm -o - | FileCheck %s
5*a07aba5dSTimm Baeder 
6*a07aba5dSTimm Baeder // expected-no-diagnostics
7*a07aba5dSTimm Baeder // ref-no-diagnostics
8*a07aba5dSTimm Baeder 
9*a07aba5dSTimm Baeder using size_t = decltype(sizeof(int));
10*a07aba5dSTimm Baeder 
11*a07aba5dSTimm Baeder namespace std {
12*a07aba5dSTimm Baeder inline constexpr bool is_constant_evaluated() noexcept {
13*a07aba5dSTimm Baeder   return __builtin_is_constant_evaluated();
14*a07aba5dSTimm Baeder }
15*a07aba5dSTimm Baeder } // namespace std
16*a07aba5dSTimm Baeder 
17*a07aba5dSTimm Baeder constexpr bool b = std::is_constant_evaluated();
18*a07aba5dSTimm Baeder static_assert(b, "");
19*a07aba5dSTimm Baeder static_assert(std::is_constant_evaluated() , "");
20*a07aba5dSTimm Baeder 
21*a07aba5dSTimm Baeder 
22*a07aba5dSTimm Baeder bool is_this_constant() {
23*a07aba5dSTimm Baeder   return __builtin_is_constant_evaluated(); // CHECK: ret i1 false
24*a07aba5dSTimm Baeder }
25*a07aba5dSTimm Baeder 
26*a07aba5dSTimm Baeder constexpr bool assume() {
27*a07aba5dSTimm Baeder   __builtin_assume(true);
28*a07aba5dSTimm Baeder   __builtin_assume(false);
29*a07aba5dSTimm Baeder   __assume(1);
30*a07aba5dSTimm Baeder   __assume(false);
31*a07aba5dSTimm Baeder   return true;
32*a07aba5dSTimm Baeder }
33*a07aba5dSTimm Baeder static_assert(assume(), "");
34*a07aba5dSTimm Baeder 
35*a07aba5dSTimm Baeder void test_builtin_os_log(void *buf, int i, const char *data) {
36*a07aba5dSTimm Baeder   constexpr int len = __builtin_os_log_format_buffer_size("%d %{public}s %{private}.16P", i, data, data);
37*a07aba5dSTimm Baeder   static_assert(len > 0, "Expect len > 0");
38*a07aba5dSTimm Baeder }
39