aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-12-04 20:09:19 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-12-28 21:38:59 +0100
commit5826deab5956e5090ca73da7ec1cf8b8716780ad (patch)
tree20322fdc0804594440886033684c10d0a680f026 /validation
parent69a789a78d4e64052628307f25310e195a50f5ee (diff)
downloadsparse-dev-5826deab5956e5090ca73da7ec1cf8b8716780ad.tar.gz
add more testcases for function designator dereference
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation')
-rw-r--r--validation/Waddress-weak.c2
-rw-r--r--validation/Waddress.c4
-rw-r--r--validation/linear/degen-function.c13
3 files changed, 19 insertions, 0 deletions
diff --git a/validation/Waddress-weak.c b/validation/Waddress-weak.c
index 1fe8d33c..ad2cb13a 100644
--- a/validation/Waddress-weak.c
+++ b/validation/Waddress-weak.c
@@ -9,11 +9,13 @@ int test_addr_weak_fun(void)
if ( &arr) return 1;
if ( fun) return 1;
if ( &fun) return 1;
+ if ( *fun) return 1;
if (!&var) return 0;
if (! arr) return 0;
if (!&arr) return 0;
if (! fun) return 0;
if (!&fun) return 0;
+ if (!*fun) return 0;
return -1;
}
diff --git a/validation/Waddress.c b/validation/Waddress.c
index 10556c3a..441cdb1c 100644
--- a/validation/Waddress.c
+++ b/validation/Waddress.c
@@ -15,6 +15,7 @@ lab:
if (&arr) return 1;
if (fun) return 1;
if (&fun) return 1;
+ if (*fun) return 1;
if (&var) return 1;
if (&arg) return 1;
if (&&lab) return 1;
@@ -35,6 +36,7 @@ lab:
if (!&arr) return 0;
if (!fun) return 0;
if (!&fun) return 0;
+ if (!*fun) return 0;
if (!&var) return 0;
if (!&arg) return 0;
if (!&&lab) return 0;
@@ -62,6 +64,8 @@ lab:
if (0 == fun) return 0;
if (&fun == 0) return 0;
if (0 == &fun) return 0;
+ if (*fun == 0) return 0;
+ if (0 == *fun) return 0;
if (&var == 0) return 0;
if (0 == &var) return 0;
if (&arg == 0) return 0;
diff --git a/validation/linear/degen-function.c b/validation/linear/degen-function.c
index 6dd3123b..4fb2d564 100644
--- a/validation/linear/degen-function.c
+++ b/validation/linear/degen-function.c
@@ -4,6 +4,7 @@ typedef int (*fun_t)(int);
fun_t fa(void) { return &fun; }
fun_t f0(void) { return fun; }
+fun_t f1(void) { return *fun; }
/*
* check-name: degen-function
@@ -34,5 +35,17 @@ f0:
ret.64 %r3
+f1:
+.L4:
+ <entry-point>
+ symaddr.64 %r5 <- fun
+ phisrc.64 %phi3(return) <- %r5
+ br .L5
+
+.L5:
+ phi.64 %r6 <- %phi3(return)
+ ret.64 %r5
+
+
* check-output-end
*/