1 // RUN: %clang_cc1 %s -std=c++17 -pedantic -verify -triple=x86_64-apple-darwin9
2
3 // Simple is_const implementation.
4 struct true_type {
5 static const bool value = true;
6 };
7
8 struct false_type {
9 static const bool value = false;
10 };
11
12 template <class T> struct is_const : false_type {};
13 template <class T> struct is_const<const T> : true_type {};
14
15 // expected-no-diagnostics
16
test_builtin_elementwise_abs()17 void test_builtin_elementwise_abs() {
18 const int a = 2;
19 int b = 1;
20 static_assert(!is_const<decltype(__builtin_elementwise_abs(a))>::value);
21 static_assert(!is_const<decltype(__builtin_elementwise_abs(b))>::value);
22 }
23
test_builtin_elementwise_add_sat()24 void test_builtin_elementwise_add_sat() {
25 const int a = 2;
26 int b = 1;
27 static_assert(!is_const<decltype(__builtin_elementwise_add_sat(a, b))>::value);
28 static_assert(!is_const<decltype(__builtin_elementwise_add_sat(b, a))>::value);
29 static_assert(!is_const<decltype(__builtin_elementwise_add_sat(a, a))>::value);
30 }
31
test_builtin_elementwise_sub_sat()32 void test_builtin_elementwise_sub_sat() {
33 const int a = 2;
34 int b = 1;
35 static_assert(!is_const<decltype(__builtin_elementwise_sub_sat(a, b))>::value);
36 static_assert(!is_const<decltype(__builtin_elementwise_sub_sat(b, a))>::value);
37 static_assert(!is_const<decltype(__builtin_elementwise_sub_sat(a, a))>::value);
38 }
39
test_builtin_elementwise_max()40 void test_builtin_elementwise_max() {
41 const int a = 2;
42 int b = 1;
43 static_assert(!is_const<decltype(__builtin_elementwise_max(a, b))>::value);
44 static_assert(!is_const<decltype(__builtin_elementwise_max(b, a))>::value);
45 static_assert(!is_const<decltype(__builtin_elementwise_max(a, a))>::value);
46 }
47
test_builtin_elementwise_min()48 void test_builtin_elementwise_min() {
49 const int a = 2;
50 int b = 1;
51 static_assert(!is_const<decltype(__builtin_elementwise_min(a, b))>::value);
52 static_assert(!is_const<decltype(__builtin_elementwise_min(b, a))>::value);
53 static_assert(!is_const<decltype(__builtin_elementwise_min(a, a))>::value);
54 }
55
test_builtin_elementwise_ceil()56 void test_builtin_elementwise_ceil() {
57 const float a = 42.0;
58 float b = 42.3;
59 static_assert(!is_const<decltype(__builtin_elementwise_ceil(a))>::value);
60 static_assert(!is_const<decltype(__builtin_elementwise_ceil(b))>::value);
61 }
62