318 lines · cpp
1// RUN: %clang_cc1 %s -std=c++17 -pedantic -verify -triple=x86_64-apple-darwin92 3// Simple is_const implementation.4struct true_type {5 static const bool value = true;6};7 8struct false_type {9 static const bool value = false;10};11 12template <class T> struct is_const : false_type {};13template <class T> struct is_const<const T> : true_type {};14 15// expected-no-diagnostics16 17void 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 24void test_builtin_elementwise_abs_fp() {25 const float a = -2.0f;26 float b = 1.0f;27 static_assert(!is_const<decltype(__builtin_elementwise_abs(a))>::value);28 static_assert(!is_const<decltype(__builtin_elementwise_abs(b))>::value);29}30 31void test_builtin_elementwise_add_sat() {32 const int a = 2;33 int b = 1;34 static_assert(!is_const<decltype(__builtin_elementwise_add_sat(a, b))>::value);35 static_assert(!is_const<decltype(__builtin_elementwise_add_sat(b, a))>::value);36 static_assert(!is_const<decltype(__builtin_elementwise_add_sat(a, a))>::value);37}38 39void test_builtin_elementwise_sub_sat() {40 const int a = 2;41 int b = 1;42 static_assert(!is_const<decltype(__builtin_elementwise_sub_sat(a, b))>::value);43 static_assert(!is_const<decltype(__builtin_elementwise_sub_sat(b, a))>::value);44 static_assert(!is_const<decltype(__builtin_elementwise_sub_sat(a, a))>::value);45}46 47void test_builtin_elementwise_max() {48 const int a = 2;49 int b = 1;50 static_assert(!is_const<decltype(__builtin_elementwise_max(a, b))>::value);51 static_assert(!is_const<decltype(__builtin_elementwise_max(b, a))>::value);52 static_assert(!is_const<decltype(__builtin_elementwise_max(a, a))>::value);53}54 55void test_builtin_elementwise_min() {56 const int a = 2;57 int b = 1;58 static_assert(!is_const<decltype(__builtin_elementwise_min(a, b))>::value);59 static_assert(!is_const<decltype(__builtin_elementwise_min(b, a))>::value);60 static_assert(!is_const<decltype(__builtin_elementwise_min(a, a))>::value);61}62 63void test_builtin_elementwise_max_fp() {64 const float a = 2.0f;65 float b = 1.0f;66 static_assert(!is_const<decltype(__builtin_elementwise_max(a, b))>::value);67 static_assert(!is_const<decltype(__builtin_elementwise_max(b, a))>::value);68 static_assert(!is_const<decltype(__builtin_elementwise_max(a, a))>::value);69}70 71void test_builtin_elementwise_min_fp() {72 const float a = 2.0f;73 float b = 1.0f;74 static_assert(!is_const<decltype(__builtin_elementwise_min(a, b))>::value);75 static_assert(!is_const<decltype(__builtin_elementwise_min(b, a))>::value);76 static_assert(!is_const<decltype(__builtin_elementwise_min(a, a))>::value);77}78 79void test_builtin_elementwise_maximum() {80 const float a = 2.0f;81 float b = 1.0f;82 static_assert(!is_const<decltype(__builtin_elementwise_maximum(a, b))>::value);83 static_assert(!is_const<decltype(__builtin_elementwise_maximum(b, a))>::value);84 static_assert(!is_const<decltype(__builtin_elementwise_maximum(a, a))>::value);85}86 87void test_builtin_elementwise_minimum() {88 const float a = 2.0f;89 float b = 1.0f;90 static_assert(!is_const<decltype(__builtin_elementwise_minimum(a, b))>::value);91 static_assert(!is_const<decltype(__builtin_elementwise_minimum(b, a))>::value);92 static_assert(!is_const<decltype(__builtin_elementwise_minimum(a, a))>::value);93}94 95void test_builtin_elementwise_ceil() {96 const float a = 42.0;97 float b = 42.3;98 static_assert(!is_const<decltype(__builtin_elementwise_ceil(a))>::value);99 static_assert(!is_const<decltype(__builtin_elementwise_ceil(b))>::value);100}101 102void test_builtin_elementwise_acos() {103 const float a = 42.0;104 float b = 42.3;105 static_assert(!is_const<decltype(__builtin_elementwise_acos(a))>::value);106 static_assert(!is_const<decltype(__builtin_elementwise_acos(b))>::value);107}108 109void test_builtin_elementwise_cos() {110 const float a = 42.0;111 float b = 42.3;112 static_assert(!is_const<decltype(__builtin_elementwise_cos(a))>::value);113 static_assert(!is_const<decltype(__builtin_elementwise_cos(b))>::value);114}115 116void test_builtin_elementwise_cosh() {117 const float a = 42.0;118 float b = 42.3;119 static_assert(!is_const<decltype(__builtin_elementwise_cosh(a))>::value);120 static_assert(!is_const<decltype(__builtin_elementwise_cosh(b))>::value);121}122 123void test_builtin_elementwise_exp() {124 const float a = 42.0;125 float b = 42.3;126 static_assert(!is_const<decltype(__builtin_elementwise_exp(a))>::value);127 static_assert(!is_const<decltype(__builtin_elementwise_exp(b))>::value);128}129 130void test_builtin_elementwise_exp2() {131 const float a = 42.0;132 float b = 42.3;133 static_assert(!is_const<decltype(__builtin_elementwise_exp2(a))>::value);134 static_assert(!is_const<decltype(__builtin_elementwise_exp2(b))>::value);135}136 137void test_builtin_elementwise_exp10() {138 const float a = 42.0;139 float b = 42.3;140 static_assert(!is_const<decltype(__builtin_elementwise_exp10(a))>::value);141 static_assert(!is_const<decltype(__builtin_elementwise_exp10(b))>::value);142}143 144void test_builtin_elementwise_asin() {145 const float a = 42.0;146 float b = 42.3;147 static_assert(!is_const<decltype(__builtin_elementwise_asin(a))>::value);148 static_assert(!is_const<decltype(__builtin_elementwise_asin(b))>::value);149}150 151void test_builtin_elementwise_sin() {152 const float a = 42.0;153 float b = 42.3;154 static_assert(!is_const<decltype(__builtin_elementwise_sin(a))>::value);155 static_assert(!is_const<decltype(__builtin_elementwise_sin(b))>::value);156}157 158void test_builtin_elementwise_sinh() {159 const float a = 42.0;160 float b = 42.3;161 static_assert(!is_const<decltype(__builtin_elementwise_sinh(a))>::value);162 static_assert(!is_const<decltype(__builtin_elementwise_sinh(b))>::value);163}164 165void test_builtin_elementwise_atan() {166 const float a = 42.0;167 float b = 42.3;168 static_assert(!is_const<decltype(__builtin_elementwise_atan(a))>::value);169 static_assert(!is_const<decltype(__builtin_elementwise_atan(b))>::value);170}171 172void test_builtin_elementwise_atan2() {173 const float a = 42.0;174 float b = 42.3;175 static_assert(!is_const<decltype(__builtin_elementwise_atan2(a, a))>::value);176 static_assert(!is_const<decltype(__builtin_elementwise_atan2(b, b))>::value);177}178 179void test_builtin_elementwise_tan() {180 const float a = 42.0;181 float b = 42.3;182 static_assert(!is_const<decltype(__builtin_elementwise_tan(a))>::value);183 static_assert(!is_const<decltype(__builtin_elementwise_tan(b))>::value);184}185 186void test_builtin_elementwise_tanh() {187 const float a = 42.0;188 float b = 42.3;189 static_assert(!is_const<decltype(__builtin_elementwise_tanh(a))>::value);190 static_assert(!is_const<decltype(__builtin_elementwise_tanh(b))>::value);191}192 193void test_builtin_elementwise_sqrt() {194 const float a = 42.0;195 float b = 42.3;196 static_assert(!is_const<decltype(__builtin_elementwise_sqrt(a))>::value);197 static_assert(!is_const<decltype(__builtin_elementwise_sqrt(b))>::value);198}199 200void test_builtin_elementwise_log() {201 const float a = 42.0;202 float b = 42.3;203 static_assert(!is_const<decltype(__builtin_elementwise_log(a))>::value);204 static_assert(!is_const<decltype(__builtin_elementwise_log(b))>::value);205}206 207void test_builtin_elementwise_log10() {208 const float a = 42.0;209 float b = 42.3;210 static_assert(!is_const<decltype(__builtin_elementwise_log10(a))>::value);211 static_assert(!is_const<decltype(__builtin_elementwise_log10(b))>::value);212}213 214void test_builtin_elementwise_log2() {215 const float a = 42.0;216 float b = 42.3;217 static_assert(!is_const<decltype(__builtin_elementwise_log2(a))>::value);218 static_assert(!is_const<decltype(__builtin_elementwise_log2(b))>::value);219}220 221void test_builtin_elementwise_rint() {222 const float a = 42.5;223 float b = 42.3;224 static_assert(!is_const<decltype(__builtin_elementwise_rint(a))>::value);225 static_assert(!is_const<decltype(__builtin_elementwise_rint(b))>::value);226}227 228void test_builtin_elementwise_nearbyint() {229 const float a = 42.5;230 float b = 42.3;231 static_assert(!is_const<decltype(__builtin_elementwise_nearbyint(a))>::value);232 static_assert(!is_const<decltype(__builtin_elementwise_nearbyint(b))>::value);233}234 235void test_builtin_elementwise_round() {236 const float a = 42.5;237 float b = 42.3;238 static_assert(!is_const<decltype(__builtin_elementwise_round(a))>::value);239 static_assert(!is_const<decltype(__builtin_elementwise_round(b))>::value);240}241 242void test_builtin_elementwise_roundeven() {243 const float a = 42.5;244 float b = 42.3;245 static_assert(!is_const<decltype(__builtin_elementwise_roundeven(a))>::value);246 static_assert(!is_const<decltype(__builtin_elementwise_roundeven(b))>::value);247}248 249void test_builtin_elementwise_trunc() {250 const float a = 42.5;251 float b = 42.3;252 static_assert(!is_const<decltype(__builtin_elementwise_trunc(a))>::value);253 static_assert(!is_const<decltype(__builtin_elementwise_trunc(b))>::value);254}255 256void test_builtin_elementwise_floor() {257 const float a = 42.5;258 float b = 42.3;259 static_assert(!is_const<decltype(__builtin_elementwise_floor(a))>::value);260 static_assert(!is_const<decltype(__builtin_elementwise_floor(b))>::value);261}262 263void test_builtin_elementwise_canonicalize() {264 const float a = 42.5;265 float b = 42.3;266 static_assert(!is_const<decltype(__builtin_elementwise_canonicalize(a))>::value);267 static_assert(!is_const<decltype(__builtin_elementwise_canonicalize(b))>::value);268}269 270void test_builtin_elementwise_copysign() {271 const float a = 2.0f;272 float b = -4.0f;273 static_assert(!is_const<decltype(__builtin_elementwise_copysign(a, b))>::value);274 static_assert(!is_const<decltype(__builtin_elementwise_copysign(b, a))>::value);275 static_assert(!is_const<decltype(__builtin_elementwise_copysign(a, a))>::value);276}277 278void test_builtin_elementwise_fma() {279 const float a = 2.0f;280 float b = -4.0f;281 float c = 1.0f;282 static_assert(!is_const<decltype(__builtin_elementwise_fma(a, a, a))>::value);283 static_assert(!is_const<decltype(__builtin_elementwise_fma(a, b, c))>::value);284 static_assert(!is_const<decltype(__builtin_elementwise_fma(b, a, c))>::value);285 static_assert(!is_const<decltype(__builtin_elementwise_fma(c, c, c))>::value);286}287 288void test_builtin_elementwise_fmod() {289 const double a = 2;290 double b = 1;291 static_assert(!is_const<decltype(__builtin_elementwise_fmod(a, b))>::value);292 static_assert(!is_const<decltype(__builtin_elementwise_fmod(b, a))>::value);293 static_assert(!is_const<decltype(__builtin_elementwise_fmod(a, a))>::value);294}295 296void test_builtin_elementwise_pow() {297 const double a = 2;298 double b = 1;299 static_assert(!is_const<decltype(__builtin_elementwise_pow(a, b))>::value);300 static_assert(!is_const<decltype(__builtin_elementwise_pow(b, a))>::value);301 static_assert(!is_const<decltype(__builtin_elementwise_pow(a, a))>::value);302}303 304void test_builtin_elementwise_bitreverse() {305 const int a = 2;306 int b = 1;307 static_assert(!is_const<decltype(__builtin_elementwise_bitreverse(a))>::value);308 static_assert(!is_const<decltype(__builtin_elementwise_bitreverse(b))>::value); 309}310 311void test_builtin_elementwise_popcount() {312 const int a = 2;313 int b = 1;314 static_assert(!is_const<decltype(__builtin_elementwise_popcount(a))>::value);315 static_assert(!is_const<decltype(__builtin_elementwise_popcount(b))>::value); 316}317 318