aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
Diffstat (limited to 'validation')
-rw-r--r--validation/linear/asm-toplevel.c (renamed from validation/asm-toplevel.c)0
-rw-r--r--validation/linear/logical-phi0.c48
-rw-r--r--validation/linear/logical.c180
-rw-r--r--validation/linear/missing-return0.c10
-rw-r--r--validation/linear/missing-return1.c15
-rw-r--r--validation/linear/missing-return2.c11
-rw-r--r--validation/linear/missing-return3.c18
-rw-r--r--validation/linear/missing-return4.c14
-rw-r--r--validation/linear/missing-return5.c23
-rw-r--r--validation/linear/phi-order01.c16
-rw-r--r--validation/linear/phi-order02.c16
-rw-r--r--validation/linear/phi-order03.c8
-rw-r--r--validation/linear/phi-order04.c12
13 files changed, 281 insertions, 90 deletions
diff --git a/validation/asm-toplevel.c b/validation/linear/asm-toplevel.c
index 8bdd7fc1..8bdd7fc1 100644
--- a/validation/asm-toplevel.c
+++ b/validation/linear/asm-toplevel.c
diff --git a/validation/linear/logical-phi0.c b/validation/linear/logical-phi0.c
new file mode 100644
index 00000000..96a47dba
--- /dev/null
+++ b/validation/linear/logical-phi0.c
@@ -0,0 +1,48 @@
+int a(void);
+int b(void);
+int c(void);
+
+static int laa(void)
+{
+ return (a() && b()) && c();
+}
+
+static int lao(void)
+{
+ return (a() && b()) || c();
+}
+
+static int loa(void)
+{
+ return (a() || b()) && c();
+}
+
+static int loo(void)
+{
+ return (a() || b()) || c();
+}
+
+static int raa(void)
+{
+ return a() && (b() && c());
+}
+
+static int rao(void)
+{
+ return a() && (b() || c());
+}
+
+static int roa(void)
+{
+ return a() || (b() && c());
+}
+
+static int roo(void)
+{
+ return a() || (b() || c());
+}
+
+/*
+ * check-name: bad-logical-phi0
+ * check-command: sparse -vir -flinearize=last $file
+ */
diff --git a/validation/linear/logical.c b/validation/linear/logical.c
index 0f502c6b..b190f608 100644
--- a/validation/linear/logical.c
+++ b/validation/linear/logical.c
@@ -26,24 +26,24 @@ os:
<entry-point>
store.32 %arg1 -> 0[i]
store.64 %arg2 -> 0[b]
+ load.32 %r2 <- 0[i]
+ setne.1 %r3 <- %r2, $0
phisrc.32 %phi1 <- $1
- load.32 %r1 <- 0[i]
- setne.1 %r2 <- %r1, $0
- cbr %r2, .L3, .L2
+ cbr %r3, .L3, .L2
.L2:
- load.64 %r3 <- 0[b]
- load.32 %r4 <- 0[%r3]
- lsr.32 %r5 <- %r4, $1
- trunc.2 %r6 <- (32) %r5
- setne.1 %r7 <- %r6, $0
- zext.32 %r8 <- (1) %r7
- phisrc.32 %phi2 <- %r8
+ load.64 %r4 <- 0[b]
+ load.32 %r5 <- 0[%r4]
+ lsr.32 %r6 <- %r5, $1
+ trunc.2 %r7 <- (32) %r6
+ setne.1 %r8 <- %r7, $0
+ zext.32 %r9 <- (1) %r8
+ phisrc.32 %phi2 <- %r9
br .L3
.L3:
- phi.32 %r9 <- %phi1, %phi2
- phisrc.32 %phi3(return) <- %r9
+ phi.32 %r1 <- %phi1, %phi2
+ phisrc.32 %phi3(return) <- %r1
br .L1
.L1:
@@ -56,24 +56,24 @@ ou:
<entry-point>
store.32 %arg1 -> 0[i]
store.64 %arg2 -> 0[b]
+ load.32 %r12 <- 0[i]
+ setne.1 %r13 <- %r12, $0
phisrc.32 %phi4 <- $1
- load.32 %r11 <- 0[i]
- setne.1 %r12 <- %r11, $0
- cbr %r12, .L7, .L6
+ cbr %r13, .L7, .L6
.L6:
- load.64 %r13 <- 0[b]
- load.32 %r14 <- 0[%r13]
- lsr.32 %r15 <- %r14, $3
- trunc.3 %r16 <- (32) %r15
- setne.1 %r17 <- %r16, $0
- zext.32 %r18 <- (1) %r17
- phisrc.32 %phi5 <- %r18
+ load.64 %r14 <- 0[b]
+ load.32 %r15 <- 0[%r14]
+ lsr.32 %r16 <- %r15, $3
+ trunc.3 %r17 <- (32) %r16
+ setne.1 %r18 <- %r17, $0
+ zext.32 %r19 <- (1) %r18
+ phisrc.32 %phi5 <- %r19
br .L7
.L7:
- phi.32 %r19 <- %phi4, %phi5
- phisrc.32 %phi6(return) <- %r19
+ phi.32 %r11 <- %phi4, %phi5
+ phisrc.32 %phi6(return) <- %r11
br .L5
.L5:
@@ -86,22 +86,22 @@ ol:
<entry-point>
store.32 %arg1 -> 0[i]
store.64 %arg2 -> 0[b]
+ load.32 %r22 <- 0[i]
+ setne.1 %r23 <- %r22, $0
phisrc.32 %phi7 <- $1
- load.32 %r21 <- 0[i]
- setne.1 %r22 <- %r21, $0
- cbr %r22, .L11, .L10
+ cbr %r23, .L11, .L10
.L10:
- load.64 %r23 <- 0[b]
- load.64 %r24 <- 8[%r23]
- setne.1 %r25 <- %r24, $0
- zext.32 %r26 <- (1) %r25
- phisrc.32 %phi8 <- %r26
+ load.64 %r24 <- 0[b]
+ load.64 %r25 <- 8[%r24]
+ setne.1 %r26 <- %r25, $0
+ zext.32 %r27 <- (1) %r26
+ phisrc.32 %phi8 <- %r27
br .L11
.L11:
- phi.32 %r27 <- %phi7, %phi8
- phisrc.32 %phi9(return) <- %r27
+ phi.32 %r21 <- %phi7, %phi8
+ phisrc.32 %phi9(return) <- %r21
br .L9
.L9:
@@ -114,23 +114,23 @@ od:
<entry-point>
store.32 %arg1 -> 0[i]
store.64 %arg2 -> 0[b]
+ load.32 %r30 <- 0[i]
+ setne.1 %r31 <- %r30, $0
phisrc.32 %phi10 <- $1
- load.32 %r29 <- 0[i]
- setne.1 %r30 <- %r29, $0
- cbr %r30, .L15, .L14
+ cbr %r31, .L15, .L14
.L14:
- load.64 %r31 <- 0[b]
- load.64 %r32 <- 16[%r31]
- setfval.64 %r33 <- 0.000000e+00
- fcmpune.1 %r34 <- %r32, %r33
- zext.32 %r35 <- (1) %r34
- phisrc.32 %phi11 <- %r35
+ load.64 %r32 <- 0[b]
+ load.64 %r33 <- 16[%r32]
+ setfval.64 %r34 <- 0.000000e+00
+ fcmpune.1 %r35 <- %r33, %r34
+ zext.32 %r36 <- (1) %r35
+ phisrc.32 %phi11 <- %r36
br .L15
.L15:
- phi.32 %r36 <- %phi10, %phi11
- phisrc.32 %phi12(return) <- %r36
+ phi.32 %r29 <- %phi10, %phi11
+ phisrc.32 %phi12(return) <- %r29
br .L13
.L13:
@@ -143,24 +143,24 @@ as:
<entry-point>
store.32 %arg1 -> 0[i]
store.64 %arg2 -> 0[b]
+ load.32 %r39 <- 0[i]
+ setne.1 %r40 <- %r39, $0
phisrc.32 %phi13 <- $0
- load.32 %r38 <- 0[i]
- setne.1 %r39 <- %r38, $0
- cbr %r39, .L18, .L19
+ cbr %r40, .L18, .L19
.L18:
- load.64 %r40 <- 0[b]
- load.32 %r41 <- 0[%r40]
- lsr.32 %r42 <- %r41, $1
- trunc.2 %r43 <- (32) %r42
- setne.1 %r44 <- %r43, $0
- zext.32 %r45 <- (1) %r44
- phisrc.32 %phi14 <- %r45
+ load.64 %r41 <- 0[b]
+ load.32 %r42 <- 0[%r41]
+ lsr.32 %r43 <- %r42, $1
+ trunc.2 %r44 <- (32) %r43
+ setne.1 %r45 <- %r44, $0
+ zext.32 %r46 <- (1) %r45
+ phisrc.32 %phi14 <- %r46
br .L19
.L19:
- phi.32 %r46 <- %phi14, %phi13
- phisrc.32 %phi15(return) <- %r46
+ phi.32 %r38 <- %phi13, %phi14
+ phisrc.32 %phi15(return) <- %r38
br .L17
.L17:
@@ -173,24 +173,24 @@ au:
<entry-point>
store.32 %arg1 -> 0[i]
store.64 %arg2 -> 0[b]
+ load.32 %r49 <- 0[i]
+ setne.1 %r50 <- %r49, $0
phisrc.32 %phi16 <- $0
- load.32 %r48 <- 0[i]
- setne.1 %r49 <- %r48, $0
- cbr %r49, .L22, .L23
+ cbr %r50, .L22, .L23
.L22:
- load.64 %r50 <- 0[b]
- load.32 %r51 <- 0[%r50]
- lsr.32 %r52 <- %r51, $3
- trunc.3 %r53 <- (32) %r52
- setne.1 %r54 <- %r53, $0
- zext.32 %r55 <- (1) %r54
- phisrc.32 %phi17 <- %r55
+ load.64 %r51 <- 0[b]
+ load.32 %r52 <- 0[%r51]
+ lsr.32 %r53 <- %r52, $3
+ trunc.3 %r54 <- (32) %r53
+ setne.1 %r55 <- %r54, $0
+ zext.32 %r56 <- (1) %r55
+ phisrc.32 %phi17 <- %r56
br .L23
.L23:
- phi.32 %r56 <- %phi17, %phi16
- phisrc.32 %phi18(return) <- %r56
+ phi.32 %r48 <- %phi16, %phi17
+ phisrc.32 %phi18(return) <- %r48
br .L21
.L21:
@@ -203,22 +203,22 @@ al:
<entry-point>
store.32 %arg1 -> 0[i]
store.64 %arg2 -> 0[b]
+ load.32 %r59 <- 0[i]
+ setne.1 %r60 <- %r59, $0
phisrc.32 %phi19 <- $0
- load.32 %r58 <- 0[i]
- setne.1 %r59 <- %r58, $0
- cbr %r59, .L26, .L27
+ cbr %r60, .L26, .L27
.L26:
- load.64 %r60 <- 0[b]
- load.64 %r61 <- 8[%r60]
- setne.1 %r62 <- %r61, $0
- zext.32 %r63 <- (1) %r62
- phisrc.32 %phi20 <- %r63
+ load.64 %r61 <- 0[b]
+ load.64 %r62 <- 8[%r61]
+ setne.1 %r63 <- %r62, $0
+ zext.32 %r64 <- (1) %r63
+ phisrc.32 %phi20 <- %r64
br .L27
.L27:
- phi.32 %r64 <- %phi20, %phi19
- phisrc.32 %phi21(return) <- %r64
+ phi.32 %r58 <- %phi19, %phi20
+ phisrc.32 %phi21(return) <- %r58
br .L25
.L25:
@@ -231,23 +231,23 @@ ad:
<entry-point>
store.32 %arg1 -> 0[i]
store.64 %arg2 -> 0[b]
+ load.32 %r67 <- 0[i]
+ setne.1 %r68 <- %r67, $0
phisrc.32 %phi22 <- $0
- load.32 %r66 <- 0[i]
- setne.1 %r67 <- %r66, $0
- cbr %r67, .L30, .L31
+ cbr %r68, .L30, .L31
.L30:
- load.64 %r68 <- 0[b]
- load.64 %r69 <- 16[%r68]
- setfval.64 %r70 <- 0.000000e+00
- fcmpune.1 %r71 <- %r69, %r70
- zext.32 %r72 <- (1) %r71
- phisrc.32 %phi23 <- %r72
+ load.64 %r69 <- 0[b]
+ load.64 %r70 <- 16[%r69]
+ setfval.64 %r71 <- 0.000000e+00
+ fcmpune.1 %r72 <- %r70, %r71
+ zext.32 %r73 <- (1) %r72
+ phisrc.32 %phi23 <- %r73
br .L31
.L31:
- phi.32 %r73 <- %phi23, %phi22
- phisrc.32 %phi24(return) <- %r73
+ phi.32 %r66 <- %phi22, %phi23
+ phisrc.32 %phi24(return) <- %r66
br .L29
.L29:
diff --git a/validation/linear/missing-return0.c b/validation/linear/missing-return0.c
new file mode 100644
index 00000000..77ab5abd
--- /dev/null
+++ b/validation/linear/missing-return0.c
@@ -0,0 +1,10 @@
+static int foo(int a)
+{
+ if (a)
+ return 1;
+}
+
+/*
+ * check-name: missing-return0
+ * check-command: sparse -vir -flinearize=last $file
+ */
diff --git a/validation/linear/missing-return1.c b/validation/linear/missing-return1.c
new file mode 100644
index 00000000..4a8a9517
--- /dev/null
+++ b/validation/linear/missing-return1.c
@@ -0,0 +1,15 @@
+static inline int fun(int a)
+{
+ if (a)
+ return 1;
+}
+
+static int foo(int a)
+{
+ return fun(a);
+}
+
+/*
+ * check-name: missing-return1
+ * check-command: sparse -vir -flinearize=last $file
+ */
diff --git a/validation/linear/missing-return2.c b/validation/linear/missing-return2.c
new file mode 100644
index 00000000..395dcc14
--- /dev/null
+++ b/validation/linear/missing-return2.c
@@ -0,0 +1,11 @@
+static int foo(int a)
+{
+ switch (a)
+ case 3:
+ return 4;
+}
+
+/*
+ * check-name: missing-return2
+ * check-command: sparse -vir -flinearize=last $file
+ */
diff --git a/validation/linear/missing-return3.c b/validation/linear/missing-return3.c
new file mode 100644
index 00000000..b32e5eea
--- /dev/null
+++ b/validation/linear/missing-return3.c
@@ -0,0 +1,18 @@
+static int foo(int a)
+{
+ if (a)
+ return;
+}
+
+static void ref(void)
+{
+}
+
+/*
+ * check-name: missing-return3
+ * check-command: sparse -vir -flinearize=last $file
+ *
+ * check-error-start
+linear/missing-return3.c:4:17: error: return with no return value
+ * check-error-end
+ */
diff --git a/validation/linear/missing-return4.c b/validation/linear/missing-return4.c
new file mode 100644
index 00000000..779893a0
--- /dev/null
+++ b/validation/linear/missing-return4.c
@@ -0,0 +1,14 @@
+static int foo(int a)
+{
+ int r = a;
+ r;
+}
+
+/*
+ * check-name: missing-return4
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-error-ignore
+ * check-output-ignore
+ * check-output-contains: ret\\..*UNDEF
+ */
diff --git a/validation/linear/missing-return5.c b/validation/linear/missing-return5.c
new file mode 100644
index 00000000..e5504a19
--- /dev/null
+++ b/validation/linear/missing-return5.c
@@ -0,0 +1,23 @@
+int foo(int p)
+{
+ if (p)
+ return 0;
+}
+
+int bar(int p)
+{
+ if (p)
+ return 0;
+ p++;
+}
+
+/*
+ * check-name: missing/undef return
+ * check-command: test-linearize -Wno-decl -fdump-ir=linearize $file
+ *
+ * check-output-ignore
+ * check-output-pattern(2): phi\\..*,.*
+ * check-output-pattern(2): phisrc\\..*\\$0
+ * check-output-pattern(2): phisrc\\..*UNDEF
+ * check-output-excludes: ret\\..*\\$0
+ */
diff --git a/validation/linear/phi-order01.c b/validation/linear/phi-order01.c
new file mode 100644
index 00000000..0c4004fe
--- /dev/null
+++ b/validation/linear/phi-order01.c
@@ -0,0 +1,16 @@
+int fun(void);
+
+static int foo(int a)
+{
+ return a && fun();
+}
+
+static int bar(int a)
+{
+ return a || fun();
+}
+
+/*
+ * check-name: phi-order01
+ * check-command: sparse -vir -flinearize=last $file
+ */
diff --git a/validation/linear/phi-order02.c b/validation/linear/phi-order02.c
new file mode 100644
index 00000000..d217ae45
--- /dev/null
+++ b/validation/linear/phi-order02.c
@@ -0,0 +1,16 @@
+int fun(void);
+
+static int foo(int a) { return 0 || fun(); }
+static int bar(int a) { return 1 || fun(); }
+static int baz(int a) { return 0 && fun(); }
+static int qux(int a) { return 1 && fun(); }
+
+static int oof(int a) { return fun() || 1; }
+static int rab(int a) { return fun() || 0; }
+static int zab(int a) { return fun() && 1; }
+static int xuq(int a) { return fun() && 0; }
+
+/*
+ * check-name: phi-order02
+ * check-command: sparse -vir -flinearize=last $file
+ */
diff --git a/validation/linear/phi-order03.c b/validation/linear/phi-order03.c
new file mode 100644
index 00000000..24ae10e7
--- /dev/null
+++ b/validation/linear/phi-order03.c
@@ -0,0 +1,8 @@
+int fun(void);
+
+static int foo(void) { return ((0 || fun()) && fun()); }
+
+/*
+ * check-name: phi-order03
+ * check-command: sparse -vir -flinearize=last $file
+ */
diff --git a/validation/linear/phi-order04.c b/validation/linear/phi-order04.c
new file mode 100644
index 00000000..7548537a
--- /dev/null
+++ b/validation/linear/phi-order04.c
@@ -0,0 +1,12 @@
+static void foo(int *b)
+{
+ if (1) {
+ int c;
+ b = &c;
+ }
+}
+
+/*
+ * check-name: phi-order04
+ * check-command: sparse -vir -flinearize=last $file
+ */