aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-08-11 00:06:13 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-08-11 22:23:48 +0200
commit5d038837ebeab6bf7da664487bfcc372baef5176 (patch)
tree8edeaa31b05980de467a17e1717cb7aba9402055
parentfb8d5ee785251179d0f34ae3eab4b2e4495b8395 (diff)
downloadsparse-5d038837ebeab6bf7da664487bfcc372baef5176.tar.gz
fix is_scalar_type(): fouled types are scalars too
is_scalar_type() accept SYM_RESTRICT but not SYM_FOULED but both are for integer types (and only for them). So, let it accept SYM_FOULED too. Same for is_integral_type(). Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--symbol.h2
-rw-r--r--validation/foul-scalar.c13
2 files changed, 15 insertions, 0 deletions
diff --git a/symbol.h b/symbol.h
index 873d69fc..a3ed9567 100644
--- a/symbol.h
+++ b/symbol.h
@@ -463,6 +463,7 @@ static inline int is_scalar_type(struct symbol *type)
case SYM_BITFIELD:
case SYM_PTR:
case SYM_RESTRICT: // OK, always integer types
+ case SYM_FOULED: // idem
return 1;
default:
break;
@@ -483,6 +484,7 @@ static inline bool is_integral_type(struct symbol *type)
case SYM_ENUM:
case SYM_PTR:
case SYM_RESTRICT: // OK, always integer types
+ case SYM_FOULED: // idem
return 1;
default:
break;
diff --git a/validation/foul-scalar.c b/validation/foul-scalar.c
new file mode 100644
index 00000000..8e053b96
--- /dev/null
+++ b/validation/foul-scalar.c
@@ -0,0 +1,13 @@
+#define __bitwise __attribute__((bitwise))
+
+typedef unsigned short __bitwise __be16;
+
+static void foo(__be16 x)
+{
+ if (~x)
+ ;
+}
+
+/*
+ * check-name: foul-scalar
+ */