aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--linearize.c8
-rw-r--r--validation/linear/missing-return0.c1
-rw-r--r--validation/linear/missing-return1.c1
-rw-r--r--validation/linear/missing-return2.c1
-rw-r--r--validation/linear/missing-return4.c1
-rw-r--r--validation/linear/missing-return5.c1
6 files changed, 8 insertions, 5 deletions
diff --git a/linearize.c b/linearize.c
index 53d66ffa..a631d073 100644
--- a/linearize.c
+++ b/linearize.c
@@ -2002,6 +2002,14 @@ static pseudo_t linearize_fn_statement(struct entrypoint *ep, struct statement *
pseudo_t pseudo;
pseudo = linearize_compound_statement(ep, stmt);
+ if (type_size(stmt->ret) > 0) { // non-void function
+ struct basic_block *active = ep->active;
+ if (active && !bb_terminated(active)) { // missing return
+ struct basic_block *bb_ret;
+ bb_ret = get_bound_block(ep, stmt->ret);
+ add_return(ep, bb_ret, stmt->ret, undef_pseudo());
+ }
+ }
bb = add_label(ep, stmt->ret);
phi_node = first_instruction(bb->insns);
if (phi_node)
diff --git a/validation/linear/missing-return0.c b/validation/linear/missing-return0.c
index d6019941..77ab5abd 100644
--- a/validation/linear/missing-return0.c
+++ b/validation/linear/missing-return0.c
@@ -7,5 +7,4 @@ static int foo(int a)
/*
* check-name: missing-return0
* check-command: sparse -vir -flinearize=last $file
- * check-known-to-fail
*/
diff --git a/validation/linear/missing-return1.c b/validation/linear/missing-return1.c
index c13135ad..4a8a9517 100644
--- a/validation/linear/missing-return1.c
+++ b/validation/linear/missing-return1.c
@@ -12,5 +12,4 @@ static int foo(int a)
/*
* check-name: missing-return1
* check-command: sparse -vir -flinearize=last $file
- * check-known-to-fail
*/
diff --git a/validation/linear/missing-return2.c b/validation/linear/missing-return2.c
index c1959b6f..395dcc14 100644
--- a/validation/linear/missing-return2.c
+++ b/validation/linear/missing-return2.c
@@ -8,5 +8,4 @@ static int foo(int a)
/*
* check-name: missing-return2
* check-command: sparse -vir -flinearize=last $file
- * check-known-to-fail
*/
diff --git a/validation/linear/missing-return4.c b/validation/linear/missing-return4.c
index dd30988b..779893a0 100644
--- a/validation/linear/missing-return4.c
+++ b/validation/linear/missing-return4.c
@@ -7,7 +7,6 @@ static int foo(int a)
/*
* check-name: missing-return4
* check-command: test-linearize -Wno-decl $file
- * check-known-to-fail
*
* check-error-ignore
* check-output-ignore
diff --git a/validation/linear/missing-return5.c b/validation/linear/missing-return5.c
index bcabd16a..e5504a19 100644
--- a/validation/linear/missing-return5.c
+++ b/validation/linear/missing-return5.c
@@ -14,7 +14,6 @@ int bar(int p)
/*
* check-name: missing/undef return
* check-command: test-linearize -Wno-decl -fdump-ir=linearize $file
- * check-known-to-fail
*
* check-output-ignore
* check-output-pattern(2): phi\\..*,.*