[PATCH] Expand initializers when testing them for being constant

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Pavel Roskin <proski@xxxxxxx>
---

 expand.c                        |    2 ++
 validation/array-size-known.c   |    9 +++++++++
 validation/array-size-unknown.c |   14 ++++++++++++++
 3 files changed, 25 insertions(+), 0 deletions(-)
 create mode 100644 validation/array-size-known.c
 create mode 100644 validation/array-size-unknown.c

diff --git a/expand.c b/expand.c
index 032f0c5..bbe8d6c 100644
--- a/expand.c
+++ b/expand.c
@@ -620,6 +620,8 @@ static int expand_dereference(struct expression *expr)
 
 		/* Const symbol with a constant initializer? */
 		if (value) {
+			expand_expression(value);
+
 			/* FIXME! We should check that the size is right! */
 			if (value->type == EXPR_VALUE) {
 				expr->type = EXPR_VALUE;
diff --git a/validation/array-size-known.c b/validation/array-size-known.c
new file mode 100644
index 0000000..8f4603a
--- /dev/null
+++ b/validation/array-size-known.c
@@ -0,0 +1,9 @@
+void foo(void);
+void foo(void) {
+	const int len = 32 + 32;
+	int buf[len];
+	buf[0] = 0;
+}
+/*
+ * check-name: Array size known at the compile time
+ */
diff --git a/validation/array-size-unknown.c b/validation/array-size-unknown.c
new file mode 100644
index 0000000..825accb
--- /dev/null
+++ b/validation/array-size-unknown.c
@@ -0,0 +1,14 @@
+extern int extra;
+void foo(void);
+void foo(void) {
+	const int len = 32 + extra;
+	int buf[len];
+	buf[0] = 0;
+}
+/*
+ * check-name: Array size unknown at the compile time
+ *
+ * check-error-start
+array-size-unknown.c:5:10: error: bad constant expression
+ * check-error-end
+ */
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux