summaryrefslogtreecommitdiff
path: root/usr/src/tools/smatch/src/validation/builtin-fp-unop.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/tools/smatch/src/validation/builtin-fp-unop.c')
-rw-r--r--usr/src/tools/smatch/src/validation/builtin-fp-unop.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/usr/src/tools/smatch/src/validation/builtin-fp-unop.c b/usr/src/tools/smatch/src/validation/builtin-fp-unop.c
new file mode 100644
index 0000000000..f42c587b7d
--- /dev/null
+++ b/usr/src/tools/smatch/src/validation/builtin-fp-unop.c
@@ -0,0 +1,95 @@
+static void test_not_enough_args(void)
+{
+ __builtin_isfinite();
+ __builtin_isinf();
+ __builtin_isinf_sign();
+ __builtin_isnan();
+ __builtin_isnormal();
+ __builtin_signbit();
+}
+
+static void test_too_many_args(double v)
+{
+ __builtin_isfinite(v, v);
+ __builtin_isinf(v, v);
+ __builtin_isinf_sign(v, v);
+ __builtin_isnan(v, v);
+ __builtin_isnormal(v, v);
+ __builtin_signbit(v, v);
+}
+
+static void test_non_float(int v)
+{
+ __builtin_isfinite(v);
+ __builtin_isinf(v);
+ __builtin_isinf_sign(v);
+ __builtin_isnan(v);
+ __builtin_isnormal(v);
+ __builtin_signbit(v);
+}
+
+static void test_float(float v)
+{
+ __builtin_isfinite(v);
+ __builtin_isinf(v);
+ __builtin_isinf_sign(v);
+ __builtin_isnan(v);
+ __builtin_isnormal(v);
+ __builtin_signbit(v);
+}
+
+static void test_double(double v)
+{
+ __builtin_isfinite(v);
+ __builtin_isinf(v);
+ __builtin_isinf_sign(v);
+ __builtin_isnan(v);
+ __builtin_isnormal(v);
+ __builtin_signbit(v);
+}
+
+static void test_ldouble(long double v)
+{
+ __builtin_isfinite(v);
+ __builtin_isinf(v);
+ __builtin_isinf_sign(v);
+ __builtin_isnan(v);
+ __builtin_isnormal(v);
+ __builtin_signbit(v);
+}
+
+static void test_constant(void)
+{
+ __builtin_isfinite(0.0);
+ __builtin_isinf(0.0);
+ __builtin_isinf_sign(0.0);
+ __builtin_isnan(0.0);
+ __builtin_isnormal(0.0);
+ __builtin_signbit(0.0);
+}
+
+/*
+ * check-name: builtin float-point unop
+ * check-command: sparse -Wno-decl $file
+ *
+ * check-error-start
+builtin-fp-unop.c:3:27: error: not enough arguments for __builtin_isfinite
+builtin-fp-unop.c:4:24: error: not enough arguments for __builtin_isinf
+builtin-fp-unop.c:5:29: error: not enough arguments for __builtin_isinf_sign
+builtin-fp-unop.c:6:24: error: not enough arguments for __builtin_isnan
+builtin-fp-unop.c:7:27: error: not enough arguments for __builtin_isnormal
+builtin-fp-unop.c:8:26: error: not enough arguments for __builtin_signbit
+builtin-fp-unop.c:13:27: error: too many arguments for __builtin_isfinite
+builtin-fp-unop.c:14:24: error: too many arguments for __builtin_isinf
+builtin-fp-unop.c:15:29: error: too many arguments for __builtin_isinf_sign
+builtin-fp-unop.c:16:24: error: too many arguments for __builtin_isnan
+builtin-fp-unop.c:17:27: error: too many arguments for __builtin_isnormal
+builtin-fp-unop.c:18:26: error: too many arguments for __builtin_signbit
+builtin-fp-unop.c:23:27: error: non-floating-point argument in call to __builtin_isfinite()
+builtin-fp-unop.c:24:24: error: non-floating-point argument in call to __builtin_isinf()
+builtin-fp-unop.c:25:29: error: non-floating-point argument in call to __builtin_isinf_sign()
+builtin-fp-unop.c:26:24: error: non-floating-point argument in call to __builtin_isnan()
+builtin-fp-unop.c:27:27: error: non-floating-point argument in call to __builtin_isnormal()
+builtin-fp-unop.c:28:26: error: non-floating-point argument in call to __builtin_signbit()
+ * check-error-end
+ */